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
Câu lệnh for
Initialization
Increment/ Decrement
True
Condition
Statement(s)
False
// Syntax of for for (Initialization; Condition; Increment/Decrement) {
Statement(s); . . .
}
Nhập môn lập trình - Vòng lặp
2
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
i = 0
i++
True
Print i
i < 6
False
Ví dụ minh hoạ 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
printf("%d\n", i);
Xuất i
1. for (i = 0; i < 6; i++) 2. { 3. 4. }
4
Nhập môn lập trình - Vòng lặp
How’s it work? – For loop
i = 0
i++
True
i < 6
Print i
False
0 1 2 3 4 5
printf("%d\n", i);
i
0123456
1. for (i = 0; i < 6; i++) 2. { 3. 4. }
5
Nhập môn lập trình - Vòng lặp
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--) printf("%d\n", i); 4.
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
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
printf("%d\n", i);
6. 7. }
8. // Xuất từ 0 đến 9 9. for ( i = 0; i < 10; i++) printf("%d\n", i); 10.
7
Nhập môn lập trình - Vòng lặp
printf("%d\n", i); i++;
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. 5. 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
printf("%d + %d = ", i, j);
1. // 0 + 9 = 1 + 8 = 2 + 7 = … = 9. 2. for ( i = 0, j = 9; i < j; i++, j--) 3. { 4. 5. } 6. printf("%d.\n ", i+j);
8
Nhập môn lập trình - Vòng lặp
for ( j = 1; j <= 10; j++)
printf("%d x %d = %d\n", i, j, i*j);
printf("-----------\n");
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. 5. 6. 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
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.
5.
if (i == 10) break;
// Kết thúc vòng lặp
6.
if (i % 2) // i lẻ
7.
continue; // Không xuất số lẻ
printf("%d, ", i);
8. 9. }
Nhập môn lập trình - Vòng lặp
10
Lỗi thường gặp 1. // Dấu phẩy !? 2. for ( i = 0, i < 10, i++) printf("%d, ", i); 3.
4. // Dấu chấm phẩy !? 5. for ( i = 0; i < 10; i++); printf("%d, ", i); 6.
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--) printf("%d, ", i); 12.
Nhập môn lập trình - Vòng lặp
11
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
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++) printf("%d, ", i); 4.
5. // Ví dụ: Xuất từ b đến a (a < b) 6. for ( i = b; i >= a; i--) printf("%d, ", i); 7.
Nhập môn lập trình - Vòng lặp
13
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ặp
14
True
Câu lệnh while // Syntax of while while (Condition) {
Condition
Statement(s)
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
Initialization
printf("%d\n", i); i++;
Condition
Ví dụ minh hoạ 1. // Xuất các số từ 0 đến 5 2. i = 0; 3. while(i < 6) 4. { 5. 6. 7. }
Statement
Increment/Decrement
printf("%d\n", i);
8. // Lệnh for tương tự 9. for (i = 0; i < 6; i++) 10.{ 11. 12.}
16
Nhập môn lập trình - Vòng lặp
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); i--;
6. 7. }
17
Nhập môn lập trình - Vòng lặp
j = 1; while (j <= 10) {
printf("%d x %d = %d\n", i, j, i*j); j++;
} printf("-----------\n"); i++;
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. 6. 7. 8. 9. 10. 11. 12. 13. }
18
Nhập môn lập trình - Vòng lặp
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
// Luôn đúng
if (i == 10) break; if (i % 2)
// Kết thúc vòng lặp // i lẻ continue; // Không xuất số lẻ
printf("%d, ", i); i++;
1. //Ví dụ: Xuất số chẵn từ 0 đến 9 2. i = 0; 3. while(1) 4. { 5. 6. 7. 8. 9. 10. 11.}
Nhập môn lập trình - Vòng lặp
19
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ặp
20
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
Câu lệnh do..while // Syntax of do..while do{
True
Condition
Statement(s)
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
Initialization
Condition
printf("%d\n", i); i++;
Ví dụ minh hoạ 1. // Xuất các số từ 0 đến 5 2. i = 0; 3. do{ 4. 5. 6. }while(i < 6);
Statement
Increment/Decrement
printf("%d\n", i);
7. // Lệnh for tương tự 8. for (i = 0; i < 6; i++) 9. { 10. 11.}
Khác nhau? Do..while thực hiện Lệnh trước rồi kiểm tra sau.
23
Nhập môn lập trình - Vòng lặp
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: "); scanf("%d", &i);
5. 6. }while(i<=0);
24
Nhập môn lập trình - Vòng lặp
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.
5.
j = 1; do{
6.
7.
printf("%d x %d = %d\n", i, j, i*j); j++;
8.
9.
}while(j <= 10); printf("-----------\n"); i++;
10. 11. }while (i < 10);
25
Nhập môn lập trình - Vòng lặp
i++;
i++;
Lỗi thường gặp 1. // Thiếu chấm phẩy !? 2. do{ 3. 4. }while (i < 10) 5. 6. // Lặp vô hạn !? 7. i = 0; 8. do{ 9. 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ặp
26
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
Bài tập 4.1 – Tính toán Viết vòng lặp thực hiện: