Bài giảng Lập trình cơ bản - Chương 4: Lập trình với cấu trúc lặp - Lê Đức Long

pdf 38 trang huongle 6480
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình cơ bản - Chương 4: Lập trình với cấu trúc lặp - Lê Đức Long", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_lap_trinh_co_ban_chuong_4_lap_trinh_voi_cau_truc_l.pdf

Nội dung text: Bài giảng Lập trình cơ bản - Chương 4: Lập trình với cấu trúc lặp - Lê Đức Long

  1. LẬP TRÌNH VỚI CẤU TRÚC LẶP LÊ ĐỨC LONG-NGÔ QUỐC VIỆT 2011
  2. NỘI DUNG 1. Nhắc lại các toán tử BIT 2. Ý nghĩa, cách hoạt động của vòng lặp 3. Lặp với lệnh for 4. Các lệnh ảnh hưởng đến lặp: break, continue. 5. Lặp với lệnh while. 6. Lặp với lệnh do while. 7. Vòng lặp lồng nhau và so sánh các lệnh lặp Ngô Quốc Việt-Lập trình cơ bản 2
  3. NHẮC LẠI CÁC TOÁN TỬ BIT  Số nhị phân: một vị trí nhớ lưu trữ 8 bits. Ký hiệu số nhị phân 01100100b. Nguồn: O’Reilly 2003 Ngô Quốc Việt-Lập trình cơ bản 3
  4. Toán tử BIT Ngô Quốc Việt-Lập trình cơ bản 4
  5. Toán tử & BIT  Kết quả của 45 & 71 là 41 ?.  Cần phân biệt && và &.  Bài tập ngắn: viết hàm kiểm tra chẵn lẻ dựa trên &. Ngô Quốc Việt-Lập trình cơ bản 5
  6. Toán tử OR BIT (|) Ngô Quốc Việt-Lập trình cơ bản 6
  7. Toán tử XOR BIT (^) Ngô Quốc Việt-Lập trình cơ bản 7
  8. Toán tử left và right shift Ngô Quốc Việt-Lập trình cơ bản 8
  9. Ý nghĩa và sử dụng lệnh lặp  Lặp: thực hiện một thao tác / hành động một số lần nhất định. Ví dụ: hít đất 20 cái; hát điệp khúc 2 lần; chạy quanh sân 10 vòng; Tính dãy Fibonacci với n = 100; Tính giai thừa của 1000;  Viết 100 lệnh hay 1000 lệnh “giống nhau”?  Nnlt trình phải hỗ trợ làm điều này các lệnh lặp.  Lệnh lặp thực hiện một khối lệnh với số lần lặp nhất định, hoặc khi chưa thoả điều kiện nào đó. Ngô Quốc Việt-Lập trình cơ bản 9
  10. Xét bài toán tính n!  Input: số nguyên dương n  Output: giá trị của n! Thuật giải thông thường  Bước 1: Gán gt = 1  Bước 2.1: Gán gt = gt * 1 = 1  Bước 2.2: Gán gt = gt * 2 = 1 * 2  Bước 2.3: Gán gt = gt * 3 = 1 * 2 * 3  Bước 2.4: Gán gt = gt * 4 = 1 * 2 * 3 * 4  .  Bước 2.i: Gán gt = gt * i = 1 * 2 * 3 * 4 * * i   Bước 2.n: Gán gt = gt * n = 1 * 2 * 3 * 4 * n  Xuất giá trị gt Ngô Quốc Việt-Lập trình cơ bản 10
  11. Phân biệt các lệnh lặp  Lệnh lặp for: số lần lặp biết trước.  Lệnh lặp while: lặp khi điều kiện lặp còn thỏa hoặc lặp theo số lần biết trước (giống for).  Lệnh lặp do while: giống lệnh lặp while nhưng điều kiện lặp đặt ở cuối vòng lặp.  Lệnh lặp foreach: lặp theo các đối tượng trong một tập hợp (khảo sát sau). Ngô Quốc Việt-Lập trình cơ bản 11
  12. Cấu trúc lặp for  Số lần lặp xác định trước. Dùng một biến đếm để xác định số lần lặp đã làm Ngô Quốc Việt-Lập trình cơ bản 12
  13. Cấu trúc lặp for  Trường hợp lặp 1 câu lệnh for(khởi tạo các biến đếm; kiểm tra số lần lặp; cập nhật các biến đếm số lần lặp) câu lệnh;  Trường hợp lặp nhiều câu lệnh for(khởi tạo các biến đếm; kiểm tra số lần lặp; cập nhật các biến đếm số lần lặp) { lệnh 1; lệnh 2; lệnh 3; // các lệnh trong khối lệnh } Ngô Quốc Việt-Lập trình cơ bản 13
  14. Cấu trúc lặp for  “khởi tạo các biến đếm”: các lệnh chỉ được chạy đúng một lần trong lệnh for.  “kiểm tra số lần lặp”  biểu thức logic: được kiểm tra khi mỗi khi khối lệnh được thực hiện xong.  “cập nhật các biến đếm số lần lặp”  các lệnh gán làm tăng/giảm giá trị biến đếm. Ngô Quốc Việt-Lập trình cơ bản 14
  15. Cấu trúc lặp for-ví dụ #include "stdio.h" #include "conio.h" void main() { int n; printf("Nhap so nguyen n:"); scanf("%i",&n); int gt = 1; for(int i = 1; i <= n; i++) gt = gt * i; printf("n! = %i",gt); getch(); } Ngô Quốc Việt-Lập trình cơ bản 15
  16. Cấu trúc lặp for-ví dụ Tính tổng các số lẻ từ 0 đến n (giá trị nhập vào) #include #include void main(void) { int iDem, iN, iTongLe = 0; printf("Nhap vao so n: \n"); scanf("%d", &iN); iTongLe = 0; for(iDem = 0; iDem <= iN; iDem++) { if (iDem % 2 != 0) //neu iDem la so le iTongLe= iTongLe + iDem; } printf("Tong: %d", iTongLe); getch (); } Ngô Quốc Việt-Lập trình cơ bản 16
  17. Cấu trúc lặp for-ví dụ Lặp với biến đếm giảm - Ví dụ tính tổng các số lẻ #include #include void main(void) { int iDem, iN, iTongLe = 0; printf("Nhap vao so n: \n"); scanf("%d", &iN); iTongLe = 0; for(iDem = iN; iDem > 0; iDem ) { if (iDem % 2 != 0) //neu iDem la so le iTongLe= iTongLe + iDem; } printf("Tong: %d", iTongLe); getch (); } Ngô Quốc Việt-Lập trình cơ bản 17
  18. Lệnh break trong vòng lặp  Nhu cầu cần thoát khỏi vòng lặp khi số lần lặp chưa đủ hay “điều kiện ngừng” chưa thoả mãn.  Cần thoát ra khi có “lỗi” hay “bất thường” trong vòng lặp.  Ví dụ: cần đánh trứng 100 lần. Tuy nhiên ngừng đánh trứng nếu “chén vỡ”. for(int i = 0; i < 100; i ++) { if(bChenVo == true) break; //Tiep tục đánh trứng } Ngô Quốc Việt-Lập trình cơ bản 18
  19. Lệnh break trong vòng lặp  Lệnh break cần được kèm với lệnh if. Ra khỏi false Điều lặp kiện lặp Các lệnh trước lệnh break true Điều kiện break false Các lệnh sau break Ngô Quốc Việt-Lập trình cơ bản 19
  20. Lệnh break trong vòng lặp  Ví dụ: nhập N (input từ bàn phím) số nguyên từ bàn phím. Nếu gặp số zero thì ngừng. Tính tổng các số đã nhập. #include #include void main(void) { int in, itong = 0;, iN printf("Nhap vao so luong so nguyen: \n"); scanf("%d", &iN); for(int i = 0; i < iN; i ++) { printf("Nhap vao 1 so nguyen: "); scanf("%d", &in); if (in == 0) break; //in = 0 thoat vong lap itong += in; } printf("Tong: %d.\n", itong); getch(); } Ngô Quốc Việt-Lập trình cơ bản 20
  21. Lệnh continue trong vòng lặp  Dùng để không thực hiện các lệnh còn lại trong lần lặp hiện tại, và quay trở lại đầu vòng lặp Điều false Ra khỏi kiện lặp lặp Các lệnh trước lệnh continue true Điều kiện continue continue false Các lệnh sau continue Ngô Quốc Việt-Lập trình cơ bản 21
  22. Lệnh continue trong vòng lặp  Lệnh continue cần được kèm với lệnh if, hoặc lệnh lựa chọn switch.  Ví dụ: cần xếp 10000 trứng vào các hộp. Bỏ qua trứng hư, và tiếp tục với các trứng còn lại. false Ngừng iTrung < 10000 xếp trứng true Trứng continue iTrung hư false Xếp iTrung vô hộp Ngô Quốc Việt-Lập trình cơ bản 22
  23. Lệnh continue trong vòng lặp #include "stdio.h" #include "conio.h" void main() { char sUname[20], sPword[20]; int iSolan; printf("Nhap username/password: \n"); scanf("%s %s",&sUname, &sPword); for(iSolan = 0; iSolan < 3; iSolan ++) { if(sUname != “abcde” || sPword != “12345”) continue; } if(iSolan == 3) printf(“Ban da nhap sai uname, pword sai 3 lan\n”); getch(); } Ngô Quốc Việt-Lập trình cơ bản 23
  24. Cấu trúc lặp while  Viết chương trình tìm n sao cho: n! <= m (nhập vào) Không thể sử dụng cấu trúc for vì không biết số lần lặp Ngô Quốc Việt-Lập trình cơ bản 24
  25. Cấu trúc lặp while while (điều kiện lặp) { lệnh 1; lệnh 2; // } điều kiện lặp  biểu thức logic Ngô Quốc Việt-Lập trình cơ bản 25
  26. Cấu trúc lặp while #include "stdio.h" #include "conio.h"; void main() { int m; printf("Nhap m:"); scanf("%i",&m); int n = 1, gt = 1; while (gt <= m) { n++; gt = gt * n; } printf("n = %i",n - 1); getch(); } Ngô Quốc Việt-Lập trình cơ bản 26
  27. Cấu trúc lặp while  Biểu thức: có thể là một biểu thức hoặc nhiều biểu thức con. Nếu là nhiều biểu thức con thì cách nhau bởi dấu phẩy (,) và tính đúng sai của biểu thức được quyết định bởi biểu thức con cuối cùng.  Trong thân while (khối lệnh) có thể chứa một hoặc nhiều cấu trúc điều khiển khác.  Trong thân while có thể sử dụng lệnh continue để chuyển đến đầu vòng lặp (bỏ qua các câu lệnh còn lại trong thân).  Muốn thoát khỏi vòng lặp while tùy ý có thể dùng các lệnh break, goto, return như lệnh for . Ngô Quốc Việt-Lập trình cơ bản 27
  28. Cấu trúc lặp do while  Lặp không xác định số lần lặp.  Tương tự lặp while, nhưng được đặt cuối vòng lặp. Có lợi gì?  Ý nghĩa logic: cần phải làm gì đó trước, rồi kiểm tra nếu thầy chưa thỏa thì làm lại. Ví dụ: kiểm tra user name / password (cần nhập trước mới dữ liệu để kiểm tra) cho đến khi nào nhập đúng. Ngô Quốc Việt-Lập trình cơ bản 28
  29. Cấu trúc lặp do while do { lệnh 1; lệnh 2; // } while (điều kiện lặp); điều kiện lặp  biểu thức logic Biểu thức logic: có thể chứa nhiều biểu thức logic. Mỗi biểu thức cách nhau dấu phẩy. Chỉ xét điều kiện của biểu thức logic cuối cùng. Ngô Quốc Việt-Lập trình cơ bản 29
  30. Cấu trúc lặp do while-Ví dụ #include # define PASSWORD “0123456789” void main(void) { int in; do { printf("Nhap vao password: \n"); scanf("%d", &in); } while (in != PASSWORD) } Ngô Quốc Việt-Lập trình cơ bản 30
  31. Vòng lặp lồng nhau  Cho phép trong một vòng lặp có một hay nhiều vòng lặp khác.  Ví dụ: hãy vẽ hình chữ nhật sau x+++++++++++++++x x+++++++++++++++x x+++++++++++++++x x+++++++++++++++x x+++++++++++++++x x+++++++++++++++x Ngô Quốc Việt-Lập trình cơ bản 31
  32. switch, break và continue Ngô Quốc Việt-Lập trình cơ bản 32
  33. Vòng lặp lồng nhau #include #include void main(void) { int i, ij, iDai, iRong; printf("Nhap vao so ky tu cho chieu dai: \n"); scanf("%d", &iDai); printf(" Nhap vao so ky tu cho chieu rong : \n"); scanf("%d", &iRong); for (i = 0; i < iRong; i++) { for (ij = 0; ij < iDai; ij++) printf("*"); printf("\n"); //xuong dong khi in xong 1 hang } getch(); } Ngô Quốc Việt-Lập trình cơ bản 33
  34. for vs. while Ngô Quốc Việt-Lập trình cơ bản 34
  35. Tóm tắt các lệnh lặp  Vòng lặp for thường sử dụng khi biết được số lần lặp xác định.  Vòng lặp while, do while sử dụng khi không biết rõ số lần lặp  Khi gọi vòng lặp while, do while, nếu biểu thức sai vòng lặp while sẽ không được thực hiện lần nào nhưng vòng lặp do while thực hiện được 1 lần  Số lần thực hiện ít nhất của while là 0 và của do while là 1 Ngô Quốc Việt-Lập trình cơ bản 35
  36. Bài tập 1. Viết lưu đồ và chương trình tính tổ hợp N chập K (kiểm tra K <= N). Trong đó N! C K N K!(N K)! 2. Viết chương trình tính giá trị của đa thức. Cho phép nhập x, n, và các ai (0 i n) từ bàn phím n n 1 Pn an x an 1x a1x a0 3. Viết chương trình vẽ một tam giác đều (có độ dài cạnh nhập từ bàn phím) bằng các dấu *. Ngô Quốc Việt-Lập trình cơ bản 36
  37. Bài tập 4. Viết chương trình tính x x x x (n dấu căn) x x2 xn 5. Viết chương trình tính 1 2! 3! (n 1)! 6. Viết chương trình tính mỗi loại trâu (đứng, nằm, già) theo bài vè sau Trăm trâu, trăm cỏ Trâu đứng ăn năm Trâu nằm ăn ba Ba trâu già ăn một Ngô Quốc Việt-Lập trình cơ bản 37
  38. CÁM ƠN ĐÃ THEO DÕI LÊ ĐỨC LONG-NGÔ QUỐC VIỆT 2011