第5章第5章循环结构程序设计经过前几章的学习,读者已经掌握了结构化程序设计的顺序结构和选择结构。在本章将继续学习循环结构,它可以解决许多循环控制问题。通过对本章的学习,能够综合运用结构化编程思想解决一些问题。
5.1循环结构程序的概念
【引例51】编程计算一个学生三门课程的平均成绩。
【思路】把一个学生三门课程的成绩相加,再除以3,得到平均成绩。使用顺序结构,就可以实现上述功能。
编写程序段如下: float score1, score2, score3, aver;
scanf("%f,%f,%f",&score1,&score2,&score3);
aver=(score1 score2 score3)/3;
printf("aver=%f\\n", aver);【引例52】一个班30名学生,求每个学生三门课程的平均成绩。
【思路】在引例51中,程序段实现的功能是求一个学生三门课程的平均成绩。也就是说,可以利用上述同一个程序段来求每个学生的平均成绩。如果有30名学生,则要将上述程序段重复书写30遍,来实现求30名学生每人三门课程的平均成绩的功能。
【程序代码】float score1, score2, score3, aver;
//求第1名学生三门课程的平均成绩
scanf("%f,%f,%f",&score1,&score2,&score3);
aver=(score1 score2 score3)/3;
printf("aver=%f\\n",aver);
//求第2名学生三门课程的平均成绩
scanf("%f,%f,%f",&score1,&score2,&score3);
aver=(score1 score2 score3)/3;
printf("aver=%f\\n",aver);
//求第30名学生三门课程的平均成绩scanf("%f,%f,%f",&score1,&score2,&score3);
aver=(score1 score2 score3)/3;
printf("aver=%f\\n",aver);C语言程序设计(第2版)第5章循环结构程序设计【存在问题】将同一个程序段重复书写30遍,存在工作量大、程序易出错、可阅读性差、可维护性差等问题。引例52涉及的学生数是30名,通过重复复制程序段还是可以完成的。但是,试想如果涉及的学生数是几千、几万、几十万,则采用上述方法来完成相应的功能是无法想象的。
【总结】引例52的主要程序采用顺序结构,重复地执行同一个程序段,总共重复了30次。上述这类问题,可以采用本章将要学习的循环结构来解决。
循环结构程序的概念: 循环结构程序就是重复执行一个程序段的程序。在C语言中,循环结构的实现语句有三种,分别为while语句、dowhile语句和for语句。下面,将对由上述三种语句实现的while循环、dowhile循环和for循环分别给予详细阐述。
5.2while循环
while语句的一般形式为: while(表达式)循环体其中,表达式是循环条件,由它来控制循环体是否执行。循环体可能是一条语句,也可能是多条语句组成的复合语句。
while循环流程图如图5.1所示。如果表达式的值为真(非0),则执行循环体,如此反复,直到表达式的值为假(0)时,跳出while循环,while循环结束。从图5.1中可以看出,while语句实现的是“当型”循环结构。
while循环的特点是先判断表达式,后执行循环体。
图5.1while循环流程图
现在,尝试着用while循环来完成引例52所要实现的功能,其流程图如图5.2所示。这里,从第1个学生开始,一直到第30个学生结束,用n来记录学生的次序。所以,n初始值为1,表达式为n≤30,每次循环*后,n都加1;循环结束的条件是n>30,即当n=31时,跳出while循环。这里,将n称为循环变量。
【程序代码】1#include <stdio.h>
2void main()
3{
4float score1,score2,score3,aver;
5int n=1;//循环变量初始化
6while(n<=30) //循环条件
7{//循环体
8scanf("%f,%f,%f",&score1,&score2,&score3);
9aver=(score1 score2 score3)/3;
10printf("aver=%f\\n",aver);
11n ;//循环变量加1
12}
13}图5.2用while循环实现引例52的程序流程图
图5.3例51程序流程图