Lập trình C: switch-case


Đăng ký nhận thông báo về những video mới nhất

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<stdio.h>

main() {
  char ch;
  printf("\nNhap vao mot ky tu (A-Z hoac a-z): ");
  ch=getchar();
  if(ch<'A' || ch>'z'){
    printf("\nKy tu nhap vao '%c' khong nam trong bang chu cai tieng Anh!",ch);
  }else{
    switch(ch){
      case 'a':
      case 'A':
      case 'e':
      case 'E':
      case 'i':
      case 'I':
      case 'o':
      case 'O':
      case 'u':
      case 'U':
        printf("\n'%c' la nguyen am!",ch);
        break;
      default:
        printf("\n'%c' la phu am!",ch);
    }
  }
}

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<stdio.h>

main() {
  int thang, nam;
  do {
    printf("\nNhap vao mot thang bat ky: ");
    scanf("%d",&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:
      printf("\nthang %d co 30 ngay", thang);
      break;
    case 2:
      printf("\nNhap vao mot nam: ");
      scanf("%d",&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
        printf("\nThang %d nam %d co 29 ngay", thang, nam); //thì tháng tương ng có 29 ngày (năm nhun)
      else  //nếu không thì
        printf("\nThang %d nam %d co 28 ngay", thang, nam); //tháng tương ng có 29 ngày (năm thường)
      break;
    default:
      printf("\nThang %d co 31 ngay", thang); //nhng tháng còn li có 31 ngày
  }
}

Bài tập áp dụng:

Làm các Bài tập 4 và 5 của link bài tập sau: v1study.com/c-bai-tap-phan-dieu-kien-a492.html


Nếu bạn có điều thắc mắc, bạn hãy comment cho V1Study để được giải đáp.
Bài viết này được chia sẻ bởi LongDT. Nếu bạn muốn chia sẻ bài viết, bạn hãy Đăng ký làm thành viên!
« Prev
Next »
Copied !!!