前言
在程序中,程序运行的流程控制决定程序是如何执行的,是我们必需要掌握的。
一、三大流程控制
(1) 顺序控制
(2) 分支控制
(3) 循环控制
二、 顺序控制
2.1 程序从上到下逐行的执行,中间没有任何判断和跳转
2.2 顺序结构举例及注意事项
C语言中定于变量是采用的是向前引用原则(即先声明在使用)
#include<stdio.h>
int main()
{
int num1 = 10;
int num2 = num1 + 20;
return 0;
}
//错误写法
#include<stdio.h>
int main()
{
int num2 = num1 + 20; //报错: 为识别标识符num1
int num1 = 10;
return 0;
}
三、分支控制
作用:让程序能够有选择的执行
3.1 有三种分支控制:
(1) 单分支 if()
(2) 双分支 if()… else…
(3) 多分支 if()… else if … else…
3.2 单分支
基本语法
if (条件表达式) {
代码块;
}
说明: 当条件表达式为真时(非0),则执行{ }中的代码块,当条件表达式为假时(0),则不执行{ }中的代码块。
代码如下(示例):
#include<stdio.h>
int main()
{
int num = 10; //定义变量num并赋值为10
if (num > 5){ //判断num是否大于5,条件成立则执行{} 里面的printf输出语句
printf("%d", num); //输出10
}
return 0;
}
单分支对应的流程图
3.3 双分支
基本语法
if (条件表达式) {
代码块1;
}
else {
代码块2;
}
说明: 当条件表达式为真,就会执行代码块1,否则执行代码块2。
代码示例
#include<stdio.h>
int main()
{
int age = 0;
scanf("%d", &age); //输入年龄
if (age >= 18){ //如果输入的年龄大于等于18,则输出成年
printf("成年");
}
else{ // 如果输入的年龄小于18,输出未成年
printf("未成年");
}
return;
}
双分支对应的流程图
3.4 多分支
基本语法
if (条件表达式1) {
代码块1;
}
else if (条件表达式2) {
代码块2;
}
else if (条件表达式3) {
代码块3;
}
…
else {
代码块n;
}
说明:
(1) 当条件表达式1成立时(为真),执行代码块1;
(2) 如果条件表达式1不成立时(为假),才去判断条件表达式2是否成立;
(3) 如果条件表达式2成立时(为真),执行代码块2;否则去判断条件表达式3是否成立;
(4) 依此类推,当所有的条件表达式都不成立,则执行else分支的代码块n。
代码示例
#include<stdio.h>
int main()
{
//输入一个成绩: 成绩在90-100分为优秀,
// 在75-89为良好,在60-74为及格,在60分以下为不及格
float score = 0.0f;
printf("请输入成绩: ");
scanf("%f", &score);
if (score >= 90 && score <= 100){
printf("%.1f为优秀\n",score);
}
else if (score >= 75 && score < 90){
printf("%.1f为良好\n",score);
}
else if (score >= 60 && score < 75) {
printf("%.1f为及格\n",score);
}
else{
printf("%.1f为不及格", score);
}
return 0;
}
多分支对应的流程图
注意:只能有一个执行入口
3.5 嵌套分支
说明:一个分支结构完整的嵌套了另一个分支结构
基本语法
int main()
{
if (条件表达式1) {//注意:条件表达式1成立时,才会执行到里面的嵌套分支语句再进行分支判断
//包含的可以是单分支、双分支、多分支
if (条件表达式2) {
}
else {
}
}
return 0;
}
建议:嵌套最好不要超过3层,否则里面的逻辑容易让自己混乱。
3.6 switch分支结构
介绍:在编程中,一个常见的问题就是检测一个变量是否符合某种条件,如果不符合,再用另一个值来检测,以此类推。
基本语法:
switch(表达式) {
case 常量值1:
语句块1;
break;
case 常量值2:
语句块2;
break;
...
case 常量值n:
语句块n;
break;
default:
语句块n+1;
break;
}
switch分支结构的流程图
说明:
(1) switch 语句中的表达式值必须是整型、字符型或者枚举类型;
(2) 当表达式的值与某个常量值相等,则执行该case语句后的若干个语句,直到遇break语句为止;
(3) 如果该case语句中没有break语句,将继续执行后面case中的若干个语句,直到遇break为止(穿透)
(4) 若没有一个常量值与表达式的值相同,则执行default后面的语句。
(5) default语句为可选的,如果它不存在,且switch语句中表达式的值与任何case的常量值相同,switch语句则不做任何处理。
注意:同一个switch语句,case的常量值必须互不相同,且case中的常量值必须为常量,不能是变量。
四、循环控制
说明:循环语句就是在满足一定条件的情况下反复执行某一个操作的语句。C中提供了3中常用的循环语句,分别是while循环语句、do…while循环语句和 for循环语句。
4.1 while循环语句
介绍:while语句也称条件判断语句,它的循环方式为利用一个条件来控制是否要继续反复执行这个语句。语法如下:
循环变量初始化;
while (循环条件) {
语句;
循环变量迭代;
}
while语句执行流程图
说明:当循环条件的返回值为真时,则执行"{}" 中的语句,当执行完"{}" 中的语句后,重新判断循环条件的返回值,直到循环条件返回的结果为假时,退出循环。
代码示例
#include<stdio.h>
int main()
{
//计算1 - 100的和
int x = 1;
int sum = 0;
while (x <= 100)
{
sum += x;
x++;
}
printf("1-100的和 = %d", sum);
return 0;
}
运行结果:
注意:不要在while表达式的括号后加 “;”。如:
while(x == 10);
printf("x的值为%d", x);
这时程序会认为要执行一条空语句,而进入无限循环(死循环)。
4.2 do…while循环语句
介绍:do…while 循环语句与while循环语句类似,它们之间的区别是while语句为先判断条件是否成立,再执行循环体,而do…while循环语句则先执行一次循环后,再判断条件是否成立。也就是说,do…while循环语句 “{}” 中的程序段至少要被执行一次。语句如下:
循环变量初始化;
do {
循环体;
循环变量迭代;
}while(循环条件);
注意:do…while 语句在结尾处有一个分号 ;
do…while 语句执行流程图:
代码示例:
#include<stdio.h>
int main()
{
//用户密码验证
int password = 0;
do
{
printf("请输入6位数密码: \n");
scanf("%d", &password); //输入密码
} while (123456 != password); //如果输入的密码不等于123456,就继续输入,直到密码输入成功,就会结束do...while语句
printf("登录成功");
return 0;
}
运行结果:
4.3 for循环语句
介绍:for循环是C程序设计中最常用的循环语句之一。一个for循环可以用来重复执行某条语句,直到某个条件得到满足。
基本语法:
for (循环变量初始化; 循环条件; 循环变量迭代)
{
循环体;
}
执行流程:
在执行for循环时,首先执行循环变量初始化,下一步判断循环条件的值,若循环条件的值为true,则进入循环体;在执行完循环体后紧接着计算循环变量迭代。这样一轮循环就结束了。第二轮循环从判断循环条件开始,若循环条件返回true,则继续循环,否则跳出整个for循环语句。
for循环语句执行流程图:
代码示例:
#include<stdio.h>
int main()
{
//计算1-100的和
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
printf("1-100的和 = %d", sum);
return 0;
}
运行结果:
4.4 多重循环控制
介绍:将一个循环放在另一个循环体内,就形成了多重循环。
建议:一般最多不要超过 3 层, 否则,代码的可读性很差。
#include<stdio.h>
int main() {
for (int i = 1; i <= 4; i++) { // 第一层循环 4次
for (int j = 1; j <= 3; j++) { // 第二层循环 3次
printf("好好学习,天天向上\n"); // 最终输出 4*3 句 好好学习,天天向上
}
}
return 0;
}
运行结果:
代码示例:打印九九乘法表
#include<stdio.h>
int main()
{
//打印九九乘法表
for (int i = 1; i <= 9; i++){
for (int j = 1; j <= i; j++){
int plus = i * j; //计算乘积
printf("%d*%d=%d\t", j, i, plus);
}
printf("\n"); //每执行完一层循环换行输出
}
}
运行效果:
4.5 跳转语句
- break语句
介绍:break 语句用于终止某个语句块的执行,一般使用在 switch 或者循环语句中。
代码演示:
#include<stdio.h>
int main()
{
//输出1 - 10 出现的第一个偶数
for (int i = 1; i <= 10; i++){
if (i % 2 == 0){ //如果i是偶数
printf("%d\n", i); //输出i的值
break; //结束循环
}
}
printf("---end---"); //结束时输出end
return 0;
}
运行结果:
注意:
多重循环(循环嵌套)情况下,break语句将只会使程序流程跳出包含它的最内层的循环结构。
2.continue 语句
介绍:continue语句不是立即跳出循环体,而是跳出本次循环,回到循环的条件测试部分,重新开始执行循环。
代码演示:
#include<stdio.h>
int main()
{
for (int i = 1; i <= 5; i++){
if (i % 2 == 0) { //如果i是偶数
continue; //跳到下一循环
}
printf("%d\n", i); //输出i的值
}
return 0;
}
运行效果:
注意:
continue语句,只能配合循环语言使用,不能单独和switch/if使用。
总结
流程控制这一基础部分都是要我们必须掌握的,并且也不难,希望这一篇文章对刚接触到C语言程序控制流程的小伙伴们能够提供到帮助,我相信,只要肯花时间去学习、去思考,我们都能学会,都会学好,相信自己,加油!