c语言问题,编程从键盘上输入 20 个整数,求去掉最大值和最小值以后那些元素的平均值,哪里错了? C语言编程:将从键盘输入的20个整数存入一维数组中,计算所有...

作者&投稿:晏虞 (若有异议请与网页底部的电邮联系)
计算最大值和最小值有问题吧,
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;

#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;
}

if(a[i]>max) {max=a[i]; c--; s-=a[i];}
else if(a[i]<min) {min=a[i]; c--; s-=a[i];}
错了,应该是减去最大最小值, 而不是遇到比它大的就减去

C语言编程从键盘上输入20个整数,求去掉最大值和最小值以后那些元素的平均值。~

感觉错了很多地方..
你看下我的代码参考一下叭。
#include #define N 20void readln(int a[],int n){for(int i=0;ia[i]?a[i]:min;return min;}double ave(int a[],int n,int max,int min){double sum=0;for(int i=0;i<n;i++)sum+=(a[i]!=max&&a[i]!=min)?a[i]:0;return sum/(N-2);}int main(){int a[N];readln(a,N);printf("%.2lf
",ave(a,N,findMax(a,N),findMin(a,N)));}

#include int main(void){int a[20];int i=0;for (;i<20;i++)scanf("%d",&a[i]);int result=0;for (i=0;i<20;i++)result+=a[i];printf("和为:%d
平均值为:%f
",result,result/20.0);/*20.0不能改为20*/result=a[0]for (i=1;i<20;i++){if (result<a[i]);result=a[i];}printf("最大值为:%d
",result);return 0;}