Bài giảng môn Nhập môn lập trình - Bài 4: Vòng lặp

pdf 46 trang phuongnguyen 3681
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng môn Nhập môn lập trình - Bài 4: Vòng 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_mon_nhap_mon_lap_trinh_bai_4_vong_lap.pdf

Nội dung text: Bài giảng môn Nhập môn lập trình - Bài 4: Vòng lặp

  1. TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP THÀNH PHỐ HỒ CHÍ MINH Nhập môn lập trình Vòng lặp TS. Ngô Hữu Dũng
  2. Câu lệnh for Initialization Increment/ Decrement True Condition Statement(s) False // Syntax of for for (Initialization; Condition; Increment/Decrement) { Statement(s); . . . } 2 Nhập môn lập trình - Vòng lặp
  3. Vòng lặp for  Thực hiện các lệnh lặp đi lặp lại  Bước 1: Bắt đầu vòng lặp – Initialization  Bước 2: Kiểm tra điều kiện lặp – Condition  Nếu điều kiện đúng sang Bước 3  Nếu điều kiện sai sang Bước 6  Bước 3: Thực hiện câu lệnh – Statement(s)  Bước 4: Lệnh tăng/giảm – Increment/Decrement  Để thay đổi điều kiện lặp  Bước 5: Trở lại bước 2  Bước 6: Kết thúc vòng lặp 3 Nhập môn lập trình - Vòng lặp
  4. Ví dụ minh hoạ  Xuất ra màn hình các số từ 0 đến 5  Khởi đầu  i = 0 i = 0  Điều kiện i++  i = 6  Bước nhảy False  i++ 1. for (i = 0; i < 6; i++)  Lệnh 2. { 3. printf("%d\n", i);  Xuất i 4. } 4 Nhập môn lập trình - Vòng lặp
  5. How’s it work? – For loop 0 i = 0 i++ 1 True 2 i < 6 Print i 3 False 4 1. for (i = 0; i < 6; i++) 2. { 5 3. printf("%d\n", i); 4. } i 6105423 5 Nhập môn lập trình - Vòng lặp
  6. Initialization – Khởi đầu  Phần khởi đầu có thể khuyết 1. // Xuất từ 9 đến 0 2. i = 9; 3. for ( ; i >= 0; i ) 4. printf("%d\n", i);  Phần khởi đầu có thể gồm nhiều phép gán  Cách nhau bởi dấu phẩy 1. // Xuất từ 9 đến 0 2. for (i = 0, j = 9 ; i <= j; j ) 3. printf("%d\n", j); 6 Nhập môn lập trình - Vòng lặp
  7. Condition – Điều kiện  Phần điều kiện có thể khuyết 1. // Xuất từ 0 đến 9 2. for ( i = 0; ; i++) 3. { 4. if (i >= 10) 5. break; // Thoát vòng lặp 6. printf("%d\n", i); 7. } 8. // Xuất từ 0 đến 9 9. for ( i = 0; i < 10; i++) 10. printf("%d\n", i); 7 Nhập môn lập trình - Vòng lặp
  8. Increment/Decrement – Tăng/Giảm  Phần tăng giảm có thể khuyết 1. // Xuất từ 0 đến 9 2. for ( i = 0; i < 10; ) 3. { 4. printf("%d\n", i); 5. i++; 6. }  Phần tăng/giảm có thể có nhiều phép toán  Cánh nhau bởi dấu phẩy 1. // 0 + 9 = 1 + 8 = 2 + 7 = = 9. 2. for ( i = 0, j = 9; i < j; i++, j ) 3. { 4. printf("%d + %d = ", i, j); 5. } 6. printf("%d.\n ", i+j); 8 Nhập môn lập trình - Vòng lặp
  9. Nested loop – Vòng lặp lồng nhau  Vòng lặp có thể được lồng trong vòng lặp 1. // Bảng cửu chương 2. for ( i = 1; i < 10; i++) 3. { 4. for ( j = 1; j <= 10; j++) 5. printf("%d x %d = %d\n", i, j, i*j); 6. printf(" \n"); 7. } 8. //1 x 1 = 1 9. //1 x 2 = 2 10. // 11. //1 x 10 = 10 12. // 13. //2 x 1 = 2 14. // 9 Nhập môn lập trình - Vòng lặp
  10. break vs. continue  Lệnh break làm kết thúc vòng lặp  Lệnh continue bỏ qua lần lặp hiện tại và tiếp tục lặp 1. // Xuất số chẵn từ 0 đến 9 2. for ( i = 0; ; i++) 3. { 4. if (i == 10) 5. break; // Kết thúc vòng lặp 6. if (i % 2) // i lẻ 7. continue; // Không xuất số lẻ 8. printf("%d, ", i); 9. } 10 Nhập môn lập trình - Vòng lặp
  11. Lỗi thường gặp 1. // Dấu phẩy !? 2. for ( i = 0, i < 10, i++) 3. printf("%d, ", i); 4. // Dấu chấm phẩy !? 5. for ( i = 0; i < 10; i++); 6. printf("%d, ", i); 7. // Thiếu thành phần !? 8. for ( i = 0; i < 10) 9. printf("%d, ", i++); 10.// Lặp vô hạn: i luôn luôn < 10 !? 11.for ( i = 0; i < 10; i ) 12. printf("%d, ", i); 11 Nhập môn lập trình - Vòng lặp
  12. Bài tập vận dụng  Viết vòng lặp dùng lệnh for xuất ra màn hình: 1. Các số nguyên từ 1 đến 10 2. Các số nguyên từ 20 đến 11 3. Các số nguyên từ 1 đến n, với n > 0 nhập từ bàn phím 4. Các số nguyên có hai chữ số 5. Các số chẵn có ba chữ số 6. Các số lẻ từ a đến a+10, với a nhập từ bàn phím 7. Các số nguyên dương là bội của 3 và nhỏ hơn 100 8. Các số nguyên dương là bội của 3 và 5 9. Các cặp số nguyên dương có tổng là 10 1. Ví dụ: 1 + 9 = 10, 2 + 8 = 10, 12 Nhập môn lập trình - Vòng lặp
  13. Hướng dẫn – Xuất dãy số liên tục 1. /* Cần xác định điểm bắt đầu? điểm kết thúc? điều kiện? bước nhảy? câu lệnh? */ 2. // Ví dụ: Xuất từ a đến b (a = a; i ) 7. printf("%d, ", i); 13 Nhập môn lập trình - Vòng lặp
  14. Hướng dẫn – Xuất dãy số có điều kiện 1. /* Xuất các số thoả mãn điều kiện nào đó */ 2. for(khởi đầu; điều kiện; bước nhảy) 3. if (điều kiện) 4. printf("%d, ", i); 5. // Ví dụ: Xuất số chẵn có 2 chữ số 6. for ( i = 10; i <= 99; i++) 7. if (i%2 == 0) 8. printf("%d, ", i); 14 Nhập môn lập trình - Vòng lặp
  15. Câu lệnh while // Syntax of while while (Condition) { True Statement(s); Condition Statement(s) . . . False }  Bước 1: Kiểm tra điều kiện – Condition  Nếu điều kiện đúng sang Bước 2  Nếu điều kiện sai sang Bước 4  Bước 2: Thực hiện lệnh – Statement(s)  Bước 3: Sang Bước 1  Bước 4: Kết thúc vòng lặp 15 Nhập môn lập trình - Vòng lặp
  16. Ví dụ minh hoạ 1. // Xuất các số từ 0 đến 5 2. i = 0; 3. while(i < 6) 4. { Initialization 5. printf("%d\n", i); 6. i++; Condition 7. } Statement 8. // Lệnh for tương tự 9. for (i = 0; i < 6; i++) Increment/Decrement 10.{ 11. printf("%d\n", i); 12.} 16 Nhập môn lập trình - Vòng lặp
  17. Condition – Điều kiện  Phần điều kiện có thể là biến, biểu thức hoặc hằng số  0: false  #0: true 1. // Ví dụ: Xuất các số từ 9 đến 1 2. i = 9; 3. while(i) 4. { 5. printf("%d\n", i); 6. i ; 7. } 17 Nhập môn lập trình - Vòng lặp
  18. Nested loop – Vòng lặp lồng nhau  Vòng lặp có thể được lồng trong vòng lặp 1. // Ví dụ: Bảng cửu chương 2. i = 1; 3. while (i < 10) 4. { 5. j = 1; 6. while (j <= 10) 7. { 8. printf("%d x %d = %d\n", i, j, i*j); 9. j++; 10. } 11. printf(" \n"); 12. i++; 13. } 18 Nhập môn lập trình - Vòng lặp
  19. break vs. continue  Lệnh break làm kết thúc vòng lặp  Lệnh continue bỏ qua lần lặp hiện tại và tiếp tục lặp 1. //Ví dụ: Xuất số chẵn từ 0 đến 9 2. i = 0; 3. while(1) // Luôn đúng 4. { 5. if (i == 10) 6. break; // Kết thúc vòng lặp 7. if (i % 2) // i lẻ 8. continue; // Không xuất số lẻ 9. printf("%d, ", i); 10. i++; 11.} 19 Nhập môn lập trình - Vòng lặp
  20. Lỗi thường gặp 1. // Dấu chấm phẩy !? 2. i = 0; 3. while (i < 10); 4. printf("%d, ", i++); 5. // Lặp vô hạn !? 6. i = 0; 7. while (i < 10) 8. printf("%d, ", i); 9. // Thiếu điều kiện !? 10.while () 20 Nhập môn lập trình - Vòng lặp
  21. Bài tập vận dụng  Viết vòng lặp dùng lệnh while xuất ra màn hình: 1. Các số nguyên từ 1 đến 10 2. Các số nguyên từ 20 đến 11 3. Các số nguyên từ 1 đến n, với n > 0 nhập từ bàn phím 4. Các số nguyên có hai chữ số 5. Các số chẵn có ba chữ số 6. Các số lẻ từ a đến a+10, với a > 0 nhập từ bàn phím 7. Các số nguyên dương là bội của 3 và nhỏ hơn 100 8. Các số nguyên dương là bội của 3 và 5 9. Các cặp số nguyên dương có tổng là 10 21 Nhập môn lập trình - Vòng lặp
  22. Câu lệnh do while // Syntax of do while do{ True Statement(s); . . . Condition Statement(s) }while (Condition); False  Bước 1: Thực hiện lệnh – Statement(s)  Bước 2: Kiểm tra điều kiện – Condition  Nếu điều kiện đúng sang Bước 1  Nếu điều kiện sai sang Bước 3  Bước 3: Kết thúc vòng lặp 22 Nhập môn lập trình - Vòng lặp
  23. Ví dụ minh hoạ 1. // Xuất các số từ 0 đến 5 2. i = 0; Initialization 3. do{ 4. printf("%d\n", i); Condition 5. i++; 6. }while(i < 6); Statement Increment/Decrement 7. // Lệnh for tương tự 8. for (i = 0; i < 6; i++) Khác nhau? 9. { Do while thực hiện 10. printf("%d\n", i); Lệnh trước rồi kiểm 11.} tra sau. 23 Nhập môn lập trình - Vòng lặp
  24. Condition – Điều kiện  Phần điều kiện có thể là biến, biểu thức hoặc hằng số  0: false  #0: true 1. // Ví dụ: Nhập số nguyên dương 2. // Kiểm tra điều kiện nhập 3. do{ 4. printf("Nhap mot so nguyen duong: "); 5. scanf("%d", &i); 6. }while(i<=0); 24 Nhập môn lập trình - Vòng lặp
  25. Nested loop – Vòng lặp lồng nhau  Vòng lặp có thể được lồng trong vòng lặp 1. // Ví dụ: Bảng cửu chương 2. i = 1; 3. do{ 4. j = 1; 5. do{ 6. printf("%d x %d = %d\n", i, j, i*j); 7. j++; 8. }while(j <= 10); 9. printf(" \n"); 10. i++; 11. }while (i < 10); 25 Nhập môn lập trình - Vòng lặp
  26. Lỗi thường gặp 1. // Thiếu chấm phẩy !? 2. do{ 3. i++; 4. }while (i 0); 11.// Thiếu điều kiện !? 12.do{i++;}while (); 26 Nhập môn lập trình - Vòng lặp
  27. Bài tập vận dụng  Viết vòng lặp dùng lệnh do while xuất ra màn hình: 1. Các số nguyên từ 1 đến 10 2. Các số nguyên từ 20 đến 11 3. Các số nguyên từ 1 đến n, với n > 0 nhập từ bàn phím 4. Các số nguyên có hai chữ số 5. Các số chẵn có ba chữ số 6. Các số lẻ từ a đến a+10, với a > 0 nhập từ bàn phím 7. Các số nguyên dương là bội của 3 và nhỏ hơn 100 8. Các số nguyên dương là bội của 3 và 5 9. Các cặp số nguyên dương có tổng là 10 27 Nhập môn lập trình - Vòng lặp
  28. Bài tập 4.1 – Tính toán  Viết vòng lặp thực hiện: 1. 1 = 1 + 2 + 3 + + 2. 2 = 1 + 2 + 3 + + 3. 3 = 1 + + + + 4. 4 = + + + 5. 5 = 1 + + + + 6. 1 = 1 . 2 . 3 . . 7. 2 = 1 . . . . 8. 3 = . . . . 9. 4 = 1 . . . . . .. .. 10. = 1 + + + + 28 Nhập môn lập trình - Vòng lặp
  29. Hướng dẫn 4.1 – Tính tổng 1. tong = 0; 2. for(khởi đầu; điều kiện; bước nhảy) 3. tong = tong + ??; 4. // Ví dụ tính tong = 4+5+6+7 5. tong = 0; 6. for ( i = 4; i <= 7; i++) 7. { 8. tong = tong + i; 9. } 29 Nhập môn lập trình - Vòng lặp
  30. Hướng dẫn 4.1 – Tính tích 1. tich = 1; 2. for(khởi đầu; điều kiện; bước nhảy) 3. tich = tich * ??; 4. // Ví dụ tính tich = 2x3x4x6 5. tich = 1; 6. for ( i = 2; i <= 6; i++) 7. { 8. tich = tich * i; 9. } 30 Nhập môn lập trình - Vòng lặp
  31. Hướng dẫn 4.1 – Tổng các thương số 1. tong = 0; 2. for(khởi đầu; điều kiện; bước nhảy) 3. { 4. tuSo = ?? 5. mauSo = ?? 6. tong += (float)tuSo/mauSo; 7. } 8. // Ví dụ tính: tong = . . . . 9. tong = 0; 10. for(i = 1; i<=n; i++) 11. { 12. tuSo = i; 13. mauSo = 2*i+1; 14. tong += (float)tuSo/mauSo; 15. } 31 Nhập môn lập trình - Vòng lặp
  32. Bài tập 4.2 – Tính toán có điều kiện  Viết vòng lặp thực hiện, với n nguyên dương: 1. Liệt kê các số chẵn nhỏ hơn n 2. Tính tổng các số lẻ nhỏ hơn n 3. Đếm số các số lẻ nhỏ hơn n 4. Tính tích các số chẵn nhỏ hơn n 5. Tính trung bình cộng các số chẵn nhỏ hơn n 6. Liệt kê tất cả ước số của n 7. Tính tổng các ước số của n 8. Đếm số lượng ước số của n 9. Tính tích các ước số của n 10. Tính trung bình cộng các ước số của n 32 Nhập môn lập trình - Vòng lặp
  33. Hướng dẫn 4.2 – Liệt kê có điều kiện 1. for(khởi đầu; điều kiện; bước nhảy) 2. { 3. if (điều kiện) 4. printf( ); 5. } 6. // Ví dụ: Liệt kê các ước của n 7. for(i = 1; i<=n; i++) 8. { 9. if (n%i == 0) 10. printf("%d ", i); 11.} 33 Nhập môn lập trình - Vòng lặp
  34. Hướng dẫn 4.2 – Đếm có điều kiện 1. dem = 0; 2. for(khởi đầu; điều kiện; bước nhảy) 3. { 4. if (điều kiện) 5. dem++; 6. } 7. // Ví dụ: Đếm các ước số của n 8. dem = 0; 9. for(i = 1; i<=n; i++) 10.{ 11. if (n%i == 0) 12. dem++; 13.} 34 Nhập môn lập trình - Vòng lặp
  35. Hướng dẫn 4.2 – Tính tổng có điều kiện 1. tong = 0; 2. for(khởi đầu; điều kiện; bước nhảy) 3. { 4. if (điều kiện) 5. tong += ??; 6. } 7. // Ví dụ: Tổng các ước số của n 8. tong = 0; 9. for(i = 1; i<=n; i++) 10.{ 11. if (n%i == 0) 12. tong += i; 13.} 35 Nhập môn lập trình - Vòng lặp
  36. Bài tập 4.3 – Kiểm tra số Nhập một số nguyên dương n (n > 0), hãy cho biết n a. Có phải là số đối xứng? Ví dụ: 121, 12321, Tìm số đảo ngược, kiểm tra số đảo và số gốc b. Có phải là số chính phương? Ví dụ: 4, 9, 16, Là số có căn bậc hai là số nguyên c. Có phải là số nguyên tố? Ví dụ: 2, 3, 5, 7, Là số có 2 ước số: Đếm số ước số, kiểm tra số ước số d. Có phải là số hoàn hảo? Ví dụ 6, 28, 496, 8128 Là số có tổng các ước số nhỏ hơn nó bằng chính nó e. Có phải là số thuộc dãy Fibonacci? Ví dụ: 1, 2, 3, 5, 8, 13 Số tiếp theo bằng tổng của hai số trước đó 36 Nhập môn lập trình - Vòng lặp
  37. Hướng dẫn 4.3.a – Số đối xứng? 1. // Khai báo các biến 2. printf("Nhap so nguyen duong: "); 3. scanf("%d", &n); 4. // Tính số đảo ngược 5. i = n; soDao = 0; 6. while (i > 0){ 7. donVi = i % 10; 8. soDao = soDao*10 + donVi; 9. i = i / 10; 10. } 11. // Kiểm tra số đối xứng 12. if (soDao == n) 13. printf("%d la so đoi xung", n); 14. else 15. printf("%d la so khong doi xung", n); 37 Nhập môn lập trình - Vòng lặp
  38. Hướng dẫn 4.3.b – Số chính phương? 17./*Số chính phương là số có căn bậc hai là số nguyên, ví dụ 9 = 3*3 */ 18. // Tìm căn bậc hai của n 19. i = 1; 20. while(i*i<n) 21. { 22. i++; 23. } 24. // Kiểm tra số chính phương 25. if (i*i == n) 26. printf("%d la so chinh phuong", n); 27. else 28. printf("%d khong la so chinh phuong", n); 38 Nhập môn lập trình - Vòng lặp
  39. Hướng dẫn 4.3.c – Số nguyên tố? 29./*Số nguyên tố là số có hai ước số là 1 và chính nó, ví dụ số 2, 3, 5, 7 */ 30. 31. // Đếm số ước số 32. soUoc = 0; 33. for (i = 1; i <= n; i++) 34. if (n % i == 0) 35. souoc++; 36. // Kiểm tra số nguyên tố 37. if (souoc == 2) 38. printf("%d la so nguyen to", n); 39. else 40. printf("%d khong la so nguyen to", n); 39 Nhập môn lập trình - Vòng lặp
  40. Hướng dẫn 4.3.d – Số hoàn hảo? 41./*Số hoàn hảo là số có tổng các ước số nhỏ hơn nó bằng chính nó, ví dụ số 6 = 1 + 2 + 3 */ 42. // Tính tổng các ước số nhỏ hơn n 43. tong = 0; 44. for (i = 1; i < n; i++) 45. if (n % i == 0) 46. tong += i; 47. // Kiểm tra số hoàn hảo 48. if (n == tong) 49. printf("%d la so hoan hao", n); 50. else 51. printf("%d khong la so hoan hao", n); 40 Nhập môn lập trình - Vòng lặp
  41. Hướng dẫn 4.3.e – Số thuộc dãy Fibonacci? 52./*Dãy số Fibonacci có tính chất số sau bằng tổng của hai số trước đó, ví dụ: 1, 1, 2, 3, 5, 8 */ 53. // Tìm số Fibonacci 54. f1 = 0; f2 = 1; 55. f3 = f2 + f1; 56. while (f3 < n){ 57. f1 = f2; 58. f2 = f3; 59. f3 = f2 + f1; 60. } 61. // Kiểm tra số Fibonacci 62. if (f3 == n) 63. printf("%d la so Fibonacci", n); 64. else 65. printf("%d khong la so Fibonacci", n); 41 Nhập môn lập trình - Vòng lặp
  42. Bài tập 4.4 – Kiểm tra và Tính tổng Nhập một số nguyên dương n. Tính: a) Tổng các số nguyên dương nhỏ hơn n chia hết cho 3 nhưng không chia hết cho 2. b) Tổng các số đối xứng nhỏ hơn n. c) Tổng các số chính phương nhỏ hơn n. d) Tổng các số nguyên tố nhỏ hơn n. e) Tổng các số hoàn hảo nhỏ hơn n. f) Tổng các số Fibonacci nhỏ hơn n. 42 Nhập môn lập trình - Vòng lặp
  43. Hướng dẫn 4.4 – Kiểm tra và tính tổng 1. // Cho tổng ban đầu bằng 0 2. tong = 0; 3. // Duyệt các số nhỏ hơn n 4. for ( i = 1; i < n; i++) 5. { 6. // Kiểm tra i 7. 8. // Nếu i thoả mãn điều kiện thì cộng 9. if (i thoả điều kiện) 10. tong += i; 11. } 43 Nhập môn lập trình - Vòng lặp
  44. Bài tập 4.5 – Chữ số Nhập một số nguyên dương n, hãy cho biết: a) Chữ số lớn nhất và nhỏ nhất? Lần lượt tìm các chữ số, tìm max và min b) Các chữ số có tăng dần không? Kiểm tra thoả điều kiện chữ số trước luôn nhỏ hơn chữ số sau c) Tổng các chữ số? Lần lượt tìm các chữ số, tính tổng 44 Nhập môn lập trình - Vòng lặp
  45. Hướng dẫn 4.5.a – Chữ số min max? 1. // Đặt giá trị ban đầu cho min, max 2. min = n % 10; 3. max = min; 4. i = n / 10; 5. // Tìm chữ số lớn nhất, nhỏ nhất 6. while (i>0) 7. { 8. donVi = i % 10; 9. i = i / 10; 10. if (donVi max) max = donVi; 12. } 13. printf("Chu so nho nhat %d\n", min); 14. printf("Chu so lon nhat %d\n", max); 45 Nhập môn lập trình - Vòng lặp
  46. Hướng dẫn 4.5.b – Chữ số tăng dần? 15. tangDan = 1; 16. donVi = n % 10; 17. i = n / 10; 18. while(i>0) 19. { 20. if(i%10 >= donVi) 21. tangDan = 0; 22. donVi = i % 10; 23. i /= 10; 24. } 25. if (tangDan) 26. printf("Cac chu so tang dan"); 27. else 28. printf("Cac chu so khong tan dan"); 46 Nhập môn lập trình - Vòng lặp