1. Câu lệnh for
2. Câu lệnh While
3. Câu lệnh do... while
4. Một số kinh nghiệm lập trình
Đặ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
66 trang |
Chia sẻ: candy98 | Lượt xem: 585 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Bài giảng Nhập môn Lập trình C - Chương 5: Câu lệnh lặp - Trần Thị Kim Chi, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Nội dungNMLT - Câu lệnh lặpCâu lệnh for1Câu lệnh while2Câu lệnh do while3Một số kinh nghiệm lập trình4Đặ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 printfViế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ápSử 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 whileNMLT - Câu lệnh lặpCâu lệnh forNMLT - Câu lệnh lặpĐSfor (; ; ) ;, , :là biểu thức C bất kỳ có chức năng riêng: đơn hoặc khối lệnh.Sự thực hiện câu lệnhB1: Thực hiện (nếu có), thường khởi tạo các giá trị.B2: Tính trị của .B3: Nếu trị của = TRUE, thì thực hiện , sau đó thực hiện thực hiện (thường tăng giá trị biến đếm) và quay về B2. Ngược lại ( = FALSE) thì chuyển sang B4.B4: Thoát khỏi vòng lặp, và chuyển quyền điều khiển sang câu lệnh sau lệnh for.Câu lệnh forNMLT - Câu lệnh lặpvoid main(){ int i; for (i = 0; i #include void main(){ int i, n, sum; printf(”Input a number:”); scanf(“%d”, &n; sum = 0; for (i=1 ; iNMLT - Câu lệnh lặpint i;for (i = 0; i ĐSCâu lệnh for - Một số lưu ýTrong câu lệnh for, có thể sẽ không có phần NMLT - Câu lệnh lặpint i;for (i = 0; i ĐSCâu lệnh for - Một số lưu ýTrong câu lệnh for, có thể sẽ không có phần NMLT - Câu lệnh lặpint i;for (i = 0; i = 10) break; printf(“i=%d\n”,i);}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.NMLT - Câu lệnh lặpfor (i = 0; i Tương đương câu lệnh rỗng.NMLT - Câu lệnh lặpfor (i = 0; i , , 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 ,NMLT - Câu lệnh lặpfor (int i = 1, j = 2; i + j ĐSwhile () ;Câu lệnh đơn hoặcCâu lệnh phức (kẹpgiữa { và })Biểu thức C bất kỳ,thường là biểu thứcquan hệ cho kết quả0 (sai) và != 0 (đúng)Câu lệnh whileNMLT - Câu lệnh lặpint i = 0;while (i #includevoid main (){ clrscr(); int i, n, sum; printf(”Input n= ”); scanf(“%d”,&n); i = 1; sum = 0; while(i= 1) { while (m >= 1) { printf(“%d”, m); m--; } n--; }}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.NMLT - Câu lệnh lặpvoid main(){ int n = 1; while (n > 10) { printf(“%d\n”,n); n--; } }Câu lệnh While - Một số lưu ýKhông được thêm ; ngay sau lệnh lệnh while.NMLT - Câu lệnh lặpint n = 0;while (n SĐdo ;while ();Câu lệnh đơn hoặcCâu lệnh phức (kẹpgiữa { và })Biểu thức C bất kỳ,thường là biểu thứcquan hệ cho kết quả0 (sai) và != 0 (đúng)Câu lệnh do whileNMLT - Câu lệnh lặpint i = 0;do{ printf(“i=%d\n”,i); i++;}while (i #include void main (){ unsigned int n,i,sum; clrscr(); printf(”Input a positive number: “); scanf(“%d”,&n); sum=0; i=1; do { sum+=i; i++; } while(i 100);}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)NMLT - Câu lệnh lặp int n = 1; do { printf(“ %d”, n); n--; } while (n n);while & do whilewhile 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.NMLT - Câu lệnh lặpint n = 100;while (n 10);Ví dụ: Đọc vào một mật khẩu người dùng tối đa attempts lầnfor (i=0; i#include void main(){ int num,sum=0; clrscr(); while(1) { cout > num; if (num 0; i /= 2 ) printf(“%d\t”, i) ;for ( int i = 0; i j ){ y += i; i––;}Câu hỏi và bài tập3. Hãy chuyển đổi các câu lệnh while thành câu lệnh dowhile:int x =10, i = x, y = 0, j = 0;while ( i > j ){ y += i; i––;}Câu hỏi và bài tập4. Xét các đoạn lệnh sau. Hãy cho biết kết quả xuất ra màn hình của các biến x, y. Giải thích.int x = 0, y = 1;for ( int i = 0; i 0). Hãy cho biết:Có phải là số đối xứng? Ví dụ: 121, 12321, Có phải là số chính phương? Ví dụ: 4, 9, 16, Có phải là số nguyên tố? Ví dụ: 2, 3, 5, 7, Chữ số lớn nhất và nhỏ nhất?Các chữ số có tăng dần hay giảm dần không?NMLT - Câu lệnh lặpBài tập thực hànhNhập một số nguyên dương n. Tính:S = 1 + 2 + + nS = 12 + 22 + + n2S = 1 + 1/2 + + 1/nS = 1*2**n = n!S = 1! + 2! + + n!Nhập 3 số nguyên a, b và n với a, b >n; sogoc = n; sodao = 0; while (sogoc > 0) { donvi = sogoc % 10; sodao = sodao*10 + donvi; sogoc = sogoc / 10; } if (sodao == n) coutvoid main(){ int n, n_can_nguyen; cout>n; n_can_nguyen = int(sqrt(n)); if (n_can_nguyen*n_can_nguyen == n) cout>n; souoc = 0; for (i = 1; i 0) { donvi = n % 10; n = n / 10; if (donvi max) max = donvi; } cout>n; s = 0; for (i = 1; i >n; s = 0; for (i = 1; i >n; s = 0; for (i = 1; i >n; s = 1; for (i = 2; i >n; s = 0; for (i = 1; i >a>>b>>n; } while (a >= n || b >= n); s = 0; for (i = 1; i >n; } while (n = 50); s = 0; for (i = 2; i >n; cout 0) { donvi = n % 10; n = n / 10; cout 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) = 4NMLT - Câu lệnh lặpBài tập 9NMLT - Câu lệnh lặpvoid main(){ int a, b, uscln; cout>a>>b; if (a >a>>b; while (a b) { if (a > b) a = a – b; else b = b – a; } cout 1, n = 2 => 1 1n > 2Lưu lại 2 phần tử trước nó là a và bMỗ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-11 0 1 1 2 3 5 8 13 21 NMLT - Câu lệnh lặpBài tập 10NMLT - Câu lệnh lặpvoid main(){ int n, an, an1, an2, i; cout>n; an2 = 1; an1 = 0; cout<<“ phan tu dau tien cua day: “; for (i = 1; i <= n; i++) { an = an2 + an1; cout<<“ ”<< an; an2 = an1; an1 = an; }}Bài tậpS = 1/2 + 1/4 + + 1/2nS = 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 nTí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 nTính tổng các ước số chẵn của số nguyên dương nNMLT - Câu lệnh lặp