这篇将介绍C语言中分支语句和循环语句的所有知识
程序的艺术来源于生活
目录
1.C语言中语句的分类
2.分支语句(选择结构)
2.1 if语句
2.1.1悬空else(else和if的匹配)
2.2 switch语句
2.2.1 switch语句中的break
2.2.2 default子句
3.循环语句
3.1 while循环
3.1.1 while语句中的break和continue
3.2 for循环
3.2.1 for循环语法
3.2.2 break和continue在for循环中
3.2.3 for语句的循环控制变量
3.2.4 一些for循环的特殊情况
3.3 do...while()循环
3.3.1 do...while()语句的语法
3.3.2 do...while()语句的特点
3.3.3 do...while()循环中的break和continue
4.goto语句
1.C语言中语句的分类 C语句可分为以下五类: 1. 表达式语句 2. 函数调用语句 3. 控制语句 4. 复合语句 5. 空语句
C语言是结构化的程序设计语言,C语言其中的分支语句和循环语句就是控制语句
控制语句用于控制程序的执行流程,以实现程序的各种结构方式C语言有九种控制语句,可分成以下三类:
1. 条件判断语句也叫分支语句:if语句、switch语句; 2. 循环执行语句:do while语句、while语句、for语句; 3. 转向语句:break语句、goto语句、continue语句、return语 句。 C语言支持三种结构:顺序结构、选择结构、循环结构 顺序结构就是从上到下代码依次进行,按照前后顺序一一实现,顺序结构很普遍且很简单这里就不细讲,接下来仔细讲解一下选择结构和循环结构2.分支语句(选择结构) 分支语句就相当于生活中的各种选择 简单理解 流程图:
2.1 if语句
语法结构:
if(表达式)
语句;
if(表达式) 语句1; else 语句2;
// 多分支情况 if(表达式1) 语句1; else if(表达式2) 语句2; else 语句3 ;
代码演示
#includeint 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 后面默认控制一条语句,如果想要控制多条语句,需要用{ }控制
#includeint main() { if(表达式) { //语句列表1; } else if(表达式) { //语句列表2; } else { //语句列表3; } return 0; }
在C语言中 0表示假,非0表示真
在 if 后面的()中,( )中为假则不执行,( )中为真则执行
2.1.1悬空else(else和if的匹配)
以下代码的输出结果是什么呢?
#includeint 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使用才能实现真正的分支。
#includeint main() { int n = 0; printf("输入今天是星期几"); scanf("%d", &n); switch (n) { case 1: printf("Mondayn"); case 2: printf("Tuesdayn"); case 3: printf("Wednesdayn"); case 4: printf("Thursdayn"); case 5: printf("Fridayn"); case 6: printf("Saturdayn"); case 7: printf("Sundayn"); } return 0; }
我们发现在switch语句中输入4,输出结果却是星期4到星期天,如何改变这种情况呢?
在这里我们需要引用 break,使代码不再往下进行
代码变成:
#includeint main() { int n = 0; printf("输入今天是星期几"); scanf("%d", &n); switch (n) { case 1: printf("Mondayn"); break; case 2: printf("Tuesdayn"); break; case 3: printf("Wednesdayn"); break; case 4: printf("Thursdayn"); break; case 5: printf("Fridayn"); break; case 6: printf("Saturdayn"); break; case 7: printf("Sundayn"); break; } return 0; }
此时我们再输入4,结果会有不同
但并不是每个case后面都需要加break,有时候我们需求变成
1.输入1-5,输入为“weekday”
2.输入6-7,输出为“weekend”
我们代码就可以这样实现:
#includeint main() { int n = 0; printf("输入今天是星期几"); scanf("%d", &n); switch (n) { case 1: case 2: case 3: case 4: case 5: printf("Weekdayn"); break; case 6: case 7: printf("Weekendn"); break; } return 0; }
break语句的实际效果是把语句列表划分为不同的分支部分。
2.2.2 default子句
如果输入的值都不与case标签的值相匹配,此时结构所有语句跳过,但是不想忽略所有不匹配的标签的表达式的值时该怎么办呢? 此时,你可以在语句列表中增加一条default子句
default子句可以写在switch语句中的任意一个case标签可以出现的位置
所以,每个switch语句中只能出现一条default子句。
但是它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句。
当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。
#includeint main() { int n = 0; printf("输入今天是星期几"); scanf("%d", &n); switch (n) { default: printf("输入错误"); break; case 1: case 2: case 3: case 4: case 5: printf("Weekdayn"); break; case 6: case 7: printf("Weekendn"); break; } return 0; }
3.循环语句
循环语句就相当于生活中每天重复做的事情
简单理解流程图:
3.1 while循环
//while
语法结构:
while
(
表达式
)
循环语句
;
while语句执行的流程:
利用while循环打印1-10之间的数字:
#includeint 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是结束整个的循环,直接跳过整个循环语句
例如:
#includeint main() { int i = 1; while (i <= 10) { if (i == 5) break;//当i等于5时,循环终止,跳出循环 printf("%d ", i); i++; } return 0; }
break在while循环中的作用:
在循环中只要遇到break,就停止后面所有的循环,直接终止循环break后直接终止整个循环
continue介绍
continue是结束本次循环,跳到下次循环入口
例如:
#includeint 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) 循环语句;表达式 1: 表达式 1 为 初始化部分 ,用于初始化循环变量的。 表达式 2: 表达式 2 为 条件判断部分 ,用于判断循环时候终止。 表达式 3: 表达式 3 为 调整部分 ,用于循环条件的调整。
3.2.2 break和continue在for循环中
在for循环中也能使用break和continue,他们的使用意义和在while循环中使用是一样的
但是在某些地方是有些区别的
同样是打印1-10之间的数字,当i等于5时continue,但是两种循环方式产生的结果不同
while:
#includeint 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:
#includeint main() { int i = 0; for (i = 1; i <= 10; i++) { if (i == 5) continue; printf("%d ", i); } return 0; }
在for循环中由于控制变量变化的语句放在了开头,所以i++不受continue的限制
此时就能打印出1-10的数字
通过对比可以发现在while循环中依然存在循环的三个必须条件,但是由于风格的问题使得三个部分很可能 偏离较远 这样查找修改就不够集中和方便 所以,for循环的风格更胜一筹;for循环使用的频率 也最高3.2.3 for语句的循环控制变量
建议:
1.不能在for循环体内修改循环变量,防止for循环失去控制 2.建议for语句的循环控制变量的取值采用“前闭 后开区间”的写法
前闭后开区间的写法:
//前闭后开的写法
for(i=0; i<10; i++)
{
}
3.2.4 一些for循环的特殊情况
1 for循环中的初始化部分,判断部分,调整部分是可以省略的
#includeint main() { for (; ;) { printf("Hello worldn"); } return 0; }
此时将会循环打印“Hello world”
2.for循环的嵌套使用
#includeint 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 worldn",count); count++;//每打印一次Hello world count就+1,计数作用 } } return 0; }
此时将会打印100次“Hello world”
3.使用多余一个变量控制循环
#includeint main() { int x = 0; int y = 0; for (x = 0, y = 0; x < 2 && y < 5; x++, y++)//用x 和 y 同时制约 { printf("hehen"); } 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之间的数字:
#includeint main() { int i = 1; do { printf("%d ", i); i++; } while (i <= 10); return 0; }
3.3.3 do...while()循环中的break和continue
do while 循环中的 break 和 continue跟while中的一样,有一定缺陷性4.goto语句
C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。 从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。 注:不要随意滥用goto语句,滥用goto语句很容易导致逻辑混乱,导致系统崩溃 但是某些场合下goto语句还是用得着的最常见的用法就是终止程序在某些深度嵌套的结构的处理过程。例如:一次跳出两层或多层循环。 多层循环这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环 。 goto语言真正适合的场景如下:
for(...)
for(...)
{
for(...)
{
if(disaster)
goto error; //直接跳转到error
}
}
...
error:
if((disaster)
//处理错误情况
总结:本章介绍了分支语句和循环语句,后面会介绍到这两种语句的灵活运用
感谢你的观看,我们下期再见


![[C语言学习]----分支语句和循环语句 [C语言学习]----分支语句和循环语句](http://www.mshxw.com/aiimages/31/1029177.png)
