0
点赞
收藏
分享

微信扫一扫

【顺序结构、分支结构、循环结构、continue语句、break语句、return语句】(学习笔记6--C语言流程控制)

hoohack 2022-01-28 阅读 78

C语言流程控制


C语言中按照程序的执行程序的不同,分为顺序结构、分支结构、和循环结构。下面就用一个简单的案例来展示C语言的3种流程结构。

一、顺序结构

顺序结构是最简单的一种流程结构,它采用自上而下的方式逐条执行各语句。

#include<stdio.h>
int main()
{
	int a,b;
	float quotient;
	printf("Please enter two integer:\n");
	scanf("%d%d",&a,&b);
	quotient = (float)a / b;
	printf("a / b = %.2f\n",quotient);
	return 0;
}

程序在计算结果的时候,用到了类型转换运算符,它把int类型变量a的类型转换为float类型,这么做的目的是为了运算结果能得到一个拥有小数点的小数值。由于变量a被转换为float类型,所以变量b也会自动地转换为float类型,自然就会得到一个float类型的运算结果。并把这个结果赋值给了变量quotient。最后通过printf函数以保留两位有效小数的方式将信息打印在控制窗口上。

二、分支结构

C语言的分支结构可以控制程序的部分流程是否执行,或是从多条执行路径中选择一条来执行。

1.if语句

格式:

if(表达式)
	语句

小括号内的表达式为判断条件,当表达式的值为真时,执行语句;当表达式的值为假时,不执行语句。
代码:

#include<stdio.h>
int main()
{
	int a,b;
	float quotient;
	printf("Please enter two integer:\n");
	scanf("%d%d",&a,&b);
	if(b)
	{
		quotient = (float)a / b;
		printf("a / b = %.2f\n",quotient);
	}
	return 0;
}

可以通过if语句来对除数为0的情况进行检查,只有除数不为0时,才会进行除法运算。
if(b)与if(b!=0)它同样是判断变量b的值是否不等于0,而使用if(b)的方式会让代码显得更加简练。它们的 作用实际是一样的。

2.if…else语句

格式:

if(表达式)
	语句1
else
	语句2

if…else语句和if语句相比,多了else部分,形成了二选一的流程 执行情形。
代码:

#include<stdio.h>
int main()
{
	int a,b;
	float quotient;
	printf("Please enter two integer:\n");
	scanf("%d%d",&a,&b);
	if(b)
	{
		quotient = (float)a / b;
		printf("a / b = %.2f\n",quotient);
	}
	else
	{
		printf("Data is error!\n");
	}
	return 0;
}

当除数不为0时,程序打印输出正常的结果,除数为0时,打印一条信息明确告知用户。

3.if…else语句嵌套

通过对if…else语句的嵌套使用,就可以让程序实现除多选一的流程执行情形。

#include<stdio.h>
int main()
{
	int score;
	printf("Please enter a score between 0 and 100:\n");
	scanf("%d",&score);
	if(score >= 0 && score <= 100)
	{
		if(score>=90)
		{
			printf("A\n");
		}
		else
		{
			if(score>=80)
		    {
				printf("B\n");
		    }
			else
			{
				if(score>=60)
				{
					printf("C\n");
				}
				else
				{
					printf("D\n");
				}
			}
		}
	}
	else
	{
		printf("Data is error!\n");
	}
	return 0;
}

4.if…else if…else语句

它的执行流程和利用if…else语句嵌套的执行流程一样,完全可以认为if…else if…else语句就是对if…else语句嵌套的一种变形写法。

#include<stdio.h>
int main()
{
	int score;
	printf("Please enter a score between 0 and 100:\n");
	scanf("%d",&score);
	if(score >= 0 && score <= 100)
	{
		if(score>=90)
		{
			printf("A\n");
		}
		else if(score>=80)
		{
			printf("B\n");
		}
		else if(score>=60)
		{
			printf("C\n");
		}
		else
		{
			printf("D\n");
		}
	}
	else
	{
		printf("Data is error!\n");
	}
	return 0;
}

5.switch…case语句

通过它同样能实现多选一的效果,而且使代码的逻辑更加清晰。

