目录
一、什么是流程控制语句
二、顺序结构
三、分支结构
1、if语句
(1)第一种if语句
(2)第二种if语句
(3)第三种if语句
2.switch语句
四、循环结构
1、while语句
2、for循语句
3、do-while语句
4、break语句和continue语句
流程控制语句,就是通过一些语句,控制程序的执行流程。C语言中的流程控制语句共有三种:顺序结构,分支结构和循环结构。下面将对这三种结构进行详细介绍。
顺序结构语句是C语言中默认的执行流程,按照代码的先后顺序,从上至下依次执行代码语句。如下程序就是一个简单的顺序结构
#include
int main() {
printf("大小姐驾到,通通闪开");
printf("心怀不惧,方能翱翔于天际");
printf("超出三界之外,不在五形之中");
printf("人生是场穷游,偶尔也需要暴走");
printf("努力做主任喜欢的事情");
return 0;
}
在实际开发中,我们经常需要在满足一定条件下执行某段代码或代码块,但是如果条件不满足,我们就不希望执行相应的代码。而if语句就是在程序当中进行判断的。下面我们将介绍if语句。
第一种if语句的格式如下:
if(关系表达式){
语句体;
}
代码的执行流程如下:
(1) 首先计算关系表达式的值
(2) 如果关系表达式的值为true就执行语句体
(3) 如果关系表达式的值为false就不执行语句体
(4) 继续执行后面的其它语句
可以用流程图来表示代码的执行过程:
例如如下代码:
#include
int main() {
int score;
scanf("%d", &score);
if (score >= 60) {
printf("考试通过");
}
}
程序运行后,输入一个整数分数score,若score大于60,则输出“考试通过”。
第二种if语句格式如下:
if(关系表达式){
语句体1;
}else {
语句体2;
}
代码的执行流程如下:
(1) 首先计算关系表达的值
(2) 如果关系表达式的值为true就执行语句体1
(3) 如果关系表达式的值为false就不执行语句体2
(4) 继续执行后面的其它语句
可以用流程图来表示代码的执行过程:
例如如下代码:
#include
int main() {
int score;
scanf("%d", &score);
if (score >= 60) {
printf("考试通过\n");
}
else
{
printf("考试未通过\n");
}
}
程序运行后,输入一个整数分数score,若score大于60,则输出“考试通过”,否则输出考试未通过。
第三种if语句格式如下:
if(关系表达式1){
语句体1;
}else if(关系表达式2){
语句体2;
}
...
else {
语句体n + 1;
}
代码的执行流程如下:
(1)首先计算关系表达式1的值
(2)如果执行结果为true就执行语句体1;如果为false就计算关系表达式2的值
(3)如果为true就执行语句体2;如果为false就计算关系表达式3的值
(4)......
(5)如果所有关系表达式结果都为false,就执行语句体n + 1。
关键:从上往下依次判断,只要有一个判断为真,就执行对应的语句体,如果所有的判断都为假,就执行else语句体。
例如如下代码:
#include
int main() {
int score;
scanf("%d", &score);
if (score < 60) {
printf("考试不通过\n");
}
else if(score >= 60 && score < 70)
{
printf("考试通过\n");
}
else if (score >= 70 && score < 80) {
printf("考试良好\n");
}
else if (score >= 80 && score < 90) {
printf("考试较好\n");
}
else {
printf("考试优秀\n");
}
}
程序运行后,输入一个整数分数score,通过判断score满足的条件在显示屏上输出不同的信息。
switch语句是一种特殊形式的if...else结构,用于判断条件有多个结果的情况,同时也使程序更易读。
switch语句格式如下:
switch(表达式) {
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
...
default:
语句体 n + 1;
break;
}
switch语句的执行流程如下:
(1)首先计算表达式的值。
(2)依次和case后面的值进行比较,如果有对应的值,就会执行相应的语句,在执行过程中,遇到break就会结束。
(3)如果所有的case后面的值和表达式的值都不匹配,就会执行default里面的语句体,然后结束整个switch语句。
注意:
(1)case和后面的数字之间必须要有空格
(2)每一个case语句中的代码执行完成后,需要加上break,才能跳出switch语句。
例如下面的程序
#include
int main()
{
int n = 0;
scanf("%d", &n);
switch(n%3)
{
case 0:
printf("整除,余数为0\n");
break;
case 1:
printf("余数是1\n");
break;
case 2:
printf("余数是2\n");
break;
}
return 0;
}
该程序首先输入一个数,让这个数取模3,判断余数。
在实际开发中,有的时候要重复执行一段代码,如果按顺序执行的方式编写程序,那么编写程序的效率将会很低,因此C语言提供了三种循环语句:while、for和都 while
while语句的格式如下:
初始化语句;
while(条件判断语句){
循环体语句;
条件控制语句
}
while语句的执行流程如下:
(1)执行初始化语句
(2)执行条件判断语句,看其结果是true还是false
如果是false,循环结束
如果是true,执行循环体语句
(3)执行条件控制语句
(4)回到(2)继续执行条件判断语句
while语句执行流程图如下:
while先进行条件判断,如果表达式的值为0,循环直接结束;若表达式的值不为0,则执 行循环语句,同时进行条件控制,语句执行完后再进行条件判断,判断是否满足条件,若满 足条件则继续执行循环语句,若不满足则退出循环。
例如如下代码 :
#include
int main()
{
int i = 1;
while(i<=10)
{
printf("%d ", i);
i = i+1;
}
return 0;
}
改代码实现的功能是打印1~10之间的整数。运行结果如下:
for 循环的语句格式如下:
for(初始化语句;条件判断语句;条件控制语句){
循环体语句;
}
for语句的执行流程和while语句类似,这里不再描述。
例如上面打印1~10之间的整数的程序也可用for语句实现:
#include
int main()
{
for (int i = 1; i <= 10; i++) {
printf("%d ", i);
}
}
运行结果:
do-while语句的格式如下:
初始化语句;
do{
循环体语句;
条件控制语句;
}while(条件判断语句)
do-while语句与while语句执行流程相似,只不过do-while语句的循环体语句和条件控制语句无论如何都会执行一次,执行流程图如下:
例如上面打印1~10之间的整数的程序也可用do-while语句实现:
#include
int main()
{
int i = 1;
do
{
printf("%d ", i);
i = i + 1;
}while(i<=10);
return 0;
}
运行结果如下:
在循环执⾏的过程中,如果某些状况发⽣的时候,需要提前终⽌循环,这是⾮常常⻅的现象。C语⾔中 提供了 break 和 continue 两个关键字,就是应⽤到循环中的。
(1)break 的作⽤是⽤于永久的终⽌循环,只要 break 被执⾏,直接就会跳出循环,继续往后执 ⾏。
例如如下代码:
#include
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5)
break;//当i等于5后,就执⾏break,循环就终⽌了
printf("%d ", i);
i = i+1;
}
return 0;
}
当打印到5的时候,跳出循环。运行结果如下:
(2)continue 的作⽤是跳过本次循环 continue 后边的代码,在 for 循环和 while 循环中有所 差异的。
#include
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5)
continue;
printf("%d ", i);
i = i+1;
}
return 0;
}
当i等于5后,就执⾏continue,直接跳过continue的代码,去循环的判断的地⽅,因为这⾥跳过了i = i+1,所以i⼀直为5,程序陷⼊和死循环。程序的运行结果如下:
while语句和for语句中break和continue区别:
(1)在while和for语句中,break语句无区别,都可以跳出循环。
(2)在while语句中,continue 可以帮助我们跳过某⼀次循环 continue 后边的代码,直接 到循环的判断部分,进⾏下⼀次循环的判断,如果循环的调整是在 continue 后边的话,可能会造成死循环。在 for 循环中 continue 的作⽤是跳过本次循环中 continue 后的代码,直接去到循环的条件控制语句。未来当某个条件发⽣的时候,本次循环⽆需再执⾏后续某些操作的时候,就可以使⽤continue来实现。