1. Trang chủ
  2. » Giáo án - Bài giảng

lập trình c++

214 178 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 214
Dung lượng 8,89 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bao gồm 5 tính chất sau: Tính chính xác: quá trình tính toán hay các thao tác máy tính thực hiện là chính xác.. Tính phổ dụng: có thể áp dụng cho một lớp các bài toán có đầu vào tương t

Trang 1

Bộ môn Khoa học Máy tính

guyễn Thủy Đoan Trang Email: trangdhnt@gmail.com Web: nguyenthuydoantrang.tk

GIỚI THIỆU MÔN HỌCLẬP TRÌNH C++

Trang 2

BB Phân b Phân bổ gi gi giờ gi gi giảng ng

 Nghe giảng lý thuyết: 30 tiết

Trang 3

BB

 Đặng Bình Phương, Bài giảng Tin học cơ

sở A, Đại học Khoa học Tự nhiên,

Trang 6

Lập trình máy tính

 Gọi tắt là lập trình (programming)

 Nghệ thuật cài đặt một hoặc nhiều thuật toán

trừu tượng có liên quan với nhau bằng một

ngôn ngữ lập trình để tạo ra một chương trìnhmáy tính

Thuật toán

 Là tập hợp (dãy) hữu hạn các chỉ thị (hành

động) được định nghĩa rõ ràng nhằm giảiquyết một bài toán cụ thể nào đó

Trang 7

• Phương trình có nghiệm duy nhất x = -b/a

ðầu vào: a, b thuộc R

ðầu ra: nghiệm phương trình ax + b = 0

Trang 8

Bao gồm 5 tính chất sau:

 Tính chính xác: quá trình tính toán hay các

thao tác máy tính thực hiện là chính xác

 Tính rõ ràng: các câu lệnh minh bạch được sắp xếp theo thứ tự nhất định

 Tính khách quan: được viết bởi nhiều người trên máy tính nhưng kết quả phải như nhau

 Tính phổ dụng: có thể áp dụng cho một lớp

các bài toán có đầu vào tương tự nhau

 Tính kết thúc: hữu hạn các bước tính toán

Trang 9

Lựa chọn phương pháp giải

Cài đặt chương trình

Cài đặt chương trình

Hiệu chỉnh chương trình

Hiệu chỉnh chương trình

Xây dựng thuật toán/ thuật giải

Trang 10

ðầu vào: a, b thuộc R

ðầu ra: nghiệm phương trình ax + b = 0

Trang 13

Vay mượn ngôn ngữ nào đó (ví dụ Pascal) để

biểu diễn thuật toán

Xuất “Phương trình có nghiệm x = -b/a”

ðầu vào: a, b thuộc R

ðầu ra: nghiệm phương trình ax + b = 0

Trang 14

printf(“x = %d”, float(-b)/a);

}

Trang 16

VC

Trang 20

BB Chương 2 Giới thiệu NNLT C

Các kiểu dữ liệu cơ sở

Trang 21

Turbo C có 4 kiểu cơ sở như sau:

 Kiểu số nguyên: giá trị của nó là các số

nguyên như 2912, -1706, }

 Kiểu số thực: giá trị của nó là các số thực như3.1415, 29.12, -17.06, }

 Kiểu luận lý: giá trị đúng hoặc sai

 Kiểu ký tự: 256 ký tự trong bảng mã ASCII

Trang 22

Miền giá trị (Range)

short 2 –32.768 } +32.767

Trang 23

Các kiểu số nguyên (không dấu)

 n bit không dấu: 0 } 2n – 1

Kiểu (Type)

Độ lớn (Byte)

Miền giá trị (Range)

unsigned char 1 0 } 255

unsigned int 2 0 } 65.535

unsigned short 2 0 } 65.535

unsigned long 4 0 } 4.294.967.295

Trang 24

• (*) Độ chính xác kép (Double-precision) chính xác đến 19 số lẻ.

Kiểu (Type)

Độ lớn (Byte)

