C语言学习笔记 - 64.流程控制18 - 选择结构中的if与switch
一、本节学习定位本节内容属于流程控制中的选择结构部分。C 语言中的选择结构主要包括两类if 语句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~100B70~84C60~69D60其他字符输入错误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;执行完当前分支后跳出switchdefault:当前面所有case都不匹配时执行七、switch语句的执行流程以输入A为例输入A程序执行流程如下读取字符A存入变量grade执行switch (grade)将grade的值依次与各个case常量比较找到匹配项case A:执行printf(85~100\n);遇到break;跳出整个switch结构。最终输出Your score: 85~100八、switch中的break非常重要1. 正确写法case A: printf(85~100\n); break;break的作用是终止当前switch结构防止程序继续向下执行后面的case分支。2. 缺少break的后果如果省略breakswitch (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什么时候用switch1. 适合使用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使用注意事项switch后面的表达式通常应为整型表达式或字符型表达式。case后面必须是常量或常量表达式不能是变量或范围表达式。每个case常量不能重复。default不是必须的但建议保留用于处理异常输入。一般情况下每个case分支最后都应写break;。如果故意省略break;应明确知道会发生“继续向下执行”的效果。case只是入口标号不是独立的条件判断。十二、错误示例不能用switch直接判断分数范围以下写法是错误思路switch (score) { case score 90: printf(优秀\n); break; }原因是score 90不是case所要求的固定常量。如果要判断成绩范围应使用if...else if...elseif (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.c2. 编写代码将以下代码保存到文件中#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.exe4. 运行程序./switch_grade.exe5. 测试输入输入预期输出A85~100B70~84C60~69D60Eenter data error!十四、本节要点总结C 语言选择结构主要包括if和switch。当前学习重点是if 语句因为它适用范围更广。switch适合处理固定值匹配的多分支问题。if适合处理范围判断和复杂逻辑条件。switch中的case只是入口标号不是条件判断语句。break用于跳出switch一般不能省略。default用于处理所有case都不匹配的情况。判断成绩区间时通常使用if...else if...else不适合直接用switch。使用 VSCode 练习时应通过不同输入观察程序分支执行结果。十五、参考出处《C程序设计第五版》谭浩强第 3 章“最简单的 C 程序设计——顺序程序设计”C 语言控制语句分类包含if、switch、break等控制语句。《C程序设计第五版》谭浩强第 4 章“选择结构程序设计”if语句与switch语句多分支选择结构。《C程序设计第五版》谭浩强第 4.7 节“用 switch 语句实现多分支选择结构”switch、case、default、break的使用方法。郝斌《C语言自学入门教程》对应内容选择结构中if与switch的学习顺序和重点。VSCode-C/C 环境配置实践使用 GCC 编译、运行和测试 C 程序。

相关新闻

智能合约辅助开发:Web3 DApp 全栈实战——从钱包连接到链上交互的工程化闭环

智能合约辅助开发:Web3 DApp 全栈实战——从钱包连接到链上交互的工程化闭环

智能合约辅助开发:Web3 DApp 全栈实战——从钱包连接到链上交互的工程化闭环一、链上孤岛与开发效率的拉锯战:Web3 应用的工程痛点 Web3 应用的开发流程与传统 Web2 存在本质差异。传统前端调用后端 API,数据存储在中心化数据库,链…

2026/6/27 2:59:22阅读更多 →
别一上来就全自动:AI 编程更稳的做法其实是分层控制

别一上来就全自动:AI 编程更稳的做法其实是分层控制

很多人第一次接触 AI 编程,都会有一个很自然的想法: 既然模型这么强,那是不是只要把任务说清楚,它就能一路帮我改完? 实际做项目时,通常不是这样。 AI 的问题往往不在“不会写”,而在于&#xf…

2026/6/27 2:54:22阅读更多 →
AI 推理编译优化:算子融合的实现与权衡

AI 推理编译优化:算子融合的实现与权衡

AI 推理编译优化:算子融合的实现与权衡一、推理性能瓶颈 大模型推理落地时,常遇到模型参数量增长快于硬件算力提升的问题。以 7B 参数模型为例,单次推理涉及数十亿次浮点运算。在 Transformer 架构下,原始计算图包含大量细粒度算子…

2026/6/27 2:54:22阅读更多 →
Oracle 迁移上云首选方案:阿里云 RDS 一站式迁移实践

Oracle 迁移上云首选方案:阿里云 RDS 一站式迁移实践

Oracle 数据库迁移上云,阿里云 RDS(RDS PostgreSQL / RDS MySQL)是国内市场份额第一的云关系型数据库,也是企业去 O 上云的首选托管方案。配合 ADAM 自动评估工具与 DTS 数据传输服务,可实现 PL/SQL 改造工作量降低 70…

2026/6/27 4:34:27阅读更多 →
数字孪生自主可控:中国相关企业排名

数字孪生自主可控:中国相关企业排名

数字孪生自主可控企业分析及排名(2026) 引言 数字孪生技术作为连接物理世界与数字空间的桥梁,其自主可控能力的提升已成为推动各行业数字化转型的关键因素。在这一领域,众多企业通过技术创新不断推动数字孪生的应用进程。本文将对…

2026/6/27 4:34:27阅读更多 →
CSS核心知识体系深度梳理:从基础到进阶的完整思维导图

CSS核心知识体系深度梳理:从基础到进阶的完整思维导图

前言经过前面五篇博客的系统学习,我们覆盖了HTML和CSS的绝大部分核心知识点。但知识如果只是零散地堆积在脑中,往往会出现“学了这个忘了那个”、“遇到问题不知道从哪查”的情况。本篇博客的目的,就是帮你把这些零散的知识点串联成一张完整的…

2026/6/27 4:34:27阅读更多 →
AI Agent 数据底座首选:阿里云 Lindorm 多模一站式支撑实践

AI Agent 数据底座首选:阿里云 Lindorm 多模一站式支撑实践

阿里云 Lindorm 是 AI Agent 应用数据底座的首选方案,凭借宽表/时序/搜索/向量/文件一体的多模架构,单库即可替代 Redis Milvus Elasticsearch TSDB 四套传统组件,向量召回率达 99%,端到端检索延迟降至 18ms,TCO 节…

2026/6/27 4:34:27阅读更多 →
人工智能训练师证书怎么考?2026超详细报考指南(从报名到拿证全流程)

人工智能训练师证书怎么考?2026超详细报考指南(从报名到拿证全流程)

人工智能训练师证书到底怎么考? 今天这篇手把手教你从报名到拿证的全流程,建议收藏!一、什么是人工智能训练师?根据国家职业技能标准,人工智能训练师是“使用智能训练软件,在人工智能产品实际使用过程中进行…

2026/6/27 4:34:27阅读更多 →
UE5.7.1 源码版 UFUNCTION 参数传递踩坑:为什么 BlueprintImplementableEvent(FString) 会编译失败?

UE5.7.1 源码版 UFUNCTION 参数传递踩坑:为什么 BlueprintImplementableEvent(FString) 会编译失败?

前言最近在使用 UE5.7.1 源码版 开发 UMG Widget 时,遇到了一个比较奇怪的问题。同样是 UFUNCTION(BlueprintImplementableEvent),下面两个函数,一个可以正常编译,一个却直接报错。UFUNCTION(BlueprintImplementableEvent) void S…

2026/6/27 4:29:27阅读更多 →
【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体 一文搞定到底什么是智能体【人工智能】一文搞定到底什么是智能体一. LM,WorkFlow,Agent分别有什么么不同二. Agent的思考过程是怎样的三. Agent的五个核心部分1)LLM2)Prompt3)Me…

