编程从键盘上输入 20 个整数,求去掉最大值和最小值以后那些元素的平均值。我是大一的,求简单易懂的答案

#include<stdio.h>
int main()
{
int a[20],i,n,j,count=0,sum=0;
int max,min,average;
for(i=0;i<20;i++)
scanf("%d",&a[i]);

max=min=a[0];
for(j=0;j<20;j++)
if(a[j]>max)max=a[j];
else
if(a[j]<min)min=a[j];
min=a[j];
for(i=0;i<20;i++)
if(a[i]>=min&&a[i]<max)
{
sum+=a[i];
n++;
count=n;
}
average=sum/count;
printf("count=%d,average=%d",count,average);
return 0;
} 这是我编的错在那呀?

首先,循环范围不对,你得带大括号啊,以后一定要记住啊,多写个min=a【j】

然后 if(a[i]>=min&&a[i]<max)
{
sum+=a[i];
n++;
count=n;
}
最简单情况如果都这些数都相等怎么办?条件不能设置成if(a[i]>=min&&a[i]<max)
你在求最大值和最小值是,在多设置一个记录他们数组位置的变量,maxflag,minflag,这样就知道最大和最小的数组位置
int maxflag=0;minflag=0;
for(j=1;j<20;j++) 你既然赋初值了,从1开始就可以了
{ (大括号很重要)
if(a[j]>max)
{
max=a[j];
maxflag=j;
else
if(a[j]<min)
{
min=a[j];
minflag=j;
}
}(大括号很重要)

for(i=0;i<20;i++)
{
if(i!=minflag&&i!maxflag)
sum+=a[i];
}
ave=(double)sum/(a.length-2) 我这里是按去掉一个最大值和一个最小值算得
如果去掉所有最大和最小,就类似于你那种那个,但你写的多加个等号。。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-12-01
#include<stdio.h>
int main()
{ int a[20],i,sum=0,count=0;
int max,min,average;
for(i=0;i<20;i++)
{ scanf("%d",&a[i]);}
max=min=a[0];
for(i=0;i<20;i++)
{ if(a[i]>max) max=a[i];
if(a[i]<min) min=a[i]; }
for(i=0;i<20;i++)
{ if(a[i]>min&&aa[i]<max)
{ sum+=a[i]; count++;}
}
average=sum/count;
printf("count=%d,average=%d",count,average);
}
当然,这个是没有考虑count为零的情况,要是考虑只要加一个if语句就行了,相信你会的。
满意请采纳。
第2个回答  2011-12-01
最后一个for循环体中,哪里来的 n ,而且也没有初始化,不妨把 n相关的语句去掉,直接 count++ 记录个数就行了。
相似回答