Miền giá trị (Range)

float (*) 4 3.4*10 –38 } 3.4*10 38

double (**) 8 1.7*10 –308 } 1.7*10 308

Trang 25

Đặc điểm

 C ngầm định một cách không tường minh:

• false (sai): giá trị 0.

• true (đúng): giá trị khác 0, thường là 1.

 C++: bool

Ví dụ

 0 (false), 1 (true), 2 (true), 2.5 (true)

 1 > 2 (0, false), 1 < 2 (1, true)

Trang 26

Đặc điểm

 Tên kiểu: char

 Miền giá trị: 256 ký tự trong bảng mã ASCII

 Chính là kiểu số nguyên do:

• Lưu tất cả dữ liệu ở dạng số.

• Không lưu trực tiếp ký tự mà chỉ lưu mã ASCII của

ký tự đó.

Ví dụ

 Lưu số 65 tương đương với ký tự ‘A’}

 Lưu số 97 tương đương với ký tự ‘a’

Trang 27

Ví dụ

 typedef int SoNguyen;

 Có thể khai báo: SoNguyen x;

Cú pháp

typedef <tên kiểu> <tên kiểu mới>;

Trang 28

Cú pháp

<kiểu> <tên biến>;

<kiểu> <tên biến 1>, <tên biến 2>;

Ví dụ

int i;

int j, k;

unsigned char dem;

float ketqua, delta;

Trang 29

Phải khai báo biến trước khi sử dụng

Trong C/ C++ có thể khai báo biến ở:

 Ngoài hàm

 Đầu hàm

 Tham số hàm

 Trong chương trình

Trang 31

 Toán tử tác động lên các giá trị của toán hạng

và cho giá trị có kiểu nhất định

 Toán tử: +, –, *, /, %}

 Toán hạng: hằng, biến, lời gọi hàm

Ví dụ

 2 + 3, a div 5, (a + b) * 5, }

Trang 32

Khái niệm

 Thường được sử dụng trong lập trình

 Gán giá trị cho biến

Trang 34

Toán tử 1 ngôi

 Chỉ có một toán hạng trong biểu thức

 ++ (tăng 1 đơn vị), (giảm 1 đơn vị)

Trang 35

Toán tử 2 ngôi

 Có hai toán hạng trong biểu thức

 +, –, *, /, % (chia lấy phần dư)

Trang 36

Các toán tử trên bit

 Tác động lên các bit của toán hạng (nguyên)

 & (and), | (or), ^ (xor), ~ (not hay lấy số bù 1)

 >> (shift right), << (shift left)

Trang 37

int z1, z2, z3, z4, z5, z6;

z1 = a & b; // 0000 0000 0000 0100 z2 = a | b; // 0000 0000 0000 0111 z3 = a ^ b; // 0000 0000 0000 0011 z4 = ~a; // 1111 1111 1111 1010 z5 = a >> 2;// 0000 0000 0000 0001 z6 = a << 2;// 0000 0000 0001 0100 }

Trang 38

Các toán tử quan hệ

 So sánh 2 biểu thức với nhau

 Cho ra kết quả 0 (hay false nếu sai) hoặc 1

(hay true nếu đúng)

Trang 39

Các toán tử luận lý

 Tổ hợp nhiều biểu thức quan hệ với nhau

 && (and), || (or), ! (not)

Trang 40

Toán tử điều kiện

 Đây là toán tử 3 ngôi (gồm có 3 toán hạng)

 <biểu thức 1> ? <biểu thức 2> : <biểu thức 3>

• <biểu thức 1> đúng thì giá trị là <biểu thức 2>.

• <biểu thức 1> sai thì giá trị là <biểu thức 3>.

Ví dụ

 s1 = (1 > 2) ? 2912 : 1706;

 int s2 = 0;

 1 < 2 ? s2 = 2912 : s2 = 1706;

Trang 41

Toán tử phẩy

 Các biểu thức đặt cách nhau bằng dấu ,

 Các biểu thức con lần lượt được tính từ trái

