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

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

在使用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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。