Giáo trình ngôn ngữ C



tải về 2.34 Mb.
Chế độ xem pdf
trang36/62
Chuyển đổi dữ liệu16.03.2023
Kích2.34 Mb.
#54376
1   ...   32   33   34   35   36   37   38   39   ...   62
C ĐHQGHN

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 () 
 { 
case
S


case
S


. . .
case
S
n

[ default : S ; ] 
 } 
Trong đó
là biểu thức nguyên.
, ,.., là các biểu thức hằng, nguyên và chúng phải khác nhau. 
− S
1,
S
2, .., 
S
n , 
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  được tính, sau đó lần lượt so sánh giá trị của  với các 
biểu thức hằng ,..
ƒ
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  thì chương trình sẽ thực hiện các lệnh bắt đầu từ S
k
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  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. 


Gi¸o tr×nh tin häc c¬ së II - N
gôn ngữ
 C
47
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  
2: 
#include  
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 
và thoát khỏi cấu trúc switch (nhảy tới dòng 26) 


Gi¸o tr×nh tin häc c¬ së II - N
gôn ngữ
 C
48
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 (S
i
) tương ứng của mệnh đề case 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 S
i+1 
mà 
không cần kiểm tra biểu thức hằng có bằng  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. 

tải về 2.34 Mb.

Chia sẻ với bạn bè của bạn:
1   ...   32   33   34   35   36   37   38   39   ...   62




Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2024
được sử dụng cho việc quản lý

    Quê hương