这篇将介绍C语言中分支语句和循环语句的所有知识
程序的艺术来源于生活
目录
3.3.3 do...while()循环中的break和continue
1.C语言中语句的分类
C语言是结构化的程序设计语言,C语言其中的分支语句和循环语句就是控制语句
C语言有九种控制语句,可分成以下三类:
2.分支语句(选择结构)

2.1 if语句
语法结构:if(表达式)语句;
if(表达式)语句1;else语句2;
// 多分支情况if(表达式1)语句1;else if(表达式2)语句2;else语句3 ;
代码演示
#include<stdio.h>
int main()
{
int score = 0;
printf("请输入0-100之间的数字:");
scanf("%d", &score);
if (score < 60)
printf("不及格");
else if (score >= 60 && score < 90)
printf("良好");
else
printf("优秀");
return 0;
}
注:在if ,else if,else 后面默认控制一条语句,如果想要控制多条语句,需要用{ }控制
#include <stdio.h>
int main()
{
if(表达式)
{
//语句列表1;
}
else if(表达式)
{
//语句列表2;
}
else
{
//语句列表3;
}
return 0;
}
在C语言中 0表示假,非0表示真
在 if 后面的()中,( )中为假则不执行,( )中为真则执行
2.1.1悬空else(else和if的匹配)
以下代码的输出结果是什么呢?
#include<stdio.h>
int main()
{
int a = 0;
int b = 2;
if (a == 1)
if (b == 2)
printf("呵呵");
else
printf("哈哈");
return 0;
}
结果发现程序什么都没有输出,由此得出:else是和它离的最近的if匹配的。
2.2 switch语句
switch语句用于多分支的情况
switch(整型表达式){case 整形常量表达式:语句;}
2.2.1 switch语句中的break
在switch语句中,我们没办法直接实现分支,搭配break使用才能实现真正的分支。
#include<stdio.h>
int main()
{
int n = 0;
printf("输入今天是星期几");
scanf("%d", &n);
switch (n)
{
case 1:
printf("Monday\n");
case 2:
printf("Tuesday\n");
case 3:
printf("Wednesday\n");
case 4:
printf("Thursday\n");
case 5:
printf("Friday\n");
case 6:
printf("Saturday\n");
case 7:
printf("Sunday\n");
}
return 0;
}
我们发现在switch语句中输入4,输出结果却是星期4到星期天,如何改变这种情况呢?
在这里我们需要引用 break,使代码不再往下进行
代码变成:
#include<stdio.h>
int main()
{
int n = 0;
printf("输入今天是星期几");
scanf("%d", &n);
switch (n)
{
case 1:
printf("Monday\n");
break;
case 2:
printf("Tuesday\n");
break;
case 3:
printf("Wednesday\n");
break;
case 4:
printf("Thursday\n");
break;
case 5:
printf("Friday\n");
break;
case 6:
printf("Saturday\n");
break;
case 7:
printf("Sunday\n");
break;
}
return 0;
}
此时我们再输入4,结果会有不同
但并不是每个case后面都需要加break,有时候我们需求变成
1.输入1-5,输入为“weekday”
2.输入6-7,输出为“weekend”
我们代码就可以这样实现:
#include<stdio.h>
int main()
{
int n = 0;
printf("输入今天是星期几");
scanf("%d", &n);
switch (n)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("Weekday\n");
break;
case 6:
case 7:
printf("Weekend\n");
break;
}
return 0;
}
2.2.2 default子句
如果输入的值都不与case标签的值相匹配,此时结构所有语句跳过,但是不想忽略所有不匹配的标签的表达式的值时该怎么办呢? 此时,你可以在语句列表中增加一条default子句
default子句可以写在switch语句中的任意一个case标签可以出现的位置
所以,每个switch语句中只能出现一条default子句。
但是它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句。
当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。
#include<stdio.h>
int main()
{
int n = 0;
printf("输入今天是星期几");
scanf("%d", &n);
switch (n)
{
default:
printf("输入错误");
break;
case 1:
case 2:
case 3:
case 4:
case 5:
printf("Weekday\n");
break;
case 6:
case 7:
printf("Weekend\n");
break;
}
return 0;
}
3.循环语句
循环语句就相当于生活中每天重复做的事情
简单理解流程图:
3.1 while循环
//while 语法结构:while ( 表达式 )循环语句 ;
while语句执行的流程:
利用while循环打印1-10之间的数字:
#include<stdio.h>
int main()
{
int i = 1;
while (i <= 10) //打印1-10之间的数字
{
printf("%d ", i);
i++;//i++表示每循环一次i增加1
}
return 0;
}
3.1.1 while语句中的break和continue
break介绍
break是结束整个的循环,直接跳过整个循环语句
例如:
#include<stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
if (i == 5)
break;//当i等于5时,循环终止,跳出循环
printf("%d ", i);
i++;
}
return 0;
}
break在while循环中的作用:
break后直接终止整个循环
continue介绍
continue是结束本次循环,跳到下次循环入口
例如:
#include<stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
if (i == 5)
{
i++;//防止i等于5死循环
continue;//当i等于5时,结束本次循环,跳到下次循环
}
printf("%d ", i);
i++;
}
return 0;
}
continue在while循环中的作用:
continue是用于终止本次循环的,也就是本次循环中continue后面的代码不会再执行
continue后直接跳转到while语句的判断部分,进行下一次循环入口判断
3.2 for循环
执行流程图:
3.2.1 for循环语法
for(表达式1; 表达式2; 表达式3)循环语句;
3.2.2 break和continue在for循环中
在for循环中也能使用break和continue,他们的使用意义和在while循环中使用是一样的
但是在某些地方是有些区别的
同样是打印1-10之间的数字,当i等于5时continue,但是两种循环方式产生的结果不同
while:
#include<stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
if (i == 5)
continue;
printf("%d ", i);
i++;
}
return 0;
}
此时由于在while中控制i变化的语句在continue后面,所以导致continue后i++不能被执行
所以i一直是5,此时就会陷入死循环
for:
#include<stdio.h>
int main()
{
int i = 0;
for (i = 1; i <= 10; i++)
{
if (i == 5)
continue;
printf("%d ", i);
}
return 0;
}
在for循环中由于控制变量变化的语句放在了开头,所以i++不受continue的限制
此时就能打印出1-10的数字
3.2.3 for语句的循环控制变量
建议:
1.不能在for循环体内修改循环变量,防止for循环失去控制2.建议for语句的循环控制变量的取值采用“前闭 后开区间”的写法
前闭后开区间的写法:
//前闭后开的写法
for(i=0; i<10; i++)
{
}
3.2.4 一些for循环的特殊情况
1 for循环中的初始化部分,判断部分,调整部分是可以省略的
#include<stdio.h>
int main()
{
for (; ;)
{
printf("Hello world\n");
}
return 0;
}
此时将会循环打印“Hello world”
2.for循环的嵌套使用
#include<stdio.h>
int main()
{
int i = 0;
int j = 0;
int count = 1;
for (i = 0; i < 10; i++)
{
for (j = 0; j < 10; j++)
{
printf("%d : Hello world\n",count);
count++;//每打印一次Hello world count就+1,计数作用
}
}
return 0;
}
此时将会打印100次“Hello world”
3.使用多余一个变量控制循环
#include<stdio.h>
int main()
{
int x = 0;
int y = 0;
for (x = 0, y = 0; x < 2 && y < 5; x++, y++)//用x 和 y 同时制约
{
printf("hehe\n");
}
return 0;
}
此时只打印两次
3.3 do...while()循环
do...while()循环跟 while循环很相似,不同的是do...while循环是先执行一次循环体内的语句再进行循环判断,do...while()循环最少执行一次
流程图:
3.3.1 do...while()语句的语法
do循环语句;while(表达式);
3.3.2 do...while()语句的特点
循环至少执行一次,使用的场景有限,不是经常使用。
打印1-10之间的数字:
#include<stdio.h>
int main()
{
int i = 1;
do
{
printf("%d ", i);
i++;
} while (i <= 10);
return 0;
}
3.3.3 do...while()循环中的break和continue
4.goto语句
最常见的用法就是终止程序在某些深度嵌套的结构的处理过程。
for(...)
for(...)
{
for(...)
{
if(disaster)
goto error; //直接跳转到error
}
}
...
error:
if((disaster)
//处理错误情况
总结:本章介绍了分支语句和循环语句,后面会介绍到这两种语句的灵活运用
感谢你的观看,我们下期再见