1、什么是语句
C语句可分为以下五类:
- 表达式语句
- 函数调用语句
- 控制语句
- 复合语句
- 空语句
本文重点介绍控制语句。
C语言提供了许多控制语句,用于控制程序的执行流程。这些控制语句可以让程序根据不同的条件执行不同的操作。C语言中的控制语句可以分为以下几类:
条件语句:用于根据不同的条件执行不同的操作。C语言中的条件语句有if语句、if-else语句和switch语句。
循环语句:用于重复执行一段代码,直到满足特定条件为止。C语言中的循环语句有do-while语句、while语句和for语句。
转向语句:用于跳过当前循环,直接执行下一条语句。C语言中的转向语句有break语句、goto语句、continue语句和return语句。
复合语句:用于把多个语句作为一条语句。C语言中的复合语句由大括号{}组成。
这些控制语句可以帮助我们更有效地组织和控制程序的执行流程。
2、分支语句(选择结构)
2.1 if语句
if语句的语法形式如下:
单分支:
1.fi (表达式)
2. 语句; //表达式为真则执行(注意:C语言表示真和假是通过非0就是真,0就是假。)
运行结果:
如果a=20
运行结果:
双分支:
if(表达式) //表达式为真则执行语句1
语句1;
else //表达式为假则执行语句2
语句2;
运行结果:
if、else语句在使用时需要注意:
if 和else 默认只能控制一条语句,要想控制多条语句就要加上 {},如果没有加上{}则可能会影响代码运行的结果。
运行结果:
改进:
多分支:
if (表达式1) //输入要满足的条件
语句1; //若满足if中的条件,则执行语句1
else if (表达式2) //若不满足if中的条件
语句2; //若不满足if中的条件,则执行语句2
else //若既不满足if中的条件,也不满足else if中的条件
语句3; //若既不满足if中的条件,也不满足else if中的条件,则执行语句3
悬空else问题。
这就是悬空 else 的问题,如果有多个 if 和 else ,可以记住这样⼀条规则, else 总是跟最接近 的 if 匹配。
让 else 和第⼀个 if 语句对齐,我们以为 else 是和第⼀个if匹配的,当 if语句不成⽴的时候,自然想到的就是执行 else 后的语句,打印 haha ,但实际上 else 是和第⼆个 if进行匹配的,这样后边的 if...else 语句是嵌套在第⼀个 if 语句中的,如果第⼀个 if 语句就不 成⽴,嵌套 if 和 else 就没机会执行了,最后什么也不打印。
代码改进:
我们在写代码时适当的带上⼤括号 {},可以让我们代码的逻辑更加的清晰明了,所以⼤家以后在写代码的时候要注意括号的使用,让代码的可读性更⾼。
2.2 switch语句
除了 if 语句外,C语⾔还提供了 switch 语句来实现分⽀结构。switch 语句是⼀种特殊形式的if...else 结构,⽤于判断条件有多个结果的情况。它把多重 的 else if 改成更易⽤、可读性更好的形式。
switch语句的语法形式如下:
switch(整形表达式)
{
case 整型常量表达式: 语句;
}
注意:
switch 后的表达式 必须是整型表达式。
case 后的值,必须是整形常量表达式。
switch语句的使用:
在switch语句中,我们没办法直接实现分支,搭配break使用才能实现真正的分支。
switch语句中的break和default。
例如:
输入相应数字,分辨是工作日还是休息日。
解释:
当代码中加入break后,当运行到break所在位置时,会跳出switch语句,而default语句可以写在任何一个 case 标签可以出现的位置。 当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。所以,每个switch语句中只能出现一条default子句。 但是它可以出现在语句列表的任何位置,不固定。而且语句流会像执行一个case标签一样执行default子句。
3.循环语句
C语言中的循环语句主要有for循环、while循环和do-while循环。
for循环:用于对一个范围内的数值进行迭代。for循环由三部分组成:初始值表达式、循环条件表达式和循环变量的变化表达式。
while循环:用于在满足条件的情况下反复执行语句。当while语句执行时,先判断表达式真假。若为真(非零),则执行语句开始循环;若为假(零),则直接结束。
do-while循环:先执行一次循环体,然后判断条件是否满足,如果满足则继续执行,如果不满足则跳出循环。
3.1 while循环
while语法结构:
while(表达式)
循环语句结构;
while语句的执⾏流程图
用法: while跟if语句类似,如果while(表达式)中的表达式成立,运行循环语句结构;否则,不运行。
例如:
用while循环实现打印1~10的数字。
3.2 while语句中的break和continue。
break的应用
解释:
当i等于5的时候,循环在 break 的地方终止,不再打印,不再循环。所以 break 的作用就是永久的终⽌循环,只要 break 被执行, break 外的第⼀层循环就终止。
continue应用
解释:
看到这⾥我们就能分析出来, continue 可以帮助我们跳过某⼀次循环 continue 后边的代码,直接到循环的判断部分,进⾏下⼀次循环的判断,如果循环的调整是在 continue 后边的话,可能会造成 死循环。
3.3 for循环
for循环的语法结构:
for(表达式1; 表达式2; 表达式3)
循环语句;
表达式1:初始化部分,用于初始化循环变量的。
表达式2 :表达式2为条件判断部分,用于判断循环时候终止。
表达式3: 调整部分,用于循环条件的调整。
for循环的执⾏流程
整个循环的过程中,表达式1初始化部分只被执⾏1次,剩下的就是表达式2、循环语句、表达式3在循环。
例如:
用for在屏幕上打印1~10的数字:
总结:
for 和 while 在实现循环的过程中都有初始化、判断、调整这三个部分,但是 for 循环的三个部 分⾮常集中,便于代码的维护,⽽如果代码较多的时候 while 循环的三个部分就⽐较分散,所以从形 式上 for 循环要更优⼀些。
3.4 for循环中的break、continue
for循环中的break和continue,它们的意义和while循环中的类似。
for 循环中的 break 也是用于终止循环的,不管循环还需 要循环多少次,只要执行到了 break ,循环就彻底终止,我们上代码。
总结:
在 for 循环中 continue 的作⽤是跳过本次循环中 continue 后的代码,直接去到循环的调 整部分。
3.5 while循环与for循环的对比:
while循环
int main()
{
int i = 0; //初始化
while (i <= 10) //判断部分
{
printf("%d ", i);
i++; //调整部分
}
return 0;
}
for循环
int main()
{
int i = 0;
//for(i=1(初始化); i<=10(判断部分); i++(调整部分))
for (i = 1; i <= 10; i++)
{
printf("%d ", i);
}
return 0;
}
总结:
for 和 while 在实现循环的过程中都有初始化、判断、调整这三个部分,但是 for 循环的三个部 分⾮常集中,便于代码的维护,⽽如果代码较多的时候 while 循环的三个部分就⽐较分散,所以从形 式上 for 循环要更优⼀些。
3.6 do-while循环
do…whille()语句的语法:
do
循环语句;
while(表达式);
while 和 for 这两种循环都是先判断,条件如果满⾜就进⼊循环,执行循环语句,如果不满足就跳 出循环; 而 do while 循环则是先直接进⼊循环体,执⾏循环语句,然后再执行 while 后的判断表达式,表 达式为真,就会进行下一次,表达式为假,则不再继续循环。
例如 :打印数字1-10
、
do-while循环的执行流程图
3.7 do while循环中的break和continue
总结:do.while 语句中的 break 和 continue 的作⽤和 while 循环中⼏乎⼀模⼀样。
4. goto语句
C语⾔提供了⼀种⾮常特别的语法,就是 goto 语句和跳转标号, goto 语句可以实现在同⼀个函数 内跳转到设置好的标号处。
goto 语句如果使⽤的不当,就会导致在函数内部随意乱跳转,打乱程序的执行流程,所以建议是能不用尽量不去使用;但是 goto 语句也并不是没用,在多层循环的代码中,如果想快速跳出 使用 goto 就很方便。