一、输入一些整数,求出他们的最小值,最大值和平均值
样例输入:2 8 3 5 1 7 3 6
样例输出:1 8 4.375
程序一:
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int x,n=0,min,max,s=0;
while(scanf("%d",&x)==1)
{
if(x<min)
min=x;
if(x>max)
max=x;
s+=x;
n++;
}
printf("%d %d %.3f\n",min,max,(double)s/n);
return 0;
}
当输入上面的样例,最大值错误,这是什么原因呢?
原因就是定义的min,max并不一定是默认为0的。即变量未赋值时的值是不确定的。
以下为改进程序
方法一:
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int INF=1000000000;
int x,n=0,min=INF,max=-INF,s=0;
while(scanf("%d",&x)==1)
{
if(x<min)
min=x;
if(x>max)
max=x;
s+=x;
n++;
}
printf("%d %d %.3f\n",min,max,(double)s/n);
return 0;
}
方法二:
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int x,n=0,s=0,min,max;
scanf("%d",&x);
s=x;
n++;
min=max=x;
while(scanf("%d",&x)==1)
{
if(x<min)
min=x;
if(x>max)
max=x;
s+=x;
n++;
}
printf("%d %d %.3f\n",min,max,(double)s/n);
return 0;
}
对以上程序分析:scanf有返回值,返回成功输入的变量数。
对以上程序进行输入时,需要停止输入则按Enter+ctrl+z,最后按Enter键。Linux则按ctrl+D;