Nội dung
NGÔN NGỮ LẬP TRÌNH C/C++
(cid:122) Các cấu trúc điều khiển rẽ nhánh và lặp (cid:122) Làm một số bài tập trên lớp (cid:122) Kiểu dữ liệu mảng (cid:122) Xâu ký tự
1
2
Nguyễn Hải Châu Khoa Công nghệ thông tin Trường Đại học Công nghệ (Bài giảng tuần 3-4)
Câu lệnh rẽ nhánh if…else
(cid:122) Cú pháp:
Cấu trúc điều khiển
if (<điều kiện>)
Nếu <điều kiện> đúng thì thực hiện
if (<điều kiện>) else
Nếu <điều kiện> đúng thì thực hiện
Ngược lại thực hiện
3
4
Ví dụ câu lệnh if…else
Câu lệnh lựa chọn switch
Ví dụ 2:
Ví dụ 1:
if (delta < 0)
if (delta == 0)
printf(“Vo nghiem\n”);
printf(“Nghiem kep\n”);
(cid:122) Câu lệnh if…else cho ta 2 lựa chọn (cid:122) Khi có nhiều lựa chọn: if…else lồng nhau (cid:122) C++ cung cấp câu lệnh khác để lựa chọn nhiều khả năng: switch
else if (delta == 0)
printf(“Nghiem kep\n”);
if (delta == 0) {
else
printf(“Hai nghiệm\n”);
x1 = x2 = nghiem; printf(“Nghiem kep\n”);
}
5
6
1
Câu lệnh lựa chọn switch: Cú pháp
Ví dụ câu lệnh switch
switch (<điều kiện>) {
int th; cout << “Cho biết tháng cần tính: “ ; cin >> th ; switch (th) {
case
case 1: case 3: case 5: case 7: case 8: case 10: case 12: cout << "tháng này có 31 ngày" ; break ; case 2: cout << "tháng này có 28/29 ngày" ; break; case 4: case 6: case 9: case 11: cout << "tháng này có 30 ngày" ; break; default: cout << “Không có tháng này";
}
7
8
}
Câu lệnh nhảy goto
Ví dụ minh họa
void main() {
// đây là nhãn để chương trình quay lại
label:
// dịch m sang phải 1 bit tức m = m / 2 // dịch m sang trái 1 bit tức m = m * 2 // quay lại nếu m<>0
(cid:122) Cú pháp: goto
long m, n, kq = 0; // Các số cần nhân và kết quả kq cout << “Nhập m và n: “ ; cin >> m >> n ; lap: if (m%2) kq += n; // nếu m lẻ thì cộng thêm n vào kq m = m >> 1; n = n << 1; if (m) goto lap; cout << “m nhân n =” << kq ;
}
9
10
Lệnh lặp for
Ví dụ minh họa lệnh lặp for
void main() {
// Các số cần nhân và kết quả kq
(cid:122) for (
lặp>;
long m, n, kq; cout << “Nhập m và n: “ ; cin >> m >> n ; for (kq = 0 ; m ; m >>= 1, n <<= 1)
if (m%2) kq += n ;
cout << “m nhân n =” << kq ;
}
cách nhau bởi dấu phảy (,)
(cid:122) Điều kiện lặp là biểu thức lôgic
(cid:122) Hoạt động: Thực hiện
11
12
hiện
2
Ví dụ minh họa lệnh lặp for
Lệnh lặp while
(cid:122) Cú pháp:
13
14
void main()
{ while (<điều kiện>) {
Ví dụ lệnh lặp while
Ví dụ lệnh lặp while
// Tìm UCLN theo thuật toán Euclide
void main() // Bài toán cổ 100 chân, 36 con vừa gà vừa chó {
void main()
{
int m, n, r;
cout << "Nhập m, n: " ; cin >> m >> n ;
if (m < n) { int t = m; m = n; n = t; }// nếu m int g, c ;
g = 0 ;
while (g <= 36) {
c = 0 ;
while (c <= 50) { if (g + c == 36 && 2*g + 4*c == 100) r = m - n ;
if (r > n) m = r; else { m = n ; n = r ; } cout << g << c ; c++; }
g++; }
cout << "UCLN = " << m ;
} } 15 16 } (cid:122) Tìm nghiệm xấp xỉ của phương trình ex - 1.5 = 0, trên đoạn [0, 1]
với độ chính xác 10-6 bằng phương pháp chia đôi. void main()
{ // các điểm mút a, b và điểm giữa c
// giá trị của f(x) tại các điểm a, c
// trong khi độ dài đoạn còn lớn hơn e float a = 0, b = 1, c;
float fa, fc;
while (b-a > 1.0e-6)
{ // tìm điểm c giữa đoạn [a,b] // f(c) = 0 tức c là nghiệm c = (a + b)/2;
fa = exp(a) - 1.5; fc = exp(c) - 1.5; // tính f(a) và f(c)
if (fa*fc == 0) break;
if (fa*fc > 0) a = c; else b = c; }
cout << "Nghiem xap xi cua phuong trinh = " << c ; } 17 18 (cid:122) Cú pháp: do { (cid:122) Tính xấp xỉ số π theo công thức Euler 2 6 − với = + + ... ++ 1
2 10
<
n π
6 1
2
1 1
2
2 1
2
3 1
2
n void main()
{ (cid:122) break dùng để thoát ra khỏi một khối lệnh (tức là tập các lệnh nằm trong {}) (cid:122) continue dùng để quay lại đầu vòng lặp
mà không cần thực hiện hết tất cả các
lệnh trong khối lệnh lặp } 19 20 (cid:122) for thường được sử dụng trong những
vòng lặp mà số lần lặp được biết trước
(cid:122) Ngược lại với for, while và do…while if (i là số chính phương) continue;
{ // dãy lệnh khác .
. } thường dùng trong các vòng lặp mà số lần
lặp không biết trước (cid:122) Ngược lại với for, while và do…while } 21 22 thường dùng trong các vòng lặp mà số lần
lặp không biết trước 0 1 2 3 4 5 6 7 8 23 24 (cid:122) Mảng là một dãy các phần tử cùng kiểu
được sắp kề nhau liên tục trong bộ nhớ
(cid:122) Các phần tử được đánh số thứ tự để phân biệt (cid:122) Nếu mảng có n phần tử thì các phần tử được đánh số từ 0 đến n-1 (cid:122) 25 26 // Mảng 5 số thực độ chính xác đơn có khởi tạo
float f[] = {0.2, 0.3, 0.0, -4.5, -2.1} void main()
{ void main()
{ // a chứa tối đa 100 số float a[100], i, n, min, k;
cout << "Nhập số phần tử của dãy: " ; cin >> n;
for (i=0; i cout << "a[" << i << "] = " ; cin >> a[i]; }
min = a[0]; k = 0;
for (i=1; i int a[2], b[2], tong[2], tich[2] ;
cout << "Nhập a. Tử = " ; cin >> a[0] ;
cout << "mẫu = " ; cin >> a[1] ;
cout << "Nhập b. Tử = " ; cin >> b[0] ;
cout << "mẫu = " ; cin >> b[1] ;
tong[0] = a[0]*b[1] + a[1]*b[0] ; tong[1] = a[1] * b[1] ;
tich[0] = a[0]*b[0]; tich[1] = a[1] * b[1] ;
cout << "Tổng = " << tong[0] << '/' << tong[1] ;
cout << "Tích = " << tich[0] << '/' << tich[1] ; } } 27 28 // Khai báo xâu độ dài 80, không khởi tạo
char tenfile[80]; 29 30 // không khởi tạo (cid:122) Là mảng có kiểu các phần tử là char
(cid:122) Khai báo:
char (cid:122) strcmp(s, t): So sánh hai xâu s và t: (cid:123)Nếu s < t thì trả lại kết quả âm
(cid:123)Nếu s == t hàm trả kết quả bằng 0
(cid:123)Nếu s > t hàm trả kết quả dương #include (cid:122) strcat(s, t): Nối xâu t vào xâu s
(cid:122) strncat(s, t, n): Nối n ký tự đầu tiên của xâu (cid:122) strncmp(s, t, n): Giống strcmp nhưng chỉ
thao tác với n ký tự đầu tiên của hai xâu
(cid:122) strcmpi(s, t): Giống strcmp nhưng không t vào xâu s 31 32 phân biệt chữ hoa và chữ thường
(cid:122) strlen(s): Trả lại độ dài của xâu s // Khai báo ma trận kích thước 10x20
double matran[10][20];
// Chỉ số hàng chạy từ 0..9
// Chỉ số cột chạy từ 0..19 (cid:122) Các câu lệnh rẽ nhánh và lặp
(cid:122) Sự khác nhau giữa các câu lệnh if..else và switch (cid:122) Khai báo:
33 34 (cid:122) Sự khác nhau giữa for, while và do…while
(cid:122) Cách sử dụng break và continue
(cid:122) Mảng 1 chiều, 2 chiều
(cid:122) Xâu ký tự, các hàm thư viện thao tác xâu ký tự 35 (cid:122) 45 bài tập từ trang 78 đến trang 82 trong tập bài giảng (cid:122) Giải các bài tập trên trong giờ thực hànhVí dụ lệnh lặp while
Lệnh lặp do…while
3
Ví dụ câu lệnh do…while
Các lệnh break và continue
int n = 1; float S = 0;
do S += 1.0/(n*n) while 1.0/(n*n) < 1.0e-6;
float pi = sqrt(6*S);
cout << "pi = " << pi ;
So sánh cách dùng các câu lệnh lặp
Ví dụ lệnh continue
// Tìm các số chính phương trong khoảng 1..100
int i ;
for (i = 1; i <= 100; i++) {
Mảng một chiều
Mảng (Bảng) và xâu ký tự
4
Khai báo mảng
Ví dụ về khai báo mảng
] ; int a[10]; // Mảng 10 số nguyên không khởi tạo // không khởi tạo (cid:122) ] = { dãy giá trị } ; // có khởi tạo // Mảng 3 số thực độ chính xác kép có khởi tạo
double b[3] = {1.0, 2.0, -3.4}; (cid:122) Ví dụ: Tính tổng, tích của hai phân số
Ví dụ: Tìm số bé nhất trong một dãy
Xâu ký tự
Ví dụ khai báo xâu ký tự
5
Một số hàm xử lý xâu ký tự (1)
Một số hàm xử lý xâu ký tự (2)
Mảng hai chiều
Các vấn đề cần nhớ
Bài tập
6