Bài giảng Hệ thống thông tin - Chương 3, Phần 3: Các cấu trúc lập trình trong ngôn ngữ C - Ngô Văn Linh

pdf 49 trang Hùng Dũng 04/01/2024 750
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Hệ thống thông tin - Chương 3, Phần 3: Các cấu trúc lập trình trong ngôn ngữ C - Ngô Văn Linh", để 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_he_thong_thong_tin_chuong_3_phan_3_cac_cau_truc_la.pdf

Nội dung text: Bài giảng Hệ thống thông tin - Chương 3, Phần 3: Các cấu trúc lập trình trong ngôn ngữ C - Ngô Văn Linh

  1. Chương 3: Các cấu trúc lập trình trong ngôn ngữ C Ngô Văn Linh Bộ môn Hệ thống thông tin Viện Công nghệ thông tin và Truyền thông Đại học Bách Khoa Hà Nội 1
  2. Nội dung chương này  3.1. Cấu trúc lệnh khối  3.2. Cấu trúc rẽ nhánh  3.2.1. Cấu trúc if, if else  3.2.2. Cấu trúc lựa chọn switch  3.3. Cấu trúc lặp  3.3.1. Vòng lặp for  3.3.2. Vòng lặp while  3.4. Các lệnh thay đổi cấu trúc lập trình  3.4.1. continue  3.4.2. break 2
  3. Nội dung chương này  3.1. Cấu trúc lệnh khối  3.2. Cấu trúc rẽ nhánh  3.2.1. Cấu trúc if, if else  3.2.2. Cấu trúc lựa chọn switch  3.3. Cấu trúc lặp  3.3.1. Vòng lặp for  3.3.2. Vòng lặp while  3.4. Các lệnh thay đổi cấu trúc lập trình  3.4.1. continue  3.4.2. break 3
  4. 3.1. Cấu trúc lệnh khối  Thể hiện cấu trúc tuần tự  Lệnh khối là dãy các câu lệnh được đặt trong cặp dấu ngoặc nhọn {} { lenh_1; lenh_2; . lenh_n; } 4
  5. Ví dụ lệnh khối #include #include #include void main() { float r, cv, dt; // Khai bao 3 bien thuc printf("\n Nhap vao ban kinh r = "); scanf("%f",&r); cv = 2*M_PI*r; // Tinh chu vi dt = M_PI*r*r; // Tinh dien tich printf("\nChu vi = %10.2f\nDien tich = %10.2f",cv, dt); getch(); } 5
  6. 3.1. Cấu trúc lệnh khối (tiếp)  Lệnh khối lồng nhau:  Trong một lệnh khối có thể chứa lệnh khối khác  Sự lồng nhau là không hạn chế { lenh; { lenh; } } 6
  7. 3.1. Cấu trúc lệnh khối - ví dụ #include #include void main() //Noi dung cua ham main() cung printf(“\n Gia tri cua c = %d la mot khoi lenh day la c trong”,c); { printf(“\n Tang gia tri cua c // khai bao bien them 10 don vi”); int c; c = c + 10; printf(“\n Gia tri cua c c = 10; = %d day la c trong”,c); printf(“Gia tri cua c = %d } day la c ngoai”,c); printf(“\n Gia tri cua c = // bat dau mot khoi lenh %d day la c ngoai”,c); khac getch(); { }// ket thuc khoi lenh cua ham int c; main() c = 10; 7
  8. 3.1. Cấu trúc lệnh khối - ví dụ (tiếp)  Kết quả: Gia tri cua c = 10 day la c ngoai Gia tri cua c = 10 day la c trong Tang gia tri cua c them 10 don vi Gia tri cua c = 20 day la c trong Gia tri cua c = 10 day la c ngoai 8
  9. Nội dung chương này  3.1. Cấu trúc lệnh khối  3.2. Cấu trúc rẽ nhánh  3.2.1. Cấu trúc if, if else  3.2.2. Cấu trúc lựa chọn switch  3.3. Cấu trúc lặp  3.3.1. Vòng lặp for  3.3.2. Vòng lặp while  3.4. Các lệnh thay đổi cấu trúc lập trình  3.4.1. continue  3.4.2. break 9
  10. 3.2. Cấu trúc rẽ nhánh  3.2.1. Cấu trúc if, if else  3.2.2. Cấu trúc lựa chọn switch 10
  11. 3.2.1. Cấu trúc if, if else  Cú pháp cấu trúc if if (bieu_thuc_dieu_kien) lenh;  Cú pháp cấu trúc if else if (bieu_thuc_đieu_kien) lenh_1; else lenh_2; 11
  12. 3.2.1. Cấu trúc if, if else (tiếp) if(biểu thức điều kiện) if(biểu thức điều kiện) lệnh 1; lệnh 1; else lệnh kế tiếp; lệnh 2; lệnh kế tiếp; !=0 ==0 biểu thức điều kiện? biểu thức điều kiện? =0 lệnh 1 !=0 lệnh 1 lệnh 2 lệnh kế tiếp lệnh kế tiếp 12
  13. 3.2.1. Cấu trúc if, if else (tiếp)  Ví dụ: Bài toán tìm số lớn nhất trong 2 số thực a và b: #include #include else void main() max = a; { printf(“\n So lon nhat // khai bao bien trong 2 so %.0f va float a, b; %.0f la %.0f “,a,b,max); float max; getch(); printf(“ Nhap gia tri a va }//ket thuc ham main() b: “);  Kết quả: scanf(“%f %f”,&a,&b); Nhap vao 2 gia tri a va b: 23 247 if(a<b) max = b; So lon nhat trong hai so 23 va 247 la 247 13
  14. 3.2.1. Cấu trúc if, if else - Luyện tập  Lập chương trình tìm số nhỏ nhất trong ba số thực nhập vào từ bàn phím.  Viết chương trình nhập vào một số nguyên từ bàn phím, nếu là số chẵn thì hiển thị "Ban vua nhap so chan", nếu là số lẻ thì hiển thị "Ban vua nhap so le".  Nhập vào 3 số thực, kiểm tra xem nó có tạo thành 3 cạnh của tam giác không? 14
  15. 3.2.2. Cấu trúc lựa chọn switch  Cú pháp cấu trúc switch switch (bieu_thuc) { case gia_tri_1: lenh_1; [break]; case gia_tri_2: lenh_2; [break]; case gia_tri_n: lenh_n; [break]; [default: lenh_n+1; [break];] } 15
  16. 3.2.2. Cấu trúc lựa chọn switch (tiếp)  Giá trị của biểu thức kiểm tra (bieu_thuc) phải là số nguyên:  Phải có kiểu dữ liệu là char, int, long.  Tương ứng các giá trị sau case (gia_tri_1, gia_tri_2, ) cũng phải là số nguyên. 16
  17. 3.2.2. Cấu trúc lựa chọn switch (tiếp) 17
  18. 3.2.2. Cấu trúc lựa chọn switch (tiếp)  Quan sát ví dụ: #include #include case 1: printf("\nSo mot"); void main() break; { case 2: printf("\nSo hai"); int n; break; printf("Hay cho toi mot so nguyen"); default: printf("\nKhong fai 0,1,2"); scanf("%d",&n); } switch(n) getch(); { } case 0: printf("\n So khong"); break; 18
  19. 3.2.2. Cấu trúc lựa chọn switch (tiếp)  Trong ví dụ trên, khi chạy chương trình thì sẽ như thế nào?  Nếu ta bỏ break đi thì sao? 19
  20. 3.2.2. Cấu trúc lựa chọn switch (tiếp)  Kết quả khi chạy chương trình: 20
  21. 3.2.2. Cấu trúc lựa chọn switch (tiếp)  Nếu ta bỏ break đi: 21
  22. 3.2.2. Cấu trúc lựa chọn switch-Luyện tập  Trong một năm các tháng có 30 ngày là 4, 6, 9, 11 còn các tháng có 31 ngày là 1, 3, 5, 7, 8, 10, 12. Riêng tháng hai có thể có 28 hoặc 29 ngày.  Hãy viết chương trình nhập vào 1 tháng, sau đó đưa ra kết luận tháng đó có bao nhiêu ngày. 22
  23. 3.2.2. Cấu trúc lựa chọn switch (tiếp) #include case 4: #include case 6: int main () case 9: { case 11: int thang; clrscr(); printf("\n Thang %d printf("\n Nhap vao thang trong nam co 30 ngay ",thang); "); break; scanf("%d",&thang); case 2: switch(thang) printf ("\ Thang 2 co { 28 hoac 29 ngay"); case 1: break; case 3: default : case 5: printf("\n Khong co case 7: thang %d", thang); case 8: break; case 10: } case 12: getch(); printf("\n Thang %d co 31 ngay return 0; ",thang); } 23 break;
  24. 3.2.2. Cấu trúc lựa chọn switch (tiếp) #include #include int main () { case 4: int thang; clrscr(); case 6: do { case 9: printf("\n Nhap vao thang trong case 11: nam "); printf("\n Thang %d scanf("%d",&thang); co 30 ngay ",thang); } break; while(thang 12); default : switch(thang) printf("\n Thang %d { co 31 ngay ", thang); case 2: break; printf ("\ Thang 2 co 28 hoac 29 } ngay"); getch(); break; return 0; } 24
  25. Nội dung chương này  3.1. Cấu trúc lệnh khối  3.2. Cấu trúc rẽ nhánh  3.2.1. Cấu trúc if, if else  3.2.2. Cấu trúc lựa chọn switch  3.3. Cấu trúc lặp  3.3.1. Vòng lặp for  3.3.2. Vòng lặp while  3.4. Các lệnh thay đổi cấu trúc lập trình  3.4.1. continue  3.4.2. break 25
  26. 3.3. Cấu trúc vòng lặp  3.3.1. Vòng lặp for  3.3.2. Vòng lặp while 26
  27. 3.3.1. Vòng lặp for  Mục đích  Dùng để thực hiện lặp đi lặp lại một công việc nào đó với số lần lặp xác định.  Cú pháp: for(bieu_thuc_1;bieu_thuc_2;bieu_thuc_3) { day_cac_lenh; }  Trong đó:  bieu_thuc_1: Khởi tạo giá trị ban đầu cho vòng lặp  bieu_thuc_2: Điều kiện tiếp tục vòng lặp  bieu_thuc_3: Thực hiện bước tăng của vòng lặp  Chú ý các biểu thức 1, 2, 3 có thể có hoặc không 27
  28. 3.3.1. Vòng lặp for (tiếp) 28
  29. 3.3.1. Vòng lặp for - ví dụ  Đưa ra màn hình các số nguyên lẻ nhỏ hơn 100 #include #include void main() { int i; for(i = 1;i<100;i++)//so vong lap la 99 { if(i%2 == 1) printf("%5d",i); if((i+1)%20 ==0) printf("\n"); } getch(); } 29
  30. 3.3.1. Vòng lặp for - ví dụ (tiếp)  Đưa ra màn hình các số nguyên lẻ nhỏ hơn 100 #include #include void main() { int i; for(i = 1;i<100;i+=2)//so vong lap la 50 { printf("%5d",i); if((i+1)%20 ==0) printf("\n"); } getch(); } 30
  31. 3.3.1. Vòng lặp for - ví dụ (tiếp)  Kết quả: 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99 31
  32. 3.3.2. Vòng lặp while  Mục đích:  Dùng để thực hiện lặp đi lặp lại một công việc nào đó với số lần lặp không xác định.  Cú pháp: Có 2 dạng: while (bieu_thuc) { lenh; } hoặc do { lenh; } while (bieu_thuc); 32
  33. 3.3.2. Vòng lặp while (tiếp) 33
  34. 3.3.2. Vòng lặp while (tiếp)  while và do{ } while  while:  Kiểm tra điều kiện vòng lặp (tức là giá trị của biểu thức) trước rồi mới thực hiện lệnh.  Các lenh sau while có thể không được thực hiện lần nào.  do{ } while:  Thực hiện lenh trước rồi mới kiểm tra dieu_kien của vòng lặp.  Các lenh sau do được thực hiện ít nhất 1 lần dù bieu_thuc có giá trị như thế nào. 34
  35. 3.3.2. Vòng lặp while (tiếp)  Ví dụ: Nhập vào điểm của một sinh viên, nếu điểm đó không [0, 10] thì thông báo cho người dùng nhập lại.  Cách làm:  Nếu dùng lệnh if Chỉ kiểm tra được 1 lần  Không dùng for được vì chưa biết trước số lần lặp.  Sử dụng vòng lặp while 35
  36. 3.3.2. Vòng lặp while - ví dụ (tiếp) #include #include void main() { float diem; printf("Chuong trinh nhap diem sinh vien\n"); printf("Nhap diem (0 10) { printf("\nBan nhap khong dung!\n"); printf("Ban hay nhap lai (0<=diem<=10):"); scanf("%f",&diem); } printf("\nDiem ban vua nhap la: %.2f", diem); getch(); } 36
  37. 3.3.2. Vòng lặp while - ví dụ (tiếp) #include #include void main() { float diem; clrscr(); printf("Chuong trinh nhap diem sinh vien\n"); do { printf("Nhap diem (0 10) printf("\nBan nhap khong dung!\n"); } while (diem 10); printf("\nDiem ban vua nhap la: %.2f", diem); getch(); } 37
  38. 3.3.2. Vòng lặp while - kết quả (tiếp) 38
  39. Nội dung chương này  3.1. Cấu trúc lệnh khối  3.2. Cấu trúc rẽ nhánh  3.2.1. Cấu trúc if, if else  3.2.2. Cấu trúc lựa chọn switch  3.3. Cấu trúc lặp  3.3.1. Vòng lặp for  3.3.2. Vòng lặp while  3.4. Các lệnh thay đổi cấu trúc lập trình  3.4.1. continue  3.4.2. break 39
  40. 3.4. Các lệnh thay đổi cấu trúc lập trình  continue  break 40
  41. 3.4. Các lệnh thay đổi cấu trúc lập trình  Đối với các lệnh lặp:  while, do{ } while, hoặc for  Thay đổi việc thực hiện lệnh trong vòng lặp C cung cấp 2 lệnh:  continue;  break; 41
  42. 3.4. Các lệnh thay đổi cấu trúc lập trình (tiếp)  continue  Bỏ qua việc thực hiện các câu lệnh nằm sau lệnh continue trong thân vòng lặp.  Chuyển sang thực hiện một vòng lặp mới  break  Thoát khỏi vòng lặp ngay cả khi biểu thức điều kiện của vòng lặp vẫn còn được thỏa mãn. 42
  43. 3.4. Các lệnh thay đổi cấu trúc lập trình (tiếp)  Ví dụ: #include #include void main() { int i; for(i = 1;i<=10;i++) { if(i == 5) continue; printf(“%5d”,i); if(i==7) break; } getch(); } 43
  44. 3.4. Các lệnh thay đổi cấu trúc lập trình (tiếp)  Ví dụ: Nhập vào 1 số nguyên. Kết luận số đó là số nguyên tố hay là hợp số? 44
  45. 3.4. Các lệnh thay đổi cấu trúc lập trình (tiếp) #include #include #include void main(){ int N, i, OK = 1; printf("\nNhap gia tri N : "); scanf("%d", &N); if (N<2) printf("\nSo %d khong la so nguyen to va khong la hop so.", N); else{ for (i=2; i<=(int)sqrt(N); i++) if (N%i == 0) { OK = 0; break; } if (OK) printf("\nSo %d la so nguyen to.", N); else printf("\nSo %d la hop so.", N);} getch(); } 45
  46. Bài tập  Bài 1: Lập chương trình giải phương trình bậc hai: ax2 + bx + c = 0 với a, b, c nhập vào từ bàn phím.  Bài 2: Viết chương trình nhập một số nguyên n từ bàn phím và đưa ra n! (theo 3 cách)  Bài 3: Viết chương trình nhập một số nguyên dương n từ bàn phím, đưa ra tổng các số từ 1 đến n (theo 3 cách) 46
  47. Bài tập (tiếp)  Bài 4: Viết chương trình nhập một số nguyên dương n từ bàn phím, đưa ra tổng các số chẵn từ 1 đến n (theo 3 cách)  Bài 5: Viết chương trình kiểm tra một số nguyên nhập từ bàn phím có phải là số nguyên tố hay không ?  Bài 6: Lập trình tính tổng  S = 1 + ½ + 1/3 + + 1/n  với n là số nguyên dương nhập từ bàn phím 47
  48. Bài tập (tiếp)  Bài 7: Viết chương trình nhập vào 2 số nguyên dương từ bàn phím và đưa ra ước số chung lớn nhất của chúng.  Bài 8: Viết chương trình nhập vào 2 số nguyên từ bàn phím và đưa ra bội số chung nhỏ nhất của chúng. 48