一.流程控制语句的分类:
1.顺序结构
概念:从上往下依次执行,也是程序默认的执行顺序
2.分支结构
概念:程序在执行的过程中出现了岔路(我们只能选择一条支线进行执行)
(1).if语句:
①:使用场景:在if语句内的代码只有在满足if内的条件之后才能执行
②:需要的能力:利用if语句对数据进行判断从而执行不同的代码
③:格式:
if (关系表达式) {
语句体;
}
④:举例:
#include<stdio.h>
int main() {
int a = 10;
int b = 20;
if (a > b) {
printf("a>b");
}
//很显然这段程序最后的结果是什么都不会输出,因为10不大于20
}
注意:
①:在c语言中,如果判断的结果是一个数字,非0表示条件成立,0则表示条件不成立
②:如果大括号里面的语句体只有一行,那么大括号可以省略不写,如下:
#include<stdio.h>
int main() {
int a = 10;
int b = 20;
if (a > b)
printf("a>b");
//很显然这段程序最后的结果是什么都不会输出,因为10不大于20
}
(2).if,else结构
在这种结构中,如果满足了if中的条件,那么就执行if中的语句,如果不满足if中的条件,那么就执行else中的语句
①:举例:
#include<stdio.h>
int main() {
int a = 10;
int b = 20;
if (a > b)
printf("a>b");
else
printf("b>a");
//在没有写else语句时什么都不会输出,在写了else语句之后很明显会执行else中的语句,输出b>a
}
(3).if,else if,else格式
①:应用场景:需要用到多条件判断时
②:举例:
#include<stdio.h>
int main() {
int score = 100;
//其实聪明的你已经发现了,这段代码是有问题的,只要score小于60就为D,负数当然也包括在内,只要score不满足其他的三个条件就为A,但是没有限制数据的范围(只要大于等于90),在实际的开发中我们要尽量避免出现这样的情况
if (score < 60)
printf("D");
else if (score >= 60 && score < 80)
printf("C");
else if (score >= 80 && score < 90)
printf("B");
else
printf("A");
}
在这段代码中我们需要注意的是:
①:从上往下依次进行判断
②:只要有一个判断成立那么就执行对应的语句体
③:如果所有的判断都不成立,那么就执行else的语句体
(4).switch语句
①:作用:把所有的选择一一列举出来,根据不同的条件任选其一
②:格式:
switch(表达式) {
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
...
default:
语句体n;
break;
}
③:执行流程:
首先计算表达式的值
依次和case后面的值进行比较,如果有对应的值,那么就会执行相应的语句,在执行的过程中,遇到break就会结束
如果所有的case后面的值和表达式的值都不匹配,那么就会执行default里面的语句体,然后结束整个switch语句
④:举例:
#include<stdio.h>
int main() {
int week = 7;
switch(week) {
case 1:
printf("1");
break;
case 2:
printf("2");
break;
case 3:
printf("3");
break;
case 4:
printf("4");
break;
case 5:
printf("5");
break;
case 6:
printf("6");
break;
case 7:
printf("7");
break;
default:
printf("default");
break;
}
}
⑤:注意事项:
表达式的计算结果只能是字符或整数
case的值只能是字符或整数的字面量,不能是变量
case的值不允许重复
break表示中断,结束的意思,一旦执行了break语句就会直接结束switch语句
default是在所有情况都不匹配的时候才执行的内容
⑥:对比switch和if的使用场景:
switch一般适用于有限个case进行匹配的时候
if一般是对一个范围进行判断的时候使用
⑦:break的作用:
如果在执行的过程中遇到了break那么就会直接结束整个switch语句
但是如果没有遇到break,那么就会继续执行下面的case中的代码
直到遇到break,或者把整个switch语句中的代码都执行了才会结束
因此break都是和case连用的,如果不连用就会出现一直执行到完成整个switch语句才会停止的错误
3.循环结构
概念:重复地执行某件事
但是我们也不能设置一个无限循环的代码,那样除了浪费电脑的性能以外没有任何的意义,因此我们需要设置三个部分,分别为:开始条件(初始化语句),结束条件(条件判断语句),控制开关(条件控制语句)
(1).for循环:
①:结构:
for (初始化语句; 条件判断语句; 条件控制语句) {
循环体;
}
②:举例:
#include<stdio.h>
int main() {
//使用for循环语句打印了100遍我爱学习
for (int i = 1; i <= 100; i++) {
printf("我爱学习\n");
}
}
③:for循环的执行流程:
执行初始化语句
执行条件判断语句,如果条件成立,那么执行循环体语句,不成立则结束循环
执行条件控制语句
回到第二步继续执行条件判断语句
(2).while循环
①:结构:
while(条件判断语句) {
循环体语句;
条件控制语句;
}
②:while循环的执行流程:
首先进行条件判断,若满足条件,则依次执行循环体语句和条件控制语句一直到不满足条件为止
③:举例:
#include<stdio.h>
int main() {
//使用while循环语句打印了100遍我爱学习
int i = 1;
while(i <= 100) {
printf("我爱学习\n");
i++;
}
}
(3).for循环,while循环对比:
相同点:
①:运行规则都是一样的
不同点:
①:for循环中控制循环的变量因为归属于for循环的语法结构中,因此在for循环结束后就不能再次被访问到
②:在while循环中控制循环的变量对于while循环来说不归属于其语法结构中,在while循环结束后,该变量还是可以继续使用
③:for循环中知道循环次数或者循环的范围
④:while循环中不知道循环的次数和范围,只知道循环的结束条件
(4).do...while循环
①:格式:
初始化语句;
do {
循环体语句;
条件控制语句;
} while(条件判断语句);
②:do...while循环的执行流程:
先执行后判断,循环体会至少执行一次,之后的流程就和while循环相同了
4.无限循环
正如它的名字,在这样的循环中,循环是永远停不下来的
三种循环都可以达成这样的效果:
for ( ; ; ) {
循环体;
}
while(1) {
循环体;
}
do {
循环体;
} while (1);
那么这样的循环有没有实际的意义呢?
实际上,这样的循环是可以配合判断完成我们的需求的
举例:
#include<stdio.h>
int main() {
int ans = 0;
int plus = 16;
int add = 8;
while (1) {
//如果ans+add的值和plus相等,那么就跳出这个无限循环
if (ans + add == plus)
break;
ans++;
}
printf("%d", ans);
}
5.跳转控制语句
(1).作用:在循环的过程中跳到其他语句上执行
(2).break语句:
break语句不能单独书写,只能写在switch或者循环中,表示结束,跳出的意思
(3).continue语句:
表示结束本次循环,继续下次循环
举例:
#include<stdio.h>
int main() {
for (int i = 0; i <= 5; i++) {
//使用continue语句跳过了i等于3的情况
if (i == 3)
continue;
printf("%d", i);
}
}
6.循环嵌套
循环嵌套正如字面上的意思,我们可以在循环中嵌套循环,做到双循环,三循环,乃至更多的情况,在这里我只用一个九九乘法表的打印作为举例:
#include<stdio.h>
int main() {
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
printf("%d * %d = %d ", j, i, j * i);
}
//输出换行符
printf("\n");
}
}
7.循环嵌套跳出的问题:
(1).break只会跳出当前自己所在的循环,也就是说,如果我们写了一个双重循环,把最上级的循环称为父循环,下一级的循环称为子循环,那么如果我们在子循环中写了一个break语句会怎样?
是的,只是会跳出子循环罢了,对父循环没有影响,我们使用break跳出循环时只需要记住break只是会跳出自己当前所在的循环即可
(2).goto语句:
goto语句一般都是结合标号使用的,可以跳到代码中的任何地方,一般我们只用于跳出循环嵌套
举例:
#include<stdio.h>
int main() {
int i = 1;
while (1) {
printf("今日无事,好好学习\n");
i++;
if (i == 100)
goto position;
}
position:
printf("休息一下,玩会儿游戏");
}