Cấu trúc lựa chọn: switch case
trong phần này chúng ta sẽ đi tìm hiều về cấu trúc swich case... đây cũng là một lệnh rẽ nhánh giống với lênh IF-ELSE nên các bạn cần phải hiểu rõ if-else mới có thể hiểu được phần này.
để tiện theo dõi bài viết các bạn hãy TẢI VỀ code và chương trình bài tập mình đã làm sẵn :)
sau đây là nội dung chính:
switch (expression) { case constant1: block of instructions 1 break; case constant2: block of instructions 2 break; . . . default: default block of instructions }
Nó hoạt động theo cách sau: switch tính biểu thức và kiểm tra xem nó có bằng constant1 hay không, nếu đúng thì nó thực hiện block of instructions 1 cho đến khi tìm thấy từ khoá break, sau đó nhảy đến phần cuối của cấu trúc lựa chọn switch.
Còn nếu không, switch sẽ kiểm tra xem biểu thức có bằng constant2 hay không. Nếu đúng nó sẽ thực hiện block of instructions 2 cho đến khi tìm thấy từ khoá break.
Cuối cùng, nếu giá trị biểu thức không bằng bất kì hằng nào được chỉ định ở trên (bạn có thể chỉ định bao nhiêu câu lệnh case tuỳ thích), chương trình sẽ thực hiện các lệnh trong phần default: nếu nó tồn tại vì phần này không bắt buộc phải có.
Hai đoạn mã sau là tương đương:
ví dụ switch và if-else tương đương
swith
switch (x) { case 1: printf ("x is 1"); break; case 2: printf("x is 2"); break; default: printf("value of x unknown"); }
if-else
if (x == 1) { printf( "x is 1"); } else if (x == 2) { printf( "x is 2"); } else { printf("value of x unknown"); }
Mình đã nói ở trên rằng cấu trúc của lệnh switch hơi đặc biệt. Chú ý sự tồn tại của lệnh break ở cuối mỗi khối lệnh. Điều này là cần thiết vì nếu không thì sau khi thực hiện block of instructions 1 chương trình sẽ không nhảy đến cuối của lệnh switch mà sẽ thực hiện các khối lệnh tiếp theo cho đến khi nó tìm thấy lệnh break đầu tiên. Điều này khiến cho việc đặt cặp ngoặc nhọn { } trong mỗi trường hợp là không cần thiết và có thể được dùng khi bạn muốn thực hiện một khối lệnh cho nhiều trường hợp khác nhau, ví dụ:
switch (x) { case 1: case 2: case 3: printf( "x is 1, 2 or 3"); break; default: printf( "x is not 1, 2 nor 3"); }
Chú ý rằng lệnh switch chỉ có thể được dùng để so sánh một biểu thức với các hằng. Vì vậy chúng ta không thể đặt các biến (case (n*2):) hay các khoảng (case (1..3):) vì chúng không phải là các hằng hợp lệ.
Nếu bạn cần kiểm tra các khoảng hay nhiều giá trị không phải là hằng số hãy kết hợp các lệnh if và else if
Bài tập luyện tập
1. Declare two variables x and y. Assign values to these variables. Number x should be printed only if it
is less than 2000 or greater than 3000, and number y should be printed only if it is between 100 and 500.
dịch: 1. Khai báo hai biến x và y. Gán giá trị cho các biến này. Số x nên chỉ khi nó được in
là ít hơn so với năm 2000 hoặc lớn hơn 3000, và số y sẽ được in chỉ khi nó là giữa 100 và 500.
Phân Tích Từng bước:
- - khai báo số nguyên x,y
- - yêu cầu nhập x,y
- - nếu 2000 < x <3000
- - nếu đúng in ra x là số nằm giữa 2000 và 3000
- - nếu sai on ra x không phải số nằm giữa 2000 và 3000
- - nếu 100< y < 500
- - nếu đúng in ra y là số nằm giữa 100 và 500
- - nếu sai in ra y không phải số nằm giữa 100 và 500
Sơ đồ khối
kiểm tra số nằm giữa |
code:
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
int x,y;
printf("vao X, Y :");
scanf("%d%d",&x,&y);
if (2000<x && x<3000)
{
printf("X = %d la so nam giua 2000 va 3000",x);
}
else
{
printf("X = %d khong phai la so nam giua 2000 va 3000",x);
}
if (100<y && y<500)
{
printf("\nY = %d la so nam giua 100 va 500",y);
}
else
{
printf("\nY = %d khong phai la so nam giua 100 va 500",y);
}
printf("\n\n\n");
system("pause");
return 0;
}
màn hình chạy chương trình |
Bài 2. Write a program to show your computer’s capabilities. The user types in a letter of the alphabet and your program should display the corresponding language or package available. Some sample input ans output is given below :
Input Output
A or a Ada
B or b Basic
C or c COBOL
D or d dBASE III
f or F Fortran
p or P Pascal
v or V Visual C++
Using the ‘switch’ statement to choose and display the appropriate message. Use the
default label to display a message if the input does not match any of the above
letters.
dịch: Viết chương trình hiển thị khả năng máy tính của bạn. Các loại sử dụng trong một bức thư của bảng chữ cái và các chương trình của bạn sẽ hiển thị các ngôn ngữ tương ứng hoặc gói sẵn. Sản lượng một số mẫu đầu vào ans được đưa ra dưới đây:
Input Output
A or a Ada
B or b Basic
C or c COBOL
D or d dBASE III
f or F Fortran
p or P Pascal
v or V Visual C++
Sử dụng 'chuyển đổi' tuyên bố lựa chọn và hiển thị thông báo thích hợp. sử dụng
nhãn mặc định để hiển thị một thông báo nếu đầu vào không phù hợp với bất kỳ ở trên
chữ cái.
Phân tích từng bước:
- - khai báo x là biến kí tự;
- - vào x từ bàn phím
- - witch với x và case là A a B a ....
- - in ra giá trị tương ứng
- - với default error.
sơ đồ khối:
in chuỗi kí tự tương ứng |
code:
#include <stdio.h> #include <stdlib.h> /* run this program using the console pauser or add your own getch, system("pause") or input loop */ int main(int argc, char *argv[]) { char x; printf("input: "); scanf("%c",&x); printf("%c",x); printf("\n\n\n"); switch (x) { case'a': case'A': printf("Ada"); break; case'b': case'B': printf("Basic"); break; case'c': case'C': printf("COBOL"); break; case'd': case'D': printf("dBASE III"); break; case'f': case'F': printf("Fortran"); break; case'p': case'P': printf("Pascal"); break; case'v': case'V': printf("Visual C++"); break; default: printf("error"); } printf("\n\n\n"); system("pause"); return 0; }
switch case |
bài 3. Accept values in three variables and print the highest value.
3. Chấp nhận giá trị trong ba biến và in giá trị cao nhất.
phân tích từng bước:
- - khai báo i,j,k,l là biến số nguyên
- - yêu cầu nhập vào 3 số i, j, k
- - nếu i > j thì gán j = i
- - nếu j > k thì gán k = j
- - kết luận k là số cao to nhất
sơ đồ khối:
tìm số lớn nhất |
code:
#include <stdio.h> #include <stdlib.h> /* run this program using the console pauser or add your own getch, system("pause") or input loop */ int main(int argc, char *argv[]) { int i,j,k,l; printf("Nhap vao 3 so : "); scanf("%d%d%d",&i,&j,&k); if (i>j) { j=i; } if (j>k) { k=j; } printf("\nso lon nhat la %d",k); printf("\n\n\n"); system("pause"); return 0; }
Tìm số lớn nhất |
Kết Luận: dù là if-else hay switch - case thì cũng cho ra hướng giải quyết và kết quả như nhau... nên các bạn hãy dùng cấu trúc nào mà theo các bạn dễ dùng nhất... muốn nhanh gọn trong trường hợp so sánh nhiều thì dùng switch case còn không thì cứ if-else thì cũng chẳng làm sao cả