TUN T Lnh 1 Lnh 2 Lnh 3

  • Slides: 48
Download presentation

* TUẦN TỰ Lệnh 1; Lệnh 2; Lệnh 3; …. RẼ NHÁNH CÓ ĐIỀU

* TUẦN TỰ Lệnh 1; Lệnh 2; Lệnh 3; …. RẼ NHÁNH CÓ ĐIỀU KIỆN if if … else LỰA CHỌN switch … case LẶP for while do … while 2

* Tuâ n tư thư c thi tiê n tri nh, mô i lê

* Tuâ n tư thư c thi tiê n tri nh, mô i lê nh đươ c thư c thi theo mô t chuô i tư trên xuô ng, xong lê nh na y rô i chuyê n xuô ng lê nh kê tiê p. 3

 void main() { int a, b, tong, hieu, tich; float thuong; printf(“Nhap vao

void main() { int a, b, tong, hieu, tich; float thuong; printf(“Nhap vao a: “); scanf(“%d”, &a); printf("Nhap vao b: “); scanf(“%d”, &b); tong = a + b; hieu = a b; tich = a * b; thuong = (float)a / b; //Ép kiểu printf("Tong=%d ", tong); printf(“n. Hieu=%d“, hieu); printf(“n. Tich=%d“, tich); printf(“n. Thuong= %f“, thuong); 4 }

* *Cấu trúc rẽ nhánh chỉ cho máy tính chọn thực hiện một dãy

* *Cấu trúc rẽ nhánh chỉ cho máy tính chọn thực hiện một dãy lệnh nào đó dựa vào kết quả của một điều kiện (biểu thức quan hệ hay biểu thức so sánh) *Gồm 2 dạng: Chỉ xét trường hợp đúng if (biê u thư c điê u kiê n) { <khô i lê nh> ; } Nê u biê u thư c điê u kiê n cho kê t qua true thi thư c hiê n khô i lê nh bên trong if. 5

Vi du : Viết chương trình nhập vào một số nguyên từ 1 đến

Vi du : Viết chương trình nhập vào một số nguyên từ 1 đến 10, nếu nhập sai thì thông báo void main() { int k; printf(“Nhap mot so [1. . 10]: “); scanf(“%d”, &k); if (k < 1 || k > 10) { printf("So vua nhap khong hop le“); } } 6

Xét cả hai trường hợp đúng và sai: if (biê u thư c điê

Xét cả hai trường hợp đúng và sai: if (biê u thư c điê u kiê n) { <khô i lê nh 1>; } else { <khô i lê nh 2>; } Nê u biê u thư c điê u kiê n cho kê t qua true thi thư c hiê n khô i lê nh 1, ngươ c la i thi cho thư c hiê n khô i lê nh thư 2 7

Ví dụ 1: Nhập vào số nguyên a và b, nếu a là bội

Ví dụ 1: Nhập vào số nguyên a và b, nếu a là bội số của b thì in thông báo “a là bội số của b”, ngược lại in “a khong la boi so cua b” printf(“Nhap vao a: “); scanf(“%d”, &a); printf(“Nhap vao b: “); scanf(“%d”, &b); if(a%b==0) else { printf(“a khong la boi so cua b“); } { printf(“a la boi so cua b“); 8 }

Cài đặt void main() { int a, b; printf("Nhap vao a: "); scanf("%d", &a);

Cài đặt void main() { int a, b; printf("Nhap vao a: "); scanf("%d", &a); printf("Nhap vao b: "); scanf("%d", &b); if(a%b==0) printf("%d la boi so cua %d", a, b); else printf("%d khong la boi so cua %d", a, b); } 9

Vi du 2: Gia i va biê n luâ n phương tri nh: ax+b=0

Vi du 2: Gia i va biê n luâ n phương tri nh: ax+b=0 10

void main() { float a, b; printf("Nhap vao a: "); scanf("%f", &a); printf("Nhap vao

void main() { float a, b; printf("Nhap vao a: "); scanf("%f", &a); printf("Nhap vao b: "); scanf("%f", &b); if (a==0) if (b==0) printf("Phuong trinh vo so nghiem"); else printf("Phuong trinh vo nghiem"); else printf("Phuong trinh co nghiem x = %. 2 f", -b/a); } 11

* int a=9, b=6; a++; a=a+b ; a=a+( b); if(a%2==0) printf(“Gia tri cua a

* int a=9, b=6; a++; a=a+b ; a=a+( b); if(a%2==0) printf(“Gia tri cua a la chan”); printf(“Tong cua a va b la: %d“, a + b); 12

int a=7, b=8; a++; a=a+b ; b; a = ( a)+( b); if(a%2 !=

int a=7, b=8; a++; a=a+b ; b; a = ( a)+( b); if(a%2 != 0) printf(“a la so le”); else printf(“a la so chan”; Printf(“Gia tri cua a: %d“, a); 13

* 1. Nhâ p va o hai sô nguyên a, b. In ra ma

* 1. Nhâ p va o hai sô nguyên a, b. In ra ma n hi nh gia tri lơ n nhâ t. 2. Cho ba sô a, b, c đo c va o tư ba n phi m. Ha y ti m gia tri lơ n nhâ t cu a ba sô trên va in ra kê t qua. 3. Cho ba sô a, b, c đo c va o tư ba n phi m. Ha y in ra ma n hi nh theo thư tư tăng dâ n ca c sô. (Chi đươ c du ng thêm hai biê n phu ). 4. Viê t chương tri nh nhâ p va o mô t sô nguyên n gô m ba chư sô. Xuâ t ra ma n hi nh chư sô lơ n nhâ t ơ vi tri na o? Vi du : n=291. Chư sô lơ n nhâ t nă m ơ ha ng chu c (chữ số 9). 14

5. Viê t chương tri nh nhâ p va o sô nguyên n gô

5. Viê t chương tri nh nhâ p va o sô nguyên n gô m ba chư sô. Xuâ t ra ma n hi nh theo thư tư tăng dâ n cu a ca c chư sô. Vi du : n=291. Xuâ t ra 129. 6. Nhâ p va o nga y, tha ng, năm. Kiê m tra xem nga y, tha ng, năm đo co hơ p lê hay không? In kê t qua ra ma n hi nh. 7. Nhâ p va o giơ , phu t, giây. Kiê m tra xem giơ , phu t, giây đo co hơ p lê hay không? In kê t qua ra ma n hi nh. 8. Viê t chương tri nh nhâ p va o nga y, tha ng, năm hơ p lê. Cho biê t năm na y co pha i la năm nhuâ n hay không? In kê t qua ra ma n hi nh. 9. Viê t chương tri nh ti nh diê n ti ch va chu vi ca c hi nh: tam gia c, hi nh vuông, hi nh chư nhâ t va hi nh tro n vơ i như ng thông tin câ n đươ c nhâ p tư 15 ba n phi m.

10. Viê t chương tri nh tiê n cươ c TAXI. Biê t ră

10. Viê t chương tri nh tiê n cươ c TAXI. Biê t ră ng: km đâ u tiên la 13000đ. Mỗi km tiếp theo la 12000đ. Nê u lơ n hơn 30 km thi mô i km thêm se la 11000đ. Ha y nhâ p sô km sau đo in ra sô tiê n pha i tra. 11. Nhâ p va o 3 sô nguyên dương. Kiê m tra xem 3 sô đo co lâ p tha nh tam gia c không? Nê u co ha y cho biê t tam gia c đo thuô c loa i na o? (Cân, vuông, đê u, …). 12. Viê t chương tri nh nhâ p va o sô nguyên dương n. Kiê m tra xem n co pha i la sô chi nh phương hay không? (sô chi nh phương la sô khi lâ y căn bậc 2 co kê t qua la nguyên). 16

* switch (biê u thư c) case n 1: Trường hợp giá trị biểu

* switch (biê u thư c) case n 1: Trường hợp giá trị biểu thức ca c câu lê nh ; bằng n 1 break ; case n 2: Trường hợp giá trị biểu thức ca c câu lê nh ; bằng n 2 break ; ……… case nk: <ca c câu lê nh> ; break ; [default: ca c câu lê nh] 17 Các trường hợp còn lại

Với: *ni la ca c hă ng sô nguyên hoặc ky tư. *Phu thuô

Với: *ni la ca c hă ng sô nguyên hoặc ky tư. *Phu thuô c va o gia tri cu a biê u thư c viê t sau switch, nê u: *Gia tri na y = ni thư c hiê n câu lê nh sau case ni. *Khi gia tri biê u thư c không tho a tâ t ca ca c ni thư c hiê n câu lê nh sau default nê u co , hoă c thoa t kho i câu lê nh switch. *Khi chương tri nh đa thư c hiê n xong câu lê nh cu a case ni na o đo thi no se thư c hiê n luôn ca c lê nh thuô c case bên dươ i no ma không xe t la i điê u kiê n (do ca c ni đươ c xem như ca c nha n) Vi vâ y, đê chương tri nh thoa t kho i lê nh switch sau khi thư c hiê n xong mô t trươ ng hơ p, ta du ng lê nh break. 18

Ví dụ: Nhập vào số nguyên n có giá trị từ 1 đến 5.

Ví dụ: Nhập vào số nguyên n có giá trị từ 1 đến 5. In cách đọc của số đó ra màn hình. void main() { int n; cout<<"Nhap vao n (1<=n<=5): “; cin>>n; switch (n) { case 1: printf("So mot”); break; case 2: printf("So hai“); break; case 3: printf("So ba”); break; case 4: printf("So bon”); break; case 5: printf("So nam”); break; default : printf("Khong doc duoc“); } 19 }

* 13. Viết chương trình nhập vào 1 số nguyên dương gồm 3 chữ

* 13. Viết chương trình nhập vào 1 số nguyên dương gồm 3 chữ số, in ra cách đọc của số này 14. Viết chương trình nhập vào ngày tháng năm, kiểm tra xem ngày tháng năm có hợp lệ không? In kết quả kiểm tra ra màn hình 20

* 21

* 21

* for (<khởi gán> ; <điều kiện lặp> ; <cập nhật>) { <khô i

* for (<khởi gán> ; <điều kiện lặp> ; <cập nhật>) { <khô i lê nh>; } * Khởi gán: Dùng để khởi gán giá trị ban đầu cho vòng lặp * Điều kiện lặp: Dùng để kiểm tra điều kiện trước khi thực hiện vòng lặp * Cập nhật: Dùng để cập nhật vòng lặp (tăng hoặc giảm chỉ số lặp) Bâ t ky biê u thư c na o trong 3 biê u thư c no i trên đê u co thê vă ng nhưng pha i giư dâ u châ m phâ y (; ) 22

* 23

* 23

*Bươ c 1: Khơ i ga n *Bươ c 2: Kiê m tra điê

*Bươ c 1: Khơ i ga n *Bươ c 2: Kiê m tra điê u kiê n ― Nê u điều kiện bằng true thi cho thư c hiê n ca c lê nh cu a vo ng lă p, thư c hiê n cập nhật vòng lặp. Quay trơ la i bươ c 2. ― Ngươ c la i thoa t kho i lă p. 24

Vi du : In ra ma n hi nh 10 dòng chữ “Xin chao”

Vi du : In ra ma n hi nh 10 dòng chữ “Xin chao” 25

void main() { for (int i = 1; i<= 10; i++) printf("Xin chaon“); }

void main() { for (int i = 1; i<= 10; i++) printf("Xin chaon“); } 26

*Vi du : Ti nh tô ng: , vơ i n>0 27

*Vi du : Ti nh tô ng: , vơ i n>0 27

void main() { int n, s=0; printf("Nhap so nguyen duong n: “); scanf(“%d”, &n);

void main() { int n, s=0; printf("Nhap so nguyen duong n: “); scanf(“%d”, &n); for(int i=1; i<=n; i++) s=s+i; printf(“Tong =%d “, s); } 28

* < Khơ i ga n> while ( <điê u kiê n lặp>) lê

* < Khơ i ga n> while ( <điê u kiê n lặp>) lê nh/ khô i lê nh; <cập nhật> Lưu y : Ca ch hoa t đô ng cu a while giô ng for 29

Vi du : In ra ma n hi nh 10 dòng chữ “Xin chao”

Vi du : In ra ma n hi nh 10 dòng chữ “Xin chao” void main() { int i = 1; while(i <= 10) { printf(“Xin chaon“); i++; } } 30

* < Khơ i ga n> do { <khô i lê nh>; <cập nhật>;

* < Khơ i ga n> do { <khô i lê nh>; <cập nhật>; } while (điê u kiê n); 31

* Thư c hiê n khô i lê nh cho đê n khi biê

* Thư c hiê n khô i lê nh cho đê n khi biê u thư c co gia tri bă ng false. Cấu trúc lặp do…while thường dùng cho trường hợp nhập có kiểm tra điều kiện 32

Vi du : Nhập vào một số nguyên dương, nếu nhập sai thì thông

Vi du : Nhập vào một số nguyên dương, nếu nhập sai thì thông báo lỗi và yêu cầu nhập lại. void main() { int n; do { printf(“Nhap vao mot so nguyen duong: “); scanf(“%d”, &n); if (n <= 0) printf(“Nhap sai, hay nhap lai!n”; } while (n <= 0); printf(“Ban da nhap dung, ket thuc chuong trinh”); 33 }

 Ngược lại với cấu trúc lặp for và while (kiê m tra điê

Ngược lại với cấu trúc lặp for và while (kiê m tra điê u kiê n trươ c khi thư c hiê n lă p), vo ng lă p do…while thư c hiê n lê nh lă p rô i mơ i kiê m tra điê u kiê n. Do đo vo ng lă p do. . . while thư c hiê n lê nh i t nhâ t mô t lâ n. 34

* * Lệnh break: thoát khỏi các cấu trúc switch, while, for, do…while chứa

* * Lệnh break: thoát khỏi các cấu trúc switch, while, for, do…while chứa nó gần nhất (đang chứa break) tại thời điểm break được gọi thi hành mà không cần kiểm tra kết quả của biểu thức điều kiện. * Tuy nhiên, cần phân biệt với lệnh return là lệnh trả về từ hàm, nghĩa là thoát khỏi hàm đang thi hành, nên cũng giúp thoát luôn khỏi tất cả các vòng lặp. 35

* Lệnh continue: được sử dụng trong các vòng lặp như while, for, do…while.

* Lệnh continue: được sử dụng trong các vòng lặp như while, for, do…while. Khi lệnh continue được gọi thì chương trình sẽ quay trở về đầu vòng lặp để bắt đầu lần lặp mới (có kiểm tra điều kiện lặp để xác định có lặp tiếp hay không). Nếu có các lệnh còn lại (cùng trong vòng lặp) đặt sau continue sẽ không được thực hiện. Nói tóm lại, lệnh continue dùng để bỏ qua một lần lặp nào đó nếu thỏa điều kiện. 36

Ví dụ: Cho phép người dùng nhập liên tục số nguyên dương, nếu nhập

Ví dụ: Cho phép người dùng nhập liên tục số nguyên dương, nếu nhập số nguyên âm thì dừng void main() { int n; while (true) { printf(“Nhap gia tri n: “); scanf(“%d”, &n); if (n <= 0) { printf(“Ket thuc vong lap”); break; } } 37

Vi du : In ra ma n hi nh gia tri tư 10 đê

Vi du : In ra ma n hi nh gia tri tư 10 đê n 20 trư đi sô 13 va sô 17. void main() { for (int k = 10; k <= 20; k++) { if (k == 13 || k == 17) continue; printf(“%dt”, k); } } 38

* int a=18; for(int i = 1; i <= a; i++) if(a%i == 0)

* int a=18; for(int i = 1; i <= a; i++) if(a%i == 0) printf(“%dt”, i); for(int i = 0; i < 5; i++) { for(int j = 0; j <= i; j++) printf(“%dt”, j); printf(“n”); } 39

int i = 10, s = 0; while(i > 0) { if(i%2 == 0)

int i = 10, s = 0; while(i > 0) { if(i%2 == 0) s+=i; else if(i > 5) s+=2*i; i ; } printf(“s = %d”, s); 40

int a = 18, i = 1; do{ if(a%i == 0) printf(“%dt”, i); i++;

int a = 18, i = 1; do{ if(a%i == 0) printf(“%dt”, i); i++; } while(i <= a); 41

int a = 11, b = 16, i = a; while( i < b

int a = 11, b = 16, i = a; while( i < b ) { if(i%2 == 0) { printf(“%dt”, i); break; } i++; } 42

int a = 10, s = 0, i = 0; while( i < a

int a = 10, s = 0, i = 0; while( i < a ) { i++; if (i % 2 == 0) continue; s=s+i; } printf(“Tong = %d" , s); 43

int i = 1, s = 0; while(true) { s = s + i++;

int i = 1, s = 0; while(true) { s = s + i++; if (i % 2) i = i + 2; else i = i + 1; if (i > 20) break; } printf(“Tong = %d" , s); 44

15. Viê t chương tri nh nhâ p sô nguyên dương n. Liê t

15. Viê t chương tri nh nhâ p sô nguyên dương n. Liê t kê n sô nguyên tô đâ u tiên. 16. Viê t chương tri nh nhâ p va o hai sô nguyên dương a va b. Ti m ươ c sô chung lơ n nhâ t va bô i sô chung nho nhâ t cu a a va b. 17. Viê t chương tri nh nhâ p va o mô t sô nguyên n gô m tô i đa 10 chư sô (4 bytes). In ra ma n hi nh gia tri nhi phân cu a sô trên. (Hươ ng dâ n: chia lâ y dư cho 2 va xuâ t theo thư tư ngươ c la i). 18. Viê t chương tri nh đê m sô ươ c sô cu a sô nguyên dương N. Vi du : N=12 sô ươ c sô cu a 12 la 6 45

19. Mô t sô hoa n thiê n la mô t sô co tô

19. Mô t sô hoa n thiê n la mô t sô co tô ng ca c ươ c sô cu a no (không kê no ) bă ng chi nh no. Ha y liê t kê ca c sô hoa n thiê n nho hơn 30000. Vi du : sô 6 la sô ho an thiê n vi tô ng ca c ươ c sô la 1+2+3 = 6. 20. Nhâ p va o nga y, tha ng, năm. Cho biê t đo la nga y thư mâ y trong năm. 21. In ra da y sô Fibonaci * f 1 = f 0 =1; * fn = fn 1 + fn 2 ; (n>1) 46

* *Xác định xem chương trình có sử dụng những biến nào; *Giá trị

* *Xác định xem chương trình có sử dụng những biến nào; *Giá trị ban đầu của mỗi biến; *Những biến nào sẽ bị thay đổi trong quá trình chạy chương trình thì lập thành bảng có dạng sau: Bước (hoặc lần lặp hoặc dòng Biến 1 Biến 2 lệnh thực hiện) 0 Giá trị 0 1 Giá trị 1 2 Giá trị 2. . . … … … Lưu ý từng lệnh và xét kỹ giá 47 trong đoạn chương trình … Biến k Kết quả trả về (hoặc in ra màn hình) … Giá trị 0 … Giá trị 1 … Giá trị 2 … … trị của biểu thức điều kiện

* *Dùng để xác định lỗi logic (lỗi giải thuật) trong chương trình. Mă

* *Dùng để xác định lỗi logic (lỗi giải thuật) trong chương trình. Mă c du chương tri nh không co n lô i nhưng khi cha y chương tri nh vâ n ra kê t qua sai, như ng lô i đo co thê la : *Du ng châ m phâ y sau: if, else, for, while mà chưa thực hiê n lê nh; *Không dùng cặp dấu ngoặc ({}) để bao khối lệnh; *Khai ba o sai kiê u dư liê u, không ép kiểu dữ liệu; *Chia cho 0; *Không co điê u kiê n dư ng (điê u kiê n dư ng sai); *Phân ti ch giải thuâ t thiê u (chưa ve t hê t ca c trươ ng hơ p) hoă c sai; 48