C语言分支与循环
2026/7/30 7:56:01 网站建设 项目流程

前言

本人的技术笔记会优先发布在个人站点longyxblg.cn

C语言是结构化的程序设计语言,结构指顺序结构、选择结构、循环结构。

分支语句

if语法格式

if(表达式)语句

C语言中,非0为真,0为假。

intnum=0;scanf("%d",&num);if(num%2==1)print("%d 是奇数\n",num);return0;

else

判断是与不是的情况

if(表达式)语句1else语句2
intnum=0;scanf("%d",&num);if(num%2==1)printf("%d 是奇数\n",num);elseprintf("%d 是偶数\n",num);

分支中包含多条语句

C语言中默认 if 和 else 后只跟一条语句,想跟多条需

要使用 {} 。

intage=0;scanf("%d",&age);if(age>=18){printf("你已经成年了\n");printf("可以去上网了\n");}else{printf("你是个儿童\n");printf("不能去上网\n");}

if 嵌套

在 if…else 语句中, else 可以与另一个 if 语句连用,构成多重判断。

intnum=0;scanf("%d",&num);if(num>0)printf("%d 是正数\n",num);elseif(num<0)printf("%d 是负数\n",num);elseprintf("%d 是零\n",num);return0;
intnum=0;scanf("%d",&num);if(num>0){if(num%2==1)printf("%d 是正奇数\n",num);elseprintf("%d 是正偶数\n",num);}else{printf("%d 是非正数\n",num);}

else 的悬空问题

else 总是与最接近的 if 匹配

inta=0;intb=2;if(a==1)if(b==2)printf("hehe\n");elseprintf("haha\n");

这里 else 与 是与 if(b == 2) 匹配 所以结果是什么代码运行结果是什么都没有。

如果想要 else 与 if (a == 1) 相匹配,可以使用{}。

inta=0;intb=2;if(a==1){if(b==2)printf("hehe\n");}elseprintf("haha\n");

关系操作符

C语言中用于比较的表达式成为关系表达式,使用的运算符就称为关系运算符。

主要有以下六个:

>// 大于运算符<// 小于运算符>=// 大于等于运算符<=// 小于等于运算符==// 等于运算符!=// 不等运算符

关系表达式通常返回的是 0 或 1。

需要注意的是关系运算符不宜连用。

intnum=0;if(18<=num<=20){printf("haha\n");}

在上述代码中,执行逻辑是先判断 18 <= 0 返回为 0,然后再比较 0 <= 20 ,为

真,所以执行了语句。

正确写法应使用逻辑运算符,在后文中会说明。

条件操作符

也叫三目操作符,需要三个操作数,形式如下:

exp1?exp2 :exp3

计算逻辑如图:

inta=0;intb=0;scanf("%d",&a);b=a>5?3:-3;printf("%d\n",b);

逻辑操作符

逻辑操作符提供逻辑判断功能。主要如下:

!:逻辑取反(改变单个表达式的真假)&&:逻辑与,两侧表达式都为真,则为真,否则为假||:逻辑或,两侧表达式有一个是真则为真,否则为假

! 逻辑取反

intflag=0;if(!flag){printf("do something\n");}

&& 逻辑与

inta=0;intb=0;scanf("%d%d",&a,&b);if(a>0&&b>0){printf("a和b都是正数\n");}

|| 逻辑或

inta=0;intb=0;scanf("%d%d",&a,&b);if(a>0||b>0){printf("a和b至少有一个是正数\n");}

短路

C语言逻辑运算符总是对左侧的表达式求值,再对右侧的表达式求值。

如果左侧表达式满足逻辑运算符的条件,则不再对右侧表达式求值,这种现象称

为短路。

inta=0;intb=1;if(a>1&&++b){printf("hehe\n");}printf("%d\n",b);

这里可以看到 b 的值还是1 ,说明发生了短路,++b 没有执行。

像这种仅仅根据左操作数的结果就能知道整个表达式的结果,不再对右操作数进

行计算的运算称为短路求值。

switch 语句

C语言还提供了 switch 来实现分支结构。

switch 语句 是一种特殊形式 if…else 语句。用于判断条件有多个结果的情况。

switch(expression){casevalue1:statementcasevalue2:statementdefault:statement}

根据表达式 expression 表达式的值来执行不同的 case 分支。如果没找到对应值

执行 defaultt 分支。

switch 后的 expression 必须是整型表达式。

case 后的值,必须是整型表达常量。

if 语句和 switch 语句的对比

intn=0;scanf("%d",&n);if(n%3==0)printf("整除,余数为0\n");elseif(n%3==1)printf("余数是1\n");else{printf("余数是2\n");}
intn=0;scanf("%d",&n);switch(n%3){case0:printf("整除,余数为0\n");break;case1:printf("余数是1\n");break;case2:printf("余数是2\n");break;}

case 和后边的数字之间必须有空格。

case 语句的代码后加上 break ,才能跳出这个 switch 语句。 否则会出现穿透现

象。

switch 语句中的穿透现象

intn=0;scanf("%d",&n);switch(n%3){case0:printf("整除,余数为0\n");case1:printf("余数是1\n");case2:printf("余数是2\n");}

某一个 case 后没有跟 break ,代码就会继续往下执行。直到遇到其他 case 中的

break 或 switch 语句结束。

switch 语句中的 default

当 switch 后边的 expression 中的结果与任意 case 中的值都不匹配的时候,就会

默认执行 default 后的语句。

switch 语句中 case 和 default

C语言中并没有硬性规定 case 和 default 的顺序,通常写法是将 default 放在最

后。

while 循环

语法格式

while(表达式)语句

执行流程如图

首先执行判断表达式,表达式值为0。循环结束,不为0则执行循环语句,语句执

行完再重复上述过程。

while 循环示例

//输入一个整数,逆序打印他intnum=0;scanf("%d",&num);while(num){printf("%d",num%10);num/=10;}

for 循环

语法格式

for(表达式1;表达式2;表达式3)语句

表达式1 用于循环变量的初始化
表达式2 用于循环结束的条件判断
表达式3 用于循环变量的调整。

执行流程如图

for 循环示例

// for循环打印1-10inti=0;for(i=1;i<=10;i++){printf("%d\n",i);}

do-while 循环

语法格式

do语句while(表达式);

do-while 是先进入循环体执行一次语句,再进行判断是否进行循环。

执行流程如下:

do-while 中循环体至少执行一次。

示例如下:

// do-while循环打印1-10intnum=1;do{printf("%d\n",num);num++;}while(num<=10);return0;

break 和 continue 语句

C语言中提供了 break 和 continue 两个关键字。

在循环中,break 的作用是永久终止该循环。

continue 是跳过本次循环位于 continue 之后的代码。

break 示例

inti=1;while(i<=10){if(i==5)break;printf("%d ",i);i=i+1;}

在 i 的值为 5 时,break 执行,永久终止了这个循环。

continue 举例

inti=1;while(i<=10){if(i==5)continue;printf("%d ",i);i=i+1;}

当 i 等于 5 后,就执行 continue,直接跳过 continue后的代码,去循环的判断的

地方。因为里跳过了i = i+1,所以i一直为5,程序陷入和死循环。

goto 语句

C语言提供了 goto 语句 和 跳转标号,可以实现在同一个函数内跳转到设置好的标号处。

// goto语句的使用inti=1;while(i<=10){if(i==5)gotolabel;printf("%d ",i);i=i+1;}label:return0;

语句如果使用的不当,就会导致在函数内部随意乱跳转,打乱程序的执行流程。需谨慎使用。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询