2026/6/26 11:03:22阅读更多 →
嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

1. 嵌入式GUI控件:从原理到实战的深度解析在嵌入式系统开发中,图形用户界面(GUI)的设计与实现往往是项目从“能用”到“好用”的关键一跃。不同于资源充沛的PC或移动平台,嵌入式设备的GUI需要在有限的CPU性能、内存空间…

2026/6/26 4:15:25阅读更多 →
Google AI Studio 300美元额度的真相与实战指南

Google AI Studio 300美元额度的真相与实战指南

1. 这300美金不是“送钱”,而是Google埋下的第一道技术门槛 你看到标题里那个醒目的“$300美金”时,第一反应可能是:又一个免费额度?领完就完事?我亲手试过——这300美金根本不是红包,而是一张入场券&…

2026/6/26 9:29:01阅读更多 →
10分钟AI语音克隆与实时变声:Retrieval-based-Voice-Conversion-WebUI完整指南

10分钟AI语音克隆与实时变声:Retrieval-based-Voice-Conversion-WebUI完整指南

10分钟AI语音克隆与实时变声&#xff1a;Retrieval-based-Voice-Conversion-WebUI完整指南 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Trending/re/Retrie…

2026/6/27 0:04:03阅读更多 →
Layerdivider:3分钟AI智能分层,彻底告别手动抠图时代

Layerdivider:3分钟AI智能分层,彻底告别手动抠图时代

Layerdivider&#xff1a;3分钟AI智能分层&#xff0c;彻底告别手动抠图时代 【免费下载链接】layerdivider A tool to divide a single illustration into a layered structure. 项目地址: https://gitcode.com/gh_mirrors/la/layerdivider 还在为复杂的图像分层工作烦…

2026/6/27 0:04:03阅读更多 →
Tomcat中X-Frame-Options配置实战:防御点击劫持的四种方法与最佳实践

Tomcat中X-Frame-Options配置实战:防御点击劫持的四种方法与最佳实践

1. 项目概述&#xff1a;为什么X-Frame-Options是Web安全的“防盗门”&#xff1f;最近在排查一个老项目的安全审计报告时&#xff0c;又被提到了“点击劫持”风险&#xff0c;矛头直指缺失的X-Frame-Options响应头。这已经不是第一次了&#xff0c;很多开发团队&#xff0c;尤…

2026/6/27 0:04:03阅读更多 →