Chương 2 Các đặc điểm của C++

• Các khái niệm cơ bản trong C++ • Cấu trúc điều khiển • Hàm và cấu trúc chương trình • Con trỏ và chuỗi ký tự • Tham số mặc nhiên của hàm • Tái định nghĩa hàm • Hàm tại chổ (inline) • Truyền tham số • Tham chiếu • Struct

pdf10 trang | Chia sẻ: lylyngoc | Lượt xem: 1791 | Lượt tải: 1download
Bạn đang xem nội dung tài liệu Chương 2 Các đặc điểm của C++, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
CÁC ðẶC ðIỂM CỦA C++ Chương 2 1 • Các khái niệm cơ bản của C++ • Lập trình cấu trúc trong C++ • Các ñặc ñiểm mới của C++ Nội dung • Các khái niệm cơ bản trong C++ • Cấu trúc ñiều khiển • Hàm và cấu trúc chương trình • Con trỏ và chuỗi ký tự • Tham số mặc nhiên của hàm • Tái ñịnh nghĩa hàm • Hàm tại chổ (inline) • Truyền tham số • Tham chiếu • Struct 2 Các khái niệm cơ bản • Từ khóa – Dành riêng cho ngôn ngữ  không ñược ñặt tên trùng với từ khóa. – Là chữ thường Vd : char, int, return, for, else, const, static • Tên – Phân biệt chữ HOA và chữ thường – Gồm chữ, số, ‘_’ và phải bắt ñầu bằng chữ cái. – ðộ dài tối ña là 32 – Nên theo quy cách ñặt tên. Vd: x, hoten, a1, num_of_var, Delta, TEN, ... 3 Các khái niệm cơ bản • Kiểu dữ liệu Tên kiểu Kích thước Phạm vi char 1 byte -128  127 unsigned char 1 byte 0 255 int 2 bytes -32768  32767 unsigned int 2 bytes 0  65535 short 2 bytes 0  65535 long 4 bytes -231  231 - 1 unsigned long 4 bytes 0 232 - 1 float 4 bytes 1.2e-38  3.4e38 double 8 bytes 2.2e-308  1.8e308 4 Các khái niệm cơ bản • Biến – Khai báo: bất kỳ vị trí nào trong chương trình – Khởi tạo: có thể vừa khai báo và khởi tạo Vd: int x=5, y=10; for( int i=0, tong =0 ; i<10 ; i++) tong +=i ; – Biến khai báo trong 1 khối lệnh: chỉ có phạm vi hoạt ñộng trong khối lệnh ñó. Vd: if( delta >0 ) { float x1= (-b + sqrt(delta)) / (2*a); float x2= (-b - sqrt(delta)) / (2*a); ... } 5 Các khái niệm cơ bản • Biến – Biến toàn cục: có tác dụng trong toàn bộ CT. – Biến ñịa phương (cục bộ): chỉ có tác dụng trong phạm vi của nó. Vd: int so = 5; void GanSo(int x) { so = x; } int NuaSo(int x) { int c = 2; int so = x/c ; return so; } 6 Các khái niệm cơ bản • Hằng – Khai báo: Vd: #define MAX 100 const int MAX=100; – Một số hằng quan trọng : • Số nguyên: 10 , -5, 300000, 1000L, ... • Số thực : 3.1416, .5 , 123E-5, ... • Ký tự : char ch1 = ‘A’ , ch2=97; • Chuỗi ký tự: char *str=“Chuoi Ky Tu”; char chuoi[50]; strcpy(chuoi,“ ”); if ( strcmp(chuoi,“”)==0) cout << “Chuoi rong”; 7 Các khái niệm cơ bản • Kiểu: Chuyển ñổi kiểu : – Mặc nhiên (tự ñộng) : float x = 3.1416; int y = x ; float sole = x - y; – Do người lập trình sử dụng : Cú pháp: ( Kiểu ) biểu thức hoặc Kiểu ( biểu thức ) Vd: int a=10, b=3; float c1 = a / b ; float c2 = float (a/b); float c3 = (float) a / b ; float c4 = float (a)/b; 8 Các khái niệm cơ bản • Các phép toán – Số học: + , - , * , / , % – Luận lý: ==, !=, >, =, <=, &&, ||, ! – Gán : = – Lấy kích thước: sizeof (ñối tượng dữ liệu ) – ðiều kiện : e1 ? e2 : e3 – Lấy ñịa chỉ : &(biến) – Tăng giảm : x++ , x-- , ++x , --x tong+= i ; tich *= i; /= , %= , -= , &= , |= , ^= 9 Các khái niệm cơ bản • Mảng – Khai báo: []; Vd: int m[10]; float ds[MAX]; – Thứ tự phần tử: từ 0 ñến (kích thước -1) Vd: //CT tính tổng của 10 số Fibonacci ñầu tiên long a[10]; a[0] = a[1] = 1; for (int i = 2; i < 10 ; i++) a[i] = a[i-1] + a[i-2]; long tong = 0; for(i=0 ; i<10 ; i++) tong += a[i]; 10 Các khái niệm cơ bản • Chú thích – Trên 1 dòng: //chú thích trên 1 dòng – Trên nhiều dòng: /* chú thích trên nhiều dòng */ • Các chỉ thị tiền biên dịch: #define #undefine #include #if #else #endif #if #elif #else #endif #ifdef #else #endif #ifndef #else #endif #error 11 Các khái niệm cơ bản • Nhập xuất – Thư viện hàm : #include – Nhập : cin >> Biến – Xuất : cout << (Biểu thức) – Các kiểu dữ liệu có thể nhập xuất : char , int, unsigned, long, unsigned long, … float, double, char* , char [] (void*): lấy ñịa chỉ ñầu của chuỗi – Có thể nhập xuất liên tục trên một dòng. Vd: cout << “Gia tri x = “ << x << “ , y = “ <<y; cout > n; 12 Các khái niệm cơ bản • Nhập xuất – Một số hàm ñịnh dạng toàn cục: • cin.width(n) • cout.width(n) – Ký tự ñặc biệt : \n, \t, \0, \b, \r – ðịnh dạng khác: endl, ends, flush, … 13 Các khái niệm cơ bản • Cấu trúc 1 chương trình ñơn giản 14 Cấu trúc ñiều khiển • Tuần tự – Câu lệnh: viết trên một hay nhiều dòng – Khối lệnh: • Là dãy các lệnh viết trong cặp { } • Tương ñương với 1 câu lệnh • Giá trị của biểu thức ñiều kiện – Bằng 0 : SAI – Khác 0 : ñúng Vd: int x=0; if(x==2) cout<< “ x bang 2 “; else cout<< “ x khac 2 “; 15 Cấu trúc ñiều khiển • Rẽ nhánh – if (biểu thức) Lệnh 1; else Lệnh 2; – switch (biểu thức) { case ‘giá trị 1’ : Lệnh 1; ... [ break; ] case ‘giá trị 2’ : Lệnh 2; ... [ break; ] ... case ‘giá trị n’ : Lệnh n; ... [ break; ] default : Lệnh n+1; } 16 Cấu trúc ñiều khiển • Lặp – while (biểu thức) Lệnh ; – do Lệnh ; while (biểu thức); – for ( e1 ; e2 ; e3 ) Lệnh; e1 : biểu thức khởi tạo e2 : biểu thức ñiều kiện e3 : biểu thức lặp 17 Cấu trúc ñiều khiển • Từ khóa break – Thoát ra khỏi cấu trúc switch – Thoát ra khỏi vòng lặp : while, do while, for • Từ khóa continue: Trở về ñầu vòng lặp • Lệnh nhảy goto – Dùng chung với nhãn lệnh – Không nên sử dụng vì sẽ phá vở cấu trúc CT – Ưu ñiểm : thoát khỏi các vòng lặp lồng sâu 18 Hàm và cấu trúc chương trình • Hàm - Cú pháp : (Danh sách kiểu và tham số) { [ Khai báo dữ liệu cục bộ ] [ Thân hàm ] [ Câu lệnh return ] } Vd: int Max ( int x, int y) { int somax; somax = (x>y) ? x : y; return somax; } 19 Hàm và cấu trúc chương trình • Hàm - Khai báo prototype : ( Danh sách kiểu ); Vd: int Max ( int , int ); int Min ( int , int ); void main() { Khai báo hàm int a =10 , b =5; cout<<“So max= “<< Max(a,b)<<endl; cout<<“So min= “<< Min(a,b)<<endl; } int Max (int x , int y) { ... } int Min (int x , int y) { ... } 20 ðịnh nghĩa hàm Hàm và cấu trúc chương trình • Hàm – Cách gọi : Tên hàm(tham số theo thứ tự từ trái sang) – Tham số và ñối số: Tham số (hình thức)int Max ( int x, int y) { if(x>y) return x; return y; } void main() { int a =10 , b = 5; cout<<“So max= “<< Max ( a , b ) << endl; } 21 ðối số (Tham số thực tế) Hàm và cấu trúc chương trình • Cấu trúc chương trình – Chương trình theo dạng lập trình cấu trúc gồm tập hợp nhiều hàm ñộc lập nhau. – Hàm main() là hàm thực thi. – Một chương trình chỉ có thể có 1 hàm main() duy nhất. – Dạng chung : 22 #include Khai báo prototype; Khai báo dữ liệu toàn cục. ðịnh nghĩa các hàm ñã khai báo. ðịnh nghĩa hàm main(). Con trỏ và chuỗi ký tự • Khái niệm – Con trỏ lưu ñịa chỉ của 1 ñối tượng dữ liệu khác. – Kích thước con trỏ = 1 ô nhớ của hệ ñiều hành. – Trên MS-DOS, kích thước của con trỏ là 2 bytes. • Khai báo : *; VD: long x = 20; long *y; y = &x; • Các phép toán – ðịa chỉ : &y – Giá trị : y – Giá trị dữ liệu mà con trỏ ñang trỏ tới : *y 23 20 1036H x 1036 1080H *y Con trỏ • Cách tính ñịa chỉ – int x=10; // Chẳng hạn biến x ñang ở ñịa chỉ 1000 – int *px = &x; // px =1000 – (*px)++; // Gán x=11 – px++; // px = 1002 vì px là con trỏ kiểu int – px +=n; // px ñang trỏ ñến ñịa chỉ (1002 + 2*n ) • Cấp vùng nhớ : Con trỏ = new [ Số lượng ]; Vd: int *px= new int; long *py; py= new long[20]; • Thu hồi vùng nhớ : delete ; Vd: delete px; delete[] py; 24 Con trỏ • Con trỏ và mảng – Con trỏ là 1 mảng ñộng => kích thước có thể thay ñổi. – Mảng như là 1 con trỏ nhưng ñộ lớn vùng nhớ cố ñịnh. Cách sử dụng mảng và con trỏ gần như giống nhau 25 Cấp vùng nhớ vừa ñủ cho con trỏ Thu hồi lại vùng nhớ Con trỏ Phân biệt mảng con trỏ và con trỏ ñến mảng 26 Mảng gồm 10 con trỏ Con trỏ ñến 1 mảng 10 phần tử kiểu int 27 Tham số mặc nhiên • Khái niệm – Gán các giá trị mặc nhiên cho các tham số của hàm. • Ưu ñiểm – Không cần phải hiểu rõ ý nghĩa tất cả các tham số. – Có thể giảm ñược số lượng hàm cần ñịnh nghĩa. • Khai báo tham số mặc nhiên – Tất cả các tham số mặc nhiên ñều phải ñặt ở cuối hàm. – Chỉ cần ñưa vào khai báo, không cần trong ñịnh nghĩa. • Gọi hàm có tham số mặc nhiên – Nếu cung cấp ñủ tham số => dùng tham số truyền vào. – Nếu không ñủ tham số => dùng tham số mặc nhiên 28 Tham số mặc nhiên • Ví dụ MessageBox( LPCTSTR lpszText, LPCTSTR lpszCaption = NULL, UINT nType = MB_OK ) Hàm thể hiện 1 cửa sổ thông báo trong Visual C++ Có thể gọi hàm theo các dạng sau: 29 MessageBox(“Hien thi thong bao ra man hinh"); MessageBox( “Chuc nang khong su dung duoc", “Bao loi“ ); MessageBox( “Ban muon thoat khoi chuong trinh?", “Thong bao“, MB_YESNO | MB_ICONASTERISK ); Tham số mặc nhiên • Ví dụ void Ham1 (int a=0, int b=1) { cout<<“tham so 1 = “<<a<<endl; cout<<“tham so 2 = “<<b<<endl; } void main() { 30 int x=10, y=20; cout << “Goi Ham1 4 lan, ta duoc : “<<endl; Ham1(x,y); Ham1(x); Ham1(y); Ham1(); } Tái ñịnh nghĩa hàm • Khái niệm C++ cho phép ñịnh nghĩa các hàm trùng tên. • Quy tắc tái ñịnh nghĩa – Các hàm trùng tên phải khác nhau về tham số: • Số lượng • Thứ tự • Kiểu • Quy tắc gọi hàm – Tìm hàm có kiểu tham số phù hợp. – Dùng phép ép kiểu tự ñộng. – Tìm hàm gần ñúng (phù hợp) nhất. 31 Tái ñịnh nghĩa hàm Vd int Max (int a, int b) { return (a>b) ? a : b; } float Max (float a, float b) { return (a>b) ? a : b; } SinhVien Max (SinhVien a, SinhVien b) 32 {return (a.diemtb > b.diemtb) ? a : b; } void main() { int x1=1, y1=2; float x2=3, y2=4; long x3=5, y3=6; cout << Max(x1,y1)<<“\t”<<Max(x2,y2)<<endl; cout << Max(x3,y1) <<endl; cout << Max(x3,y2) <<endl; cout << Max(x3,y3) <<endl; } Tái ñịnh nghĩa hàm Vd int F (int a=0, int b=1) { … } float F (float a=5, float b=9) { … } 33 void main() { int x1=1, y1=2; float x2=3, y2=4; long x3=5, y3=6; cout << F(x1)<<“\t”<<F(y2)<<endl; cout << F(x3) << F() << endl; } Hàm inline • Giảm thời gian thực thi chương trình. • Tăng kích thước của mã lệnh thực thi. • Chỉ nên ñịnh nghĩa inline khi hàm có kích thước nhỏ. • Cú pháp : thêm từ khóa inline vào trước hàm. VD: inline float sqr(float x) { return (x*x); } inline int Max(int a, int b) { return ((a>b) ? a : b) ; } 34 Truyền tham số • Truyền theo giá trị – Giá trị tham số khi ra khỏi hàm sẽ không thay ñổi. void Swap1(int a, int b) { int temp = a; a = b; b = temp; 5 10 x y a b main Swap1 STEP 01 35 } void main(){ int x = 5, y = 10; Swap1( x , y ); cout << “ x = “ << x << “ y = “ << y << endl; } 5 10 x y 5 10 a b main Swap1 STEP 02 5 10 x y 10 5 a b main Swap1 STEP 03 Truyền tham số • Truyền theo ñịa chỉ (con trỏ) – Giá trị tham số khi ra khỏi hàm có thể thay ñổi. void Swap2(int* a, int* b) { int temp = *a; *a = *b; *b = temp; 5 10 x y a b main Swap2 STEP 01 100 200 36 } void main(){ int x = 5, y = 10; Swap2( &x , &y ); cout << “ x = “ << x << “ y = “ << y << endl; } 5 10 x y 100 200 a b main Swap2 STEP 02 100 200 10 5 x y 100 200 a b main Swap2 STEP 03 100 200 Struct • Khái niệm Struct là 1 dạng cấu trúc dữ liệu mà bản thân có thể chứa nhiều loại dữ liệu có kiểu khác nhau. • Khai báo 37 SinhVien a; 2 bytes 2 bytes 4 bytes 8 bytes diemtb namsinh *hoten masosv[] Struct • Biến kiểu struct : SinhVien a, b, ds1[20], *ds2; • Truy xuất các thành phần của struct : cin >> a.masosv; cout << “Tuoi cua b la : “<<b.tuoi; cin >> ds[19].namsinh; ds2->hoten = new char[50]; • Gán struct : SinhVien c = a; • Con trỏ struct : SinhVien *ds= new SinhVien[100]; 38 39 Bài tập • Viết struct cho quản lý kho hàng hóa (tồn kho) gồm các thông tin tên hàng, » Tên hàng »Số lượng, • Khi nhập hàng sẽ cho biết tên hàng, » số lượng, • Khi xuất sẽ chọn hàng có trong kho » số lượng bán 40
Tài liệu liên quan