news 2026/5/8 16:55:42

C语言-分支与循环

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C语言-分支与循环

C语言是结构化的程序设计语言,其中包含顺序结构、选择结构、循环结构

if、switch实现分支结构,for、while、do while实现循环结构

一、if语句

1.1 if

1 if ( 表达式 ) 2 语句

表达式成立(为真),则语句执行,表达式不成立(为假),则语句不执行。

在C语言中,0表示假,非0表示真。

例子:输入一个数为整数,判断是否为奇数

#include<stdio.h> int main() { int num = 0; scanf_s("%d\n", &num); if (num % 2 == 1) printf("%d是奇数\n", num); return 0; }

1.2 else

如果一个数不是奇数,那就是偶数。判断任意一个数是奇数还是偶数,需要if...else...语句,

1 if(表达式) 2 语句1 3 else 4 语句2
例子:输⼊⼀个整数,判断是否为奇数,如果是奇数打印是奇数,否则打印偶数。
#include<stdio.h> int main() { int num = 0; scanf_s("%d", &num); if (num % 2 == 1) printf("%d是奇数\n", num); else printf("%d是偶数\n", num); return 0; }

1.3分支中包含多条语句

默认在if和else语句中只控制一条语句,所以需要使用{ }将代码括起来

#include <stdio.h> int main() { int age = 0; scanf("%d", &age); if(age >= 18) //if 后使⽤{} 控制多条语句-这个块也叫:程序块,或者复合语句 { printf("成年了\n"); printf("可以谈恋爱了\n"); } else //else 后使⽤{}控制多条语句-这个块也叫:程序块,或者复合语句 { printf("未成年\n"); printf("不可以早恋哦\n"); } return 0; }

1.4嵌套if

if else语句中,else可以与另⼀个if语句连⽤,构成多重判断。
例子:要求输⼊⼀个整数,判断输⼊的整数是0,还是正数或者负数。
#include <stdio.h> int main() { int num = 0; scanf("%d", &num); if(num == 0) printf("输⼊的数字是0\n"); else if(num > 0) //这⾥的if 相当于嵌套在else语句中,形成了嵌套结构 printf("输⼊的数字是正数\n"); else printf("输⼊的数字是负数\n"); return 0; }
有了嵌套if语句,就可以完成更多复杂逻辑的判断。如下:
1 输⼊⼀个⼈的年龄 2 如果年龄<18岁,打印"少年" 3 如果年龄在18岁⾄44岁打印"⻘年" 4 如果年龄在45岁⾄59岁打印"中⽼年" 5 如果年龄在60岁⾄89岁打印"⽼年" 6 如果90岁及以上打印"⽼寿星"
#include<stdio.h> int main() { int age = 0; scanf_s("%d", &age); if (age < 18) printf("少年\n"); else if (age <= 44) printf("青年\n"); else if (age <= 59) printf("中老年\n"); else if (age <= 89) printf("老年\n"); else printf("老寿星\n"); return 0; }

二、关系操作符

C语言用于比较的表达式,称为“关系表达式”,主要包含以下6个

>大于运算符 <小于运算符 >=大于等于运算符 <=小于等于运算符 ==相等运算符 !=不相等运算符
比如:我们输⼊⼀个年龄,如果年龄在18岁~36岁之间,我们输出⻘年。
#include <stdio.h> int main() { int age = 0; scanf("%d", &age); if(age>=18 && age<=36) { printf("⻘年\n"); } return 0; }

三、条件操作符

条件操作符也叫三⽬操作符,需要接受三个操作数的,形式如下:
exp1 ? exp2 : exp3
条件操作符的计算逻辑是:如果exp1为真,exp2计算,计算的结果是整个表达式的结果;如果
exp1为假,exp3计算,计算的结果是整个表达式的结果。
例子:使用条件表达式实现找两个数中较⼤值。
#include <stdio.h> int main() { int a = 0; int b = 0; scanf("%d %d", &a, &b); int m = a>b ? a : b; printf("%d\n", m); return 0; }

四、逻辑操作符:&& , || , !

逻辑运算符提供逻辑判断功能,⽤于构建更复杂的表达式,主要有下⾯三个运算符。
!:逻辑取反运算符(改变单个表达式的真假)。
&& :逻辑与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)。
||:逻辑或运算符,就是或者的意思(两侧⾄少有⼀个表达式为真,则为真,否则为假)。

4.1逻辑取反运算符 !

比如,我们有⼀个变量叫flag,如果flag为假,要做⼀个什么事情,就可以这样写代码:
#include <stdio.h> int main() { int flag = 0; if(!flag) { printf("do something\n"); } return 0; }
如果flag为真,!flag就是假,如果flag为假,!flag就是真
所以上⾯的代码的意思就是flag为假,执⾏if语句中的代码

