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 : []; ……………...: ...............; case : []; [default: dãy lệnh n+1;]

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 (cid:122) Nhãn là một tên gọi trong chương trình do người lập trình đặt tên (cid:122) Cách viết nhãn:

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 ;

(cid:122) Hạn chế dùng câu lệnh goto vì nếu lạm dụng câu lệnh này sẽ làm cho chương trình trở nên khó hiểu, dễ sinh lỗi

}

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 (;<điều kiện

lặp>;) { ;} (cid:122) Các biểu thức trong các dãy biểu thức 1, 2

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 (cid:122) kiểm tra <điều kiện lặp>, nếu đúng thực

11

12

hiện , thực hiện , quay lại kiểm tra <điều kiện lặp>..

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>) { ; } (cid:122) Hoạt động: Lặp lại trong khi <điều kiện> đúng. (cid:122) có thể không được thực int i, kq = 0; for (i = 1 ; i <= 100 ; i ++) kq += i ; cout << "Tổng = " << kq; hiện lần nào nếu <điều kiện> sai. }

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

}

Ví dụ lệnh lặp while

Lệnh lặp do…while

(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 {} while (<điều kiện>) ; (cid:122) Hoạt động: Thực hiện trong khi <điều kiện> đúng (cid:122) được thực hiện ít nhất một lần

3

Ví dụ câu lệnh do…while

Các lệnh break và continue

(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

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 ;

}

19

20

So sánh cách dùng các câu lệnh lặp

Ví dụ lệnh continue

(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

// Tìm các số chính phương trong khoảng 1..100 int i ; for (i = 1; i <= 100; i++) {

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

Mảng một chiều

Mảng (Bảng) và xâu ký tự

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

4

Khai báo mảng

Ví dụ về khai báo mảng

(cid:122) [] ; 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) [ ] = { dãy giá trị } ; // có khởi tạo

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}

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

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

Xâu ký tự

Ví dụ khai báo xâu ký tự

// 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 [độ dài] ; char [độ dài] = ; // Khai báo xâu độ dài 80, có khởi tạo char tenfile[80] = “autoexec.bat”; // có khởi tạo char [] = xâu kí tự ; // có khởi tạo // Khai báo xâu có khởi tạo char tenfile = “config.sys”; (cid:122) Các xâu ký tự có ký tự kết thúc là ‘\0’

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)

(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) strcpy(s,t): gán nội dung của xâu t cho xâu s (cid:122) strncpy(s, t, n): Sao n ký tự đầu tiên của xâu t vào xâu s

(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

Mảng hai chiều

Các vấn đề cần nhớ

// 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: [m][n]; (cid:122) Ví dụ:

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ự

Bài tập

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ành

6