Tài liệu Phương pháp lập trình - Vòng lặp - Ngô Hữu Dũng: Phương pháp 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
Đặt vấn đề
Ví dụ
Viết chương trình xuất các số từ 1 đến 10
=> Sử dụng 10 câu lệnh printf
Viết chương trình xuất các số từ 1 đến 1000
=> Sử dụng 1000 câu lệnh printf !
Giải pháp
Sử dụng cấu trúc lặp lại một hành động trong khi còn thỏa một
điều kiện nào đó.
3 lệnh lặp: for, while, do while
Phương pháp lập trình - Vòng lặp
Câu lệnh for
Phương pháp lập trình - Vòng lặp
for (; ; )
; , , :
là biểu thức C bất kỳ có chức năng riêng
: đơn hoặc khối lệnh.
Đ
S
Câu lệnh for
Phương pháp lập trình - Vòng lặp
1. void main()
2. {
3. int i;
4. for (i = 0; i < 10; i++)
5. printf(“%d\n”, i);
6. for (int j = 0; j < 10; j = j + 1)
7. printf(“%d\n”, j);
8. for (int k = 0; k < 10; k += 2)
9. {
10. printf(“%d”, k);
11. printf(“\n”);
12. }
13.}
Câu lệnh for - Một số lưu ý
Câu lệnh for là một câu lệnh đơn và có thể lồng nhau.
Phương pháp lập trìn...
51 trang |
Chia sẻ: putihuynh11 | Lượt xem: 616 | Lượt tải: 2
Bạn đang xem trước 20 trang mẫu tài liệu Phương pháp lập trình - Vòng lặp - Ngô Hữu Dũng, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Phương pháp 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
Đặt vấn đề
Ví dụ
Viết chương trình xuất các số từ 1 đến 10
=> Sử dụng 10 câu lệnh printf
Viết chương trình xuất các số từ 1 đến 1000
=> Sử dụng 1000 câu lệnh printf !
Giải pháp
Sử dụng cấu trúc lặp lại một hành động trong khi còn thỏa một
điều kiện nào đó.
3 lệnh lặp: for, while, do while
Phương pháp lập trình - Vòng lặp
Câu lệnh for
Phương pháp lập trình - Vòng lặp
for (; ; )
; , , :
là biểu thức C bất kỳ có chức năng riêng
: đơn hoặc khối lệnh.
Đ
S
Câu lệnh for
Phương pháp lập trình - Vòng lặp
1. void main()
2. {
3. int i;
4. for (i = 0; i < 10; i++)
5. printf(“%d\n”, i);
6. for (int j = 0; j < 10; j = j + 1)
7. printf(“%d\n”, j);
8. for (int k = 0; k < 10; k += 2)
9. {
10. printf(“%d”, k);
11. printf(“\n”);
12. }
13.}
Câu lệnh for - Một số lưu ý
Câu lệnh for là một câu lệnh đơn và có thể lồng nhau.
Phương pháp lập trình - Vòng lặp
1. if (n < 10 && m < 20)
2. {
3. for (int i = 0; i < n; i++)
4. {
5. for (int j = 0; j < m; j++)
6. {
7. printf(“%d”, i + j);
8. printf(“\n”);
9. }
10. }
11.}
Câu lệnh for - Một số lưu ý
Trong câu lệnh for, có thể sẽ không có phần
Phương pháp lập trình - Vòng lặp
1. int i;
2. for (i = 0; i < 10; i++)
3. printf(“%d\n”, i);
4. int i = 0;
5. for (; i < 10; i++)
6. printf(“%d\n”, i);
Đ
S
Câu lệnh for - Một số lưu ý
Trong câu lệnh for, có thể sẽ không có phần
Phương pháp lập trình - Vòng lặp
1. int i;
2. for (i = 0; i < 10; i++)
3. printf(“%d\n”, i);
4. for (i = 0; i < 10; )
5. {
6. printf(“%d\n”, i);
7. i++;
8. }
Đ
S
Câu lệnh for - Một số lưu ý
Trong câu lệnh for, có thể sẽ không có phần
Phương pháp lập trình - Vòng lặp
1. int i;
2. for (i = 0; i < 10; i++)
3. printf(“%d\n”, i);
4. for (i = 0; ; i++)
5. printf(“%d\n”, i);
6. for (i = 0; ; i++)
7. {
8. if (i >= 10)
9. break;
10. printf(“%d\n”, i);
11.}
Câu lệnh for - Một số lưu ý
Lệnh break làm kết thúc câu lệnh.
Lệnh continue bỏ qua lần lặp hiện tại.
Phương pháp lập trình - Vòng lặp
1. for (i = 0; i < 10; i++)
2. {
3. if (i % 2 == 0)
4. break;
5. printf(“%d\n”, i);
6. }
7. for (i = 0; i < 10; i++)
8. {
9. if (i % 2 == 0)
10. continue;
11. printf(“%d\n”, i);
12.}
Câu lệnh for - Một số lưu ý
Không được thêm ; ngay sau lệnh lệnh for.
=> Tương đương câu lệnh rỗng.
Phương pháp lập trình - Vòng lặp
1. for (i = 0; i < 10; i++);
2. {
3. printf(“%d”, i);
4. printf(“\n”);
5. }
6. for (i = 0; i < 10; i++)
7. {
8. };
9. {
10. printf(“%d”, i);
11. printf(“\n”);
12.}
Câu lệnh for - Một số lưu ý
Các thành phần , ,
cách nhau bằng dấu ;
Nếu có nhiều thành phần trong mỗi phần thì được cách
nhau bằng dấu ,
Phương pháp lập trình - Vòng lặp
1. for (int i = 1, j = 2; i + j < 10; i++, j += 2)
2. printf(“%d\n”, i + j);
Bài tập vận dụng
Phương pháp 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 > 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
10. Các số nguyên tố nhỏ hơn 100
Câu lệnh while
Phương pháp lập trình - Vòng lặp
Đ
S
while ()
;
Câu lệnh đơn hoặc
Câu lệnh phức (kẹp
giữa { và })
Biểu thức C bất kỳ,
thường là biểu thức
quan hệ cho kết quả
0 (sai) và != 0 (đúng)
Câu lệnh while
Phương pháp lập trình - Vòng lặp
1. int i = 0;
2. while (i < 10)
3. {
4. printf(“%d\n”, i);
5. i++;
6. }
7. for (int i = 0; i < 10; i++)
8. printf(“%d\n”, i);
9. int i = 0;
10.for (; i < 10; )
11.{
12. printf(“%d\n”, i);
13. i++;
14.}
Câu lệnh while - Một số lưu ý
Câu lệnh while là một câu lệnh đơn và có thể lồng nhau.
Phương pháp lập trình - Vòng lặp
1. if (n < 10 && m < 20)
2. {
3. while (n >= 1)
4. {
5. while (m >= 1)
6. {
7. printf(“%d”, m);
8. m--;
9. }
10. n--;
11. }
12.}
Câu lệnh while - Một số lưu ý
Câu lệnh while có thể không thực hiện lần nào do điều
kiện lặp ngay từ lần đầu đã không thỏa.
Phương pháp lập trình - Vòng lặp
1. void main()
2. {
3. int n = 1;
4. while (n > 10)
5. {
6. printf(“%d\n”, n);
7. n--;
8. }
9.
10.}
Câu lệnh while - Một số lưu ý
Không được thêm ; ngay sau lệnh lệnh while.
Phương pháp lập trình - Vòng lặp
1. int n = 0;
2. while (n < 10);
3. {
4. printf(“%d\n”, n);
5. n++;
6. }
7. while (n < 10)
8. {
9. };
10.{
11. printf(“%d\n”, n);
12. n++;
13.}
Câu lệnh while - Một số lưu ý
Câu lệnh while có thể bị lặp vô tận (loop)
Phương pháp lập trình - Vòng lặp
1. void main()
2. {
3. int n = 1;
4. while (n < 10)
5. {
6. printf(“%d”, n);
7. n--;
8. }
9.
10. n = 1;
11. while (n < 10)
12. printf(“%d”, n);
13.}
Bài tập vận dụng
Phương pháp 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
10. Các số nguyên tố nhỏ hơn 100
Câu lệnh do while
Phương pháp lập trình - Vòng lặp
do
;
while ();
Câu lệnh đơn hoặc
Câu lệnh phức (kẹp
giữa { và })
Biểu thức C bất kỳ,
thường là biểu thức
quan hệ cho kết quả
0 (sai) và != 0 (đúng)
S
Đ
Câu lệnh do while
Phương pháp lập trình - Vòng lặp
1. int i = 0;
2. do
3. {
4. printf(“%d\n”, i);
5. i++;
6. }
7. while (i < 10);
8. int i = 0;
9. printf(“%d\n”, i);
10.i++;
11.for (; i < 10; )
12.{
13. printf(“%d\n”, i);
14. i++;
15.}
Câu lệnh do while - Một số lưu ý
Câu lệnh do while là một câu lệnh đơn và có thể lồng
nhau.
Phương pháp lập trình - Vòng lặp
1. int a = 1, b;
2. do
3. {
4. b = 1;
5. do
6. {
7. printf(“%d\n”, a + b);
8. b = b + 2;
9. }
10. while (b < 20);
11. a++;
12.}
13.while (a < 20);
Câu lệnh do while - Một số lưu ý
Câu lệnh do while sẽ được thực hiện ít nhất 1 lần do
điều kiện lặp được kiểm tra ở cuối.
Phương pháp lập trình - Vòng lặp
1. void main()
2. {
3. int n;
4. do
5. {
6. printf(“Nhap n: ”);
7. scanf(“%d”, &n);
8. }
9. while (n 100);
10.}
Câu lệnh do while - Một số lưu ý
Câu lệnh do while có thể bị lặp vô tận (loop)
Phương pháp lập trình - Vòng lặp
1. int n = 1;
2. do
3. {
4. printf(“%d”, n);
5. n--;
6. }
7. while (n < 10);
8.
9. n = 1;
10. do
11. printf(“%d”, n);
12. while (n < 10);
13.
for, while, do while
Đều có khả năng lặp lại nhiều hành động.
Phương pháp lập trình - Vòng lặp
1. int n = 10;
2. for (int i = 1; i <= n; i++)
3. printf(“%d\n”, i);
4.
5. int i = 1;
6. while (i <= n)
7. {
8. printf(“%d\n”, i); i++;
9. }
10. int i = 1;
11. do {
12. printf(“%d\n”, i); i++;
13. } while (i < n);
for, while, do while
Số lần lặp xác định ngay trong câu lệnh
Phương pháp lập trình - Vòng lặp
1. int n = 10;
2. for (int i = 1; i <= n; i++)
3. ;
4.
5. int i = 1;
6. while (i <= n)
7. {
8. ;
9. }
10. int i = 1;
11. do {
12. ;
13. } while (i > n);
while & do while
while có thể không thực hiện lần nào.
do while sẽ được thực hiện ít nhất 1 lần.
Phương pháp lập trình - Vòng lặp
1. int n = 100;
2. while (n < 10)
3. {
4. ;
5. }
6.
7. do
8. {
9. printf(“Nhap n: ”);
10. scanf(“%d”, &n);
11.}
12.while (n > 10);
Bài tập vận dụng
Phương pháp 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
10. Các số nguyên tố nhỏ hơn 100
Bài tập vận dụng tổng hợp
Viết vòng lặp thực hiện:
1. A = 1 + 2 + 3 + +
2. B = 1 +
1
2
+
1
3
+ +
1
3. C = 1 + 1/3 + 1/5 + + 1/(2n+1)
4. D =
.
.
. .
5. E = 1/(1x2) . 1/(2x3) . .1/(nxn+1)
6. F = 1 + (1*2)/(1 + 2) + + (1*2**n)/(1 + 2 + + n)
7. Liệt kê tất cả ước số của số nguyên dương n
8. Tính tổng các ước số của số nguyên dương n
9. Đếm số lượng ước số của số nguyên dương n
10. Tính tích các ước số chẵn của số nguyên dương n
Phương pháp lập trình - Vòng lặp
Bài tập thực hành
3. Nhập một số nguyên dương n (n > 0).
Hãy cho biết:
a. Có phải là số đối xứng? Ví dụ: 121, 12321,
b. Có phải là số chính phương? Ví dụ: 4, 9, 16,
c. Có phải là số nguyên tố? Ví dụ: 2, 3, 5, 7,
d. Chữ số lớn nhất và nhỏ nhất?
e. Các chữ số có tăng dần hay giảm dần không?
Phương pháp lập trình - Vòng lặp
Bài tập thực hành
4. Nhập một số 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!
5. Nhập 3 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.
6. Tính tổng các số nguyên tố nhỏ hơn n (0 < n < 50)
Phương pháp lập trình - Vòng lặp
Bài tập thực hành
7. Nhập một số nguyên dương n. Xuất ra số ngược lại. Ví dụ:
Nhập 1706 Xuất 6071.
8. Tìm và in lên màn hình tất cả các số nguyên trong phạm vi từ
10 đến 99 sao cho tích của 2 chữ số bằng 2 lần tổng của 2 chữ
số đó.
9. Tìm ước số chung lớn nhất của 2 số nguyên dương a và b
nhập từ bàn phím.
10. Nhập n. In n số đầu tiên trong dãy Fibonacy.
a. a0 = a1 = 1
b. an = an – 1 + an – 2
Phương pháp lập trình - Vòng lặp
Bài tập 3a
Phương pháp lập trình - Vòng lặp
1. void main()
2. {
3. int n, sogoc, sodao, donvi;
4. printf(“Nhap n: ”);
5. scanf(“%d”, &n);
6. sogoc = n; sodao = 0;
7. while (sogoc > 0)
8. {
9. donvi = sogoc % 10;
10. sodao = sodao*10 + donvi;
11. sogoc = sogoc / 10;
12. }
13. if (sodao == n) printf(“DX”);
14. else printf(“Khong doi xung”);
15.}
Bài tập 3b
Phương pháp lập trình - Vòng lặp
1. #include
2. void main()
{
3. int n, n_can_nguyen;
4. printf(“Nhap n: ”);
5. scanf(“%d”, &n);
6. n_can_nguyen = int(sqrt(n));
7. if (n_can_nguyen*n_can_nguyen == n)
8. printf(“%d la so CP.”, n);
9. else
10. printf(“%d khong la so CP.”, n);
11.}
Bài tập 3c
Phương pháp lập trình - Vòng lặp
1. void main()
2. {
3. int n, i, souoc;
4. printf(“Nhap n: ”);
5. scanf(“%d”, &n);
6. souoc = 0;
7. for (i = 1; i <= n; i++)
8. if (n % i == 0)
9. souoc++;
10. if (souoc == 2)
11. printf(“%d la so nguyen to”);
12. else
13. printf(“%d ko la so nguyen to”, n);
14.}
Bài tập 3d
Phương pháp lập trình - Vòng lặp
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 < min) min = donvi;
if (donvi > max) max = donvi;
}
printf(“So NN = %d, So LN = %d”, min, max);
}
Bài tập 3e
Phương pháp lập trình - Vòng lặp
1. void main()
2. {
3. int n, sotruoc, sosau;
4. // Nhập n
5. sotruoc = n % 10;
6. do
7. {
8. sosau = sotruoc;
9. n = n / 10;
10. sotruoc = n % 10;
11. } while (n != 0 && sotruoc < sosau);
12. if (sotruoc < sosau)
13. printf(“Cac chu so tang dan”);
14. else
15. printf(“Cac chu so ko tang dan”);
16.}
Bài tập 4a
Phương pháp lập trình - Vòng lặp
1. void main()
2. {
3. int n, i, s;
4. printf(“Nhap n: ”);
5. scanf(“%d”, &n);
6. s = 0;
7. for (i = 1; i <= n; i++)
8. s = s + i;
9. printf(“1 + 2 + + %d = %d”, n, s);
10.}
Bài tập 4b
Phương pháp lập trình - Vòng lặp
1. void main()
2. {
3. int n, i, s;
4. printf(“Nhap n: ”);
5. scanf(“%d”, &n);
6. s = 0;
7. for (i = 1; i <= n; i++)
8. s = s + i*i;
9. printf(“1^2 + 2^2 + + %d^2 = %d”, n, s);
10.}
Bài tập 4c
Phương pháp lập trình - Vòng lặp
1. void main()
2. {
3. int n, i;
4. float s;
5. printf(“Nhap n: ”);
6. scanf(“%d”, &n);
7. s = 0;
8. for (i = 1; i <= n; i++)
9. s = s + 1.0/i;
10. printf(“1 + 1/2 + + 1/%d = %f”, n, s);
11.}
Bài tập 4d
Phương pháp lập trình - Vòng lặp
1. void main()
2. {
3. int n, i, s;
4. printf(“Nhap n: ”);
5. scanf(“%d”, &n);
6. s = 1;
7. for (i = 2; i <= n; i++)
8. s = s * i;
9. printf(“%d! = %d”, n, s);
10.}
Bài tập 4e
Phương pháp lập trình - Vòng lặp
1. void main()
2. {
3. int n, i, j, igt, s;
4. printf(“Nhap n: ”);
5. scanf(“%d”, &n);
6. s = 0;
7. for (i = 1; i <= n; i++)
8. {
9. igt = 1;
10. for (j = 2; j <= i; j++)
11. igt = igt * j;
12. s = s + igt;
13. }
14. printf(“1! + 2! + + %d! = %d”, n, s);
15.}
Bài tập 5
Phương pháp lập trình - Vòng lặp
1. void main()
2. {
3. int a, b, n, i, s;
4. do
5. {
6. printf(“Nhap a, b, n: ”);
7. scanf(“%d%d%d”, &a, &b, &n);
8. } while (a >= n || b >= n);
9. s = 0;
10. for (i = 1; i <= n – 1; i++)
11. if (i % a == 0 && i % b != 0)
12. s = s + i;
13.
14. printf(“Tong cac thoa yeu cau la %d”, s);
15.}
Bài tập 6
Phương pháp lập trình - Vòng lặp
1. void main()
2. {
3. int n, i, j, souoc, s;
4. do
5. {
6. printf(“Nhap n: ”);
7. scanf(“%d”, &n);
8. } while (n = 50);
9. s = 0;
10. for (i = 2; i <= n – 1; i++)
11. {
12. // Đếm số ước của i
13. if (souoc == 2) // Là số nguyên tố
14. s = s + i;
15. }
16. printf(“Tong cac so nt < %d la %d”, n, s);
17.}
Bài tập 7
Phương pháp lập trình - Vòng lặp
1. void main()
2. {
3. int n, donvi;
4. printf(“Nhap n: ”);
5. scanf(“%d”, &n);
6.
7. printf(“So dao cua %d la ”, n);
8. while (n > 0)
9. {
10. donvi = n % 10;
11. n = n / 10;
12. printf(“%d”, donvi);
13. }
14.}
Bài tập 8
Phương pháp lập trình - Vòng lặp
1. void main()
2. {
3. int n, i, donvi, chuc;
4.
5. printf(“Cac so thoa yeu cau la: ”);
6. for (i = 10; i <= 99; i++)
7. {
8. donvi = i % 10;
9. chuc = i / 10;
10. if (chuc*donvi == 2*(chuc + donvi))
11. printf(“%d”, i);
12. }
13.}
Bài tập 9
Ví dụ: a = 12, b = 8
Cách 1:
Cho 1 biến i chạy từ 8 trở về 1, nếu cả a và b đều chia hết cho i
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
Phương pháp lập trình - Vòng lặp
Bài tập 9
Phương pháp lập trình - Vòng lặp
1. void main()
2. {
3. int a, b, uscln;
4. printf(“Nhap a va b: ”);
5. scanf(“%d%d”, &a, &b);
6. if (a < b) uscln = a;
7. else uscln = b;
8. while (a % uscln != 0 || b % uscln != 0)
9. uscln--;
10. printf(“USCLN cua %d va %d la %d”,a, b, uscln);
11.}
Bài tập 9
Phương pháp lập trình - Vòng lặp
1. void main()
2. {
3. int a, b;
4. printf(“Nhap a va b: ”);
5. scanf(“%d%d”, &a, &b);
6. while (a b)
7. {
8. if (a > b)
9. a = a – b;
10. else
11. b = b – a;
12. }
13. printf(“USCLN cua a va b la %d’, a);
14.}
Bài tập 10
Dãy Fibonacy: a0 a1 a2 an-2 an-1 an
Với a0 = a1 = 1, an = an-1 + an-2
Ví dụ: 1 1 2 3 5 8 13 21
Xuất n phần tử đầu tiên của dãy Fibonacy
n = 1 => 1, n = 2 => 1 1
n > 2
Lưu lại 2 phần tử trước nó là a và b
Mỗi lần tính xong cập nhật lại a và b.
Nên thêm 2 phần tử ảo đầu tiên là a-2, a-1
1 0 1 1 2 3 5 8 13 21
Phương pháp lập trình - Vòng lặp
Bài tập 10
Phương pháp lập trình - Vòng lặp
1. void main()
2. {
3. int n, an, an1, an2, i;
4. printf(“Nhap n: ”);
5. scanf(“%d”, &n);
6. an2 = 1; an1 = 0;
7. printf(“%d phan tu dau tien cua day: “, n);
8. for (i = 1; i <= n; i++)
9. {
10. an = an2 + an1;
11. printf(“%d ”, an);
12. an2 = an1;
13. an1 = an;
14. }
15.}
Các file đính kèm theo tài liệu này:
- bai_giang_phuong_phap_lap_trinh_ts_ngo_huu_dung_4_phuong_phap_lap_trinh_vong_lap_0986_1985350.pdf