Trang 42

() [] ->

! ++ - + * (cast) & sizeof

* / % + -

Trang 43

Quy tắc thực hiện

 Thực hiện biểu thức trong ( ) sâu nhất trước

 Thực hiện theo thứ tự ưu tiên các toán tử

Trang 46

Phân loại

 Câu lệnh đơn: chỉ gồm một câu lệnh

 Câu lệnh phức (khối lệnh): gồm nhiều câu

lệnh đơn được bao bởi { và }

Trang 47

• Văn bản thường (literal text)

• Ký tự điều khiển (escape sequence)

• Đặc tả (conversion specifier)

Trang 48

Văn bản thường (literal text)

 Được xuất y hệt như lúc gõ trong chuỗi địnhdạng

Ví dụ

 Xuất chuỗi Hello World

 printf(“Hello ”); printf(“World”);

 printf(“Hello World”);

 Xuất chuỗi a + b

 printf(“a + b”);

Trang 49

Ký tự điều khiển (escape sequence)

 Gồm dấu \ và một ký tự như trong bảng sau:

In dấu \

In dấu ?

In dấu “

Trang 50

Đặc tả (conversion specifier)

 Gồm dấu % và một ký tự

 Xác định kiểu của biến/giá trị muốn xuất

 Các đối số chính là các biến/giá trị muốn xuất, được liệt kê theo thứ tự cách nhau dấu phẩy

Số nguyên không dấu

char int, short, long float, double char[], char*

unsigned int/short/long

Trang 53

Phối hợp các thành phần

 int a = 1, b = 2;

 Xuất 1 cong 2 bang 3 và xuống dòng

• printf(“ %d ”, a); // Xuất giá trị của biến a

• printf(“ cong ”); // Xuất chuỗi “ cong ”

• printf(“ %d ”, b); // Xuất giá trị của biến b

• printf(“ bang ”); // Xuất chuỗi “ bang ”

• printf(“ %d ”, a + b); // Xuất giá trị của a + b

• printf(“\n”); // Xuất điều khiển xuống dòng \n

 printf(“%d cong %d bang %d\n”, a, b, a+b);

Trang 54

 Các đối số là tên các biến sẽ chứa giá trị

nhập và được đặt trước dấu &

Trang 55

Ví dụ, cho a và b kiểu số nguyên

 scanf(“%d”, &a); // Nhập giá trị cho biến a

 scanf(“%d”, &b); // Nhập giá trị cho biến b

  scanf(“%d%d”, &a, &b);

 Các câu lệnh sau đây sai

• scanf(“%d”, a); // Thiếu dấu &

• scanf(“%d”, &a, &b);// Thiếu %d cho biến b

• scanf(“% f ”, &a); // a là biến kiểu số nguyên

• scanf(“% 9 d”, &a); // không được định dạng

• scanf(“ a = %d , b = %d”, &a, &b”);

Trang 56

• cout<<“giá trị của a = ”<<a<<“\n”;

• Các biến và chuỗi cách nhau bởi dấu << (chuỗi nằm trong cặp dấu nháy kép “”)

Trang 59

Các hàm trong thư viện toán học

 #include <math.h>

 1 đầu vào: double, Trả kết quả: double

• acos, asin, atan, cos, sin, }

• exp, log, log10

• sqrt

• ceil, floor

• abs, fabs

 2 đầu vào: double, Trả kết quả: double

• double pow(double x, double y)

Trang 61

Câu lệnh điều kiện if

Trang 62

if (<BT Logic>)

<Lệnh 1>; Câu lệnh đơn hoặc

Câu lệnh phức (kẹp giữa { và } )

Trong ( ) , cho kết quả (sai = 0, đúng ≠ 0)

Trang 63

printf(“a bang 0”);

a = 2912;

}

}

Trang 64

Trong ( ) , cho kết quả (sai = 0, đúng ≠ 0)

Trang 66

Câu lệnh if và câu lệnh if} else là một câu lệnhđơn

