实验六 循环(二)
一、实验目的
1.学习C语言的for和while语句的用法。
2.编写程序,学习使用多组数据进行输入。
二、实验要求
1.下面给出程序的,实验前阅读并写出运行结果,试验时运行验证。
2.仅给出实验题目的,实验前编写好程序,实验时编辑、调试、运行,直到确定结果正确为止。
三、实验内容
题目描述有多组数据时,意味着我们并知道输入有多少行?但服务器是从文件里读入数据的,当读到文件末尾时,我们就让它自动跳出循环,具体使用下面的形式:
While(scanf(“%d”,&a)!=EOF)
{
在这里根据题意来编写代码;
}
注意:EOF代表文件尾,也可以使用-1
While(scanf(“%d”,&a)!=-1)
{
在这里根据题意来编写代码;
}
1. 三角形面积 林大OJ 13题
Time Limit 1000ms Memory Limit 65536K
description
已知三角形的底和高,求出三角形的面积。
每行输入底和高
每行输出三角形的面积。精确到三位小数。
input
输入数据有多组,每组1行,即底x和高y,这2个数是实数。
output
输出三角形的面积,保留3位小数。
sample_input
1 2
3 4
5 6
sample_output
1.000
6.000
15.000
提示:本题多组输入,要仔细观察下面的代码
参考代码如下:
#include
#include
int main()
{
double x,y;
while(scanf("%lf%lf",&x,&y)!=-1) //这句是处理多组输入的,
//不停的读入2个实数,直到读不到为止!
{
printf("%.3lf\n",0.5*x*y);
}
return 0;
}
一定要注意:本题还可以如下来做:
#include
#include
int main()
{
double x,y;
while(scanf("%lf",&x)!=-1) //这句是处理多组输入的,读入1个数
{
scanf("%lf",&y);//在循环里面读入第2个数
printf("%.3lf\n",0.5*x*y);
}
return 0;
}
也就是while的条件里至少要读入1个数。
2. 寻找吕布 林大OJ 11题
Time Limit 1000ms Memory Limit 65536K
description
三国里面吕布第一,赵云第二,典韦、关羽和马超分别是第3、第4和第5名,这是按武将的勇猛值和必杀技值的和来排名的,即武术值=勇猛值+必杀技值,下面给出这5人的勇猛值和必杀值,请你找出吕布的武术值。
input
输入数据有多组,每组数据2行,第一行是5人的勇猛值,第二行是5人的必杀技值。勇猛值和必杀值是整数哦(32位)
output
输出吕布的武术值。
sample_input
1 2 3 4 5
1 2 3 4 5
20 21 22 45 87
1 100 8 99000 23
sample_output
10
99087
hint
吕布的勇猛值和必杀技值都是第一的!
思考:这题就是要计算第1行5个数的最大值,再计算第2行5个数的最大值,然后相加输出就行。
参考代码:
#include
#include
int main()
{
int j,tmp,n=2;
int ym=0,bs=0;//勇猛 必杀 的缩写
while( scanf("%d",&tmp)!=EOF ) //先输入第1行第1个数
{
ym=0,bs=0; //这句太关键了,多组数据,每组开始时都初始化
if (ym
for(j=1;j<=4;j++) //然后读入第1行的后4个数,比大小
{
scanf("%d",&tmp);
if(ym
}
for(j=1;j<=5;j++) //直接读入第2行的5个数,找出最大值
{
scanf("%d",&tmp);
if(bs
}
printf("%d\n",bs+ym);
}
return 0;
}
为啥要在while里面加上这句:ym