Bài giảng Nhập môn lập trình - Chủ đề 3: Các cấu trúc điều khiển - Phần 2: Câu lệnh lặp

pdf 48 trang phuongnguyen 5850
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Nhập môn lập trình - Chủ đề 3: Các cấu trúc điều khiển - Phần 2: Câu lệnh lặp", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_nhap_mon_lap_trinh_chu_de_3_cac_cau_truc_dieu_khie.pdf

Nội dung text: Bài giảng Nhập môn lập trình - Chủ đề 3: Các cấu trúc điều khiển - Phần 2: Câu lệnh lặp

  1. NHẬP MÔN LẬP TRÌNH CÂU LỆNH LẶP 1
  2. Nội dung 1 Câu lệnh for 2 Câu lệnh while 3 Câu lệnh do while 4 Mộtsố kinh nghiệmlậptrình Câu lệnh lặp 2
  3. && VCVC BBBB Đặtvấn đề ™Ví dụ ƒ Viếtchương trình xuấtcácsố từ 1 đến 10 => Sử dụng 10 câu lệnh printf ƒ Viếtchương trình xuấtcácsố từ 1 đến 1000 => Sử dụng 1000 câu lệnh printf ! ™Giải pháp ƒ Sử dụng cấutrúclặp lạimột hành động trong khi còn thỏamột điềukiện nào đó. ƒ 3 lệnh lặp: for, while, do while Câu lệnh lặp 3
  4. Câu lệnh for Đ S for ( ; ; ) ; , , : là biểuthứcC bấtkỳ có chứcnăng riêng : đơn hoặckhốilệnh. Câu lệnh lặp 4
  5. Câu lệnh for void main() { int i; for (i = 0; i < 10; i++) printf(“%d\n”, i); for (int j = 0; j < 10; j = j + 1) printf(“%d\n”, j); for (int k = 0; k < 10; k += 2) { printf(“%d”, k); printf(“\n”); } } Câu lệnh lặp 5
  6. && VCVC BBBB Câu lệnh for - Mộtsố lưu ý ™Câu lệnh for là một câu lệnh đơn và có thể lồng nhau. Câu lệnh lặp 6
  7. && VCVC BBBB Câu lệnh for - Mộtsố lưu ý ™Trong câu lệnh for, có thể sẽ không có phần int i; for (i = 0; i int i = 0; for (; i S Câu lệnh lặp 7
  8. && VCVC BBBB Câu lệnh for - Mộtsố lưu ý ™Trong câu lệnh for, có thể sẽ không có phần int i; for (i = 0; i for (i = 0; i { Đ printf(“%d\n”, i); i++; } S Câu lệnh lặp 8
  9. && VCVC BBBB Câu lệnh for - Mộtsố lưu ý ™Trong câu lệnh for, có thể sẽ không có phần int i; for (i = 0; i = 10) break; printf(“%d\n”, i); } Câu lệnh lặp 9
  10. && VCVC BBBB Câu lệnh for - Mộtsố lưu ý ™Lệnh break làm kếtthúccâulệnh lặp. ™Lệnh continue bỏ qua lầnlặphiệntại. for (i = 0; i < 10; i++) { if (i % 2 == 0) break; printf(“%d\n”, i); } for (i = 0; i < 10; i++) { if (i % 2 == 0) continue; printf(“%d\n”, i); } Câu lệnh lặp 10
  11. && VCVC BBBB Câu lệnh for - Mộtsố lưu ý ™Không được thêm ; ngay sau lệnh lệnh for. => Tương đương câu lệnh rỗng. for (i = 0; i < 10; i++); { printf(“%d”, i); printf(“\n”); } for (i = 0; i < 10; i++) { }; { printf(“%d”, i); printf(“\n”); } Câu lệnh lặp 11
  12. && VCVC BBBB Câu lệnh for - Mộtsố lưu ý ™Các thành phần , , cách nhau bằng dấu ; ™Nếucónhiều thành phần trong mỗiphầnthì được cách nhau bằng dấu , for (int i = 1, j = 2; i + j < 10; i++, j += 2) printf(“%d\n”, i + j); Câu lệnh lặp 12
  13. Câu lệnh while Đ S BiểuthứcC bấtkỳ, thường là biểuthức quan hệ cho kếtquả while ( ) 0 (sai) và != 0 (đúng) ; Câu lệnh đơn hoặc Câu lệnh phức(kẹp giữa { và }) Câu lệnh lặp 13
  14. Câu lệnh while int i = 0; while (i < 10) { printf(“%d\n”, i); i++; } for (int i = 0; i < 10; i++) printf(“%d\n”, i); int i = 0; for (; i < 10; ) { printf(“%d\n”, i); i++; } Câu lệnh lặp 14
  15. && VCVC BBBB Câu lệnh while - Mộtsố lưu ý ™Câu lệnh while là một câu lệnh đơn và có thể lồng nhau. Câu lệnh lặp 15
  16. && VCVC BBBB Câu lệnh while - Mộtsố lưu ý ™Câu lệnh while có thể không thựchiệnlần nào do điềukiệnlặp ngay từ lần đầu đã không thỏa. void main() { int n = 1; while (n > 10) { printf(“%d\n”, n); n ; } } Câu lệnh lặp 16
  17. && VCVC BBBB Câu lệnh for - Mộtsố lưu ý ™Không được thêm ; ngay sau lệnh lệnh while. int n = 0; while (n < 10); { printf(“%d\n”, n); n++; } while (n < 10) { }; { printf(“%d\n”, n); n++; } Câu lệnh lặp 17
  18. && VCVC BBBB Câu lệnh while - Mộtsố lưu ý ™Câu lệnh while có thể bị lặpvôtận(loop) void main() { int n = 1; while (n < 10) { printf(“%d”, n); n ; } n = 1; while (n < 10) printf(“%d”, n); } Câu lệnh lặp 18
  19. Câu lệnh do while Đ S Câu lệnh đơn hoặc Câu lệnh phức(kẹp do giữa { và }) ; BiểuthứcC bấtkỳ, while ( ); thường là biểuthức quan hệ cho kếtquả 0 (sai) và != 0 (đúng) Câu lệnh lặp 19
  20. Câu lệnh do while int i = 0; do { printf(“%d\n”, i); i++; } while (i < 10); int i = 0; printf(“%d\n”, i); i++; for (; i < 10; ) { printf(“%d\n”, i); i++; } Câu lệnh lặp 20
  21. && VCVC BBBB Câu lệnh do while - Mộtsố lưu ý ™Câu lệnh do while là một câu lệnh đơn và có thể lồng nhau. int a = 1, b; do { b = 1; do { printf(“%d\n”, a + b); b = b + 2; } while (b < 20); a++; } while (a < 20); Câu lệnh lặp 21
  22. && VCVC BBBB Câu lệnh do while - Mộtsố lưu ý ™Câu lệnh do while sẽđượcthựchiệnítnhất1 lần do điềukiệnlặp được kiểmtraở cuối. void main() { int n; do { printf(“Nhap n: ”); scanf(“%d”, &n); } while (n 100); } Câu lệnh lặp 22
  23. && VCVC BBBB Câu lệnh do while - Mộtsố lưu ý ™Câu lệnh do while có thể bị lặpvôtận(loop) int n = 1; do { printf(“%d”, n); n ; } while (n < 10); n = 1; do printf(“%d”, n); while (n < 10); Câu lệnh lặp 23
  24. && VCVC BBBB for, while, do while ™Đềucókhả năng lặplại nhiều hành động. int n = 10; for (int i = 1; i <= n; i++) printf(“%d\n”, i); int i = 1; while (i <= n) { printf(“%d\n”, i); i++; } int i = 1; do { printf(“%d\n”, i); i++; } while (i < n); Câu lệnh lặp 24
  25. && VCVC BBBB for, while, do while ™Số lầnlặpxácđịnh ngay trong câu lệnh for int n = 10; for (int i = 1; i n); Câu lệnh lặp 25
  26. && VCVC BBBB while & do while ™while có thể không thựchiệnlần nào. ™do while sẽđượcthựchiệnítnhất1 lần. int n = 100; while (n 10); Câu lệnh lặp 26
  27. && VCVC BBBB Bài tập 1. Nhậpmộtsố nguyên dương n (n > 0). Hãy cho biết: a. Có phảilàsốđốixứng? Ví dụ: 121, 12321, b. Có phảilàsố chính phương? Ví dụ: 4, 9, 16, c. Có phảilàsố nguyên tố? Ví dụ: 2, 3, 5, 7, d. Chữ số lớnnhấtvànhỏ nhất? e. Các chữ số có tăng dần hay giảmdần không? Câu lệnh lặp 27
  28. && VCVC BBBB Bài tập 2. Nhậpmộtsố nguyên dương n. Tính: a. S = 1 + 2 + + n b. S = 12 + 22 + + n2 c. S = 1 + 1/2 + + 1/n d. S = 1*2* *n = n! e. S = 1! + 2! + + n! 3. Nhập3 số nguyên a, b và n với a, b < n. Tính tổng các số nguyên dương nhỏ hơn n chia hết cho a nhưng không chia hết cho b. 4. Tính tổng các số nguyên tố nhỏ hơn n (0 < n < 28 50) Câu lệnh lặp
  29. && VCVC BBBB Bài tập 5. Nhậpmộtsố nguyên dương n. Xuấtrasố ngượclại. Ví dụ: Nhập 1706 Î Xuất 6071. 6. Tìm và in lên màn hình tấtcả các số nguyên trong phạmvi từ 10 đến 99 sao cho tích của2 chữ số bằng 2 lầntổng của2 chữ sốđó. 7. Tìm ướcsố chung lớnnhấtcủa2 số nguyên dương a và b nhậptừ bàn phím. 8. Nhập n. In n sốđầu tiên trong dãy Fibonacy. a. a0 = a1 = 1 b. an = an–1 + an – 2 Câu lệnh lặp 29
  30. Bài tập1a void main() { int n, sogoc, sodao, donvi; printf(“Nhap n: ”); scanf(“%d”, &n); sogoc = n; sodao = 0; while (sogoc > 0) { donvi = sogoc % 10; sodao = sodao*10 + donvi; sogoc = sogoc / 10; } if (sodao == n) printf(“Doi xung”); else printf(“Khong doi xung”); } Câu lệnh lặp 30
  31. Bài tập1b #include void main() { int n, n_can_nguyen; printf(“Nhap n: ”); scanf(“%d”, &n); n_can_nguyen = int(sqrt(n)); if (n_can_nguyen*n_can_nguyen == n) printf(“%d la so CP”, n); else printf(“%d khong la so CP”, n); } Câu lệnh lặp 31
  32. Bài tập1c void main() { int n, i, souoc; printf(“Nhap n: ”); scanf(“%d”, &n); souoc = 0; for (i = 1; i <= n; i++) if (n % i == 0) souoc++; if (souoc == 2) printf(“%d la so nguyen to”); else printf(“%d ko la so nguyen to”, n); 32 } Câu lệnh lặp
  33. Bài tập1d void main() { int n, min, max, donvi; min = n % 10; max = min; n = n / 10; while (n>0) { donvi = n % 10; n = n / 10; if (donvi max) max = donvi; } printf(“So NN = %d, So LN = %d”, min, max); 33 } Câu lệnh lặp
  34. Bài tập1e void main() { int n, sotruoc, sosau; // Nhậpn sotruoc = n % 10; do { sosau = sotruoc; n = n / 10; sotruoc = n % 10; } while (n != 0 && sotruoc < sosau); if (sotruoc < sosau) printf(“Cac chu so tang dan”); else printf(“Cac chu so ko tang dan”); 34 } Câu lệnh lặp
  35. Bài tập2a void main() { int n, i, s; printf(“Nhap n: ”); scanf(“%d”, &n); s = 0; for (i = 1; i <= n; i++) s = s + i; printf(“1 + 2 + + %d = %d”, n, s); } Câu lệnh lặp 35
  36. Bài tập2b void main() { int n, i, s; printf(“Nhap n: ”); scanf(“%d”, &n); s = 0; for (i = 1; i <= n; i++) s = s + i*i; printf(“1^2 + 2^2 + + %d^2 = %d”, n, s); } Câu lệnh lặp 36
  37. Bài tập2c void main() { int n, i; float s; printf(“Nhap n: ”); scanf(“%d”, &n); s = 0; for (i = 1; i <= n; i++) s = s + 1.0/i; printf(“1 + 1/2 + + 1/%d = %f”, n, s); } Câu lệnh lặp 37
  38. Bài tập2d void main() { int n, i, s; printf(“Nhap n: ”); scanf(“%d”, &n); s = 1; for (i = 2; i <= n; i++) s = s * i; printf(“%d! = %d”, n, s); } Câu lệnh lặp 38
  39. Bài tập2e void main() { int n, i, j, igt, s; printf(“Nhap n: ”); scanf(“%d”, &n); s = 0; for (i = 1; i <= n; i++) { igt = 1; for (j = 2; j <= i; j++) igt = igt * j; s = s + igt; } printf(“1! + 2! + + %d! = %d”, n, s); } Câu lệnh lặp 39
  40. Bài tập3 void main() { int a, b, n, i, s; do { printf(“Nhap a, b, n: ”); scanf(“%d%d%d”, &a, &b, &n); } while (a >= n || b >= n); s = 0; for (i = 1; i <= n – 1; i++) if (i % a == 0 && i % b != 0) s = s + i; printf(“Tong cac thoa yeu cau la %d”, s); } Câu lệnh lặp 40
  41. Bài tập4 void main() { int n, i, j, souoc, s; do { printf(“Nhap n: ”); scanf(“%d”, &n); } while (n = 50); s = 0; for (i = 2; i <= n – 1; i++) { // Đếmsốước củai if (souoc == 2) // Là số nguyên tố s = s + i; } printf(“Tong cac so nt < %d la %d”, n, s); 41 } Câu lệnh lặp
  42. Bài tập5 void main() { int n, donvi; printf(“Nhap n: ”); scanf(“%d”, &n); printf(“So dao cua %d la ”, n); while (n > 0) { donvi = n % 10; n = n / 10; printf(“%d”, donvi); } } Câu lệnh lặp 42
  43. Bài tập6 void main() { int n, i, donvi, chuc; printf(“Cac so thoa yeu cau la: ”); for (i = 10; i <= 99; i++) { donvi = i % 10; chuc = i / 10; if (chuc*donvi == 2*(chuc + donvi)) printf(“%d”, i); } } Câu lệnh lặp 43
  44. && VCVC BBBB Bài tập7 ™Ví dụ: a = 12, b = 8 ™Cách 1: ƒ Cho 1 biếni chạytừ 8 trở về 1, nếucả a và b đều chia hếtchoi thìdừng và i chính là uscln. ƒ 8, 7, 6, 5, 4 => USCLN của 12 và 8 là 4. ™Cách 2: ƒ USCLN của a & b (a khác b), ký hiệu (a, b) là: • (a – b, b) nếu a > b • (a, b – a) nếu b > a ƒ (12, 8) = (4, 8) = (4, 4) = 4 Câu lệnh lặp 44
  45. Bài tập7 void main() { int a, b, uscln; printf(“Nhap a va b: ”); scanf(“%d%d”, &a, &b); if (a < b) uscln = a; else uscln = b; while (a % uscln != 0 || b % uscln != 0) uscln ; printf(“USCLN cua %d va %d la %d”,a, b, uscln); } Câu lệnh lặp 45
  46. Bài tập7 void main() { int a, b; printf(“Nhap a va b: ”); scanf(“%d%d”, &a, &b); while (a b) a = a – b; else b = b – a; } printf(“USCLN cua a va b la %d’, a); } Câu lệnh lặp 46
  47. && VCVC BBBB Bài tập8 ™Dãy Fibonacy: a0 a1 a2 an-2 an-1 an ƒ Vớia0 = a1 = 1, an = an-1 + an-2 ™Ví dụ: 1 1 2 3 5 8 13 21 ™Xuấtn phầntửđầu tiên của dãy Fibonacy ƒ n = 1 => 1, n = 2 => 11 ƒ n > 2 •Lưu lại2 phầntử trước nó là a và b •Mỗilần tính xong cậpnhậtlạia vàb. ™Nên thêm 2 phầntửảo đầu tiên là a-2, a-1 ƒ 1 0 1 1 2 3 5 8 13 21 Câu lệnh lặp 47
  48. Bài tập8 void main() { int n, an, an1, an2, i; printf(“Nhap n: ”); scanf(“%d”, &n); an2 = 1; an1 = 0; printf(“%d phan tu dau tien cua day: “, n); for (i = 1; i <= n; i++) { an = an2 + an1; printf(“%d ”, an); an2 = an1; an1 = an; } 48 } Câu lệnh lặp