Trang 69

} ;

printf(“a khac 0.”);

Trang 70

<Lệnh> : đơn hoặckhối lệnh {}.

Trang 71

case 1 : printf(“Mot”); break;

case 2 : printf(“Hai”); break;

case 3 : printf(“Ba”); break;

} }

Trang 73

case 1 : printf(“Mot”); break;

case 2 : printf(“Hai”); break;

case 3 : printf(“Ba”); break;

default : printf(“Ko biet doc”);

} }

Trang 74

Câu lệnh switch là một câu lệnh đơn và có thể

lồng nhau

Trang 75

Các giá trị trong mỗi trường hợp phải khác

nhau

switch (a)

{

case 1 : printf(“Mot”); break;

case 1 : printf(“MOT”); break;

case 2 : printf(“Hai”); break;

case 3 : printf(“Ba”); break;

case 1 : printf(“1”); break;

case 1 : printf(“mot”); break;

default : printf(“Khong biet doc”);

}

Trang 76

switch sẽ nhảy đến case tương ứng và thực

hiện đến khi nào gặp break hoặc cuối switch sẽkết thúc

Trang 77

switch nhảy đến case tương ứng và thực hiện

đến khi nào gặp break hoặc cuối switch sẽ kết

thúc

Trang 78

Tận dụng tính chất khi bỏ break;

Trang 81

for (<Khởi đầu>; <Đ/K lặp>; <Bước nhảy>)

<Lệnh>; <Khởi đầu> , <ð/K lặp> , <Bước nhảy> :

là biểu thức C bất kỳ có chức năng riêng

<Lệnh> : đơn hoặc khối lệnh.

<Khởi đầu>

<Bước nhảy>

Trang 82

printf(“%d”, k) ;

printf(“\n”) ; }

}

Trang 83

Câu lệnh FOR là một câu lệnh đơn và có thể

lồng nhau

Trang 84

Trong câu lệnh for, có thể sẽ không có phần

Trang 85

Trong câu lệnh for, có thể sẽ không có phần

Trang 86

Trong câu lệnh for, có thể sẽ không có phần

Trang 88

Không được thêm ; ngay sau lệnh lệnh for.

=> Tương đương câu lệnh rỗng

Trang 89

Các thành phần <Khởi đầu>, <Đ/K lặp>, <Bước

nhảy> cách nhau bằng dấu ;

Nếu có nhiều thành phần trong mỗi phần thì

được cách nhau bằng dấu ,

for (int i = 1 , j = 2; i + j < 10 ; i++ , j += 2 )

printf(“%d\n”, i + j);

Trang 90

Biểu thức C bất kỳ, thường là biểu thức quan hệ cho kết quả

0 (sai) và != 0 (đúng)

Trang 92

Câu lệnh while là một câu lệnh đơn và có thể

lồng nhau

Trang 93

Câu lệnh while có thể không thực hiện lần nào

do điều kiện lặp ngay từ lần đầu đã không thỏa

void main()

{

int n = 1 ; while ( n > 10 ) {

printf(“%d\n”, n);

n ;

}

… }

Trang 94

Không được thêm ; ngay sau lệnh lệnh while.

Trang 95

Câu lệnh while có thể bị lặp vô tận (loop)

void main()

{

int n = 1 ; while ( n < 10 ) {

printf(“%d”, n);

n ;

}

n = 1 ; while ( n < 10 )

printf(“%d”, n);

}

Trang 96

Biểu thức C bất kỳ, thường là biểu thức quan hệ cho kết quả

0 (sai) và != 0 (đúng)

Trang 98

Câu lệnh do… while là một câu lệnh đơn và có

printf(“%d\n”, a + b);

b = b + 2;

} while (b < 20);

a++;

}

while (a < 20);

Trang 99

Câu lệnh do… while sẽ được thực hiện ít nhất 1

lần do điều kiện lặp được kiểm tra ở cuối

void main()

