一、实验目的:
1、熟悉循环结构的循环控制部分和循环体部分;
2、掌握for语句、while语句、do…while语句的使用,并能相互代替;
3、熟悉累加、分类统计等算法,能根据实际需要构建循环语句;
4、掌握多重循环的使用,能够熟悉应用穷举法、迭代法、打擂台算法等典型算法;
二、实验内容
1、(基础题)用for语句编写程序,计算1+3+5+7+…+99+101的值。程序运行结果如下图所示:
#include <stdio.h>
int main()
{
int i;
int sum =0;
for(i=1;i<=101;i+=2)
{
sum = sum + i;
}
printf("1+3+5+7...+99+101=%d",sum);
return 0;
}
2.(基础题)输入10个学生成绩,分别统计成绩在85–100分,60—85分和60分以下各分数段的人数。
(思路:用三个整型变量n0、n1、n2来存放分类统计结果,这三个变量的初值赋为0;用循环来输入成绩,并进行分类统计:使用if…else …嵌套 或 switch语句判断成绩是否属于某一区间,一旦成绩落入某一区间时,该区间的次数就要增加1)。请按照程序运行截图的输入输出样式编写程序。
#include <stdio.h>
int main()
{
int n1=0,n2=0,n3=0,i,score;
for(i=1;i<=10;i++)
{
printf("请输入第%d个学生成绩:",i);
scanf("%d",&score);
if (!(0<=score && score<=100))
{
printf("请输入正确输入学生成绩
");
return -1;
}
if(85<=score && score<=100)n1++;
else if(60<=score && score<85)n2++;
else n3++;
}
printf("85~100的人数=%d
",n1);
printf("60~85的人数=%d
",n2);
printf("60以下的人数=%d
",n3);
return 0;
}
3、(基础题)已知有式子:xyz+yzz=532, 其中x、y、z为数字,编写程序输出所有满足条件的x、y和z。(提示:穷举法:可以利用三重循环去列举出所有可能组合,x、y、z的值只能在0-9之间)。程序运行效果图:
#include <stdio.h>
int main()
{
int x,y,z;
for(x=1;x<9;x++)
for(y=1;y<9;y++)
for(z=0;z<9;z++)
if((x*100+y*10+z)+(y*100+z*10+z)==532)
printf("x=%d,y=%d,z=%d
",x,y,z);
return 0;
}
4.(提高题) 输入一批学生成绩,输出其中的最高分、最低分。
思路:
(1)用循环处理。
(2)循环多少次?事先并不知道。解决办法:输入负数或大于100(即成绩不合理)时结束。 即 循环条件:score>=0&&score<=100
(3)用“打擂台”算法可以得到最高分和最低分;
(4)“打擂台”算法思想:先找一个人站在台上(最初擂主),第二个人上去与之比武,获胜者留在擂台上。再上去第三个人,与台上的人(即刚才的得胜者)比武,胜者留在台上,败者下台,直到所有的人都比试过后,最后留在擂台上的即是冠军!
(5)请根据运行图中的输入输出样式完善程序。程序运行效果图:
#include <stdio.h>
int main()
{
int max,min,score;
max=0;min=100;
while(1)
{
printf("请输入成绩(0~100),其他值结束:");
scanf("%d",&score);
if(!(0<=score && score<=100))
break;
if(score>max)
max=score;
if(score<min)
min=score;
}
printf("最大值:%d
",max);
printf("最小值:%d
",min);
return 0;
}