C++: Bài 13. Điều kiện switch-case

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

Cũng giống như if-else, điều kiện switch-case dùng để thiết lập các điều kiện rẽ nhánh, tuy nhiên, phạm vi áp dụng lại bó hẹp hơn, nó chỉ áp dụng được cho hai loại hằng là hằng số nguyên và hằng ký tự. Dưới đây là cú pháp cơ bản:

switch(giá_trị) {
  case hằng_1:
    khối_lệnh_1;
    break;
  case hằng_2:
    khối_lệnh_2;
    break;
  ...
  case hằng_n:
    khối_lệnh_n;
    break;
  default:
    khối_lệnh;
}

, trong đó: giá_trị ở đây có thể là giá trị của biến, giá trị của biểu thức hoặc giá trị trả về từ một hàm. Nếu giá_trị bằng với hằng của case nào thì khối_lệnh tương ứng với case đó sẽ được thực hiện, thực hiện xong khối lệnh thì sẽ thoát khỏi switch-case thông qua câu lệnh break; ngay dưới khối lệnh tương ứng đó. Nếu giá_trị không bằng bất kỳ hằng nào thì khối lệnh dưới default sẽ được thực hiện.

Lưu ý rằng default là không bắt buộc, nghĩa là bạn có thể bỏ đi phần default nếu bạn muốn cho phù hợp với bài toán của bạn.

Trong trường hợp có sự giống nhau của các khối_lệnh ở các hằng khác nhau thì ta có cú pháp ngắn gọn hơn như sau:

switch(giá_trị) {
  case hằng_1:
  case hằng_2:
  ...
  case hằng_i:
    khối_lệnh;
    break;
    ...
  default:
    khối_lệnh0;
}

Ví dụ, hãy nhập vào một ký tự bất kỳ và xác định xem ký tự đó là nguyên âm hay phụ âm. Vì ngôn ngữ lập trình C không hỗ trợ ký tự có dấu nên ta chỉ xét các ký tự trong bảng chữ cái tiếng Anh. Những ký tự 'A', 'E', 'I', 'O', 'U', 'a', 'e', 'i', 'o' và 'u' là những nguyên âm. Những ký tự còn lại trong bảng chữ cái tiếng Anh là phụ âm. Vậy, ta có lời giải như sau:

#include<iostream>
using namespace std;

main() {
  char ch;
  cout <<"Nhap vao mot ky tu (A-Z hoac a-z): ";
  cin >>ch;
  if(ch<'A' || ch>'z'){
    cout << "Ky tu nhap vao '" << ch << "' khong nam trong bang chu cai tieng Anh!";
  }else{
    switch(ch){
      case 'a':
      case 'A':
      case 'e':
      case 'E':
      case 'i':
      case 'I':
      case 'o':
      case 'O':
      case 'u':
      case 'U':
        cout << "'" << ch << "'" << " la nguyen am!";
        break;
      default:
        cout << "'" << ch << "'" << " la phu am!";
    }
  }

  return 0;
}

Ta xét thêm một ví dụ nữa, ví dụ này yêu cầu nhập vào một tháng bất kỳ và xác định xem tháng đó có bao nhiêu ngày.Dưới đây là những phân tích cho ví dụ này:

- Tháng ở đây là tháng theo lịch dương (lịch Tây).

- Những tháng sau có 31 ngày: 1, 3, 5, 7, 8, 10 và tháng 12.

- Những tháng sau có 30 ngày: 4, 6, 9 và tháng 11.

- Riêng tháng 2: nếu là năm nhuận thì có 29 ngày, năm thường thì có 28 ngày.

- Năm nhuận là năm thoả mãn một trong hai điều kiện sau:

+ Điều kiện 1: Năm đó chia hết cho 4 nhưng không chia hết cho 100.

+ Điều kiện 2: Năm đó chia hết cho 400.

Chẳng hạn, năm 2000 là năm nhuận vì mặc dù nó không thoả mãn điều kiện 1 nhưng nó thoả mãn điều kiện 2 là chia hết cho 400; năm 2016 là năm nhuận vì 2016 chia hết cho 4 nhưng không chia hết cho 100.

Sau đây là chương trình thực hiện yêu cầu trên:

#include<iostream>
using namespace std;

main() {

  int thang, nam;
  do {
    cout<<"Nhap vao mot thang bat ky: ";
    cin >>thang;
  }while(!(1<=thang && thang<=12)); //trong khi tháng còn không nm trong đon [1,12] thì còn yêu cu nhp li.
  switch(thang) {
    case 4:
    case 6:
    case 9:
    case 11:
      cout <<"Thang " << thang << " co 30 ngay";
      break;
    case 2:
      cout <<"Nhap vao mot nam: ";
      cin >> nam;
      if((nam%4==0 && nam%100!=0) || (nam%400==0)) //nếu năm tha mãn mt trong hai điu kin đã phân tích  trên
        cout <<"Thang " << thang << " nam " << nam <<" co 29 ngay"; //thì tháng tương ng có 29 ngày (năm nhun)
      else  //nếu không thì
        cout <<"Thang " << thang << " nam " << nam <<" co 28 ngay"; //tháng tương ng có 29 ngày (năm thường)
      break;
    default:
      cout <<"Thang " << thang <<" co 31 ngay"; //nhng tháng còn li có 31 ngày
  }

  return 0;
}
» Tiếp: Bài 14. Vòng lặp for
« Trước: Bài 12. Điều kiện if-else và ?:
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!