黄浦区区委书记周伟:C++问题,请指教!!!

来源:百度文库 编辑:中科新闻网 时间:2024/05/01 06:28:06
为何平均数(减去最大最小值)求不对??
#include<iostream.h>
void main(){
int p[6];
int sum=0;
double aeg;
for(int b=0;b<6;b++)
cin>>p[b];
int max=p[0],min=p[0];
for(int i=1;i<6;i++)
{

if(max>p[i])
goto s;
else max=p[i];
s:
if (min<p[i])
goto k;
else min=p[i];
k:
sum+=p[i];
}
aeg=(sum-max-min)/4;
cout<<max<<'\n'<<min<<'\n'<<sum<<'\n'<<aeg;
}

你这样算不对哦!有可能不是最小,但你没有将其相加,而且在编程中,最好不要用goto语句
修改一下:
for(int i=1;i<6;i++)
{
max=max>p[i]?max:p[i];
min=min<p[i]?min:p[i];
sum+=p[i];
}
aeg=(sum-max-min)/4;
cout<<max<<'\n'<<min<<'\n'<<sum<<'\n'<<aeg;

不过以上的写法会有一个小问题,当max的初始值(随机值)都比数组p中的大,或者min的初始值(随机值)都比数组p中的小,那你得到的最大,最小值就是不对的
有两种解决方法:
1.将max设为最小的整数,将min设为最大的整数
2.程序开始比较之前,将max和min赋以一个数组p中的值

aeg=(double(sum-max-min))/4;
不把SUM转换成DOUBLE则(sum-max-min)/4时会按照INT变量来进行运算
另由于for(int i=1;i<6;i++)所以 sum+=p[i] 后,p[0]会漏加

最好不要用goto语句,可读性很差
for(int i = 0; i < 5; i++)
{
for (int j = i; j < 6; j++)
{
if (p[i] > p[j])
{
temp = p[i];
p[i] = p[j];
p[j] = temp;
}
}
}
aeg=(sum - p[0] - p[5]) / 4;