2.21k likes | 3.48k Views
BÀI GIẢNG. LẬP TRÌNH C++ (3 Tín chỉ). Gv: Nguyễn Văn Hùng Khoa: Khoa học máy tính. MỤC TIÊU CỦA HỌC PHẤN. Cung cấp cho sinh viên các kiến thức cơ bản của ngôn ngữ lập trình C++ Nắm được cấu trúc của một chương trình C++, các thành phần cơ bản, các kiểu dữ liệu, …
E N D
BÀI GIẢNG LẬP TRÌNH C++(3 Tín chỉ) Gv: Nguyễn Văn Hùng Khoa: Khoa học máy tính
MỤC TIÊU CỦA HỌC PHẤN • Cung cấp cho sinh viên các kiến thức cơ bản của ngôn ngữ lập trình C++ • Nắm được cấu trúc của một chương trình C++, các thành phần cơ bản, các kiểu dữ liệu, … • Các khái niệm, kiến thức cơ bản về lập trình hướng đối tượng trong C++ • Nắm vững lý thuyết và vận dụng nó vào việc giải quyết các bài toán từ đơn giản đến phức tạp.
TÀI LIỆU THAM KHẢO 1)Bài giảng Ngôn ngữ lập trình C++ 2)Quách Tuấn Ngọc. Ngôn ngữ lập trình C++. NXB Thống kê, 2003. 3) Phạm Văn Ất. C++ và lập trình hướng đối tượng. NXB Khoa học và kỹ thuật. Hà Nội, 2000. 4) Nell Dale and Chip Weems. Programming in C++Jone and Bartlett, Third Edition, 2005. 5) Một số Websites, forums,… về C, C++
NỘI DUNG • Chương 1: Tổng quan về ngôn ngữ lập trình C++ • Chương 2: Cấu trúc của một chương trình C++ • Chương 3: Biểu thức Logic và các cấu trúc điều khiển • Chương 4: Kiểu mảng và chuỗi ký tự
NỘI DUNG • Chương 5: Kiểu con trỏ và kiểu cấu trúc • Chương 6: Hàm • Chương 7: Lập trình hướng đối tượng • Chương 8: Lớp và đối tượng • Chương 9: Tái định nghĩa và thừa kế
Chương 1: TỔNG QUAN VỀ NNLT C++ • Mục tiêu • Giới thiệu tổng quan về ngôn ngữ lập trình C++; các thành phần cơ bản; các kiểu dữ liệu và các phép toán • Nội dung • Lịch sử ra đời • Các thành phần của C++ • Các kiểu dữ liệu cơ bản • Hằng, biến và biểu thức • Các phép toán
1.1 Lịch sử ra đời • C++ về bản chất được xây dựng trên nền của Ngôn ngữ lập trình C • Ngôn ngữ lập trình C++ được phát minh bởi Bjarne Stroupstroup vào năm 1979 với phiên bản đầu tiên gọi là “C with classes” • Phiên bản đầu tiên của C++ được sử dụng vào tháng 8 năm 1983 tại công ty AT&T • Phiên bản thương mại đầu tiên ra mắt năm 1985 C++ cơ bản là C ở mức độ mới. Điểm khác biệt giữa C++ và C là C++ bên cạnh hỗ trợ tất cả các lệnh của C, còn có mở rộng và hỗ trợ hướng đối tượng
1.2 Các thành phần của C++ • Bảng ký tự • Từ khóa • Định danh • Câu lệnh và khối lệnh • Lời chú thích
Bảng ký tự (1/3) - Mọi ngôn ngữ lập trình đều được xây dựng từ một bảng ký tự nào đó. - Ngôn ngữ C++ được xây dựng từ bảng ký tự sau: • 26 chữ cái hoa: A B C … Z và 26 chữ cái thường: a b c … z • 10 chữ số: 0 1 2 … 9 • Các ký hiệu toán học: + - * / = > < ( ) …
Bảng ký tự (2/3) - Dấu gạch nối dưới: _ • Các ký tự đặc biệt: . , ; : [ ] “ ” { } … • Các ký tự không nhìn thấy như dấu cách (space), dấu nhảy tab, dấu xuống dòng (return) Ví dụ:LAPTRINH gồm 8 ký tự, LAP TRINH gồm 9 ký tự
Bảng ký tự (3/3) Lưu ý: - C++ có phân biệt chữ hoa và chữ thường Ví dụ:SO, So, sO, so là khác nhau - Khi viết chương trình ta không được sử dụng bất kì ký hiệu nào khác ngoài bảng ký tự nói trên. Có nghĩa là không được sử dụng các ký tự … hay các chữ cái tiếng việt â, ă, ê, …để viết các lệnh. Nhưng ta có thể sử dụng tiếng Việt để viết các câu chú thích các câu hiển thị văn bản trên màn hình, máy in …
Từ khóa (1/2) - Từ khóa là một từ được quy định trước trong ngôn ngữ lập trình với một ý nghĩa nào đó, thường dùng để chỉ các loại dữ liệu hoặc kết hợp thành câu lệnh. - Có thể tạo ra những từ mới để biểu diễn các đối tượng nào đó nhưng không được phép trùng với từ khóa. Ví dụ: do, double, else, externe, float, for, goto, if, int, long, return, short, sizeof, static, struct, switch, typedef, union, unsigned, while ...
Từ khóa (2/2) Lưu ý: • Các từ khóa trong C++ luôn được viết bằng chữ thường. • Không được dùng từ khóa để đặt tên cho các hằng, biến, mảng, …
Định danh (1/3) -Định danh (identificater) là tên sử dụng cho đối tượng trong chương trình như: tên biến, tên hằng, tên hàm, tên mảng, … - Quy tắc đặt định danh (tên): • Là một dãy các ký tự liền nhau bao gồm chữ cái, chữ số và dấu gạch nối dưới ( _ ) • Ký tự đầu tiên của định danh phải là chữ cái hoặc dấu gạch nối dưới ( _ ) • Định danh không được trùng từ khóa.
Định danh (2/3) Ví dụ: Xét các định danh sau: Hoc_phan_C++ Lớp_hoc Tuoi# 2000Diem Ngay-Thang-Nam int del ta main ChieuDai Dien_tich@
Định danh (3/3) Chú ý: Thông thường: • Dùng chữ hoa để đặt tên cho các hằng, chữ thường để đặt tên cho các đại lượng khác: biến, mảng, hàm, … • Nên đặt tên sao cho dễ nhớ:Giai_thua, Dien_tich, … • Một số trình biên dịch C++ chỉ nhận dạng 32 ký tự đầu có ý nghĩa. Chẳng hạn:
Câu lệnh và khối lệnh (1/3) • Câu lệnh - Một câu lệnh (statement) xác định một công việc mà chương trình phải thực hiện để xử lý dữ liệu đã được mô tả và khai báo. - Câu lệnh trong C++ được thiết lập từ các từ khóa và các hằng, biến, biểu thức, … - Câu lệnh luôn luôn phải được kết thúc bằng dấu chấm phẩy (;) và các câu lệnh có thể được viết trên cùng một dòng hoặc nhiều dòng.
Câu lệnh và khối lệnh (2/3) Ví dụ: Xét đoạn chương trình sau: cin>>x>>y; x = 3 + x; y = (x = sqrt(x)) + 1; cout<<x; cout<<y; - Tuy nhiên, trong chương trình nhiều chỗ không dùng đến dấu (;) vì đó không phải là câu lệnh. Ví dụ:#include<iostream> int main()
Câu lệnh và khối lệnh (3/3) • Khối lệnh (hay còn gọi là lệnh hợp thành): - Một khối lệnh là một dãy các câu lệnh, được đặt bên trong cặp dấu ngoặc nhọn “{ }”. Các biến được khai báo trong khối lệnh nào thì chỉ có tác dụng trong khối lệnh đó. - Trong khối lệnh, có thể có các lệnh rỗng. Lệnh rỗng là lệnh chỉ có dấu chấm phẩy “;” Ví dụ: xét đoạn chương trình: int main() { cout << “Binh phuong cua 27 la” << Binhphuong(27) << endl; cout << “Lap phuong cua 27 la” << Lapphuong(27) << endl; return 0; }
Lời chú thích - Chú thích là nội dung diễn giải được đưa vào mã chương trình nhằm giúp cho người đọc dễ hiểu - Trình biên dịch sẽ bỏ qua đoạn chú thích khi biên dịch - Có hai cách viết chú thích • Nếu chú thích là một chuỗi ký tự liên tiếp nhau (trên một dòng hoặc nhiều dòng) thì đặt giữa cặp dấu /* và */ • Nếu chú bắt đầu từ một vị trí nào đó cho đến hết dòng thì đặt dấu // ở vị trí đó
1.3 Các kiểu dữ liệu cơ bản - Các ngôn ngữ lập trình đều phân chia dữ liệu thành các kiểu khác nhau được gọi là các kiểu dữ liệu cơ bản, chuẩn hay xây dựng sẵn - Khi đề cập đến một kiểu dữ liệu chuẩn của ngôn ngữ lập trình, thông thường ta phải xét đến các yếu tố: • Tên kiểu • Số byte • Miền giá trị của kiểu
1.3 Các kiểu dữ liệu cơ bản Một số kiểu dữ liệu cơ bản: • Kiểu ký tự • Kiểu số nguyên • Kiểu số thực
Kiểu ký tự (1/3) - Một giá trị kiểu ký tự (char) chiếm 1 byte (8bits) và biểu diễn được một ký tự thông qua bảng mã ASCII. - Có hai loại kiểu ký tự: Ký tự có dấu: Char có miền giá trị từ -128 -> 127 Ký tự không dấu: Unsigned char có miền giá trị 0 -> 255 - Ký tự trong C++ được đặt giữa cặp dấu nháy đơn ‘ ’ Ví dụ:‘a’, ‘A’, ‘*’, …
Kiểu ký tự (2/3) Ta có thể chia 256 ký tự thành 3 nhóm: - Nhóm 1: Các ký tự điều khiển có mã từ 0 đến 31. Nhóm các ký tự này không hiển thị ra màn hình, được dùng để điều khiển các thiết vị ngoại vi, các thủ tục trao đổi thông tin, … - Nhóm 2: Các ký tự văn bản có mã từ 32 đến 126. Các ký tự này có thể đưa được ra màn hình và máy in - Nhóm 3: Các ký tự đồ họa có mã từ 127 đến 255. Các ký tự này có thể đưa ra màn hình nhưng không in được.
Kiểu ký tự (3/3) - C++ cung cấp một số ký tự điều khiển để định dạng các hằng ký tự char. Các ký tự này còn gọi là ký tự thoát (escape sequence) Ví dụ: cout << “\a Hello! \n”; cout << “She said \“Hi\””; Phát ra tiếng beep và chuỗi Hello! Sau đó con trỏ xuống dòng Xuất hiện trên màn hình chuỗi: She said “Hi”
Kiểu số nguyên - Kiểu số nguyên là kiểu dữ liệu dùng để lưu các giá trị nguyên hay còn gọi là đếm được. - Kiểu số nguyên trong C++ được chia thành các kiểu dữ liệu con có kích thước và miền giá trị như sau: • Kiểu int, short có kích thước 2 bytes, miền giá trị -32,768 -> 32,767 • Kiểu unsigned int, unsigned short có kích thước 2 bytes, miền giá trị 0 -> 65,535 • Kiểu long có kích thước 4 bytes, miền giá trị -215 -> 215-1 • Kiểu unsigned long có kích thước 4 bytes, miền giá trị 0 -> 4294967295
Kiểu số thực - Kiểu số thực dùng để lưu các số thực hay các số có dấu phẩy động. - Trong C++ có các kiểu số thực như sau: • Kiểu float có kích thước 4 bytes, miền giá trị 3.4E-38 -> 3.4E+38 • Kiểu double có kích thước 8 bytes, miền giá trị 1.7E-308 -> 1.7E+308 • Kiểu long double có kích thước 10 bytes, miền giá trị 3.4E-4932 -> 1.1E+4932
1.4 Biến, hằng và biểu thức (1/11) • Cú pháp khai báo biến < kieu_du_lieu> Danh sach cac ten bien cach nhau boi dau phay (,); • Khái niệm biến - Biến là một đại lượng dùng để chứa dữ liệu mà các giá trị của nó có thể bị thay đổi trong quá trình thực hiện chương trình - Biến được định nghĩa bởi người lập trình và được đặt tên thông qua khai báo biến
1.4 Biến, hằng và biểu thức (2/11) • Gán giá trị cho biến • - Sau khi khai báo biến, có thể gán giá trị cho biến bằng toán tử gán “=”, có thể gán một giá trị cho nhiều biến. Ví dụ:
1.4 Biến, hằng và biểu thức (3/11) • Cú pháp vừa khai báo vừa khởi tạo giá trị cho biến <Kieu du lieu> Ten_bien 1= gia_tri, . . . ; Lưu ý: Ta có thể vừa khai báo vừa khởi tạo giá trị ban đầu cho biến thông qua lệnh gán (=) theo cú pháp sau: Ví dụ: Xét một số lệnh khai báo và khởi tạo giá trị cho biến: int a = 5;float b = 150.05; char ch = ‘c’, kt = ‘T’;
1.4 Biến, hằng và biểu thức (4/11) • Khái niệm hằng Hằng là đại lượng mà giá trị của nó không thay đổi trong suốt quá trình thực hiện chương trình • Cú pháp khai báo/ định nghĩa hằng const Kieu_du_lieu Ten_hang = Gia_tri ; #define Ten_hang Gia_tri Ví dụ: Xét các khai báo sau: const int a=10; const char ch=‘a’; #define a 10 #define ch ‘a’
1.4 Biến, hằng và biểu thức (5/11) Lưu ý: Hằng có thể được phân thành các loại như sau: - Hằng số nguyên - Hằng số thực - Hằng ký tự, xâu ký tự - Hằng biểu thức
1.4 Biến, hằng và biểu thức (6/11) Ví dụ: Xét các khai báo sau: const int a=10; const char ch=‘a’; const string st=“hello”; const float b=0.25; const int c=6*7+3; const int kt=‘a’- ‘b’+ ‘c’; const char kt=‘a’ – ‘b’ + ‘c’;
1.4 Biến, hằng và biểu thức (7/11) • Biểu thức - Biểu thức là sự kết hợp giữa các phép toán (toán tử) và các toán hạng để diễn đạt một công thức toán học nào đó. - Trong đó, toán hạng có thể là biến, hằng, hàm, phần tử mảng hay một biểu thức khác - Khi viết biểu thức ta có thể và nên dùng cặp dấu ngoặc tròn ( ) để thể hiện đúng trình tự tính toán trong biểu thức • Biểu thức thường được dùng trong các trường hợp: - Vế phải của câu lệnh gán - Làm chỉ số mảng - Sau các toán tử if, for, while, <<
1.4 Biến, hằng và biểu thức (8/11) Ví dụ: ta có biểu thức x = (-b + sqrt(delta))/(2*a); Trong đó: b, delta, a, 2 là các toán hạng +, /, *, - là các toán tử
1.4 Biến, hằng và biểu thức (9/11) • Câu lệnh gán Câu lệnh gán là phép toán cơ bản của bất cứ ngôn ngữ lập trình nào. Tùy vào từng ngôn ngữ mà câu lệnh gán cũng có những hình thức khác nhau. • Cú pháp câu lệnh gán Câu lệnh gán đơn giản Câu lệnh gán mở rộng Trong đó: pt có thể là một trong các phép toán hai ngôi: +, -, *, /, %,… Ten_bien = Bieu_thuc; Ten_bien pt= Bieu_thuc ;
1.4 Biến, hằng và biểu thức (10/11) Ví dụ: Xét một số lệnh gán sau: int a = 5; b = a * 5/2; a += 2; n *= (a+10); Ngoài ra, để thực hiện việc gán cùng một giá trị hay biểu thức cho các biến khác nhau ta cũng có thể thực hiện theo cú pháp Ten_bien 1 = Ten_bien 2 = … = Bieu_thuc; Ví dụ: ta có thể viết lại các lệnh gán: a = 3; b = 3; c = 3; => a = b = c = 3;
1.4 Biến, hằng và biểu thức (11/11) • Câu lệnh typedef • - Câu lệnh typedef cho phép tạo tên mới cho kiểu dữ liệu đã có. • - Cú pháp như sau: typedef Kieu_dl_cu Kieu_dl_moi; Ví dụ: typedef int Boolean; const Boolean true = 1; const Boolean false = 0; … Boolean dataOK; dataOK = true;
1.5 Các phép toán Các phép toán trong C++ bao gồm: • Các phép toán số học • Các phép toán quan hệ • Các phép toán logic • Các phép toán thao tác trên bit • Các phép toán chuyển đổi kiểu giá trị • Các phép toán tăng giảm • Biểu thức điều kiện • Thứ tự thực hiện các phép toán • Một số hàm toán học thường dùng
Các phép toán số học • Dùng để tính toán 2 hoặc nhiều toán hạng • + Các phép toán số học 2 ngôi: + Phép toán 1 ngôi: Chỉ có dấu (-) đứng trước một toán hạng. Ví dụ: -a, -3, -b, …
Các phép toán số học Thứ tự ưu tiên các phép toán số học: • Ví dụ: Xét các biểu thức: • a, x = a + b * c • b, y = - a/ b * c + d • c, z = (a + b) * c + d
Các phép toán số học Lưu ý: + Trong một biểu thức chứa các phép toán số học có cùng độ ưu tiên thì thứ tự tính toán được thực hiện từ trái qua phải + Trong một biểu thức chứa các phép toán số học không có cùng độ ưu tiên thì thứ tự tính toán được thực hiện theo độ ưu tiên + Khi áp dụng phép chia nguyên (/) cho các số nguyên (hay ký tự) thì kết quả thu được sẽ bị cắt bỏ phần thập phân + Phép lấy phần dư (%) chỉ được áp dụng có số nguyên (hay ký tự)
Các phép toán quan hệ - Cho ta hoặc giá trị đúng (==1) hoặc giá trị sai (== 0). Dùng để tạo các biểu thức quan hệ, nếu biểu thức đúng thì giá trị của biểu thức là 1, ngược lại giá trị của biểu thức là 0 - Các phép toán quan hệ gồm:
Các phép toán quan hệ Lưu ý: + Kết quả của biểu thức quan hệ luôn luôn là một số nguyên int. Do đó, nó có thể tham gia vào các phép toán đối với số nguyên. + Các phép toán quan hệ được dùng để thiết lập điều kiện rẽ nhánh hay kết thúc vòng lặp trong các cấu trúc điều khiển. + Các phép toán quan hệ: <=, >=, ==, != luôn phải được viết liền nhau (nghĩa là không có dấu cách trống giữa chúng) + Các phép toán quan hệ cũng được áp dụng cho các toán hạng kiểu ký tự. + Các phép toán quan hệ có độ ưu tiên thấp hơn các phép toán số học.
Các phép toán Logic Chỉ trả về một trong hai giá trị 1 (nếu đúng) và 0 (nếu sai). Dùng để tạo các biểu thức Logic Các phép toán Logic gồm:
Các phép toán Logic Ta có bảng giá trị:
Các phép toán Logic Lưu ý: + Kết quả của biểu thức logic luôn luôn là một số nguyên int. Do đó, nó cũng có thể tham gia vào các phép toán đối với số nguyên. + Các phép toán logic cũng được dùng để thiết lập điều kiện rẽ nhánh hay kết thúc vòng lặp trong các cấu trúc điều khiển + Các phép toán logic: &&, || luôn phải được viết liền nhau (nghĩa là không có dấu cách trống giữa chúng) + Các phép toán logic cũng được áp dụng cho các toán hạng kiểu ký tự.
Các phép toán Logic Lưu ý: + Trong một biểu thức có cả phép toán số học, quan hệ và logic thì cần chú ý thứ tự ưu tiên tính toán: Ví dụ: Tính giá trị các biểu thức a = (3 && 6) + 7 * 2 b = 3 && 6 + 7 * 2 c = 3 && 6 + 7 < 15 d = 3 && 6 + 7 < !15
Các phép toán thao tác trên bit Các phép toán thao tác trên bit gồm:
Các phép toán thao tác trên bit Các phép toán thao tác trên bit: Bảng giá trị: