c语言问题,编程从键盘上输入 20 个整数,求去掉最大值和最小值以后那些元素的平均值,哪里错了?

测试用例:输入
测试用例:输出
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20< 回车 >
count=18,average=10.500000
90 80 70 100 50 60 70 100 75 85 85 90 80 70 65 50 60 70 80 90< 回车 >
count=16,average=76.250000

我的代码,,,
#include<stdio.h>
int main()
{
int i,a[20];
int max,min;
int c=20,s=0;
double ave;
for(i=0;i<20;i++)
scanf("%d",&a[i]);
for(i=0;i<20;i++)
s+=a[i];

max=min=a[0];
for(i=0;i<20;i++)
{
if(a[i]>max) {max=a[i]; c--; s-=a[i];}
else if(a[i]<min) {min=a[i]; c--; s-=a[i];}
}
ave=s/c;
printf("count=%d,average=%lf\n",c,ave);

return 0;
}

计算最大值和最小值有问题吧,
if(a[i]>max) {max=a[i]; c--; s-=a[i];}
else if(a[i]<min) {min=a[i]; c--; s-=a[i];}

可以在前面定义一个count_max = 1, count_min = 1;
那么计算就可以
if (a[i] > max) {max = a[i]; count_max = 1;}
if (a[i] < min) {min = a[i]; count_min = 1;}
if (a[i] == max) count_max++;
if (a[i] == min) count_min++;
那么最后计算总数的时候就用20-count_max-count_min,
总值就等于s-max*count_max-min*count_min。
修改过的那部分代码:
int count_max = 1,count_min = 1;
for(i=1;i<20;i++)
{
if (a[i] > max) {max = a[i]; count_max = 1;}
else if (a[i] == max) count_max++;
if (a[i] < min) {min = a[i]; count_min = 1;}
else if (a[i] == min) count_min++;
}
c = 20 -count_max -count_min;
s = s - count_max * max-count_min * min;
ave=(float)s/c;
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-12-12
#include<stdio.h>
int main()
{
int i,a[20];
int max,min;
int c=20,s=0;
double ave;
for(i=0;i<20;i++)
scanf("%d",&a[i]);
for(i=0;i<20;i++)
s+=a[i];

max=min=a[0];
for(i=0;i<20;i++)
if(a[i]>max) max=a[i];
else if(a[i]<min) min=a[i];
for(i=0;i<20;i++) //最值在数组中可能有多个,按照题意,要全部去掉
if(a[i]==max||a[i]==min){c--; s-=a[i];}

ave=(double)s/c; //整型除整型结果会为整型,所以得加上强制类型转换
printf("count=%d,average=%lf\n",c,ave);

return 0;
}
第2个回答  2013-12-11
if(a[i]>max) {max=a[i]; c--; s-=a[i];}
else if(a[i]<min) {min=a[i]; c--; s-=a[i];}
错了,应该是减去最大最小值, 而不是遇到比它大的就减去
相似回答