P3-3.【结构化程序设计】第三节——知识要点:while语句、do-while语句和for语句
视频:
P3-3.【结构化程序设计】第三节——知识要点:while语句、do-while语句和for语句
知识要点:while语句、do-while语句和for语句
目录
一、任务分析
二、必备知识与理论
三、任务实施
一、任务分析
输出某班若干学生的成绩,输出其中的高分、低分和平均分。
本任务要输入全班学生的成绩,并且每输入一个成绩都需要和已输入的成绩比较大小,以便确定最高分和最低分。在设计程序时,人们也总是把复杂的、不易理解的求解过程转换为易于理解的、操作简单的多次重复过程。在许多实际问题中都需要用到循环控制,循环是计算机解决问题的一个重要特征。例如,输入全校学生成绩;求若干个数之和。绝大多数的应用程序都包含循环。而循环结构又是结构化程序设计的基本结构之一,它和顺序结构、 选择结构共同作为各种复杂程序的基本构造单元。因此熟练掌握循环结构的概念及使用是程序设计的最基本的要求。
二、必备知识与理论
循环结构是根据给定的条件是否满足来决定是否重复执行某一模块的结构,反复执行的程序段称为循环体。
1. while语句
while语句用来实现“当型”循环结构,其一般格式如下:
while(表达式)
循环体;
【例3.5】求1+2+3+…+99+100的和。程序代码如下:
#include <stdio.h>
main()
{
int i,sum=0;
i=1;
while(i<=100)
{ sum=sum+i;
i++;
}
printf("1+2+3+...+99+100=%d\n",sum);
}
运行结果:
1+2+3+…+99+100=5050
说明:
(1)这个程序是常见的累加算法。sum用来存放累加和,通常初值为0,因为0不会影响累加结果。
(2)i为循环控制变量, 因为从1加到100,所以i初值为1。执行while语句时先判断循环条件i<=100是否为真,为真就执行sum=sum+i,然后i++。i++语句是使循环趋于结束的语句,实现i值增加1以供下一次判断和累加使用。只有当循环条件i<=100为假即i=101时退出循环语句。退出循环语句时sum中已经计算出1到100的累加和。
2.do…whlie语句
do…while语句用来实现“直到型”循环结构,其特点是先执行循环体,然后判断循环条件是否成立。其一般格式如下:
do{
循环体
}while (表达式);
do…while语句的执行过程如图3.11所示。先执行循环体,再判断表达式的值是否为真(非0),若为真,则继续执行循环体,若为假就结束循环,转去执行do…while循环的下一条语句。
例如:利用do…while语句求1+2+3+…+99+100的和。程序代码如下:
#include <stdio.h>
main()
{ int i,sum=0;
i=1;
do
{ sum=sum+i; i++; }
while(i<=100);
printf("sum=%d\n",sum);
}
3.for语句
在三种循环语句中,for语句最为灵活,不仅可以用于循环次数已经确定的情况,也可以用于循环次数虽不确定但给出了循环结束条件的情况,所以for语句也是最为常用的循环语句。
for语句的一般格式
for(表达式1;表达式2;表达式3)
循环体;
例如:用for语句求1~100的和。
前面已经用while语句和do…while语句来做此题,下面用for语句实现
#include <stdio.h>
main()
{ int i,sum;
for(i=1,sum=0;i<=100; i++)
sum=sum+i;
printf("sum=%d\n",sum);
}
【例3.7】编写一个程序,输入10个整数,统计并输出其中正数、负数和零的个数。
代码如下:
#include <stdio.h>
main()
{ int m,n,num1,num2,num3;
num1=num2=num3=0;
for(n=1;n<=10;n++)
{ printf("Please input No.%d:", n);
scanf("%d",&m);
if(m>0)
num1++;
else if(m==0)
num2++ ;
else
num3++;
}
printf("%d,%d,%d\n",num1,num2,num3);
}
三、任务实施
现在我们来完成本节任务。输入某班学生的计算机成绩,输出其中的最高分和最低分,以及班级的平均成绩。
分析:
(1)考虑到班级人数的不确定性,可以通过键盘输入学生人数给变量n。
(2)用循环语句输入n个学生的成绩,把输入语句放在循环体内。
(3)在百分制中学生成绩在0~100之间,为求出成绩的最高和最低值,赋初值min=100,max=0;每输入一个成绩,与min和max比较,如果比min小,或者比max大,则置换它们的值。
程序代码如下:
#include <stdio.h>
main()
{ int i,n,score,max,min,sum;
float ave;
max=0;min=100;
sum=0;
printf("please input how many student:");
scanf("%d",&n);
for(i=1;i<=n;i++)
{ printf("input %d students scores:\n",i);
scanf("%d",&score);
sum=sum+score;
if(score>max)
max=score;
if(score<min)
min=score;
}
ave=(float)sum/n;
printf("the max is:%d\n",max);
printf("the min is:%d\n",min);
printf("the average is:%.2f\n",ave);
}
运行结果:
please input how many student:4↙
input 1 students scores:
60↙
input 2 students scores:
80↙
input 3 students scores:
90↙
input 4 students scores:
95↙
the max is:95
the min is:60
the average is:81.25