C语言switch语句基本用法:实现多分支选择与成绩评级

Dylan
Dylan
发布时间:2026-10-16 | 3人浏览过
原创

在使用C语言开发时,面对多个分支条件(如星期判定、成绩等级),switch语句比繁琐的if-else更清晰。本文将通过具体代码示例,解析switch的基本语法、break的作用以及如何处理无效输入。

switch语句的基本结构与格式

switch语句是一种多分支选择结构,它将表达式的值与一系列常量进行比对,执行匹配项后的代码块。其核心标准格式如下:

switch (表达式) {
    case 常量1: 语句1; break;
    case 常量2: 语句2; break;
    default: 语句N; break;
}

其中,表达式必须是整数或字符类型;常量值必须是唯一的整型字面量;default用于处理所有未匹配的情况。

第1步:基础应用 - 判断今天是星期几

在初始版本中,我们并未使用 break 语句。这会导致一个关键现象:case穿透(Fall-through)。一旦找到匹配的 case,程序将不再判断其他 case,而是依次执行后续所有语句直到结束。

以下是包含 case 穿透的代码逻辑:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
    int day = 0;
    printf("请输入一个数字\n");
    scanf("%d", &day);
    switch (day)
    {
        case 1:printf("星期一\n"); 
        case 2:printf("星期二\n"); 
        case 3:printf("星期三\n");
        // ... 中间省略 ...
        case 7:printf("星期天\n");
        default:
            break;
    }
    return 0;
}

当输入 2 时,输出会显示“星期二”及其之后的所有内容。这不是预期行为。要实现精准的单分支执行,必须在每个有效逻辑后加入 break。

加入break阻断执行流

在 break 之后,程序将完全跳出 switch 结构,而不是落入下一个 case。

修正后的代码如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
    int day = 0;
    printf("请输入一个数字\n");
    scanf("%d", &day);
    switch (day)
    {
        case 1:printf("星期一\n");
                break;
        case 2:printf("星期二\n");
                break;
        case 3:printf("星期三\n");
                break;
        case 4:printf("星期四\n");
                break;
        case 5:printf("星期五\n");
                break;
        case 6:printf("星期六\n");
                break;
        case 7:printf("星期天\n");
                break;
    }
    return 0;
}

此时再次输入 2,程序仅输出“星期二”,证明 break 生效。

第2步:利用空语句实现逻辑合并

在实际开发中,我们经常需要多个输入共享同一种输出(例如:工作日与休息日)。可以利用 case 标签为空语句的特性,配合 break 来实现逻辑分组。

下面的示例展示了如何将 1~5 合并为“工作日”,6~7 合并为“休息日”:

int day = 0;
scanf("%d", &day);
switch (day)
{
    case 1:
    case 2:
    case 3:
    case 4:
    case 5: printf("工作日\n");
            break;
    case 6: printf("休息日\n");
            break;
    case 7: printf("休息日\n");
            break;
}
return 0;

第3步:完善健壮性处理 - 使用 default

如果用户输入了不在列表中的非法数值(如负数或大于 7 的数字),程序应给出提示。这时需要使用 default 子句。

补充代码如下:

switch (day)
{
    case 1:
    // ... 中间部分 ...
    default: 
        printf("请重新输入\n");
        break;
}

第4步:进阶 - switch的嵌套使用

C语言允许在一个 switch 内部再放置另一个 switch 语句,形成嵌套结构。需要注意的是,内层的 break 只能跳出当前层级(即内层 switch)。

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	int n = 1;
	int m = 2;
	switch (n)
	{
	case 1:m++;
	case 2:n++;
	case 3:
		switch (n) //外层匹配失败进入default之前,这里演示了嵌套逻辑
		{
		case 1:n++;
		case 2:m++; n++;
			break; // 只跳出内层switch
		default:
			break;
		}
	case 4:m++;
		break;
	default:
		break;
	}
	printf("m=%d,n=%d\n", m, n);
	return 0;
}

综合实战:用switch计算成绩等级

除了整数精确匹配,还有一种经典技巧是利用数学运算改变表达式的值。在成绩评级场景中,常将分数除以 10,使结果落在 0~10 区间,从而简化分支数量。

#include <stdio.h>
int main()
{
	int score;
	printf("请输入分数:");
	scanf("%d",&score);
	switch(score/10)
	{
		case 10: printf("A+"); break;
		case 9 : printf("A"); break;
		case 8 : printf("B"); break;
		case 7 : 
		case 6 : printf("C"); break; // 7和6都对应C等级
		default : printf("D"); break; // 不及格
	}
	return 0;
}

以上就是 C 语言 switch 语句基本用法与多种应用场景的详细内容,更多关于 C 语言分支流程控制及语法优化的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表