C语言分支和循环基础知识

C语⾔是结构化的程序设计语⾔,这⾥的结构指的是顺序结构、选择结构、循环结构,C语⾔是能够实现这三种结构的。
我们可以使⽤ if 、 switch 实现分⽀结构,使⽤ for 、 while 、 do while 实现循环结构。

一,if语句

1.if

if语句语法:

1  if  (表达式)

2        语句y

表达式为真,则执行;反之,不执行。

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

例如:输入整数,判断是否为奇数。

56dcb33a2027414da8c4c18691944808.png


2.else

在上面例子中,如果判断偶数又如何?这就需要if...else...语句,如下:

a05f1949cb7e4e388e07c59c6e077805.png

3.分支中包含多条语句

默认if和else是控制一条语句的。例:

2cd329e3dbbb49e3b6f95ca6df793326.png

我们发现输入未成年年龄与成年年龄,都会打印“可以谈恋爱了”。

16749e4f2ff0484382322abece26adf4.pngedacec5ce2494e419944c3e14cd7739a.png

原因:if是控制一条语句的。如何做到控制两条语句?把代码用{   }括起来就可以了。

4.嵌套if

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

例:要求输⼊⼀个整数,判断输⼊的整数是0,还是正数或者负数。

acf7d84d40d347ab9cb145c4625a0953.png

5.悬空else问题

如果有多个 if 和 else ,则else 总是跟最接近的 if 匹配。所以说我们在使用if和else时,记得要用{ }括起来。

二,关系操作符

C 语⾔⽤于⽐较的表达式,称为 “关系表达式”,⾥⾯使⽤的运算符就称为“关系运算符”,主要有下⾯6个。
• > ⼤于运算符
• < ⼩于运算符
• >= ⼤于等于运算符
• <= ⼩于等于运算符
• == 相等运算符
• != 不相等运算符
注:a.关系表达式通常返回 0 或 1 ,表⽰真假。
       b.相等运算符 == 与赋值运算符 = 是两个不⼀样的运算符,不要混淆。(我们可以将变量写在等号的右边)
       c.多个关系运算符不宜连用

三,条件操作符

条件操作符也叫三⽬操作符,是接受三个操作数的,形式如下:
1 exp1 ? exp2 : exp3
条件操作符的计算逻辑是:如果 exp1 为真, exp2 计算,计算的结果是整个表达式的结果;如果
exp1 为假, exp3 计算,计算的结果是整个表达式的结果。
例:比较大小
925705f478c444adac5d07bb8f0217f0.png
执行结果: c930bb9ae49944ecb464f66aeaa1307d.png

四,逻辑操作符

1.逻辑操作符分类

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

2.短路

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

五,switch语句

除了 if 语句外,C语⾔还提供了 switch 语句来实现分⽀结构。switch 语句是⼀种特殊形式的 if...else 结构,⽤于判断条件有多个结果的情况。
上⾯代码中,根据表达式 expression 不同的值,执⾏相应的 case 分⽀。如果找不到对应的值,
就执⾏ default 分⽀。
注:
• switch 后的 expression 必须是整型表达式
• case 后的值,必须是整形常量表达式

1.switch语句中的break

switch 语句也是分⽀效果的,只有在 switch 语句中使⽤ break 才能在跳出 switch 语句,如果某⼀个 case 语句的后边没有 break 语句,代码会继续玩下执⾏,有可能执⾏其他 case 语句中的代码,直到遇到 break 语句或者 switch 语句结束。所以在 switch 语句中 break 语句是⾮常重要的,能实现真正的分⽀效果。当然, break 也不是每个 case 语句都得有,这就得根据实际情况来看了。

2.switch语句中的default

switch 后的表达式中的值⽆法匹配代码中的 case 语句的时候,这时候就要在 switch 语句中加⼊default 语句。例如:
1  switch (expression) {
2  case value1: statement
3  case value2: statement
4  default: statement
5  }

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

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

六,while循环

1.语法形式

while 语句的语法结构和 if 语句⾮常相似。C语⾔提供了3种循环语句, while 就是其中⼀种,接下来就介绍⼀下 while 语句。

2.执行流程

