Bài giảng Nhập môn lập trình - Chương 4: Vòng lặp - Ngô Hữu Dũng

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

pdf46 trang | Chia sẻ: phuongt97 | Lượt xem: 383 | Lượt tải: 0download
Bạn đang xem trước 20 trang nội dung tài liệu Bài giảng Nhập môn lập trình - Chương 4: Vòng lặp - Ngô Hữu Dũng, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Nhập môn lập trình Vòng lặp TS. Ngô Hữu Dũng TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP THÀNH PHỐ HỒ CHÍ MINH Câu lệnh for Nhập môn lập trình - Vòng lặp // Syntax of for for (Initialization; Condition; Increment/Decrement) { Statement(s); . . . } Statement(s) True False Condition Initialization Increment/ Decrement 2 Vòng lặp for Nhập môn lập trình - Vòng lặp3  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 Ví dụ minh hoạ Nhập môn lập trình - Vòng lặp4 1. for (i = 0; i < 6; i++) 2. { 3. printf("%d\n", i); 4. }  Xuất ra màn hình các số từ 0 đến 5  Khởi đầu  i = 0  Điều kiện  i < 6  Kết thúc  i >= 6  Bước nhảy  i++  Lệnh  Xuất i Print i True False i < 6 i = 0 i++ How’s it work? – For loop Nhập môn lập trình - Vòng lặp5 1. for (i = 0; i < 6; i++) 2. { 3. printf("%d\n", i); 4. } True False 0 1 2 3 4 5 i 0123456 i = 0 i++ Print ii < 6 Initialization – Khởi đầu Nhập môn lập trình - Vòng lặp6  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); Condition – Điều kiện Nhập môn lập trình - Vòng lặp7  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); Increment/Decrement – Tăng/Giảm Nhập môn lập trình - Vòng lặp8  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); Nested loop – Vòng lặp lồng nhau Nhập môn lập trình - Vòng lặp9  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.//... 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. } Nhập môn lập trình - Vòng lặp10 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); Nhập môn lập trình - Vòng lặp11 Bài tập vận dụng Nhập môn lập trình - Vòng lặp  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 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 < b) 3. for ( i = a; i <= b; i++) 4. printf("%d, ", i); 5. // Ví dụ: Xuất từ b đến a (a < b) 6. for ( i = b; i >= a; i--) 7. printf("%d, ", i); Nhập môn lập trình - Vòng lặp13 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); Nhập môn lập trình - Vòng lặp14 Câu lệnh while Nhập môn lập trình - Vòng lặp15  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 Statement(s) True False Condition // Syntax of while while (Condition) { Statement(s); . . . } Ví dụ minh hoạ Nhập môn lập trình - Vòng lặp16 1. // Xuất các số từ 0 đến 5 2. i = 0; 3. while(i < 6) 4. { 5. printf("%d\n", i); 6. i++; 7. } 8. // Lệnh for tương tự 9. for (i = 0; i < 6; i++) 10.{ 11. printf("%d\n", i); 12.} Initialization Condition Statement Increment/Decrement Condition – Điều kiện Nhập môn lập trình - Vòng lặp17  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. } Nested loop – Vòng lặp lồng nhau Nhập môn lập trình - Vòng lặp18  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.} 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.} Nhập môn lập trình - Vòng lặp19 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 () Nhập môn lập trình - Vòng lặp20 Bài tập vận dụng Nhập môn lập trình - Vòng lặp  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 Câu lệnh do..while Nhập môn lập trình - Vòng lặp22  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 Statement(s) True False Condition // Syntax of do..while do{ Statement(s); . . . }while (Condition); Ví dụ minh hoạ Nhập môn lập trình - Vòng lặp23 1. // Xuất các số từ 0 đến 5 2. i = 0; 3. do{ 4. printf("%d\n", i); 5. i++; 6. }while(i < 6); 7. // Lệnh for tương tự 8. for (i = 0; i < 6; i++) 9. { 10. printf("%d\n", i); 11.} Initialization Condition Statement Increment/Decrement Khác nhau? Do..while thực hiện Lệnh trước rồi kiểm tra sau. Condition – Điều kiện Nhập môn lập trình - Vòng lặp24  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); Nested loop – Vòng lặp lồng nhau Nhập môn lập trình - Vòng lặp25  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); Lỗi thường gặp 1. // Thiếu chấm phẩy !? 2. do{ 3. i++; 4. }while (i < 10) 5. 6. // Lặp vô hạn !? 7. i = 0; 8. do{ 9. i++; 10.}while (i > 0); 11.// Thiếu điều kiện !? 12.do{i++;}while (); Nhập môn lập trình - Vòng lặp26 Bài tập vận dụng Nhập môn lập trình - Vòng lặp  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 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 + . + .. + + .. Nhập môn lập trình - Vòng lặp28 Hướng dẫn 4.1 – Tính tổng Nhập môn lập trình - Vòng lặp29 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. } Hướng dẫn 4.1 – Tính tích Nhập môn lập trình - Vòng lặp30 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. } Hướng dẫn 4.1 – Tổng các thương số Nhập môn lập trình - Vòng lặp31 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.} 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 Nhập môn lập trình - Vòng lặp32 Hướng dẫn 4.2 – Liệt kê có điều kiện Nhập môn lập trình - Vòng lặp33 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.} Hướng dẫn 4.2 – Đếm có điều kiện Nhập môn lập trình - Vòng lặp34 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.} Hướng dẫn 4.2 – Tính tổng có điều kiện Nhập môn lập trình - Vòng lặp35 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.} 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 đó Nhập môn lập trình - Vòng lặp36 Hướng dẫn 4.3.a – Số đối xứng? Nhập môn lập trình - Vòng lặp 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 Hướng dẫn 4.3.b – Số chính phương? Nhập môn lập trình - Vòng lặp 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 Hướng dẫn 4.3.c – Số nguyên tố? Nhập môn lập trình - Vòng lặp 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 Hướng dẫn 4.3.d – Số hoàn hảo? Nhập môn lập trình - Vòng lặp 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 Hướng dẫn 4.3.e – Số thuộc dãy Fibonacci? Nhập môn lập trình - Vòng lặp 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 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. Nhập môn lập trình - Vòng lặp42 Hướng dẫn 4.4 – Kiểm tra và tính tổng Nhập môn lập trình - Vòng lặp 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 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 Nhập môn lập trình - Vòng lặp44 Hướng dẫn 4.5.a – Chữ số min max? Nhập môn lập trình - Vòng lặp 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 < min) min = donVi; 11. 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 Hướng dẫn 4.5.b – Chữ số tăng dần? Nhập môn lập trình - Vòng lặp 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

Các file đính kèm theo tài liệu này:

  • pdfbai_giang_nhap_mon_lap_trinh_chuong_4_vong_lap_ngo_huu_dung.pdf
Tài liệu liên quan