Skip to content

switch 语句

测试一个表达式是否等于一些可能的值,并根据表达式的值执行相应的代码块,可以使用 switch 语言实现

switch 可以支持数据类型:

  • int
  • 枚举类型
  • char 类型

switch 和 if 区别:

  • 需要根据布尔条件来执行不同的代码块,则应使用 if 语句
  • 需要根据表达式的值来执行不同的代码块,则应使用 switch 语句

语法格式:

c
switch (expression) {
    case value1:
        // 代码块 1
        break;
    case value2:
        // 代码块 2
        break;
    default:
    	// 代码块 3
}

案例需求:输入 int 类型的数据,根据结果输出不同的内容

  • 输入 1:输出 Monday
  • 输入 2:输出 Tuesday
  • 输入 3:输出 Wednesday
  • 输入 4:输出 Thursday
  • 输入 5:输出 Friday
  • 输入 6:输出 Saturday
  • 输入 7:输出 Sunday
  • 输入其它:输出 error

示例代码:

c
#include <stdio.h>

int main() {
    // 1. 定义变量保存数据
    int i;
    // 2. 输入数据
    printf("请输入 1~7 的数字:");
    scanf("%d", &i);
    // 3. 使用 switch 根据数据不同输出不同的结果
    switch (i) {
        case 1:
            printf("Monday\n");
            break;
        case 2:
            printf("Tuesday\n");
            break;
        case 3:
            printf("Wednesday\n");
            break;
        case 4:
            printf("Thursday\n");
            break;
        case 5:
            printf("Friday\n");
            break;
        case 6:
            printf("Saturday\n");
            break;
        case 7:
            printf("Sunday\n");
            break;
        default:
            printf("error\n");
    }

    return 0;
}

分支综合案例

案例需求:

  • 输入:年份(整数)和月份(整数)
  • 输出:该月份的天数(整数)

思路分析:

1. 定义变量保存年份、月份、天数
2. 输入年份和月份
3. 根据月份输出天数
  - 1、3、5、7、8、10、12 月  31 天
  - 4、6、9、11 月			30 天
  - 2 月 	非闰年 28 天  闰年 29 天
  闰年判断:能被 4 整除,但不能被 100 整除的;或者能被 400 整除的年份

示例代码:

c
#include <stdio.h>

int main() {
    // 1. 定义变量保存年份、月份、天数
    int year, month, day;
    // 2. 输入年份和月份
    scanf("%d %d", &year, &month);
    // 3. 根据月份输出天数
    switch (month) {
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
            day = 31;
            break;
        case 4:
        case 6:
        case 9:
        case 11:
            day = 30;
            break;
        case 2:
            // 2 月   非闰年 28 天  闰年 29 天
            // 闰年判断:能被 4 整除,但不能被 100 整除的;或者能被 400 整除的年份
            if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
                day = 29;
            } else {
                day = 28;
            }
            break;
        default:
            day = -1;
    }

    printf("%d%d 月 有 %d\n", year, month, day);

    return 0;
}