news 2026/7/4 17:49:06

C语言学习笔记 - 64.流程控制18 - 选择结构中的if与switch

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C语言学习笔记 - 64.流程控制18 - 选择结构中的if与switch

一、本节学习定位

本节内容属于流程控制中的选择结构部分。C 语言中的选择结构主要包括两类:

  1. if 语句

  2. switch 语句

在实际入门学习中,if 语句使用频率更高,也是学习流程控制的重点。switch 语句主要用于处理“表达式的值等于某些固定常量”的多分支问题,适合菜单选择、等级分类、命令分发等场景。

本节当前重点是继续深入掌握if 语句,后续再系统学习switch 语句


二、选择结构的基本概念

选择结构用于根据条件选择不同的执行路径。

例如:

if (score >= 60) { printf("及格\n"); } else { printf("不及格\n"); }

程序会先判断:

score >= 60

如果条件成立,则执行:

printf("及格\n");

否则执行:

printf("不及格\n");

这就是典型的二分支选择结构。


三、C语言中的两种选择语句

语句类型主要用途适用场景学习重点
if条件判断范围判断、复杂逻辑判断、大小比较当前重点
switch多分支匹配固定值匹配、菜单命令、等级字符判断后续补充

四、if语句是选择结构的学习重点

1. if语句适用范围更广

if 语句可以判断任意表达式的真假,适合处理各种复杂条件。

例如成绩区间判断:

if (score >= 90 && score <= 100) { printf("优秀\n"); } else if (score >= 80 && score < 90) { printf("良好\n"); } else if (score >= 60 && score < 80) { printf("及格\n"); } else { printf("不及格\n"); }

这里每一个条件都是一个逻辑表达式,因此使用if...else if...else更自然。


2. if语句可以处理范围判断

例如:

score >= 90 && score <= 100

表示:

score 大于等于 90,并且 score 小于等于 100

这种“范围判断”是if 语句的典型应用场景。


3. if语句可以处理复杂逻辑

例如:

if (age >= 18 && score >= 60) { printf("符合条件\n"); }

该条件同时判断年龄和成绩,只有两个条件都成立时才执行输出语句。


五、switch语句的基本作用

switch 语句用于实现多分支选择结构。它根据某个表达式的值,跳转到对应的case分支执行。

基本形式如下:

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

其中:

关键字含义
switch根据表达式的值进行多分支选择
case表示一个匹配入口
break跳出 switch 结构
default当前面所有 case 都不匹配时执行

六、switch语句示例:按等级输出分数段

1. 程序功能

从键盘输入一个成绩等级字符:

输入字符输出分数段
A85~100
B70~84
C60~69
D<60
其他字符输入错误

2. 示例程序

#include <stdio.h> int main(void) { char grade; printf("请输入成绩等级 A/B/C/D:"); scanf("%c", &grade); printf("Your score: "); switch (grade) { case 'A': printf("85~100\n"); break; case 'B': printf("70~84\n"); break; case 'C': printf("60~69\n"); break; case 'D': printf("<60\n"); break; default: printf("enter data error!\n"); break; } return 0; }

3. 程序讲解

代码作用
char grade;定义字符变量,用于保存成绩等级
scanf("%c", &grade);从键盘输入一个字符
switch (grade)根据grade的值选择分支
case 'A':grade等于'A'时执行
break;执行完当前分支后跳出switch
default:当前面所有case都不匹配时执行

七、switch语句的执行流程

以输入A为例:

输入:A

程序执行流程如下:

  1. 读取字符'A',存入变量grade

  2. 执行switch (grade)

  3. grade的值依次与各个case常量比较;

  4. 找到匹配项:

case 'A':
  1. 执行:

printf("85~100\n");
  1. 遇到:

break;
  1. 跳出整个switch结构。

最终输出:

Your score: 85~100

八、switch中的break非常重要

1. 正确写法

case 'A': printf("85~100\n"); break;

break的作用是终止当前switch结构,防止程序继续向下执行后面的case分支。


2. 缺少break的后果

如果省略break

switch (grade) { case 'A': printf("85~100\n"); case 'B': printf("70~84\n"); case 'C': printf("60~69\n"); case 'D': printf("<60\n"); default: printf("enter data error!\n"); }

当输入A时,程序会从case 'A'开始一直向下执行,直到switch结束。

可能输出:

85~100 70~84 60~69 <60 enter data error!

这通常不是预期结果。


九、switch与if的区别

对比维度if语句switch语句
判断方式判断表达式真假匹配表达式的固定值
适合场景范围判断、复杂条件固定常量匹配
条件形式可以是任意关系表达式或逻辑表达式通常是整型或字符型表达式
分支数量可多可少适合多个固定分支
是否需要break不需要通常每个 case 后需要
可读性复杂多分支时可能冗长固定值多分支时更清晰

十、什么时候用if,什么时候用switch

1. 适合使用if的情况

当条件是范围判断或复杂逻辑时,应优先使用if

例如:

if (score >= 90 && score <= 100) { printf("优秀\n"); }

这里判断的是一个区间,适合用if


2. 适合使用switch的情况

当判断对象是某个固定值时,可以使用switch

例如:

switch (grade) { case 'A': printf("优秀\n"); break; case 'B': printf("良好\n"); break; case 'C': printf("及格\n"); break; default: printf("输入错误\n"); break; }

这里判断的是字符'A''B''C'等固定值,适合用switch


十一、switch使用注意事项

  1. switch后面的表达式通常应为整型表达式字符型表达式

  2. case后面必须是常量常量表达式,不能是变量或范围表达式。

  3. 每个case常量不能重复。

  4. default不是必须的,但建议保留,用于处理异常输入。

  5. 一般情况下,每个case分支最后都应写break;

  6. 如果故意省略break;,应明确知道会发生“继续向下执行”的效果。

  7. case只是入口标号,不是独立的条件判断。