{

int n;

do {

printf(“Nhap n: ”);

scanf(“%d”, &n);

} while ( n < 1 || n > 100 );

}

Trang 100

Câu lệnh do… while có thể bị lặp vô tận (loop)

int n = 1 ; do

{

printf(“%d”, n);

n ;

} while ( n < 10 );

n = 1 ; do

printf(“%d”, n);

while ( n < 10 );

Trang 101

Đều có khả năng lặp lại nhiều hành động.

int n = 10 ; for (int i = 1 ; i <= n ; i++)

printf(“%d\n”, i);

int i = 1 ; while ( i <= n ) {

printf(“%d\n”, i); i++ ; }

int i = 1 ;

do {

printf(“%d\n”, i); i++;

Trang 102

Số lần lặp xác định ngay trong câu lệnh for

int n = 10 ; for (int i = 1 ; i <= n ; i++ )

…;

int i = 1;

while ( i <= n ) {

Trang 103

while có thể không thực hiện lần nào.

do… while sẽ được thực hiện ít nhất 1 lần.

Trang 106

Tại sao phải dùng chương trình con:

 Có công việc cần phải được thực hiện tại nhiềunơi trong chương trình  tách công việc đóthành chương trình con

 Để thuận tiện trong quản lý, trình bày và phát

triển

Trong C, một chương trình con gọi là hàm: có

tên, đầu vào và đầu ra

Có chức năng giải quyết một số vấn đề chuyên

biệt cho chương trình chính

Trang 107

Hàm trong C có thể trả về kết quả thông qua tên

hàm hay có thể không trả về kết quả

Một hàm khi được định nghĩa thì có thể được gọitrong chương trình

Được gọi nhiều lần với các tham số khác nhau

Trong C, hàm main() được gọi thực hiện đầu tiên

Hàm có hai loại: hàm chuẩn (hàm được trình biêndịch C viết sẵn) và hàm tự định nghĩa bởi người

sử dụng

Trang 108

 Hàm thư viện là những hàm đã được định

nghĩa sẵn trong một thư viện nào đó

 Muốn sử dụng các hàm thư viện thì phải khai

báo thư viện trước khi sử dụng bằng lệnh

#include <tên thư viện.h>

Trang 109

 Ý nghĩa của một số thư viện thường dùng:

1 stdio.h:

- Thư viện chứa các hàm vào/ ra chuẩn

(standard input/output)

- Gồm các hàm printf(), scanf(), getc(),

putc(), gets(), puts(), fflush(), fopen(), fclose(), fread(), fwrite(), getchar(),

putchar(), getw(), putw()…

2 conio.h :

- Thư viện chứa các hàm vào ra trong chế độ

DOS (DOS console)

- Gồm các hàm clrscr(), getch(), getche(),

getpass(), cgets(), cputs(), putch(), clreol(),…

Trang 110

3 math.h:

- Thư viện chứa các hàm tính toán

- Gồm các hàm abs(), sqrt(), log() log10(),

sin(), cos(), tan(), acos(), asin(), atan(), pow(), exp(),…

4 alloc.h:

- Thư viện chứa các hàm liên quan đến việc

quản lý bộ nhớ

- Gồm các hàm calloc(), realloc(), malloc(),

free(), farmalloc(), farcalloc(), farfree(), …

Trang 111

5 io.h:

- Thư viện chứa các hàm vào ra cấp thấp

- Gồm các hàm: open(), _open(), read(),

_read(), close(), _close(), creat(), _creat(), creatnew(), eof(), filelength(), lock(),…

Muốn sử dụng các hàm thư viện thì ta phải xem cú

pháp của các hàm và sử dụng theo đúng cú pháp (xem trong phần trợ giúp của Turbo C)

Trang 112

Xuất kết quả S

Tính s1=a!

Tính s2=b!

Tính s2=b!

Tính s3=c!

Tính s3=c!

ðặt vấn đề

Trang 115

Giải pháp => Viết 1 lần và sử dụng nhiều lần

 Đoạn lệnh nhập tổng quát, với n = a, b, c

 Đoạn lệnh tính giai thừa tổng quát, n = a, b, c

Trang 116

Cú pháp

 Trong đó

• <kiểu trả về> : kiểu bất kỳ của C ( char , int , long ,

float ,…) Nếu không trả về thì là void

• <tên hàm>: theo quy tắc đặt tên định danh.

• <danh sách tham số> : tham số hình thức đầu vào giống khai báo biến, cách nhau bằng dấu ,

• <giá trị> : trả về cho hàm qua lệnh return

<kiểu trả về> <tên hàm> ( [danh sách tham số] )

{

<các câu lệnh>

[ return <giá trị>;]

}

Trang 117

Cần xác định các thông tin sau đây:

 Tên hàm.

 Hàm sẽ thực hiện công việc gì

 Các đầu vào (nếu có).

sẽ thực hiện

Trang 118

Ví dụ 1

 Tên hàm: XuatTong

 Công việc: tính và xuất tổng 2 số nguyên

 Đầu vào: hai số nguyên x và y

 Đầu ra: không có

void XuatTong(int x, int y)

Trang 119

Ví dụ 2

 Tên hàm: TinhTong

 Công việc: tính và trả về tổng 2 số nguyên

 Đầu vào: hai số nguyên x và y

 Đầu ra: một số nguyên có giá trị x + y

int TinhTong(int x, int y)

Trang 120

Ví dụ 3

 Tên hàm: NhapXuatTong

 Công việc: nhập và xuất tổng 2 số nguyên

 Đầu vào: không có

 Đầu ra: không có

void NhapXuatTong()

{

int x, y;

printf(“Nhap 2 so nguyen: ”);

scanf(“%d%d”, &x, &y);

printf(“%d cong %d bang %d”, x, y, x + y); }

Trang 121

• Toàn cục: khai báo trong ngoài tất cả các hàm (kể

cả hàm main) và có tác dụng lên toàn bộ chương trình.

• Cục bộ: khai báo trong hàm hoặc khối { } và chỉ

có tác dụng trong bản thân hàm hoặc khối đó (kể

cả khối con nó) Biến cục bộ sẽ bị xóa khỏi bộ nhớ khi kết thúc khối khai báo nó.

Trang 122

int a;

int Ham1() {

int a1;

}

int Ham2() {

int a2;

{

int a21;

} }

void main() {

int a3;

}

Trang 123

Thông thường người ta thường đặt phần tiêu đề

hàm/nguyên mẫu hàm (prototype) trên hàm

main và phần định nghĩa hàm dưới hàm main

void XuatTong(int x, int y); // prototype

void main()

{

… }

void XuatTong(int x, int y)

{

printf(“%d cong %d bang %d”, x, y, x + y); }

Trang 124

// Truyền bằng tham biến (con trỏ)

void Swap2 (int *x, int *y)

// Truyền bằng tham chiếu

void Swap3 (int &x, int &y)

Swap1(m,n);

printf(“m=%d n=%d\n”,m,n”); Swap2(&m,&n);

printf(“m=%d n=%d\n”,m,n”); Swap3(m,n);

printf(“m=%d n=%d\n”,m,n”); return 0;

}

?

Trang 125

Truyền bằng Giá trị (Call by Value) (tham trị)

 Truyền đối số cho hàm ở dạng giá trị.

 Có thể truyền hằng, biến, biểu thức nhưng

}

Trang 126

Mặc nhiên, việc truyền tham số cho hàmtrong C là truyền theo giá trị; nghĩa là các giátrị thực (tham số thực) không bị thay đổi giá trịkhi truyền cho các tham số hình thức

Ví dụ 1: Giả sử muốn in ra các, mỗi dòng gồm

50 ký tự nào đó Để đơn giản ta viết hàm, hàm này sẽ in ra trên một dòng 50 ký tự chotrước

Ngày đăng: 10/02/2015, 11:16

Xem thêm

TỪ KHÓA LIÊN QUAN

w