news 2026/7/3 18:16:17

分支和循环

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
分支和循环
C语⾔是结构化的程序设计语⾔,这⾥的结构指的是顺序结构、选择结构、循环结构,C语⾔是能够实
现这三种结构的,其实我们如果仔细分析,我们⽇常所⻅的事情都可以拆分为这三种结构或者这三种
结构的组合。
我们可以使⽤ifswitch实现分⽀结构,使⽤forwhiledo while实现循环结构。

1.if语句

1.1if

if 语句的语法形式如下:
if(表达式)
语句
表达式成⽴(为真),则语句执⾏,表达式不成⽴(为假),则语句不执⾏在C语⾔中,0为假⾮0表⽰真,也就是表达式的结果如果是0,则语句不执⾏,表达式的结果如果不 是0,则语句执⾏。
例⼦:输⼊⼀个整数,判断是否为奇数
#include <stdio.h> int main() { int num = 0; scanf("%d", &num); if(num % 2 == 1) printf("%d 是奇数\n", num); return 0; }

1.2 else

如果⼀个数不是奇数,那就是偶数了,如果任意⼀个整数,我们要清楚的判断是奇数还是偶数怎么表
⽰呢?
这⾥就需要if...else...语句了,语法形式如下:
if(表达式)
语句1
else
语句2
例⼦:输⼊⼀个整数,判断是否为奇数,如果是奇数打印是奇数,否则打印偶数。
#include <stdio.h> int main() { int num = 0; scanf("%d", &num); if(num % 2 == 1) printf("%d 是奇数\n", num); else printf("%d 是偶数\n", num); return 0; }

1.3 分支中包含多条语句

默认在ifelse语句中默认都只控制⼀条语句

1.4 嵌套if

if else语句中,else可以与另⼀个if语句连⽤,构成多重判断。
⽐如:
输⼊⼀个整数,如果是正数,再判断是奇数还是偶数,并输出;如果不是正数则输出:⾮正数。
#include <stdio.h> int main() { int num = 0; scanf("%d", &num); if(num > 0) { if(num%2 == 0) printf("偶数\n"); else printf("奇数\n"); } else { printf("⾮正数\n"); } return 0; }

1.5 悬空else问题

如果有多个ifelse,可以记住这样⼀条规则,else总是跟最接近的if匹配。
#include <stdio.h> int main() { int a = 0; int b = 2; if(a == 1) if(b == 2) printf("hehe\n"); else printf("haha\n"); return 0; }
但是当你去运⾏代码,输出的结果是:啥都不输出。
这就是悬空else的问题,如果有多个ifelse,可以记住这样⼀条规则,else总是跟最接近
if匹配。
上⾯的代码排版,让else和第⼀个if语句对⻬,让我们以为else是和第⼀个if匹配的,当if
语句不成⽴的时候,⾃然想到的就是执⾏else⼦句,打印haha,但实际上else是和第⼆个if
进⾏匹配的,这样后边的if...else语句是嵌套在第⼀个if语句中的,如果第⼀个if语句就不
成⽴,嵌套ifelse就没机会执⾏了,最终啥都不打印。
如果代码改成下⾯这样就更加容易理解了
#include <stdio.h> int main() { int a = 0; int b = 2; if(a == 1) { if(b == 2) printf("hehe\n"); else printf("haha\n"); } return 0; }
只要带上适当的⼤括号,代码的逻辑就会更加的清晰,所以⼤家以后在写代码的时候要注意括号的使 ⽤,让代码的可读性更⾼。

2.0 关系操作符

C 语⾔⽤于⽐较的表达式,称为 “关系表达式”(relational expression),⾥⾯使⽤的运算符就称
为“关系运算符”(relational operator),主要有下⾯6个。
> ⼤于运算符
< ⼩于运算符
>= ⼤于等于运算符
<= ⼩于等于运算符
== 相等运算符
!= 不相等运算符
关系表达式通常返回01,表⽰真假。
C 语⾔中,0表⽰假,所有⾮零值表⽰真。⽐如,20 > 12返回112 > 20返回0
注意:相等运算符==与赋值运算符=是两个不⼀样的运算符,不要混淆。有时候,可能会不⼩⼼写
出下⾯的代码,它可以运⾏,但很容易出现意料之外的结果。
为了防⽌出现这种错误,有的程序员喜欢将变量写在等号的右边。
if (3 == x)

这样的话,如果把 ==误写成=,编译器就会报错。

另⼀个需要避免的错误是:多个关系运算符不宜连⽤

3.0 条件操作符(三目操作符)

exp1 ? exp2 : exp3
条件操作符的计算逻辑是:如果exp1为真,exp2计算,计算的结果是整个表达式的结果;如果
exp1为假,exp3计算,计算的结果是整个表达式的结果。

4.0 逻辑操作符:&& , || , !

逻辑运算符提供逻辑判断功能,⽤于构建更复杂的表达式,主要有下⾯三个运算符。

! :逻辑取反运算符(改变单个表达式的真假)。
&& :逻辑与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)。
|| :逻辑或运算符,就是或者的意思(两侧⾄少有⼀个表达式为真,则为真,否则为假)。

4.1 短路

C语⾔逻辑运算符还有⼀个特点,它总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是 保证的。
如果左边的表达式满⾜逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为“短路”。

5.0 switch语句

除了if语句外,C语⾔还提供了switch语句来实现分⽀结构。
switch语句是⼀种特殊形式的if...else结构,⽤于判断条件有多个结果的情况。
switch (expression) { case value1: statement case value2: statement ... default: statement }
上⾯代码中,根据表达式expression不同的值,执⾏相应的case分⽀。如果找不到对应的值,
就执⾏default分⽀。
注:
switch 后的expression必须是整型表达式
case 后的值,必须是整形常量表达式
case 和后边的数字之间必须有空格
每⼀个 case语句中的代码执⾏完成后,需要加上break,才能跳出这个switch语句

5.1 switch语句中的case和default的顺序问题

switch语句中case语句和default语句是没有顺序要求的,只要你的顺序是满⾜实
际需求的就可以。
不过我们通常是把default⼦句放在最后处理的。
default放前面需要加break,放在最后则不用加

6. while循环

C语⾔提供了3种循环语句, while就是其中⼀种,接下来就介绍⼀下while语句。

while 语句的语法结构和if语句⾮常相似。

它们的区别就是:while语句是可以实现循环效果的。

6.1 while 循环的实践

练习:在屏幕上打印 1~10 的值
#include <stdio.h> int main() { int i = 1; while(i <= 10) { printf("%d ", i); i = i + 1; } return 0; }
⾸先上来就是执⾏判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执⾏循环语
句,语句执⾏完后再继续判断,是否进⾏下⼀次判断。

7.0 for循环

for(表达式1; 表达式2; 表达式3) 语句;//如果循环体想包含更多的语句,可以加上⼤括号
表达式1⽤于循环变量的初始化
表达式2⽤于循环结束条件的判断
表达式3⽤于循环变量的调整

7.1 for循环的实践

练习:在屏幕上打印1~10的值
#include <stdio.h> int main() { int i = 0; for(i = 1; i <= 10; i++) { printf("%d ", i); } return 0; }

7.2 while循环和for循环的对⽐

forwhile在实现循环的过程中都有初始化、判断、调整这三个部分,但是for循环的三个部
分⾮常集中,便于代码的维护,⽽如果代码较多的时候while循环的三个部分就⽐较分散,所以从形 式上for 循环要更优⼀些

8.0do-while 循环

在循环语句中do while语句的使⽤最少(多用于至少要执行一次的时候),它的语法如下:
do 语句; while(表达式);
whilefor这两种循环都是先判断,条件如果满⾜就进⼊循环,执⾏循环语句,如果不满⾜就跳
出循环;
do while循环则是先直接进⼊循环体,执⾏循环语句,然后再执⾏while后的判断表达式,表
达式为真,就会进⾏下⼀次,表达式为假,则不再继续循环。

8.1 do while循环的实例

在屏幕上打印1~10的值

#include <stdio.h> int main() { int i = 1; do { printf("%d ", i); i = i + 1; }while(i <= 10); return 0; }

9.0 break和continue语句

在循环执⾏的过程中,如果某些状况发⽣的时候,需要提前终⽌循环,这是⾮常常⻅的现象。C语⾔中
提供了breakcontinue两个关键字,就是应⽤到循环中的。
break 的作⽤是⽤于永久的终⽌循环,只要break被执⾏,直接就会跳出循环,继续往后执
⾏。
continue 的作⽤是跳过本次循环中continue后边的代码,在for循环和while循环中有
所差异的。
10.0 循环的嵌套
三种循环 whiledo whilefor,这三种循环往往会嵌套在⼀起才能更好的解决
问题,就是我们所说的:循环嵌套.
例子:找出100~200之间的素数,并打印在屏幕上。
#include <stdio.h> int main() { int i = 0; //循环产⽣100~200的数字 for(i = 100; i <= 200; i++) { //判断i是否为素数 //循环产⽣2~i-1之间的数字 int j = 0; int flag = 1;//假设i是素数 for(j = 2; j < i; j++) { if(i % j == 0) { flag = 0; break; } } if(flag == 1) printf("%d ", i); } return 0; }