十二、错误示例:不能用switch直接判断分数范围

以下写法是错误思路:

switch (score) { case score >= 90: printf("优秀\n"); break; }

原因是:

score >= 90

不是case所要求的固定常量。

如果要判断成绩范围,应使用if...else if...else

if (score >= 90 && score <= 100) { printf("优秀\n"); } else if (score >= 80 && score < 90) { printf("良好\n"); } else if (score >= 60 && score < 80) { printf("及格\n"); } else { printf("不及格\n"); }

十三、VSCode中验证switch程序

1. 新建源文件

建议文件名:

switch_grade.c

2. 编写代码

将以下代码保存到文件中:

#include <stdio.h> int main(void) { char grade; printf("请输入成绩等级 A/B/C/D:"); scanf("%c", &grade); switch (grade) { case 'A': printf("85~100\n"); break; case 'B': printf("70~84\n"); break; case 'C': printf("60~69\n"); break; case 'D': printf("<60\n"); break; default: printf("enter data error!\n"); break; } return 0; }

3. 编译程序

在 VSCode 终端中执行:

gcc switch_grade.c -o switch_grade.exe

如果想查看更多潜在警告,可以使用:

gcc -Wall switch_grade.c -o switch_grade.exe

4. 运行程序

./switch_grade.exe

5. 测试输入

输入预期输出
A85~100
B70~84
C60~69
D<60
Eenter data error!

十四、本节要点总结

  1. C 语言选择结构主要包括ifswitch

  2. 当前学习重点是if 语句,因为它适用范围更广。

  3. switch适合处理固定值匹配的多分支问题。

  4. if适合处理范围判断和复杂逻辑条件。

  5. switch中的case只是入口标号,不是条件判断语句。

  6. break用于跳出switch,一般不能省略。

  7. default用于处理所有case都不匹配的情况。

  8. 判断成绩区间时,通常使用if...else if...else,不适合直接用switch

  9. 使用 VSCode 练习时,应通过不同输入观察程序分支执行结果。


十五、参考出处

  1. 《C程序设计(第五版)》谭浩强,第 3 章“最简单的 C 程序设计——顺序程序设计”:C 语言控制语句分类,包含ifswitchbreak等控制语句。

  2. 《C程序设计(第五版)》谭浩强,第 4 章“选择结构程序设计”:if语句与switch语句,多分支选择结构。

  3. 《C程序设计(第五版)》谭浩强,第 4.7 节“用 switch 语句实现多分支选择结构”:switchcasedefaultbreak的使用方法。

  4. 郝斌《C语言自学入门教程》对应内容:选择结构中ifswitch的学习顺序和重点。

  5. VSCode-C/C++ 环境配置实践:使用 GCC 编译、运行和测试 C 程序。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/4 17:41:48

大专计算机出路

我是一名大专2026年应届毕业生&#xff0c;我过c语言&#xff0c; HTML&#xff0c; Linux&#xff0c; MySQL &#xff0c;鸿蒙应用开发&#xff0c;全都都是一直半解。实习经历干了&#xff0c;弱电&#xff08;半力工&#xff09;&#xff0c;进厂。一直在无尽的焦虑中&…

作者头像 李华
网站建设 2026/6/29 1:17:09

INT8 量化实战:在边缘芯片上守住精度

INT8 量化实战&#xff1a;在边缘芯片上守住精度一、为什么浮点模型跑不动&#xff1f; 在 ARM Cortex-A 平台部署模型时&#xff0c;最先遇到的往往不是算法问题&#xff0c;而是硬件限制。以 i.MX 8M Plus 为例&#xff1a;NPU 峰值算力 2.0 TOPS&#xff0c;DDR4 带宽约 3.2…

作者头像 李华
网站建设 2026/6/29 0:33:00

AI 代码评测体系:从静态分析到语义等价性的多层级验证方法

AI 代码评测体系&#xff1a;从静态分析到语义等价性的多层级验证方法 一、传统评测的"通过率陷阱"&#xff1a;AC 不等于正确 在线评测系统&#xff08;OJ&#xff09;的评判标准是"给定测试用例下输出是否匹配"。这种黑盒评测存在一个根本性缺陷&#xf…

作者头像 李华
网站建设 2026/6/29 1:21:36

《鬼谷八荒》2026最新版Mod整合包安装避坑指南教程

随着《鬼谷八荒》Mod生态的日益成熟&#xff0c;玩家对于游戏体验的定制化需求达到了前所未有的高度。本指南旨在为硬核玩家提供一份纯干货向的最新版Mod整合包配置与安装攻略。本次整合包涵盖了实用工具、视觉美化、NPC扩展以及大型世界观魔改四大核心模块&#xff0c;并附带详…

作者头像 李华
网站建设 2026/6/29 0:33:09

时津风的资源收集【牛客tracker 每日一题】

时津风的资源收集 时间限制&#xff1a;1秒 空间限制&#xff1a;256M 知识点&#xff1a;广度优先搜索(BFS) 网页链接 牛客tracker 牛客tracker & 每日一题&#xff0c;完成每日打卡&#xff0c;即可获得牛币。获得相应数量的牛币&#xff0c;能在【牛币兑换中心】&a…

作者头像 李华
网站建设 2026/6/29 0:33:05

体验 无条件的关注。

它的本质是&#xff1a;**无条件的关注不是“赞同”或“溺爱”&#xff0c;而是 “移除所有预设过滤器、评价器和响应期待后&#xff0c;对另一个生命体原始数据流的完整接收” (Complete Reception of Another Being’s Raw Data Stream After Removing All Pre-set Filters, …

作者头像 李华