Bài tập 10
Dãy Fibonacy: a0 a1 a2 an-2 an-1 an
Với a
0 = 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
Bài tập 10
Ngôn ngữ lập trình C - 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.}
48 trang |
Chia sẻ: thucuc2301 | Lượt xem: 682 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Giáo trình Ngôn ngữ lập trình C - Bài 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
Ngôn ngữ lập trình C
Vòng lặp
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
Ngôn ngữ lập trình C - Vòng lặp2
Câu lệnh for
Ngôn ngữ lập trình C - 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
3
Câu lệnh for
Ngôn ngữ lập trình C - 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.}
4
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.
Ngôn ngữ lập trình C - 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.}
5
Câu lệnh for - Một số lưu ý
Trong câu lệnh for, có thể sẽ không có phần
Ngôn ngữ lập trình C - 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
6
Câu lệnh for - Một số lưu ý
Trong câu lệnh for, có thể sẽ không có phần
Ngôn ngữ lập trình C - 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
7
Câu lệnh for - Một số lưu ý
Trong câu lệnh for, có thể sẽ không có phần
Ngôn ngữ lập trình C - 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.}
8
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.
Ngôn ngữ lập trình C - 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.}
9
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.
Ngôn ngữ lập trình C - 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.}
10
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 ,
Ngôn ngữ lập trình C - Vòng lặp
1. for (int i = 1, j = 2; i + j < 10; i++, j += 2)
2. printf(“%d\n”, i + j);
11
Câu lệnh while
Ngôn ngữ lập trình C - 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)
12
Câu lệnh while
Ngôn ngữ lập trình C - 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.}
13
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.
Ngôn ngữ lập trình C - 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.}
14
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.
Ngôn ngữ lập trình C - 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.}
15
Câu lệnh While - Một số lưu ý
Không được thêm ; ngay sau lệnh lệnh while.
Ngôn ngữ lập trình C - 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.}
16
Câu lệnh while - Một số lưu ý
Câu lệnh while có thể bị lặp vô tận (loop)
Ngôn ngữ lập trình C - 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.}
17
Câu lệnh do while
Ngôn ngữ lập trình C - 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
Đ
18
Câu lệnh do while
Ngôn ngữ lập trình C - 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.}
19
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.
Ngôn ngữ lập trình C - 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);
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.
Ngôn ngữ lập trình C - 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.}
21
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)
Ngôn ngữ lập trình C - 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.
22
for, while, do while
Đều có khả năng lặp lại nhiều hành động.
Ngôn ngữ lập trình C - 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);
23
for, while, do while
Số lần lặp xác định ngay trong câu lệnh
Ngôn ngữ lập trình C - 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);
24
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.
Ngôn ngữ lập trình C - 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);
25
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?
Ngôn ngữ lập trình C - Vòng lặp26
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)
Ngôn ngữ lập trình C - Vòng lặp27
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
Ngôn ngữ lập trình C - Vòng lặp28
Bài tập 3a
Ngôn ngữ lập trình C - 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.}
29
Bài tập 3b
Ngôn ngữ lập trình C - 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.}
30
Bài tập 3c
Ngôn ngữ lập trình C - 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.}
31
Bài tập 3d
Ngôn ngữ lập trình C - 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);
}
32
Bài tập 3e
Ngôn ngữ lập trình C - 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.}
33
Bài tập 4a
Ngôn ngữ lập trình C - 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.}
34
Bài tập 4b
Ngôn ngữ lập trình C - 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.}
35
Bài tập 4c
Ngôn ngữ lập trình C - 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.}
36
Bài tập 4d
Ngôn ngữ lập trình C - 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.}
37
Bài tập 4e
Ngôn ngữ lập trình C - 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.}
38
Bài tập 5
Ngôn ngữ lập trình C - 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.}
39
Bài tập 6
Ngôn ngữ lập trình C - 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.}
40
Bài tập 7
Ngôn ngữ lập trình C - 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.}
41
Bài tập 8
Ngôn ngữ lập trình C - 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.}
42
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
Ngôn ngữ lập trình C - Vòng lặp43
Bài tập 9
Ngôn ngữ lập trình C - 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.}
44
Bài tập 9
Ngôn ngữ lập trình C - 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.}
45
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
Ngôn ngữ lập trình C - Vòng lặp46
Bài tập 10
Ngôn ngữ lập trình C - 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.}
47
Bài tập
S = 1/2 + 1/4 + + 1/2n
S = 1 + 1/3 + 1/5 + + 1/(2n+1)
S = 1/(1x2) + 1/(2x3) + + 1/(nxn+1)
S = 1/2 + 2/3 + + n/(n+1)
S = 1 + 1/(1 + 2) + + 1/(1 + 2 + + n)
Liệt kê tất cả ước số của số nguyên dương n
Tính tổng các ước số của số nguyên dương n
Đếm số lượng ước số của số nguyên dương n
Tính tổng các ước số chẵn của số nguyên dương n
Ngôn ngữ lập trình C - Vòng lặp48
Các file đính kèm theo tài liệu này:
- ts_ngo_huu_dung4_ngon_ngu_lap_trinh_c_vong_lap_4057_2021774.pdf