1. Bộ môn Kỹ thuật hệ thống và Mạng máy tính
Khoa Công nghệ thông tin
2. Chương 1. Cơ sở lập trình C++
1.1. Các thành phần cơ bản của C++
A. Tập ký tự
• Bộ ký tự bao gồm:
– Các kí tự (viết thường và viết hoa) của bảng chữ cái tiếng Anh:
a b c d …. x y z A B C D …. X Y Z
– Các chữ số: 0 1 2 … 8 9
– Các dấu và kí tự đặc biệt: + - * / % = ~ ! # % ^ & ( ) { } [ ] :
. , ? ‘ “ _ ; |
• Phân biệt chữ hoa và chữ thường.
• Dấu ; dùng để kết thúc câu lệnh.
• { } bắt đầu và kết thúc khối chương trình.
• Dấu ‘ bắt đầu và kết thúc hằng ký tự.
• Dấu “ bắt đầu và kết thúc hằng xâu ký tự.
3. B. Từ khóa
Bài giảng C++. 6/5/2021 •B/m KTHT, khoa CNTT, ĐHXD 3
• Là từ được quy định sẵn trong ngôn ngữ,
người lập trình phải thực hiện đúng chính tả
và ngữ pháp của từ khóa.
• Một số ví dụ từ khóa của C++
– char, int, float, double, struct, signed, unsigned,
short, long
– if, else, for, while, do, switch, case, break,
continue, return
– using, namespace, include, define
4. C. Tên
4
• Tên là dãy ký tự dùng để định danh cho một phần tử
trong một chương trình như kiểu dữ liệu, biến, hằng,
hàm.
• Qui tắc đặt tên:
– Tên dài không quá 255 kí tự
– Chỉ bao gồm chữ cái, chữ số và dấu _
– Phải bắt đầu bằng chữ cái hoặc _
– Tên không được trùng với từ khóa
– Trong cùng một phạm vi của chương trình, không được
phép có đại lượng trùng tên.
• Ví dụ:
i, x, y, a, b, _function, _MY_CONSTANT, PI, gia_tri_1
5. 5
Tên (tiếp)
• Cách thức đặt định danh/tên:
– Hằng số: chữ hoa
– Các biến, hàm, kiểu dữ liệu : Bằng chữ thường.
– Nếu tên gồm nhiều từ thì nên phân cách các từ
bằng dấu gạch dưới.
• Ví dụ:
6. D. Lời giải thích (comment)
6
• Là những giải thích ngắn gọn về chương
trình hoặc 1 phần của chương trình.
• Cách biểu diễn:
– Giải thích trên một dòng: // Dòng chú thích
– Giải thích bằng cả một đoạn
/* Dòng giải thích 1
Dòng giải thích 2
Dòng giải thích 3 */
7. E. Các chỉ thị tiền xử lý
• Là bộ xử lý văn bản, làm việc trên văn bản
chương trình nguồn như bước đầu của quá trình
biên dịch.
• Thường được sử dụng để thay đổi chương trình
hoặc dịch chương trình một cách dễ dàng tùy
theo môi trường thực hiện khác nhau.
• Bắt đầu bằng dấu #, có thể xuất hiện ở bất cứ đâu
trong chương trình.
• Cuối các chỉ thị tiền xử lý không có dấu ;
8. E. Các chỉ thị tiền xử lý
a) Chỉ thị gộp, ghép, bao hàm: Bổ sung các tệp khác vào
chương trình nguồn tại vị trí của chỉ thị. Trong những
tệp này có thể chứa các chỉ thị khác của bộ tiền xử lý,
các chỉ thị đó sẽ được xử lý trước khi tiếp tục xử lý
văn bản của tệp nguồn. Tác dụng là để ghép nối nhiều
tệp và thư viện vào chương trình.
#include “*đường dẫn]tên tệp”
#include <[đường dẫn]tên tệp>
Khi không có [đường dẫn] hai cách viết khác nhau:
– Cách 1 tìm tệp trong thư mục hiện hành trước rồi mới tìm
trong thư mục INCLUDE của C++.
– Cách 2 chỉ tìm tệp trong thư mục INCLUDE của C++.
9. E. Các chỉ thị tiền xử lý
b) Chỉ thị định nghĩa hàm và macro
• Thay thế đơn giản:
#define Tên Giá_trị
Thay thế tên bằng giá trị đằng sau nó.
Giá trị có thể là hàm, hằng (không thực hiện với các hằng
xâu ký tự), biểu thức, một đoạn chương trình nằm giữa { }
• Định nghĩa macro (có đối số):
#define Tên_macro(danh sách đối) Biểu thức thay thế
• Chấm dứt tác dụng của thay thế hoặc định nghĩa macro:
#undef Tên
#undef Tên_macro
10. E. Các chỉ thị tiền xử lý
c) Phân vùng khi dịch chương trình: Các chỉ thị biên dịch
có điều kiện:
#if điều kiện
Đoạn chương trình
#endif
#if điều kiện
Đoạn chương trình 1
#else
Đoạn chương trình 2
#endif
Hoặc
d) Chỉ thị báo lỗi
#error thông_báo
Chỉ thị này sẽ dừng chương trình dịch khi có lỗi và in ra một thông báo
lỗi.
11. F. Cấu trúc chương trình C/C++
11
#include <tên thư viện> //Khai báo tệp tiêu đề của thư viện
using namespace … //Khai báo không gian tên hàm
Khai báo kiểu dữ liệu người lập trình tự tạo (nếu có)
Khai báo hàm nguyên mẫu (nếu có)
Khai báo các hằng và biến dữ liệu toàn cục
int main( ) //Chương trình chính
{
các câu lệnh;
return 0;
}
Nội dung các hàm đã khai báo ở trên
12. 1.2 Các kiểu dữ liệu chuẩn
Loại dữ liệu Kiểu dữ liệu Số ô nhớ Miền giá trị
Boolean bool 1 byte 0 hoặc 1. Trong đó 0 => false và 1 => true
Ký tự char 1 byte -128 tới 127 hoặc 0 tới 255
unsigned char 1 byte 0 tới 255
signed char 1 byte -128 tới 127
Số nguyên int 4 byte -2147483648 tới 2147483647
unsigned int 4 byte 0 tới 4294967295
signed int 4 byte -2147483648 tới 2147483647
short int 2 byte -32768 tới 32767
long int 4 byte -2,147,483,648 tới 2,147,483,647
Số thực float 4 byte 3.4e -38 tới 3.4e+38 (~7 chữ số)
double 8 byte 1.7e – 308 tới 1.7e+308 (~15 chữ số)
long double 8 byte 1.7e – 308 tới 1.7e+308 (~15 chữ số)
12
13. Cách khai báo biến kiểu dữ liệu chuẩn
• Khai báo từng biến: <tên kiểu> <tên biến>;
• Khai báo một loạt biến: <tên kiểu> <danh sách tên biến>;
• Khai báo và khởi tạo giá trị ban đầu:
<tên kiểu> <tên biến>=<giá trị>;
13
float x; // biến kiểu thực float
double z; // biến kiểu thực double
int i; // biến kiểu nguyên int
float x,y,z; // danh sách 3 biến kiểu float
int i,j,k; // danh sách 3 biến kiểu int
int a = 3;
float x = 5.0, y = 2.6;
14. Cách khai báo hằng dữ liệu
• Khai báo bằng chỉ thị:
#define <tên hằng> <giá trị>
• Khai báo với từ khóa:
const <tên kiểu> <tên hằng> = <giá trị>;
14
#define MAX_SINH_VIEN 60 // hằng kiểu số nguyên
#define DIEM_CHUAN 23.5 // hằng kiểu số thực
const int MAX_SINH_VIEN = 60; // hằng kiểu số nguyên
const float DIEM_CHUAN = 23.5; // hằng kiểu số thực
15. Biểu diễn giá trị hằng
Hệ cơ số 10 Hệ cơ số 8 Hệ cơ số 16
2007
396
03727
0614
0x7D7
0x18C
15
Hằng nguyên
Kí tự cần biểu diễn Cách 1 (kí tự) Cách 2 (kiểu số nguyên –hệ 10)
Chữ cái A ‘A’ (char) 65
Dấu nháy đơn ‘ ‘’’ (char)39
Dấu nháy kép “ ‘”’ (char)34
Dấu ‘’ (char)92
Kí tự xuống dòng ‘n’ (char)10
Kí tự NULL ‘0’ (char)0
Kí tự Tab ‘t’ (char)9
Hằng kí tự
Số thực dấu phẩy tĩnh Số thực dấu phẩy động
3.14159
123.456
31.4159 E-1
12.3456 E+1 hoặc 1.23456 E+2
Hằng thực
17. 1.3. Biểu thức
17
• Biểu thức bao gồm các toán hạng kết hợp với nhau
qua các toán tử
• Toán hạng có thể là các đại lượng biến, hằng, hàm
• Toán tử là các phép toán
• Các dạng biểu thức cơ bản
– Biểu thức số học,
– Biểu thức logic
– Biểu thức quan hệ so sánh
• Một toán tử khác của C++
– Toán tử với bit
– Toán tử gán
– Toán tử điều kiện
18. A. Biểu thức số học
• Toán tử: các phép toán số học
+, -, *, /, %
• Toán hạng: các kiểu dữ liệu số
• Chú ý:
– Phép chia / cho kết quả số thập phân nếu một trong các toán
hạng có kiểu số thực
– Phép chia / cho kết quả là phần nguyên nếu các toán hạng có
kiểu số nguyên
• VD về phép chia
int a = 5;
int b;
float c;
b = a/2; // kết quả b = 2
c = a/2.0; // kết quả c = 2.5
18
19. B. Biểu thức logic
• Giá trị của biểu thức logic là true (đúng) và false (sai)
• Toán hạng của biểu thức logic là các đại lượng có kiểu dữ
liệu logic (bool), các mệnh đề quan hệ so sánh
• Toán tử là các phép toán logic :
– Phép VÀ : &&
– Phép HOẶC: ||
– Phép PHỦ ĐỊNH: !
19
A B !A A && B A || B
False (0) False (0) True (1) False (0) False (0)
False (0) True (1) True (1) False (0) True (1)
True (1) False (0) False (0) False (0) True (1)
True (1) True (1) False (0) True (1) True (1)
20. C. Biểu thức quan hệ
• Biểu thức quan hệ gồm 2 toán hạng (gọi là mệnh đề so
sánh) và phép toán quan hệ. Giá trị của mệnh đề so sánh là
true (đúng) hoặc false (sai)
• Các phép toán so sánh : > , < , >= , <=, ==, !=
• Ví dụ
– Mệnh đề 5 > 7 có giá trị là false
– Mệnh đề 9 <= 10 có giá trị là true
• Mệnh đề quan hệ so sánh và biểu thức logic
VD: (b<=2) || (a>1)
20
21. D. Làm việc với bit
21
Toán tử Kí hiệu
Phép AND &
Phép OR |
Phép phủ định NOT ~
Phép XOR ^
Phép dịch trái - Shift left <<
Phép dịch phải - Shift right >>
22. D. Làm việc với bit
A B A & B A | B A ^ B
0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 1 0
22
Ví dụ:
19(10) = 10011(2)
25(10) = 11001(2)
19 & 25 = 10001(2) = 17(10)
19 | 25 = 11011(2) = 27(10)
19 ^ 25 = 01010(2) = 10(10)
23. D. Làm việc với bit
23
• Toán tử dịch trái << và dịch phải >> :
– A << n: dãy bit A dịch sang trái n bit (dãy bit A bỏ đi
n bit tận cùng bên trái và thêm n bit 0 vào tận cùng
bên phải).
• Ví dụ: unsigned char a = 5; // 00000101(2) unsigned
char b = a << 4; // 01010000(2) = 80(10)
– A >> n: dãy bit A dịch sang phải n bit (dãy bit A bỏ đi
n bit tận cùng bên phải và thêm n bit 0 vào tận cùng
bên trái).
• Ví dụ: unsigned char b = a >> 1; // 00000010(2)= 2(10)
24. D. Làm việc với bit
24
• Ứng dụng: Tăng tốc khi viết các trình điều
khiển thiết bị (drivers), đồ họa, giao thức
truyền thông và giải mã.
• Ví dụ : Thanh ghi cờ 8 bit ứng với 8 cờ báo
khác nhau. Làm thế nào để nhận ra 1 cờ báo
(ví dụ cờ ở bit số 3) có giá trị =1?
25. E. Toán tử gán
• Phép gán <tên_biến> = <biểu_thức>;
• Tác dụng:
– Đặt giá trị của biến bằng giá trị của biểu thức
int a,b,c,d;
a = 1 ;
b = 2 ;
c = 3 ;
d = (a+b+c)/2;
– Tạo nên biểu thức gán: Giá trị của biểu thức gán bằng giá trị của biến
sau khi phép gán được thực hiện
– Toán tử gán có thể sử dụng trong các biểu thức và các câu lệnh như
các toán tử khác.
a = b = 5;
z = (y = 2)*(x = 6);
25
26. Phép gán thu gọn
• Rút gọn phép gán x = x + y thành x += y;
• Áp dụng cho các phép toán số học : +, - , * , / , %,
<<, >>, &, |, ^
• Ví dụ:
x -= 5; // x = x – 5;
y *= b; // y = y * b;
z /= 2; // z = z / 2;
26
27. F. Toán tử điều kiện
• Cú pháp:
<biểu thức logic> ? <biểu thức 1>:<biểu thức 2>
• Ý nghĩa:
– Nếu <biểu thức logic> là Đúng thì giá trị của
biểu thức điều kiện = giá trị của <biểu thức 1>
– Ngược lại, thì = giá trị <biểu thức 2>
• Toán tử điều kiện “?:” là toán tử 3 ngôi duy nhất trong C++
(vì nó chứa 3 toán hạng).
• Ví dụ biểu thức điều kiện để tính trị tuyệt đối của a:
a>=0 ? a : -a
27
28. G. Phép toán 1 ngôi
• Phép toán 1 ngôi là phép toán kết hợp với 1 toán hạng
– VD: phép phủ định !a , phép đảo dấu -a
• Một số phép toán 1 ngôi khác:
– Phép tăng 1 đơn vị: i++ hoặc ++i tương đương với i = i + 1
i++ (tăng sau/hậu tố); ++i (tăng trước/tiền tố)
– Phép giảm 1 đơn vị:
i-– hoặc --i tương đương với i= i-1
i-– (giảm sau/hậu tố); --i (giảm trước/tiền tố)
– sizeof: cung cấp thông tin về số byte bộ nhớ mà đối số của
nó chiếm (hoặc có thể chiếm):
sizeof(kiểu dữ liệu) Ví dụ: sizeof(char);
sizeof biểu thức Ví dụ: int a[10]; sizeof a;
28
29. G. Phép toán 1 ngôi
• Một số phép toán 1 ngôi khác:
– Ép kiểu: làm một kiểu dữ liệu này biến đổi thành kiểu dữ liệu khác:
(kieu_du_lieu) bieu_thuc
– Ví dụ: double a = 15.65653;
int c ;
c = (int) a; // c=15
Ngôn ngữ C++ cho phép thực hiện ép kiểu tường minh C-style
với cú pháp như một lời gọi hàm:
c= int (a);
– Phân loại:
1. Nới rộng (widening): Là quá trình làm tròn số từ kiểu dữ liệu
có kích thước nhỏ hơn sang kiểu có kích thước lớn hơn. Kiểu
biến đổi này không làm mất thông tin.
2. Thu hẹp (narrowwing): Là quá trình làm tròn số từ kiểu dữ
liệu có kích thước lớn hơn sang kiểu có kích thước nhỏ hơn.
Kiểu biến đổi này có thể làm mất thông tin
29
30. G. Phép toán 1 ngôi
• Một số phép toán 1 ngôi khác:
– Ép kiểu (tiếp): Ép kiểu tường minh không được trình biên
dịch (compiler) kiểm tra tại thời điểm biên dịch, nên sẽ
không đưa ra những cảnh báo trong những trường hợp
chuyển đổi không đúng một số toán tử ép kiểu được hỗ trợ
bởi C++:
static_cast
const_cast
reinterpret_cast
dynamic_cast
– static_cast: yêu cầu compiler kiểm tra kiểu dữ liệu tại thời
điểm biên dịch chương trình, hạn chế được những lỗi ngoài
ý muốn.
static_cast<kiểu dữ liệu>(biểu thức)
– Ví dụ: c = static_cast<int>(a);
30
31. H. Thứ tự ưu tiên thực hiện phép toán
31
Mức ưu
tiên
Nhóm toán tử Toán tử Thứ tự thực hiện
1 Trong (…)
2 Phạm vi :: Trái sang phải
3 Hậu tố (một ngôi) ++, --, [], (), ., -> Trái sang phải
4 Tiền tố (một ngôi) ++,--, !,~,sizeof, -, +, *, & Phải sang trái
5 Số học *, /, % Trái sang phải
6 Số học +, - Trái sang phải
7 Dịch bit <<, >> Trái sang phải
8 So sánh >, <, >=, <= Trái sang phải
9 So sánh ==, != Trái sang phải
10 AND bit & Trái sang phải
11 XOR bit ^ Trái sang phải
12 OR bit | Trái sang phải
32. H. Thứ tự ưu tiên thực hiện phép toán
32
Mức ưu
tiên
Nhóm toán tử Toán tử Thứ tự thực hiện
13 Logic && Trái sang phải
14 Logic || Trái sang phải
15 Điều kiện ?: Phải sang trái
16 Gán =, *=,/=,%=,+=,-=,<<=, >>=,
&=,^=,|=
Phải sang trái
17 Dấu phẩy , Trái sang phải
Ví dụ: Thực hiện từ phải sang trái:
33. H. Thứ tự ưu tiên thực hiện phép toán
1) Các phép toán đặt trong cặp () thực hiện trước
2) Phép toán 1 ngôi: Nếu các phép toán cùng mức hậu tố thực hiện từ trái qua
phải, tiền tố phải qua trái
3) Phép toán 2 ngôi: nếu 2 phép toán cùng mức thì ưu tiên thực hiện từ trái qua
phải
- Phép số học: *, /, %
- Phép số học: +, -
- Phép dịch bit
- Phép so sánh lớn hơn nhỏ hơn: >, <, >=, <=,
- Phép so sánh bằng: ==, !=
- Phép AND bit
- Phép XOR bit
- Phép OR bit
- Phép logic AND: &&
- Phép logic OR: ||
4) Phép toán 3 ngôi: Nếu các phép toán cùng mức thì thực hiện từ phải qua trái.
5) Phép gán: Nếu các phép toán cùng mức thì thực hiện từ phải qua trái.
6) Dấu phẩy
33
34. I. Các hàm toán học của C++
• Để sử dụng cần có chỉ thị #include <math.h>
• Các hàm:
– log(x) : tính loga cơ số tự nhiên của x
– log10(x) : tính loga cơ số 10 của x
– exp(x): tính e^x
– tan(x): tính tan(x)
– sin(x)
– cos(x)
– pow(a,x): tính a^x
– sqrt(x) : căn bậc 2 của x
– fabs(x): trị tuyệt đối của x
34
35. 1.4. Nhập dữ liệu từ bàn phím bằng cin >>
• cin : là đối tượng chuẩn của C++ chuyên dùng để nhập dữ
liệu cho biến từ bàn phím
• Khi dùng cần khai báo thư viện #include <iostream>
và không gian tên std: using namespace std;
• Cú pháp cơ bản: cin >> tên_biến;
VD: int a;
cin >> a; // nhap du lieu bien a
• Cách nhập dữ liệu cho nhiều biến liên tiếp
VD: float a, b;
int c;
cin >> a >> b >> c; // nhap a, b, c
35
36. 1.5. Xuất dữ liệu ra màn hình bằng cout <<
36
• cout : là đối tượng chuẩn của C++ chuyên dùng để xuất dữ
liệu cho biến ra màn hình.
• Khi dùng cần khai báo thư viện #include <iostream>
và không gian tên std: using namespace std;
• Xuất giá trị của biến: cout << tên_biến ;
VD: int a = 2;
cout << a; // xuat du lieu bien a
• Có thể xuất dữ liệu cho nhiều biến liên tiếp
VD: float a, b;
int c;
cout << a << b << c; // xuất a, b, c
37. Xuất giá trị của hằng, hàm
• Xuất giá trị của hằng: cout << hằng
VD: const float PI = 3.14;
cout << “PI=“ << PI << endl;
• Xuất giá trị của hàm: cout << hàm
VD: Xuất giá trị hàm toán học
#include <math.h>
#include <iostream>
…
const float PI= 3.14;
cout << sin(PI);
37
38. Cách căn chỉnh định dạng khi in ra màn hình
• #include <iomanip>
• endl hoặc ‘n’ xuống dòng
• left căn lề trái
• right căn lề phải
• setw(n) đặt độ rộng n vị trí khi in dữ liệu ra màn hình
• setprecision(n): in ra n chữ số khi in một số thực
• Nếu setprecision(n) kèm theo fixed: in số thực dấu
chấm tĩnh với đủ n chữ số của phần thập phân
• Nếu setprecision(n) kèm theo scientific: in số thực
dấu chấm động với đủ n chữ số của phần thập phân
• showpoint : hiển thị phần thập phân của số thực
• boolalpha : hiển thị true, false thay vì 1 (true), 0 (false)
38
40. A. Lệnh khối/ghép
• Gồm một dãy câu lệnh tuần tự nối tiếp nhau trong
một cặp ngoặc { }
• Cú pháp:
{
câu lệnh 1;
câu lệnh 2;
…
câu lệnh n;
}
• Tác dụng: Tạo luồng điều khiển tuần tự
• Các lệnh khối có thể lồng nhau
• C và C++ không giới hạn số lệnh bên trong khối và
số lệnh khối lồng nhau
41. B. Lệnh rẽ nhánh if…else
• Điều khiển rẽ nhánh theo giá trị true hay false của biểu
thức điều kiện
• Cú pháp 1: if(biểu_thức) việc;
• Cú pháp 2: if(biểu_thức) việc_1;
else việc_2;
• Chú ý:
– biểu_thức phải có kiểu số nguyên hoặc logic và đặt
trong cặp ngoặc ( ).
– Các lệnh if … else có thể lồng nhau.
– Trong lệnh if…else lồng nhau, mệnh đề else đi cùng mệnh
đề if ngay trước nó Nên dùng lệnh khối/ghép để tránh
nhầm lẫn.
– Nếu việc gồm nhiều lệnh phải dùng lệnh khối/ghép.
42. C. Lệnh lựa chọn switch…case
• Lựa chọn rẽ nhánh theo giá trị số nguyên của
biểu thức điều kiện
• Cú pháp:
switch(biểu_thức)
{
case giá_trị_1: việc_1; break;
case giá_trị_2: việc_2; break;
…
case giá_trị_n: việc_n; break;
default: lệnh_n+1; break; // có thể không có
}
43. Trình tự thực hiện lệnh switch … case
1) Tính giá trị của biểu_thức (kiểu số nguyên)
2) Thực hiện rẽ nhánh
– Nếu biểu_thức == giá_trị_1: chuyển đến
lệnh 1
– ...
– Nếu biểu_thức == giá_trị_n: chuyển đến
lệnh n
– Nếu biểu_thức có giá trị khác: chuyển đến
default
44. Chú ý với lệnh break;
• Lệnh break dùng để ngắt luồng điều khiển và
thoát ra ngoài cấu trúc lệnh switch.
• Nếu thiếu break, luồng điều khiển sẽ thực
hiện các lệnh tiếp bên trong cấu trúc.
45. Chú ý với mệnh đề case
• Sau mệnh đề case … : có thể đặt nhiều câu lệnh mà không cần
lệnh khối/ghép.
case giá_trị:
lệnh 1;
lệnh 2;
…
lệnh n;
break;
• Dùng lệnh khối/ghép khi muốn khai báo + khởi tạo giá trị đầu
cho một biến trong case… :
case giá_trị:
{ <kiểu dữ liệu> tên biến = <giá trị>;
lệnh 1;
lệnh 2;
…
lệnh n;
break;
}
46. D. Lệnh chu trình có số vòng lặp xác định for()
• Cú pháp:
for (biểu thức 1; biểu thức 2; biểu thức 3)
{
việc;
}
• Biểu thức 1: Khởi tạo giá trị ban đầu của biến điều khiển chu
trình.
• Biểu thức 2: biểu thức điều kiện để thực hiện chu trình. Nếu
== true thì tiếp tục chu trình, ==false thì ra khỏi chu trình.
• Biểu thức 3: Chuẩn bị cho bước sau: Tính giá trị tiếp theo của
biến điều khiển chu trình.
• Ví dụ: (giaithua.cpp)
gt=1;
for(i=1; i<=N; i++)
gt*=i;
47. E. Lệnh chu trình có số vòng lặp không
xác định while và do…while
• Lệnh while và do…while tạo chu trình lặp theo
giá trị true hay false của biểu thức điều kiện
• Cú pháp
– Lệnh while :
while (biểu thức)
{
việc
}
Lệnh do…while
do
{
việc
}
while (biểu thức);
48. Trình tự thực thi lệnh
• while
– Kiểm tra giá trị biểu thức trước. Nếu true thì thực
hiện lệnh. Nếu false thì thoát vòng lặp.
– Việc đặt sau while có thể không thực hiện lần nào.
• do…while
– Thực hiện lệnh trước rồi kiểm tra giá trị biểu thức
điều kiện. Nếu true thì tiếp tục, false thì thoát.
– Việc đặt sau do được thực hiện ít nhất một lần.
49. Chú ý
• Các chu trình có thể lồng nhau.
• Thoát khỏi chu trình bằng lệnh break
– Cú pháp: break;
– Đặt trong phần việc của chu trình
– Tác dụng: Thoát khỏi chu trình ngay cả khi biểu thức
điều kiện là true.
50. Chú ý (tiếp)
• Chuyển tới lần lặp tiếp theo bằng lệnh continue
– Cú pháp: continue;
– Đặt trong phần việc của chu trình.
• Từ khóa continue thường được sử dụng trong vòng lặp for.
– 4 bước thực thi cơ bản của của 1 vòng lặp for:
(1) Khởi tạo giá trị đầu tiên của biến điều khiển chu trình
(2) Kiểm tra điều kiện để thoát khỏi chu trình
(3) Thực hiện việc (công thức lặp)
(4) Chuẩn bị cho bước sau
– Nếu có continue trong bước (3), chương trình sẽ bỏ
qua phần còn lại của bước (3) để chuyển đến thực hiện
bước (4), và bắt đầu 1 lần lặp mới từ bước (2).
• Trong vòng lặp while và do…while: bỏ qua thực thi các
câu lệnh nằm sau lệnh continue trong chu trình và
chuyển về đầu chu trình để thực thi lần lặp kế tiếp
51. NGÔN NGỮ LẬP TRÌNH C++
1.7. CÁC KIỂU DỮ LIỆU CÓ CẤU TRÚC
52. A. KIỂU XÂU KÝ TỰ
• Khai báo: string <danh sách biến>;
• Khai báo và khởi tạo:
string <tên biến>(“nội dung xâu”);
string <tên biến>{ “nội dung xâu” };
string <tên biến>=“nội dung xâu”;
• Hằng xâu ký tự: nằm giữa hai dấu “
“”: xâu rỗng.
• Cần có: using namespace std;
53. Nhập/Xuất xâu ký tự
• Nhập: Sử dụng cin >> biến xâu;
• Nếu xâu ký tự chứa dấu cách:
getline(cin, biến xâu);
• Chú ý: Khi nhập dữ liệu chuyển từ số sang chữ
cần xóa bộ đệm bằng cin.ignore();
• Xuất: Sử dụng cout << … ;
54. B. KIỂU MẢNG
• Mảng là tập hợp các phần tử có cùng kiểu sắp xếp
theo một trật tự nhất định.
• Khai báo mảng một chiều:
<kiểu dữ liệu> <tên mảng> [<số phần tử tối đa>];
– Số phần tử tối đa là hằng số.
– Nên sử dụng chỉ thị tiền xử lý
#define để định nghĩa <số phần tử tối đa>.
Ví dụ: #define Max 5
int dayso[Max];
– Chỉ số của mảng tính từ 0 đến <tổng số phần tử> - 1.
55. KIỂU MẢNG MỘT CHIỀU (tiếp)
• Khởi tạo mảng một chiều:
– Khởi tạo giá trị cho mọi phần tử của mảng:
Ví dụ: int dayso[5] = { 4 , 3 , 1 , 5 , 2};
– Khởi tạo giá trị cho một số phần tử đầu mảng:
Ví dụ: int dayso[5] = { 4 , 3}; // 4, 3, 0, 0, 0
– Khởi tạo giá trị 0 cho mọi phần tử của mảng:
Ví dụ: int dayso[5] = { }; // 0, 0, 0, 0, 0
– Tự động xác định số lượng phần tử của mảng:
Ví dụ: int dayso[ ] = { 4 , 3 , 1 , 5 , 2};
56. KIỂU MẢNG MỘT CHIỀU (tiếp)
• Truy nhập vào mảng một chiều:
<tên biến mảng>[ chỉ số ]
• Nhập mảng một chiều:
cin >> <tên biến mảng>[ chỉ số ];
trong một vòng lặp for.
• Xuất mảng một chiều:
cout << <tên biến mảng>[ chỉ số ];
trong một vòng lặp for.
57. KIỂU MẢNG 2 CHIỀU
• Khai báo mảng hai chiều:
<kiểu dữ liệu> <tên mảng>[số hàng][số cột];
• Khởi tạo mảng hai chiều:
– Khởi tạo giá trị cho mọi phần tử của mảng:
Ví dụ: int matran[2] [3] = { {1, 2 , 3},{4 , 5 , 6} };
– Khởi tạo giá trị cho một số phần tử đầu mảng:
Ví dụ: int matran[2] [3] = { {1}, {4 , 5, 6}};
– Khởi tạo giá trị 0 cho mọi phần tử của mảng:
Ví dụ: int matran[2] [3] = { };
– Tự động xác định số lượng phần tử của hàng
Ví dụ: int matran[ ][3]= { {1, 2 , 3},{4 , 5 , 6} };
58. KIỂU MẢNG 2 CHIỀU (tiếp)
• Truy nhập vào mảng 2 chiều:
<tên biến mảng>[ chỉ số hàng][chỉ số cột]
• Nhập mảng 2 chiều:
cin >> <tên biến mảng>[ chỉ số hàng ][chỉ số cột];
trong hai vòng lặp for lồng nhau.
• Xuất mảng một chiều:
cout << <tên biến mảng>[ chỉ số hàng ][chỉ số cột];
trong hai vòng lặp for lồng nhau.
59. C. KIỂU CẤU TRÚC
• Khai báo kiểu: struct <tên kiểu cấu trúc>
{ <kiểu dữ liệu> <thành phần 1>;
<kiểu dữ liệu> <thành phần 2>;
…
<kiểu dữ liệu> <thành phần n>;
};
• Ví dụ: struct sinhvien
{ string hoten;
float diem[10];
float dtb;
} ;
• Chú ý: Có thể khai báo ngoài hoặc trong hàm main()
61. KIỂU CẤU TRÚC (tiếp)
STT Ho va ten
Diem
DTB
Mon 1 Mon2 … Mon M
1 Nguyen Van An 10 9 9
2 Do Viet Binh 8 7 8
…
N Hoang Hai Yen 10 9 10
Tổ chức dữ liệu:
1) Theo mảng:
string hoten[60];
float diem[60][10], dtb[60];
2) Theo cấu trúc Mảng các cấu trúc
62. KIỂU CẤU TRÚC (tiếp)
• Mảng cấu trúc:
<kiểu cấu trúc> tên mảng[ số phần tử ];
• Ví dụ: sinhvien sv[50];
• Truy nhập vào tên của sv[i]: sv[i].hoten
• Truy nhập vào điểm môn thứ j của sv[i]:
sv[i].diem[j]
• Ví dụ: VDstruct.cpp