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
46 trang |
Chia sẻ: phuongt97 | Lượt xem: 369 | Lượt tải: 0
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:
- bai_giang_nhap_mon_lap_trinh_chuong_4_vong_lap_ngo_huu_dung.pdf