1.语句分类
C语言分为五类语句
1.表达式语句 2.函数表达式 3. 控制语句 4.复合语句 5.空语句
本章将讲述控制语句,控制语句用于于控制程序的执行流程,以实现程序的各种结构方式。
控制语言又分为三类
1.分支语句:if语句 switch语句 2.循环语句:do while语句,while语句 for语句 3.转向语句:break语句 , goto语句 , continue语句 ,return语句
2.分支语句
什么是分支语句 首先我们先来了解一下分支语句,分支语句即是当满足a条件是,我们就会执行a的相关操作,如果不满足条件我们就会执行相关的操作。 我们在生活中也会有很多的选择,需要去选择,就好比我们去做一件事学编程,如果我们好好学习,就会找到好的工作,如果不好好学习,我们毕业即失业。 下面我们有那个一个流程图来说明这个问题。
2.1 if 分支语句
分支语句的实现 当程序进入判断语句时,如果满足条件语句,我们就执行语句1,否则执行语句2,然后再结束
在C语言中,0表示假,非零表示真
2.1.1 if分支语句的语法结构
结构一
if(表达式) 语句;
结构二
if(表达式) 语句1; else 语句2;
结构三
if(表达式1) 语句1; else if(表达式2) 语句2; else 语句3;
2.1.2 if -else代码代码演示
分析:当我们在屏幕输入45是,会进入if语句的判断条件,这些判断不是一起判断,而是从第一个开始判断,不满足我们就跳过这个if语句,当45这个值满足这个条件是,程序就会进入执行语句,打印出我们想要的结果。
2.2 switch分支语句
2.2.1 switch分支语句的语法结构
switch(整型表达式)
{
case 整形常量表达式:
语句;
}
代码演示
上面我们用来两种分支语句来实现多分支,当我们使用switch分支语句时,我们通过day来对case语句进行匹配的,当我们输入的值为1时,我就会走到case 1语句,如果我们输入day是4,我们程序就会执行case 4的语句,也就是说是通过我们的switch中的整形表达式来对我们的case实现分支。
2.2.2 switch中的break
情景导入
当我们在屏幕输入4,我原本以为会打印我们想要的星期四,但是结果打印是星期四 星期五 星期六 星期天,说明在执行完case 4语句后,程序没有停下来,而是接着往后继续执行。 如果你希望case 4语句执行完之后,程序结束,这里就要用到我们的break语句
这里我们在加了break语句后,这里打印出我们想要的值,那break的工作原理是什么呢?
原理:当我们在switch中的整形表达式中输入是多少,我就会执行某一个case语句中,这里的case后的整形常数表达式决定的是入口,也就是说我们的day输入是那个数字,我们就会执行那个case语句。执行完后,break直接跳出整个分支语句 break语句 的实际效果是把语句列表划分为不同的分支部分。所以以后在switch语句时,最好在case语句后添加break语句
2.2.3 default句子
如果表达的值与所有的case标签的值都不匹配怎么办? 其实也没什么,结构就是所有的语句都被跳过而已。 程序并不会终止,也不会报错,因为这种情况在C中并不认为是个错误。 但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢? 你可以在语句列表中增加一条default子句,把下面的标签 default: 写在任何一个 case 标签可以出现的位置。 当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。 所以,每个switch语句中只能出现一条default子句。 但是它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句。
3.循环语句
3.1 while循环
引入
当条件满足的情况下,if语句后的语句执行,否则不执行。 但是这个语句只会执行一次。 由于我们发现生活中很多的实际的例子是:同一件事情我们需要完成很多次。 生活中也有类似的循环,比如夏天 海水蒸发遇冷变为水滴 水滴相遇变大到一定值落下形成雨 雨水汇聚成河流流入大海,每天太阳的东升西落。
while循环的流程图
当程序进入判断条件时,条件为真就是非零,我们会进入循环体,在执行循环体过程中,当遇到continue语句时我们会跳过continue语句后面的语句,直接回到判断条件,当遇到break时,我们循环体执行完,直接跳出整个循环体,如果没有遇到continue和break时,执行完循环语句后,回到判断语句,满足条件继续执行,否则结束循环,这就是循环的基本原理。
3.1.1 while循环语句语法结构
while(表达式) 循环语句;
3.3.2 while语句的break和continue
分析
为什么我们在这个加了一个continue,结果会这样呢?首先我们先来了解一下continue的作用。 continue的作用:continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,而是直接跳转到while语句的判断部分。进行下一次循环的入口判断 当上面程序来到 i=5时,进入循环,来到if语句,执行我们的continue的语句,continue后面语句不会执行,会直接跳到while语句的判断部分,此时 i 还是5,因为没有执行后面的i++,所以继续进入循环,在continue语句,就会导致上面的死循环,光标不停在闪烁。
分析
break的作用:其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。 所以:while中的break是用于永久终止循环的。 当我们程序执行到break,就会直接跳出循环,而continue没有跳出循环,而是continue后面的语句不执行,还是在循环中。
3.2 for循环语句
for循环的流程图:
当程序进入for循环语句的初始化部分expr 1时,我们会进入条件判断部分expr 2对expr 1进行判断,满足条件,表达式为真,非零,进入循环体,执行完循环体,程序来到循环条件的调整部分,在对新的条件进行重新判断,如果不满足条件,直接跳出整个循环,满足条件继续循环,这里的continue和break同while的作用相同。
3.2.1 for循环语句语法结构
for(表达式1; 表达式2; 表达式3) 循环语句; 表达式1 表达式1为初始化部分,用于初始化循环变量的。 表达式2 表达式2为条件判断部分,用于判断循环时候终止。 表达式3 表达式3为调整部分,用于循环条件的调整。
3.2.2 for语句中的break和continue
continue作用是跳过continue后面的执行语句,所以这里没有打印5.
break是跳出整个循环。
3.2.3 for语句的循环控制变量
3.2.4 一些for循环的变种
代码一
#include <stdio.h>
int main()
{
for (;;)
{
printf("hehe\n");
}
return 0;
}
代码二
#include<stdio.h>
int main()
{
int i = 0;
int j = 0;
for (; i < 10; i++)
{
for (; j < 10; j++)
{
printf("hehe\n");
}
}
return 0;
}
代码三
#include<stdio.h>
int main()
{
int x, y;
for (x = 0, y = 0; x < 2 && y < 5; ++x, y++)
{
printf("hehe\n");
}
return 0;
}
3.3 do…while循环
do while循环语句流程图 程序进入我们的循环体,执行完循环体,在对条件的调整进行条件判断,如果条件为真,继续执行循环体,为假,结束循环。continue和break作用相同。
3.3.1 do while循环语句的语法结构
do
{
循环语句;
}while(表达式);
3.3.2 do while中的break和continue
4. go to语句
** C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。 从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。 但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过 程。 例如:一次跳出两层或多层循环。 多层循环这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。**
代码演示
for(...)
for(...)
{
for(...)
{
if(disaster)
goto error;
}
}
…
error:
if(disaster)
|