Home Giáo Trình OOP Chương 1 - CÁC ĐẶC ĐIỂM CỦA C++ - Giáo trình lập trình hướng đối tượng (OOP) - Đại học Tây Đô March 07, 2023 >Click vào ĐÂY để tải về.KEY: Chương 1 CÁC ĐẶC ĐIỂM CỦA C++ • 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++ • 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ố Các khái niệm cơ bản – Dành riêng cho ngôn ngữ không được đặt tên Vd : char, int, return, for, else, const, – 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 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 -2 unsigned long 4 bytes 0 2 float 4 bytes 1.2e-38 3.4e38 double 8 bytes 2.2e-308 1.8e308 31 2 32 31 - 1 - 1 Các khái niệm cơ bả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); Các khái niệm cơ bả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 Vd: int so = 5; void GanSo(int x) { so = x; int NuaSo(int x) { int c = 2; int so = x/c ; return so; Các khái niệm cơ bản – 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; 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 – 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; /= , %= , -= , &= , |= , ^= int if = 10; -------------------- int diem so = 10; -------------------- int diem_so = 10; -------------------- int @diem = 10; -------------------- int diem@ = 10; Tìm lỗi tên biến? int if = 10; -------------------- int diem so = 10; -------------------- int diem_so = 10; -------------------- int @diem = 10; -------------------- int diem@ = 10; Biến toàn cục và cục bộ? void GanSo(int x) { Kết quả cuối in ra x1, x2 bằng mấy? cout<<"x1: "< []; Vd: int m[10]; float ds[MAX]; – Thứ tự phần tử: từ 0 đến (kích thước -1) //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]; 13 Bài tập – mảng • Dùng mảng lưu số tự nhiên từ 1 đến 10. • In dãy số này ra màn hình. • Tính tổng của dãy số và in ra màn hình. Các khái niệm cơ bản – 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 Các khái niệm cơ bản – 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. cout << “Gia tri x = “ << x << “ , y = “ <> n; 16 Các khái niệm cơ bản – Một số hàm định dạng toàn cục: • cout.width(n) – Ký tự đặc biệt : \n, \t – Định dạng khác: endl, ends, flush, ... Bài tập – nhập xuất • Viết đoạn lệnh cho phép người dùng nhập một chuỗi và in chuỗi đó ra màn Các khái niệm cơ bản • Cấu trúc 1 chương trình đơn giản Cấu trúc điều khiển – Câu lệnh: viết trên một hay nhiều dòng • 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 if(x==2) cout<< “ x bang 2 “; cout<< “ x khac 2 “; 20 Cấu trúc điều khiển – 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; } 21 Cấu trúc điều khiển – while (biểu thức) while (biểu thức); – for ( e1 ; e2 ; e3 ) 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 22 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 Hàm và cấu trúc chương trình (Danh sách kiểu và tham số) { [ Khai báo dữ liệu cục bộ ] [ Câu lệnh return ] Vd: int Max ( int x, int y) { int somax; somax = (x>y) ? x : y; return somax; 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)<y) return x; Đối số (Tham số thực tế) int a =10 , b = 5; cout<<“So max= “<< Max ( a , b ) << endl; } 26 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 #include < Thư viện hàm > 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(). • Viết hàm giải phương trình bậc 1 a * x + b=0 – Không xét trường hợp hàm vô nghiệm – Hàm có 2 tham số truyền vào (a,b) – Giá trị trả về của hàm là nghiệm x – Tại hàm main, a,b sẽ do người dùng nhập Con trỏ và chuỗi ký tự – 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 : < Kiểu> *; VD: long x = 20; long *y; y = &x; x 20 *y 1036 – Giá trị dữ liệu mà con trỏ đang trỏ tới : *y • 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; • 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 Phân biệt mảng con trỏ và con trỏ đến mảng Con trỏ đến 1 mảng 10 phần tử kiểu int Mảng gồm 10 con trỏ Tham số mặc nhiên – Gán các giá trị mặc nhiên cho các tham số của hà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 Tham số mặc nhiên Hàm thể hiện 1 cửa sổ thông báo trong Visual C++ MessageBox( LPCTSTR lpszText, LPCTSTR lpszCaption = NULL, UINT nType = MB_OK ) Có thể gọi hàm theo các dạng sau: MessageBox(“Hien thi thong bao ra man hinh"); MessageBox( “Chuc nang khong su dung duoc", MessageBox( “Ban muon thoat khoi chuong trinh?", MB_YESNO | MB_ICONASTERISK ); Tham số mặc nhiên void Ham1 (int a=0, int b=1) { cout<<“tham so 1 = “<b) ? a : b; } float Max (float a, float b) { return (a>b) ? a : b; } void main() { int x1=1, y1=2; float x2=3, y2=4; long x3=5, y3=6; cout << Max(x1,y1)<<“\t”<b) ? a : b) ; Truyền tham số – Giá trị tham số khi ra khỏi hàm sẽ không thay đổi. void Swap1(int a, int b) { STEP 01 a b STEP 02 int x = 5, y = 10; cout << “ x = “ << x << “ y = “ << y STEP 03 main Swap1 5 x 10 y main Swap1 5 x 10 y main Swap1 5 x 10 y a b a b 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) { STEP 01 100 a b 200 STEP 02 100 int x = 5, y = 10; cout << “ x = “ << x << “ y = “ << y a b 200 STEP 03 100 main Swap2 5 x 10 y main Swap2 5 x 10 y main Swap2 10 x 5 y a b 200 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. masosv[] *hoten namsinh diemtb SinhVien a; 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 : “<> ds[19].namsinh; ds2->hoten = new char[50]; SinhVien c = a; SinhVien *ds= new SinhVien[100];
Post a Comment