#include<stdio.h>
int main()
{
	int score;
	printf("Please enter a score between 0 and 100:\n");
	scanf("%d",&score);
	if(score >= 0 && score <= 100)
	{
		switch(score / 10)
		{
			case 10:
			case 9:
				printf("A\n");
				break;
			case 8:
				printf("B\n");
				break;
			case 7:
			case 6:
				printf("C\n");
				break;
			default:
				printf("D\n");
				break;
		}
	}
	else
	{
		printf("Data is error!\n");
	}
	return 0;
}

break语句可以终止switch…case语句语句的执行,如果在某处漏掉了必要的break,则switch…case语句不会被终止,程序会继续执行后面的语句,直到遇见break语句或者代表整个switch…case语句结束的右大括号。
整型表达式为score/10,就是把原来0到100的分数,换算到0到10的范围。
default标签可以放置在任何位置,甚至可以出现在所有case标签之前,所以default标签下的break语句不要随意省略。

三、循环结构

C语言中的循环结构就是让语句能够重复、多次地被执行的一种流程结构。

1.while语句

格式:

while(表达式)
	语句
#include<stdio.h>
int main()
{
	int i,n,score,sum = 0;
	float aver; 
	printf("Please enter the number of students:\n");
	scanf("%d",&n);
	printf("Please enter the scores of %d students:\n",n);
	i = n;
	while(i--)
	{
		scanf("%d",&score);
		sum += score;
	}
	aver = (float)sum / n;
	printf("Total:%d , Average:%.2f\n",sum,aver);
	return 0;
}

在while语句之前,通过i=n,把变量n的值赋给了变量i,因为我们要保存好学生数量,后面计算平均分时还需要用到它。即while语句中我们操作和修改的只是变量i,不会对变量n有影响。
在sum变量定义时必须对它进行初始化的操作,即让变量sum的初始值为0,若不这样做的话,初始时sum变量的值未知,即使将学生的成绩都累加进去,最终计算出的总分也不会正确。

2.do…while语句

do…while语句和while语句差不多,do…while是先执行循环体,然后才去检查表达式的值。
格式:

do
	语句
while(表达式);
#include<stdio.h>
int main()
{
	int i,n,score,sum = 0;
	float aver; 
	printf("Please enter the number of students:\n");
	scanf("%d",&n);
	printf("Please enter the scores of %d students:\n",n);
	i = n;
	do
	{
		scanf("%d",&score);
		sum += score;
	}while(--i);
	aver = (float)sum / n;
	printf("Total:%d , Average:%.2f\n",sum,aver);
	return 0;
}

3.for语句

格式:

for(表达式1;表达式2;表达式3);
	语句
#include<stdio.h>
int main()
{
	int i,n,score,sum = 0;
	float aver; 
	printf("Please enter the number of students:\n");
	scanf("%d",&n);
	printf("Please enter the scores of %d students:\n",n);
	for(i = 0;i < n; ++i)
	{
		scanf("%d",&score);
		sum += score;
	}
	aver = (float)sum / n;
	printf("Total:%d , Average:%.2f\n",sum,aver);
	return 0;
}

4.循环的嵌套使用

#include<stdio.h>
int main()
{
	int n;
	printf("Please enter a data!\n");
	scanf("%d",&n);
	for(int i=1;i <= n; ++i)
	{
		if(i % 2)
			continue;
		printf("%d ",i);
	}
	return 0;
}

外层for语句的循环中,除了一个内层的for语句外,还有一条printf函数调用语句,它会在内层for语句执行完毕(内层循环体被执行9次)后,进行一个换行的操作。

四、流程控制语句

1.continue语句

特点:

格式:

continue;
for(int i = 1; i <= 10; ++i)
{
	if(i & 2)
		continue;
	printf("%d",i);
}

打印结果:

当变量i的值为奇数时,该表达式的值为真,这会导致continue语句被执行。一旦continue语句被执行,那么其后的printf函数调用语句就不再被执行。

2.break语句

对付死循环的利器。
要注意的点:

for(int i = 1; i <= 10; ++i)
{
	if(i > 5)
		break;
	printf("%d",i);
}

结果:

3.return语句

return语句能够起到强制中止函数的功能,也就是在函数中如果有return语句被执行,即使后面还有其它语句,整个函数的执行流程也将结束。

#include<stdio.h>
int main()
{
	printf("AA\n");
	return 0;
	printf("BB\n");
}

结果:

return语句必须在函数内使用,不论是在顺序结构、分支结构、还是循环结构,都会造成函数的执行流程被强制结束,如果被关闭的是主函数,则会导致整个程序的结束。

举报

相关推荐

0 条评论