IV Cỏc cấu trỳc điều khiển chương trỡnh
IV.3 Cấu trỳc switch
Cấu trỳc switch cho phộp lựa chọn một nhỏnh trong nhiều khả năng tuỳ vào điều kiện xẩy ra. Cỳ phỏp như sau
switch (<bt_E>) { case <bt_1>: S1 ; case <bt_2>: S2 ; . . . case <bt_n>: Sn ; [ default : S ; ] } Trong đú − <bt_E> là biểu thức nguyờn. − <bt_1>, <bt_2>,..,<bt_n> là cỏc biểu thức hằng, nguyờn và chỳng phải khỏc nhau.
− S1,S2, .., Sn , S là một hoặc nhiều lệnh được gọi là thõn của cấu trỳc switch.
− case, default là cỏc từ khoỏ
Sự hoạt động của switch
Đầu tiờn <bt_E> được tớnh, sau đú lần lượt so sỏnh giỏ trị của <bt_E> với cỏc biểu thức hằng <bt_1>, <bt_2>,..<bt_n>.
Nếu giỏ trị của một biểu thức hằng thứ k trong cỏc biểu thức này trựng với giỏ trị
của <bt_E> thỡ chương trỡnh sẽ thực hiện cỏc lệnh bắt đầu từ Sk và tiếp tục cỏc lệnh phớa dưới cho tới khi:
- gặp cõu lệnh : break (tất nhiờn nếu gặp cỏc cõu lệnh return, exit thỡ cũng kết thỳc)
- gặp dấu đúng múc } hết cấu trỳc switch
Nếu <bt_E> khụng trựng với giỏ trị nào trong cỏc biểu thức hằng thỡ cõu lệnh S (cỏc lệnh sau mệnh đề default nếu cú) sẽ được thực hiện, rồi ra khỏi cấu trỳc switch.
Vớ dụ 3.1: Chương trỡnh nhập một biểu thức đơn giản dạng a⊗b (a, b là cỏc số nguyờn, ⊗
là một trong cỏc dấu phộp toỏn số học +, -, *, x, /, :,) tớnh và in kết quả.
Giải : Ởđõy chỳng ta giả sử cú thể dựng phộp nhõn là dấu * hoặc chữ x, phộp chia cú thể
là dấu : hay /. Giả thiết người dựng nhập biểu thức đỳng dạng a⊗b.
Chỳng ta cú chương trỡnh như sau: 1: #include <stdio.h> 2: #include <conio.h> 3: void main() 4: { 5: int a,b; 6: char tt; // dấu toỏn tử
7: printf("\nnhap bieu thuc don gian :");
8: scanf("%d%c%d",&a,&tt,&b);
9: switch(tt)
10: {
11: case '+': printf("\n %d %c %d = %d ",a,tt,b, a+b);
12: break;
13: case '-': printf("\n %d %c %d = %d ",a,tt,b, a-b);
14: break;
15: case 'x':
16: case '*': printf("\n %d %c %d = %d ",a,tt,b, a*b);
17: break;
18: case ':':
19: case '/': if(b!=0)
20: printf("\n %d %c %d = %d ",a,tt,b, a/b);
21: else
22: printf("loi chia cho 0");
23: break;
24: default: printf("\n\nkhong hieu phep toan %c",tt);
25: }
26: getch();
27: }
Trong chương trỡnh vớ dụ này nếu bạn nhập biểu thức vớ dụ như 9+2 tức là ta cú a=9, b=2, tt (dấu toỏn tử) = ‘+’.
Như vậy mệnh đề case ‘+’ (dũng 11) đỳng, chương trỡnh thực hiện cõu lệnh printf("\n %d %c %d = %d ",a,tt,b, a+b);
break;
và chương trỡnh in ra kết quả
9 + 2 = 11
Nếu bạn nhập 9*2 hoặc 9x2, thỡ sự hoạt động cũng tương tự và kết quả in ra là 9 * 2 = 18
hoặc 9 x 2 = 18
Nếu bạn nhập khụng đỳng phộp toỏn hoặc khụng đỳng khuụn dạng thỡ mệnh đề default
được thực hiện và bạn sẽ nhận được thụng bỏo ‘khong hieu phep toan..’.
Lưu ý :
− Khi hết cỏc lệnh (Si) tương ứng của mệnh đề case <bt_i> nếu khụng cú cõu lệnh break (hoặc một lệnh kết thỳc khỏc) thỡ điều khiển được chuyển tới lệnh Si+1 mà khụng cần kiểm tra biểu thức hằng <bt_i+1> cú bằng <bt_E> hay khụng.
− Mệnh đề default cú thể xuất hiện tại vị trớ tuỳ ý trong thõn của switch chứ khụng nhất thiết phải là cuối của cấu trỳc ( tất nhiờn khi đú cần cõu lệnh break).
− Cấu trỳc switch cú thể lồng nhau hoặc cú thể chứa cỏc cấu trỳc điều khiển khỏc.