III.Cấu trúc if lồng nhau
-Quyết định sẽ thực hiện 1 trong n khối lệnh cho trước.
*Cú pháp lệnh
-Cú pháp là một trong 2 dạng trên, nhưng trong 1 hoặc nhiều khối lệnh bên trong phải chứa ít nhất một trong 2 dạng trên gọi là cấu trúc if lồng nhau.
-Thường cấu trúc if lồng nhau càng nhiều cấp độ phức tạp càng cao, chương trình chạy càng chậm và trong lúc lập trình dễ bị nhầm lẫn.
Lưu ý: Các lệnh if…else lồng nhau thì else sẽ luôn luôn kết hợp với if nào chưa có else gần nhất. Vì vậy khi gặp những lệnh if không có else, Bạn phải đặt chúng trong những khối lệnh rõ ràng để tránh bị hiểu sai câu lệnh.
Ví dụ: Bạn viết các dòng lệnh sau:
Code:
… if (n > 0) if (a > b) x = a; else x = b; …
Code:
… if (n > 0) if (a > b) x = a; else x = b; …
lệnh. Bạn viết lại như sau:
Code:
… if (n > 0) { if (a > b) x = a; } else x = b; …
*Mô tả giải thuật: Điểm số nhập vào nếu hợp lệ(0 <= điểm <= 10), bạn tiếp tục công việc xếp loại, ngược
lại thông báo "Nhập điểm không hợp lệ". Việc xếp loại bạn sử dụng cấu trúc else if.
*Chương trình sẽ được viết như sau
Code:
#include <stdio.h> #include <conio.h> main() { float diem; printf("Nhap vao diem so: "); scanf("%f", &fdiem); if (diem >=0 && diem <=10) { if (diem >=9) printf("Xep loai = Xuat sac.\n"); else if (diem >=8) printf("Xep loai = Gioi.\n"); else if (diem >=7) printf("Xep loai = Kha.\n"); else if (diem >=6) printf("Xep loai = TBKha.\n"); else if (diem >=5) printf("Xep loai = TBinh.\n"); else printf("Xep loai = Yeu.\n"); } else printf("Nhap diem khong hop le.\n"); getch(); }
-Giả sử trong cấu trúc else if không có dòng else printf("Xep loai = Yeu.\n") thì khi đó dòng else printf("Nhap diem khong hop le.\n") sẽ thuộc về cấu trúc else if chứ không thuộc về if (diem >=0 && diem <= 10).
-Đối với trường hợp đó bạn cần phải đặt cấu trúc else if vào trong { }, thì khi đó dòng else printf("Nhap diem khong hop le.\n) sẽ thuộc về if (diem >= 0 && diem <= 10).
-Nói như vậy chắc nhiều người vẫn chưa hình dung ra chương trình sẽ chạy như nào mình sẽ thêm một ví dụ nữa mọi người sẽ hiểu thêm
Ví dụ: Viết chương trình nhập vào 3 số nguyên a, b, c. Tìm và in ra số lớn nhất.
*Mô tả giải thuật:Trước tiên bạn so nếu a>b, mà a>c thì a lớn nhất, ngược lại c lớn nhất, còn nếu a<=b, mà
c<b thì b lớn nhất, ngược lại c lớn nhất.
*Chương trình sẽ được viết như sau
Code:
#include <stdio.h> #include <conio.h> main() { int a, b, c; printf("Nhap vao so a: "); scanf("%d", &a); printf("Nhap vao so b: "); scanf("%d", &b); printf("Nhap vao so c: "); scanf("%d", &c); if (a > b) if (a > c) printf("%d lon nhat.\n", a); else printf("%d lon nhat.\n", c); else if (b > c) printf("%d lon nhat.\n", b); else printf("%d lon nhat.\n", c); getch(); }
-Lệnh switch cũng giống cấu trúc else if, nhưng nó mềm dẻo hơn và linh động hơn nhiều so với sử dụng if.
- Tuy nhiên, nó cũng có mặt hạn chế là kết quả của biểu thức phải là giá trị hằng nguyên (có giá trị cụ thể).
-Một bài toán sử dụng lệnh switch thì cũng có thể sử dụng if, nhưng ngược lại còn tùy thuộc vào giải thuật của bài toán.
*Cú pháp:
Code:
switch (biểu thức) { case n1 : lệnh 1; break; case n2 : lệnh 2; break; … case nk : lệnh n; break; default : lệnh; [break;] }
-từ khóa switch, case, break, default phải viết bằng chữ thường
-biểu thức phải là có kết quả là giá trị nguyên (char, int, long,…)
-Lệnh 1, 2…n có thể gồm nhiều lệnh, nhưng không cần đặt trong cặp dấu { }
*Sự hoạt động của toán tử switch phụ thuộc vào giá trị của biểu thức trong cặp dấu (biểu thức)
-Khi giá trị này bằng ni (1<=i<=k) máy sẽ nhảy tới câu lệnh có nhãn case ni.
-Khi giá trị biểu thức khác tất cả các ni thì cách làm việc của máy phụ thuộc vào sự có mặt hay vắng của default.
+khi có default máy nhảy tới câu lệnh có nhãn default
+khi không có default máy ra khỏi toán tử switch
*Ra khỏi switch: Khi gặp câu lệnh break hoặc dấu } máy sẽ ra khỏi switch. Ta cũng có thể sử dụng câu lệnh goto trong thân toán tử switch để nhảy tới một câu lệnh bất kì bên ngoài switch.Khi toán tử switch nằm trong thân một hàm nào đó ta có thể sử dụn return trong thân của switch để ra khỏi hàm này.
(return và goto mình sẽ giới thiệu sau).
-Lưu ý:
+Khi máy nhảy tới một câu lệnh nào đó thì sự hoạt động tiếp theo của nó sẽ phụ thuộc vào câu lệnh đứng sau câu lệnh này.
Ví dụ khi máy nhảy tới câu lệnh có nhãn ni thì nó sẽ thực hiện tất cả câu lệnh sau nó có thể sẽ nhảy sang nhóm lệnh có nhãn ni+1 đến khi nào gặp câu lệnh break nó sẽ thoát khỏi switch.
+Nếu mỗi nhóm lệnh được kết thức bằng break hì toán tử switch sẽ thưc hiện chỉ một trong các nhóm lệnh này.
Ví dụ: Viết chương trình nhập vào tháng và in ra quý của năm.
*Mô tả giải thuật: tháng chạy từ 1-12 nếu nhập không đúng kết thúc chương trình.. dùng lệnh switch gộp trong trường hợp nhập đúng
*Chương trình sẽ viết như sau:
Code:
#include <stdio.h> #include <conio.h> main() { int thang; printf("Nhap vao thang: "); scanf("%d", &thang); switch(thang) { case 1: case 2: case 3 : printf("Quy 1.\n"); break; case 4: case 5: case 6: printf("Quy 2.\n"); break; case 7: case 8: case 9: printf("Quy 3.\n"); break; case 10: case 11: case 12: printf("Quy 4.\n"); break; default : printf("Ban phai nhap vao so trong khoang 1..12\n"); } getch(); }
- Ý nghĩa lệnh, khối lệnh.
- Cú pháp, ý nghĩa, cách sử dụng lệnh if, lệnh switch.
- Một số bài toán sử dụng lệnh if, switch thông qua các ví dụ.
- So sánh, đánh giá một số bài toán sử dụng lệnh if hoặc switch.
- Cách sử dụng các cấu trúc lồng nhau.
Bài tập:
1.Viết chương trình nhập vào ngày tháng năm (dd:mm:yy), cho biết đó là thứ mấy trong tuần.
2.Viết chương trình nhập vào tháng, in ra tháng đó có bao nhiêu ngày
0 comments:
Post a Comment
Click to see the code!
To insert emoticon you must added at least one space before the code.