7bdbacde412a490fac4a6616a5acdd48.png
⾸先上来就是执⾏判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执⾏循环语
句,语句执⾏完后再继续判断,是否进⾏下⼀次判断。

3.代码演示

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

七,for循环

1.语法形式

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

2.执行流程

a.首先执⾏表达式1 初始化循环变量
b.接下来就是执⾏ 表达式2 的判断部分, 表达式2 的结果如果==0,则循环结束; 表达式2 的结果如果!=0则执⾏循环语句,循环语句执⾏完后,再去执⾏表 达式3 ,调整循环变量,然后再去 表达式2 的地⽅执⾏判断, 表达式2 的结果是否为0,决定循环是否继续。整个循环的过程中,表达式1初始化部分只被执⾏1次,剩下的就是表达式2、循环语句、表达式3在循环。

3.代码演示

在屏幕上打印1~10的值 :
1 #include <stdio.h>
2
3 int main()
4 {
5 int i = 0;
6 for(i=1; i<=10; i++)
7 {
8 printf("%d ", i);
9 }
10
11 return 0;
12 }

八,do-while循环

1.语法形式

do while 循环是先直接进⼊循环体,执⾏循环语句,然后再执⾏ while 后的判断表达式,表
达式为真,就会进⾏下⼀次,表达式为假,则不再继续循环。

2.执行流程

在 do while 循环中先执⾏“语句”,执⾏完语句,在去执⾏“判断表达式”,判断表达式的结果是!=0,则继续循环,执⾏循环语句;判断表达式的结果==0,则循环结束。
所以在 do while 语句中循环体是⾄少执⾏⼀次的,这是 do while 循环⽐较特殊的地⽅。

3.代码演示

在屏幕上打印1~10的值

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

九,break和continue语句

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

1.while循环中的break和continue

a.break举例

#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5)
break; // i 等于 5 后,就执⾏ break ,循环就终⽌了
printf("%d ", i);
i = i+1;
}
return 0;
}
执⾏的结果:
1  2  3  4

b.continue举例

#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5)
continue;
// i 等于 5 后,就执⾏ continue ,直接跳过 continue 的代码,去循环的判断的地⽅
// 因为这⾥跳过了 i = i+1 ,所以 i ⼀直为 5 ,程序陷⼊和死循环
printf("%d ", i);
i = i+1;
}
return 0;
}
所以说,continue 可以帮助我们跳过某⼀次循环 continue 后边的代码,直接到循环的判断部分,进⾏下⼀次循环的判断,如果循环的调整是在 continue 后边的话,可能会造成死循环。

2.for循环中的break和continue

a.break举例

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

运行结果:

1  2  3  4

break 的作⽤是永久的终⽌循环,未来我们在某个条件发⽣的时候,不想再继续循环的时候,就可以使⽤ break 来完成。

b.continue举例

#include <stdio.h>
int main()
{
int i = 1;
for(i=1; i<=10; i++)
{
if(i == 5)
continue; // 这⾥ continue 跳过了后边的打印,来到了 i++ 的调整部分
printf("%d ", i);
}
return 0;
}
运行结果:
1  2  3  4  6  7  8  9  10
所以在 for 循环中 continue 的作⽤是跳过本次循环中 continue 后的代码,直接去到循环的调
整部分。未来当某个条件发⽣的时候,本次循环⽆需再执⾏后续某些操作的时候,就可以使⽤
continue 来实现。

3.do while循环中的break和continue

do.while 语句中的 break 和 continue 的作⽤和 while 循环中⼏乎⼀模⼀样,⼤家下来可以
⾃⾏测试并体会。
#include <stdio.h>
int main()
{
int i = 1;
do
{
if(i == 5)
continue;
printf("%d ", i);
i = i + 1;
}while(i<=10);
return 0;
}

十,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 就⾮常的⽅便了。
for(...)
{
for(...)
{
for(...)
{
if(disaster)
goto error;
}
}
本来 for 循环想提前退出得使⽤ break ,⼀个 break 只能跳出⼀层 for 循环,如果3层循环嵌套
就得使⽤3个 break 才能跳出循环,所以在这种情况下我们使⽤ goto 语句就会更加的快捷。

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旅行的九月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值