Day5语法:循环-分支语句
目录1. 语句2. C 程序结构3. 分支语句3.1 if 语句3.1.1 形式一单分支 if3.1.2 形式二if-else3.1.3 形式三if-else if-else3.1.4 练习3.1.5 if 语句总结3.2 switch3.2.1 语法形式3.2.2 注意事项3.2.3 作业4. 循环语句4.1 简介4.2 goto 语句4.3 while 语句4.4 do-while 语句4.5 for 循环4.6 循环的嵌套4.7 break 和 continue1. 语句C 语言中语句指令就是表达程序员某个操作的意图。语句是 C 程序的基本执行单元它表示一个完整的操作每一条语句都是以;结束。语句可以分为单语句和复合语句。单语句常见形式赋值语句int a 10;函数调用语句printf(hello world\n);空语句;什么都不做复合语句是由一对花括号{}括起来的语句块代码块可以包含多个语句{ a 22; b a 13; c a b; // ...... }常见的流程控制语句包括if、switch、while、do while、for等。C 程序主体由函数组成函数内部由 C 语句组成。2. C 程序结构结构化程序设计提供三种控制结构顺序结构所有语句按照线性顺序执行。分支结构选择结构例如在 A、B 之间做出选择。循环结构重复执行指定的语句。早在 1966 年就已经证明以上三种基本结构可以构成任意复杂的算法。3. 分支语句分支结构选择结构用于在多个分支中做出选择。C 语言中的分支语句主要包括if语句和switch语句。3.1 if 语句if 语句用于条件判断满足条件时就执行指定的语句。if 语句有三种基本形式。3.1.1 形式一单分支 ifif(表达式) 语句如果“表达式”为真非 0表示条件成立则执行后面的“语句”。合法的表达式就一定会有值。常见的表达式有算术表达式a b逻辑表达式a b函数调用sum(a, b)if 条件成立时表达式的值为非 0if 条件不成立时表达式的值为 0。分析如下程序的结果示例 1int a 3, b 6; if(a b) a 4; // a b 结果为假此句没有执行 b 3; // 执行 printf(a:%d b:%d \n, a, b); // 输出a:3 b:3规则if 语句的作用域仅限于其后面的单条语句。如果希望多条语句被 if 管理可以使用{}指定if(a b) { a 4; b 3; }示例 2int a 4, b 3; if(a b); // 此处有分号 ; 代表一个空语句 a 5; printf(a: %d\n, a);编程建议为了避免上述混乱情况提高程序可读性建议不管 if 后面有没有语句都先加上{}确定范围if(xxx) { // 语句块; }3.1.2 形式二if-elseif(条件1) { 语句1 } else { 语句2 }假设条件 1 成立非 0则执行对应的语句 1否则执行语句 2。else 不能单独存在一定要和一个 if 匹配。练习从键盘获取用户输入的一个整数利用 if-else 语句判断其是否为偶数。if(n % 2 0) { printf(偶数\n); } else { printf(奇数\n); }3.1.3 形式三if-else if-elseif(条件1) { 语句1 } else if(条件2) { 语句2 } else if(条件3) { 语句3 } else { // 如果上述条件都不满足则执行此处 }这种结构适用于需要按优先级顺序逐个检查的情况。在每个条件后面跟随一个 else if只有在前一个条件为假时才会继续检查下一个条件如果所有的表达式都不成立则进入 else。示例根据学生成绩 score 打出对应的等级分。if(score 90) { printf(A\n); } else if(score 80) { printf(B\n); } else if(score 60) { printf(C\n); } else { printf(D\n); }用户输入 90 分时仅输出 A。各个条件按照优先级查找满足条件时执行对应的代码块。区别于以下写法if(score 90) { printf(A\n); } if(score 80) { printf(B\n); } if(score 60) { printf(C\n); } else { printf(D\n); }用户输入 90 分时A、B、C 都会输出。3.1.4 if 语句总结1. 并列条件与互斥条件// 并列条件 if(条件1) { ... } if(条件2) { ... } if(条件3) { ... } // 互斥条件 if(条件1) { ... } else { ... }2. if 语句的嵌套在某个大的条件下再细分条件。在 if 语句中包含一个或者多个 if称之为 if 嵌套。if(A) { if(C) { } else if(D) { } else { } } else { }注意 else 匹配原则else 总是与它上面最近的、同级的、未配对的 if 语句匹配。练习判断从键盘输入的内容是否为字母A~Z、a~z如果是小写字母则输出其大写如果是大写字母则输出其小写。提示ASCII 码虚拟机终端输入man ascii查看按 q 退出。scanf(%c, ch);用于获取输入。// 获取用户输入判断是否为字母 char ch; printf(请输入一个字母: ...\n); scanf(%c, ch); if((ch A ch Z) || (ch a ch z)) { printf(输入的字符是字母\n); // 进一步判断是大写还是小写 if(ch A ch Z) // 大写 { ch ch (a - A); // 大写转小写 printf(转换为小写: %c\n, ch); } else if(ch a ch z) { ch ch - (a - A); // 小写转大写 printf(转换为大写: %c\n, ch); } } else { printf(输入的字符不是字母\n); }3.2 switchswitch 用来列举表达式所有可能的情况并进行匹配。3.2.1 语法形式switch(表达式) { case 常量表达式1: 语句1 break; // 跳出 case 常量表达式2: 语句2 break; case 常量表达式m: 语句m break; default: // 建议将 default 写在最后 语句 break; }常量表达式是程序运行期间值不会改变的表达式。例如下面的 case 写法都是正确的#define N 122 switch(num) { case N: // define 在预处理阶段替换相当于 case 122: case 5: case A: case z: case 3 5: case a 32: break; }错误示例int a 3; switch(num) { case a 1: // 错误case 后不能使用变量 break; }switch 让“表达式”和 case 后面的“常量表达式”做匹配。一旦匹配成功值相等则从那个 case 后面开始执行直到遇到 break。如果所有的 case 都没有匹配成功则匹配 default。3.2.2 注意事项1. switch 后面的“表达式”必须是一个可以列举的值表达式的类型必须是整数值整型 int、字符型 char、枚举。int num; switch(num) { // ... }2. case 后面的“常量表达式”也必须是一个整数值不能是变量并且每个 case 后面的常量表达式的值必须不同。// 正确写法 switch(num) { case 1: break; case 2: break; } // 错误写法case 1 出现了两次 switch(num) { case 1: // AAAAA break; case 1: // BBBBB break; }3. 各个 case 和 default 出现的次序不影响匹配结果。一旦匹配成功就从此处往下执行直到遇到 break 或者 switch 语句结束。int a 5; switch(a) { // default 是所有 case 都不匹配时才会执行 default: ... case 1: ... case 2: ... case 5: a 20; // 匹配此处并执行 break; // 此处跳出 case 6: ... }4. “语句”可以省略多个 case 可以共用一组语句switch(a) { case 1: case 2: // a 为 1 或者 2 时都执行此处 ... case 3: ... }5. switch 中的 break 用来跳出它所属的 switch 语句switch(a) { case 1: case 2: ... case 3: break; default: ... }4. 循环语句先看一个场景通过程序实现求 12345...n 的和。int sum 0; // 用于保存累加的值 int n 1; // 要加的数 sum sum n; // 01 n; // 1--2 sum sum n; // 12 n; // ...... // 如果求到 n就需要重复执行 n 次 // ---- 循环4.1 简介循环的本质是重复。所有重复的代码都可以用循环来实现。在 C 程序中能够起到循环效果的语句如下if和goto构造循环while语句do while语句for语句其中if和goto并不算严格意义上的循环语句只是起到循环效果。4.2 goto 语句goto语句可以让 CPU 跳转到指定位置执行是一种无条件跳转语句。goto 行标识;“行标识”用于标识一行代码需要符合 C 语言标识符的命名规则由字母、数字、下划线组成不能以数字开头不能和关键字冲突。本质上它就代表了一个地址。loop: sum sum n; n; goto loop;通过 goto 实现十次循环打印 1-10int main() { int n 1; loop: printf(loop: n %d\n, n); n; if(n 10) { goto loop; } printf(loop end\n); return 0; }注意goto 类似于汇编代码的无条件跳转通常被认为是不好的编程风格会让代码难以调试和阅读因此平时尽量不要使用 goto 来做循环。4.3 while 语句while(表达式) { // 语句块 }当“表达式”的值为真非 0时执行“语句块”然后跳回 while 处继续判断如此重复直到“表达式”的值为假0为止。“表达式”可以是任意合法的 C 表达式只要有值。“语句块”是循环体是重复执行的部分可以是单语句也可以是复合语句。int sum 0; int i 1; while(i 100) sum i; i; // 此句不会参与循环编程建议不管 while 后面有没有语句都先加上大括号{}确定范围while(xxx) { // 要循环的内容 }练习 1逆序输出一个 3 位正整数。输入 123输出 321。int main() { int a 0; // 用于获取用户输入的数 int d 0; // 用于存储每一个位 printf(请输入一个三位的正整数\n); scanf(%d, a); // a 不为 0 则继续循环 while(a) { d a % 10; // 取出末位 printf(%d, d); // 打印末位 a a / 10; // 处理剩余位数 } return 0; }练习 2求 100 以内 3 的倍数的和。int main() { int n 1; // 表示 100 以内的某个数 int sum 0; // 用于累计它们的和 while(n 100) { if(n % 3 0) { sum n; } n; } printf(sum :%d\n, sum); return 0; }4.4 do-while 语句do // 语句 while(表达式);程序先执行“语句”然后再判断“表达式”的值。当值为真非 0时跳转到上面继续执行“语句”如此重复直到“表达式”的值为假0为止。翻译成 goto 语句loop: 语句 t 表达式; if(t) { goto loop; }示例int i 0; int sum 0; do i; sum i; while(i 100); printf(sum %d\n, sum);如果 do 后面不加花括号上述代码会报错error: expected ‘while’ before ‘sum’。应改成int i 0; int sum 0; do { i; sum i; } while(i 100); printf(sum %d\n, sum);编程建议使用 do-while 时先给 do 后打一对{}确定范围do { } while();while 和 do-while 的区别主要在于条件判断的时机while 在每次循环开始前判断do-while 在每次循环结束后判断。如果希望至少执行一次循环可以使用 do-while如果希望每次开始前先判断可以使用 while。特殊示例 do while(0)遇到复杂逻辑需要分步提前退出时可以尝试使用 do-while(0)。int a 0, b 0, c 0; // 用于存储边长 scanf(%d%d%d, a, b, c); do { if(a b c) { printf(no\n); break; } if(a c b) { printf(no\n); break; } if(b c a) { printf(no\n); break; } // 当上述任意一个条件不满足时会提前 break 退出 printf(最终: 满足三角形要求\n); } while(0);4.5 for 循环for(initialization; continuation; action) { statement; }其中 initialization 是初始化表达式用于初始化循环变量只执行一次continuation 是判断表达式只要为真就会不断执行循环体action 是循环变量处理表达式每轮循环结束后执行使得循环变量产生变化。更常见的形式for(表达式1; 表达式2; 表达式3) { 语句 }先执行一次表达式 1然后判断表达式 2 的值如果为真执行语句再执行表达式 3如此重复直到表达式 2 为假。三个表达式都可以省略但两个分号不能省略for( ; ; ) { // 如果表达式 2 省略表示 for 循环的执行条件永远为真 }for 和 while 的区别一般来说 while 更注重循环条件for 更注重循环次数两者可以互相替换。练习求“水仙花数”。水仙花数是三位数100-999且个位、十位、百位的立方和等于其本身。int x 100; int a, b, c; // 表示 x 的每一位 for(x 100; x 999; x) { a x % 10; // 个位 b (x / 10) % 10; // 十位 c x / 100 % 10; // 百位 if((a * a * a b * b * b c * c * c) x) { printf(找到水仙花数: %d\n, x); } }附C 中使用pow做幂运算double pow(double x, double y); int a 3; // 例如求 3 的 4 次方 printf(%.0f\n, pow((double)a, 4.0)); // 在 Ubuntu 中使用 gcc 编译时需要连接 -lm // gcc 1.c -lm4.6 循环的嵌套示例打印 3 行 6 列全为 0 的矩阵。for(int j 0; j 3; j) { for(int i 0; i 6; i) { printf(0 ); } printf(\n); }4.7 break 和 continuebreak跳出当前的循环或 switch 语句continue结束本次循环继续下一次循环。示例 1continueint i 10; int sum 0; while(i--) { if(i 5) { continue; sum i; // 不会执行到此处 } else { sum i; } } printf(sum %d\n, sum); // 54321示例 2breakint i 10; int sum 0; while(i--) { if(i 5) break; // 直接跳出整个 while 循环 else sum i; } printf(sum %d\n, sum); // 0

相关新闻

图形重绘与数组学习小结

图形重绘与数组学习小结

在开发画图工具的过程中,我遇到了一个问题:为什么画好的图形在窗口最小化或被遮挡后就会消失?我利用“数组”和“重绘机制”解决了这个问题。 问题的根源: 最初,我的绘图逻辑非常直接:在鼠标事件&#xff0…

2026/8/20 11:01:21 阅读更多 →
跨境数据流动合规指南:GDPR、PIPL与CLOUD法案下的技术架构挑战与破局

跨境数据流动合规指南:GDPR、PIPL与CLOUD法案下的技术架构挑战与破局

1. 跨境数据流动的“巴别塔”:一个全球性难题的缘起如果你在一家业务遍布全球的科技公司工作,或者负责过涉及海外用户数据的项目,那么“数据跨境”这个词,大概率会让你眉头一皱。这绝不是一个简单的技术传输问题,而是一…

2026/8/17 9:09:06 阅读更多 →
Mac本地部署OpenClaw:从环境配置到性能优化的完整指南

Mac本地部署OpenClaw:从环境配置到性能优化的完整指南

1. 项目概述:为什么要在Mac上折腾OpenClaw?最近在开发者圈子里,OpenClaw这个名字的讨论热度不低。简单来说,它是一个开源的、旨在提供类似某些云端智能助手核心能力的本地化项目。对于Mac用户,尤其是开发者、研究者和对…

2026/8/20 3:26:45 阅读更多 →

最新新闻

怎么让文心做表格?AI导出鸭苹果版将文心输出的管道表格智能解析为二维结构,一键导出为Excel或Word标准表格

怎么让文心做表格?AI导出鸭苹果版将文心输出的管道表格智能解析为二维结构,一键导出为Excel或Word标准表格

怎么让文心做表格?AI导出鸭苹果版将文心输出的管道表格智能解析为二维结构,一键导出为Excel或Word标准表格。正文 文心一言(ERNIE)作为百度旗下AI助手,生成表格时通常采用Markdown管道语法,例如&#xff1a…

2026/8/22 15:51:26 阅读更多 →
[AI 编程] 主流AI编程工具横评:Cursor、WinSurf、Claude Code 与 VS Code 插件集成方案深度对比

[AI 编程] 主流AI编程工具横评:Cursor、WinSurf、Claude Code 与 VS Code 插件集成方案深度对比

在现代软件开发过程中,AI 编程助手已成为开发者提升效率的重要利器。尤其是在代码生成、重构、调试、文档生成等场景中,智能工具正全面介入开发流程。本文将围绕当前主流的 AI 编程工具——Cursor、WinSurf、Claude Code,以及 VS Code 中通过插件集成的 Cline,展开详细对比…

2026/8/22 15:51:26 阅读更多 →
MAA小助手自动公招:3步配好标签策略,加急许可刷到没券为止

MAA小助手自动公招:3步配好标签策略,加急许可刷到没券为止

MAA小助手自动公招:3步配好标签策略,加急许可刷到没券为止 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地…

2026/8/22 15:51:26 阅读更多 →
knowledge_graph:30秒把任意文本变成知识图谱,它是怎么做到的

knowledge_graph:30秒把任意文本变成知识图谱,它是怎么做到的

knowledge_graph:30秒把任意文本变成知识图谱,它是怎么做到的 【免费下载链接】knowledge_graph Convert any text to a graph of knowledge. This can be used for Graph Augmented Generation or Knowledge Graph based QnA 项目地址: https://gitco…

2026/8/22 15:51:26 阅读更多 →
AnythingLLM 教程:10 分钟搭建一个本地私有知识库问答应用

AnythingLLM 教程:10 分钟搭建一个本地私有知识库问答应用

AnythingLLM 教程:10 分钟搭建一个本地私有知识库问答应用 【免费下载链接】anything-llm Stop renting your intelligence. Own it with AnythingLLM. Everything you need for a powerful local-first agent experience 项目地址: https://gitcode.com/GitHub_…

2026/8/22 15:51:26 阅读更多 →
Git配置完全指南:从核心原理到高效工作流实战

Git配置完全指南:从核心原理到高效工作流实战

1. 项目概述:为什么你的Git配置总是不对劲? 如果你用过Git,大概率遇到过这些情况:提交记录里的作者信息是乱码、每次推送都要输密码、换台电脑后所有习惯设置都丢了,或者团队里有人用Windows有人用Mac,换行…

2026/8/22 15:50:26 阅读更多 →

日新闻

沉金PCB工艺实战指南:从设计到SMT焊接的可靠性保障

沉金PCB工艺实战指南:从设计到SMT焊接的可靠性保障

在电子硬件开发领域,PCB(印制电路板)的沉金工艺是提升产品可靠性和焊接质量的关键环节。对于需要高密度互连、长期稳定运行或高频信号传输的板卡,如“黍姐仿通行证”这类可能涉及身份识别、数据交互的硬件项目,选择正确…

2026/8/22 0:00:11 阅读更多 →
电气考研电路八月强化四步法:从知识体系到真题实战的闭环攻略

电气考研电路八月强化四步法:从知识体系到真题实战的闭环攻略

这次我们来看一个针对电气考研电路科目的学习规划项目。它不是软件工具,而是一套聚焦于8月份关键节点的备考策略。对于电气工程考研的同学来说,电路分析是专业课的重中之重,也是拉开分差的关键。进入8月,复习进入强化阶段&#xf…

2026/8/22 0:00:11 阅读更多 →
消除AI代码的“AI味”:Claude Code设计优化技能配置与实战指南

消除AI代码的“AI味”:Claude Code设计优化技能配置与实战指南

大家好,我是专注于前端开发与AI工具实践的技术博主。在日常使用 Claude Code 等AI编程助手时,你是否也遇到过这样的困扰:生成的代码功能上没问题,但代码风格、组件设计、交互逻辑总透着一股“AI味”——布局单调、样式简陋、交互生…

2026/8/22 0:00:11 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/21 3:21:33 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/22 8:09:09 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/21 6:07:56 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/21 16:42:28 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/22 7:31:03 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/22 3:22:48 阅读更多 →