4.2逻辑与运算符&&

&&是与运算符,也是并且的意思,&&是⼀个双⽬操作符,使⽤的⽅式是a&&b,&&两边的表达
式都是真的时候,整个表达式才为真,只要有⼀个是假,则整个表达式为假。
比如:如果我们说⽉份是3⽉到5⽉,是春天,那使⽤代码怎么体现呢?
1 int month = 0; 2 scanf("%d", &month); 3 if(month >= 3 && month <= 5) 4 { 5 printf("春季\n"); 6 }
这⾥表达的意思就是month既要⼤于等于3,⼜要⼩于等于5,必须同时满⾜。

4.3逻辑或运算符 ||

||就是或运算符,也就是或者的意思,||也是⼀个双⽬操作符,使⽤的⽅式是a || b||
两边的表达式只要有⼀个是真,整个表达式就是真,两边的表达式都为假的时候,才为假。
比如:我们说⼀年中⽉份是12⽉或者1⽉或者2⽉是冬天,那么我们怎么使⽤代码体现呢?
1 int month = 0; 2 scanf("%d", &month); 3 if(month == 12 || month==1 || month == 2) 4 { 5 printf("冬季\n"); 6 }

4.4闰年的判断

输⼊⼀个年份year,判断year是否是闰年
闰年判断的规则: 1. 能被4整除并且不能被100整除是闰年 2. 能被400整除是闰年
#include<stdio.h> int main() { int year = 0; scanf_s("%d", &year); if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) { printf("是闰年\n"); } else { printf("不是闰年\n"); } return 0; }

4.5短路

C语⾔逻辑运算符还有⼀个特点,它总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是 保证的。
如果左边的表达式满⾜逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为“短路”。
如前⾯的代码
if(month >= 3 && month <= 5)
表达式中&& 的左操作数是month >= 3,右操作数是month <= 5,当左操作数month >= 3
结果是0的时候,即使不判断month <= 5,整个表达式的结果也是0(不是春季)。
所以,对于&&操作符来说,左边操作数的结果是0的时候,右边操作数就不再执⾏。
对于||操作符是怎么样呢?我们结合前⾯的代码:
if(month == 12 || month==1 || month == 2)
如果month == 12,则不⽤再判断month是否等于1或者2,整个表达式的结果也是1(是冬季)。
所以,||操作符的左操作数的结果不为0时,就⽆需执⾏右操作数。
像这种仅仅根据左操作数的结果就能知道整个表达式的结果,不再对右操作数进⾏计算的运算称为短路求值。

五、switch语句

除了if语句外,C语⾔还提供了switch语句来实现分⽀结构。
switch语句是⼀种特殊形式的if...else结构,⽤于判断条件有多个结果的情况。它把多重
else if改成更易⽤、可读性更好的形式。
switch (expression) { case value1: statement case value2: statement ... default: statement }
上⾯代码中,根据表达式expression不同的值,执⾏相应的case分⽀。如果找不到对应的值,
就执⾏default分⽀。
注:
switch后的expression必须是整型表达式
case后的值,必须是整形常量表达式
练习: 输⼊⼀个1~7的数字,打印对应的星期⼏ 例如: 输⼊:1 输出:星期⼀ 输⼊:2 输出:星期⼆ 输⼊:3 输出:星期三 输⼊:4 输出:星期四 输⼊:5 输出:星期五 输⼊:6 输出:星期六 输⼊:7 输出:星期天
#include<stdio.h> int main() { int day = 0; scanf_s("%d", &day); switch (day) { case 1: case 2: case 3: case 4: case 5: printf("工作日\n"); break; case 6: case 7: printf("休息日\n"); break; default: printf("输入错误\n"); break; } return 0; }

六、while循环

⾸先上来就是执⾏判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执行循环语
句,语句执⾏完后再继续判断,是否进⾏下⼀次判断。
输⼊⼀个正的整数,逆序打印这个整数的每⼀位 例如: 输⼊:1234,输出:4 3 2 1 输⼊:521,输出:1 2 5
题⽬解析
1.要想得到n的最低位,可以使⽤n%10的运算,得到的余数就是最低位,如:1234%10得到4
2.要想去掉n的最低位,找出倒数第⼆位,则使⽤n=n/10操作就可以去掉最低位的,如n=1234/10得到123,123相较于1234就去掉了最低位,123%10就得到倒数第⼆位3。
3.循环1和2两个步骤,在n变成0之前,就能到所有的位。
include<stdio.h> int main() { int n = 0; scanf_s("%d", &n); while (n) { printf("%d", n % 10); n /= 10; } return 0; }

七、for循环

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

⾸先执⾏ 表达式1初始化循环变量,接下来就是执行表达式2的判断部分,表达式2的结果如果==0,则循环结束;表达式2的结果如果!=0则执⾏循环语句,循环语句执⾏完后,再去执⾏表达式
3,调整循环变量,然后再去 表达式2的地⽅执⾏判断,表达式2的结果是否为0,决定循环是否继 续。整个循环的过程中,表达式1初始化部分只被执⾏1次,剩下的就是表达式2、循环语句、表达式3在循环。
例子:计算1~100之间3的倍数的数字之和
#include<stdio.h> int main() { int i = 0; int sum = 0; for (i = 1; i < 100; i++) { if (i % 3 == 0) sum += i; } printf("%d\n", sum); return 0; }

八、do-while循环

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

do while循环中先执⾏图上的“语句”,执⾏完语句,在去执⾏“判断表达式”,判断表达式的
结果是!=0,则继续循环,执⾏循环语句;判断表达式的结果==0,则循环结束。所以在do while语句中循环体是⾄少执⾏⼀次的,这是do while循环⽐较特殊的地⽅。
输⼊⼀个正整数,计算这个整数是⼏位数? 例如: 输⼊:1234 输出:4 输⼊:12 输出:2
#include<stdio.h> int main() { int n = 0; scanf_s("%d", &n); int cnt = 0; do { cnt++; n = n / 10; } while (n); printf("%d\n", cnt); return 0; }

九、break和continue语句

在循环执⾏的过程中,如果某些状况发⽣的时候,需要提前终止循环,这是非常常见的现象。C语⾔中提供了 breakcontinue两个关键字,就是应用到循环中的。
break的作用是用于永久的终止循环,只要break被执行,直接就会跳出循环,继续往后执行
continue的作用是跳过本次循环中continue后边的代码,在for循环和while循环中有所差异的。

十、循环的嵌套

前⾯学习了三种循环whiledo whilefor,这三种循环往往会嵌套在⼀起才能更好的解决
问题,就是我们所说的:循环嵌套,这⾥我们就看⼀个例子。
练习 找出100~200之间的素数,并打印在屏幕上。 注:素数⼜称质数,只能被1和本⾝整除的数字。
题⽬解析: 1. 要从100~200之间找出素数,⾸先得有100~200之间的数,这⾥可以使⽤循环解决。 2. 假设要判断i是否为素数,需要拿2~i-1之间的数字去试除i,需要产⽣2~i-1之间的数字,也可以使⽤ 循环解决。 3. 如果2~i-1之间有数字能整除i,则i不是素数,如果都不能整除,则i是素数。
#include<stdio.h> int main() { int i = 0; for (i = 100; i <= 200; i++) { int j = 0; int flag = 1; for (j = 2; j < i; j++) { if (i % j == 0) { flag = 0; break; } } if (flag == 1) printf("%d\n", i); } return 0; }

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

构建AI辅助工具链时利用Taotoken实现多模型路由与降级策略

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 构建AI辅助工具链时利用Taotoken实现多模型路由与降级策略 在构建面向内部或客户的AI辅助工具链时&#xff0c;技术架构师面临的核…

作者头像 李华
网站建设 2026/5/8 16:55:16

从零开始:Nintendo Switch大气层系统完整安装与功能深度解析

从零开始&#xff1a;Nintendo Switch大气层系统完整安装与功能深度解析 【免费下载链接】Atmosphere-stable 大气层整合包系统稳定版 项目地址: https://gitcode.com/gh_mirrors/at/Atmosphere-stable 想要为你的Nintendo Switch解锁无限可能吗&#xff1f;大气层系统&…

作者头像 李华
网站建设 2026/5/8 16:55:12

Soul App开源SoulX-LiveAct,升级长视频与实时流式视频生成技术

近期&#xff0c;Soul App AI团队&#xff08;Soul AI Lab&#xff09;正式发布开源模型SoulX-LiveAct。作为面向实时数字人生成的新方案&#xff0c;该模型围绕长时稳定性与实时推理能力展开技术创新&#xff0c;在自回归扩散&#xff08;AR Diffusion&#xff09;框架下实现突…

作者头像 李华
网站建设 2026/5/8 16:55:11

如何高效实现手机号码精准定位:基于ASP.NET的开源解决方案

如何高效实现手机号码精准定位&#xff1a;基于ASP.NET的开源解决方案 【免费下载链接】location-to-phone-number This a project to search a location of a specified phone number, and locate the map to the phone number location. 项目地址: https://gitcode.com/gh_…

作者头像 李华