C语言程序控制流程

前言

在程序中,程序运行的流程控制决定程序是如何执行的,是我们必需要掌握的。


一、三大流程控制

(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:
			语句块1break; 
	case 常量值2:
			语句块2break; 
	...
	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 跳转语句

  1. 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语言程序控制流程的小伙伴们能够提供到帮助,我相信,只要肯花时间去学习、去思考,我们都能学会,都会学好,相信自己,加油!

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值