Cấu trúc switch là một cấu trúc lựa chọn có nhiều nhánh. Khi có nhiều sự lựa chọn thi ựây là cấu trúc phù hợp thay vì phải dùng một chuổi lệnh if..else lồng nhau.
Dạng tổng quát của cấu trúc switch: Cú pháp: switch(expression) { case value1: statement1; [break;] Ầ case valueN: statementN; [break;] [default : statement;] }
Lưu ựồ: expression expression = = value1 ? Exit false statement1 expression = = value2 ? statement2 expression = = valueN ? statementN false true true true statement default: false
Giải thắch:
− Trước hết chương trình sẽ ựịnh trị của expression.
− Nếu giá trị của expression bằng value1 thì thực hiện statement1 rồi thoát.
− Nếu giá trị của expression khác value1 thì so sánh với value2, nếu bằng value2 thì thực hiện statement2 rồi thoátẦ., so sánh tới valueN.
− Nếu tất cả các phép so sánh trên ựều sai thì thực hiện statement của trường hợp default.
Lưu ý:
− expression trong switch() phải có kết quả là giá trị kiểu số nguyên (int, char, long).
− Các giá trị sau case phải là hằng nguyên. − Không bắt buộc phải có default.
− Thông thường mỗi case có 1 câu lệnh break. Khi thực hiện lệnh tương ứng của case có giá trị bằng expression, chương trình thục hiện lệnh break ựể thoát khỏi cấu trúc switch.
Vắ dụ 1: Nhập vào một số nguyên, chia số nguyên này cho 2 lấy phần dư. Kiểm tra nếu phần dư bằng 0 thì in ra thông báo Ộlà số chẵnỢ, nếu số dư bằng 1 thì in thông báo Ộlà số lẻỢ.
#include <iostream.h> #include <conio.h> void main ()
{
int n, remainder;
cout << ỢInput an number: "; cin>>n; remainder = (n % 2);
switch(remainder) {
case 0: cout << n << Ợ is an even."; break;
case 1: cout << n << Ợ is an odd."; break; }
getche(); }
Vắ dụ 2:
Nhập vào 2 số nguyên và 1 phép toán.
− Nếu phép toán là Ổ+Ỗ, Ổ-Ổ, Ổ*Ỗ thì in ra kết qua là tổng, hiệu, tắch của 2 số.
− Nếu phép toán là Ổ/Ỗ thì kiểm tra xem số thứ 2 có khác không hay không? Nếu khác không thì in ra thương của chúng, ngược lại thì in ra thông báo ỘCannot divide by zero!Ợ.
#include <iostream.h> #include <conio.h> int main() { int a, b; char operation;
cout << ỢInput two numbers: "; cin >> a >> b;
cout << ỢInput operation(+ - * /): "; cin >> operation; switch(operation) { case '+': cout << a << Ợ + Ộ << b << Ợ = Ợ << a+b; break; case '-': cout << a << Ợ - Ộ << b << Ợ = Ợ << a-b; break; case '*': cout << a << Ợ * Ộ << b << Ợ = Ợ << a*b; break; case '/': if(b!=0) cout << a << Ợ / Ộ << b << Ợ = Ợ << (float)a/b; else
cout << "Cannot divide by zero !"; break;
}
getche(); }
Vắ dụ 3:
Yêu cầu người thực hiện chương trình nhập vào một số nguyên dương là tháng trong năm và in ra số ngày của tháng ựó.
- Tháng có 31 ngày: 1, 3, 5, 7, 8, 10, 12 - Tháng có 30 ngày: 4, 6, 9, 11
- Tháng có 28 hoặc 29 ngày : 2
- Nếu nhập vào số <1 hoặc >12 thì in ra câu thông báo ỘThere is no month like this.Ộ.
#include <iostream.h> #include <conio.h> void main()
{
int month;
cout << "Input month: "; cin >> month; switch(month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12:
cout<<"Month Ợ << month << Ợ has 31 days."; break;
case 4: case 6: case 9: case 11:
cout << "Month Ợ << month << Ợ has 30 days."; break;
case 2:
cout << "Month Ộ << month << Ộ has 28 or 29 days."; break;
default :
cout<<ỢThere is no month like this.Ợ; }
getche(); }