11.goto 语句

C语⾔提供了⼀种⾮常特别的语法,就是goto语句和跳转标号,goto语句可以实现在同⼀个函数
内跳转到设置好的标号处。
例如:
#include <stdio.h> int main() { printf("hehe\n"); goto next; printf("haha\n"); next: printf("跳过了haha的打印\n"); return 0; }
goto语句如果使⽤的不当,就会导致在函数内部随意乱跳转,打乱程序的执⾏流程,所以我们的建 议是能不⽤尽量不去使⽤;但是 goto语句也不是⼀⽆是处,在多层循环的代码中,如果想快速跳 出,使⽤ goto就⾮常的⽅便了。
本来for循环想提前退出得使⽤break⼀个 break 只能跳出⼀层 for 循环,如果3层循环嵌套
就得使⽤3个break才能跳出循环,所以在这种情况下我们使⽤goto语句就会更加的快捷。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/3 5:39:22

【专家级调优秘籍】:Dify检索重排序与智能过滤技术深度剖析

第一章&#xff1a;检索重排序的 Dify 结果过滤在构建基于大语言模型的应用时&#xff0c;检索增强生成&#xff08;RAG&#xff09;系统常面临检索结果相关性不足的问题。Dify 作为低代码 AI 应用开发平台&#xff0c;提供了灵活的结果过滤与重排序机制&#xff0c;有效提升最…

作者头像 李华
网站建设 2026/7/2 22:49:16

品牌价值观陈述:LobeChat塑造企业形象

LobeChat&#xff1a;重塑企业AI形象的技术实践 在生成式AI席卷全球的今天&#xff0c;企业不再只是被动接受技术变革的旁观者。面对ChatGPT带来的用户体验革命&#xff0c;越来越多组织意识到——与其依赖闭源服务、牺牲数据主权和品牌个性&#xff0c;不如构建属于自己的智能…

作者头像 李华
网站建设 2026/7/3 5:38:19

LobeChat能否实现AI面试官?招聘流程自动化尝试

LobeChat能否实现AI面试官&#xff1f;招聘流程自动化尝试 在人力资源部门每天面对成百上千份简历的今天&#xff0c;一个现实问题摆在眼前&#xff1a;如何在不牺牲评估质量的前提下&#xff0c;把初筛效率提升十倍&#xff1f;传统方式下&#xff0c;HR花30分钟与候选人通电话…

作者头像 李华
网站建设 2026/7/2 20:32:06

自驾游路线推荐:LobeChat避开拥堵路段

LobeChat 如何让自驾游避开拥堵&#xff1a;一个 AI 助手的工程实践 在智能出行逐渐成为日常的今天&#xff0c;我们早已不再满足于“从 A 到 B”的简单导航。真正的痛点是&#xff1a;现在出发会不会堵&#xff1f;有没有更好的路线&#xff1f;能不能一句话就告诉我全程细节&…

作者头像 李华
网站建设 2026/7/3 5:37:56

【舱驾】- 多模态基础知识01

洞察 智舱&#xff0c;智驾&#xff0c;发展到目前&#xff0c;叫的比较欢还属AI座舱&#xff0c;舱驾融合&#xff0c;多模态融合&#xff0c;端到端&#xff0c;VLA等。智驾VLA以及AI座舱的前提基础技术还属于多模态融合技术&#xff0c;AI智能座舱融合的是xMS、语音&#x…

作者头像 李华
网站建设 2026/6/28 21:17:41

LobeChat能否预订门票?智能服务再升级

LobeChat能否预订门票&#xff1f;智能服务再升级 在AI助手逐渐渗透日常生活的今天&#xff0c;我们已经不再满足于“问一句答一句”的简单交互。当用户对聊天机器人说“帮我订张周杰伦演唱会的票”&#xff0c;期望得到的不再是“我无法执行此操作”的冰冷回复&#xff0c;而是…

作者头像 李华