Phương pháp lập trình - Vòng lặp - Ngô Hữu Dũng

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...

pdf51 trang | Chia sẻ: putihuynh11 | Lượt xem: 616 | Lượt tải: 2download
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:

  • pdfbai_giang_phuong_phap_lap_trinh_ts_ngo_huu_dung_4_phuong_phap_lap_trinh_vong_lap_0986_1985350.pdf