C语言问题,任意输入十个数,去掉其中最大值和最小值,求剩余数的平均值,求教~

#include<stdio.h>#defineN10main(){floata[N];floatmin,max;inti,sum=0;floatavg;printf("... #include <stdio.h>
#define N 10
main()
{
float a[N];
float min,max;
int i,sum=0;
float avg;
printf("请输入10个值:\n");
scanf("%d%d%d%d%d%d%d%d%d%d",&a[0],&a[1],&a[2],&a[3],&a[4],&a[5],&a[6],&a[7],&a[8],&a[9]);
min=a[0];
max=a[0];
for(i=0;i<N;i++)
{
if(a[i]<min)
min=a[i];
if(a[i]>max)
max=a[i];
sum=sum+a[i];
}
avg=(sum-max-min)/(N-2);
printf("最大数:%d,最小数:%d,去掉最大最小后的平均值:%f\n",max,min,avg);
printf("%f%f%f%f%f%f%f%f%f%f",a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]);
system("pause");
}
展开
 我来答
风若远去何人留
2017-05-15 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450129
专业C/C++软件开发

向TA提问 私信TA
展开全部

方法实现有多种:

一、最直观的方式:

1、将输入的十个数,存到数组中;

2、遍历数组,找到最大值和最小值;

3、从数组中将最大值和最小值移除;

4、将剩余的8个数值累加,并将和值除以8,得到平均值

5、输出结果。

二、优化方式:

分析原始算法,需要循环多次,包括输入,查找最值,移除,累加等。针对此,可以进行优化。

1、查找最大值和最小值可以通过一个循环完成;

2、由于只是要计算最终的平均值,所以可以不从数组移除,而是累加10个数的和值,再减去两个最值;

3、输入时可以不保存数组,而是输入一个处理一个,降低空间开销;

4、输入时可以同时执行累加及查找最值操作。 

三、经过优化,代码可以书写如下:

#include <stdio.h>
int main()
{
    float aver=0;
    int i,n,max,min;
    scanf("%d",&max);
    aver=min=max;//输入第一个数,当做初始的最大最小值。此时和值也为该值。
    for(i = 1;i<10;++i)//循环9次。
    {
        scanf("%d",&n);//输入剩余9个数。
        aver+=n;//累加。
        if(max<n) max=n;//查找最大值。
        else if(min>n)min=n;//查找最小值。
    }
    aver-=min+max;//在和值中减去两个最值。
    aver/=8;//计算平均值。
    printf("%f\n", aver);//输出结果。
    return 0;
}
mr_shj
2015-04-26 · TA获得超过2682个赞
知道大有可为答主
回答量:1665
采纳率:94%
帮助的人:1383万
展开全部
#include <stdio.h>
#define N 10
main()
{
float a[N];
float min,max,sum=0; //总和应该也是float
int i;
float avg;
printf("请输入10个值:\n");
//a是float,所以输入用%f
scanf("%f%f%f%f%f%f%f%f%f%f",&a[0],&a[1],&a[2],&a[3],&a[4],&a[5],&a[6],&a[7],&a[8],&a[9]);
min=a[0];
max=a[0];
for(i=0;i<N;i++)
{
if(a[i]<min)
min=a[i];
if(a[i]>max)
max=a[i];
sum=sum+a[i];
}
avg=(sum-max-min)/(N-2);
printf("最大数:%d,最小数:%d,去掉最大最小后的平均值:%f\n",max,min,avg);
printf("%f%f%f%f%f%f%f%f%f%f",a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]);
system("pause");
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
萧竣闰
2015-04-26 · TA获得超过893个赞
知道小有建树答主
回答量:685
采纳率:81%
帮助的人:195万
展开全部
scanf("%d%d%d%d%d%d%d%d%d%d",&a[0],&a[1],&a[2],&a[3],&a[4],&a[5],&a[6],&a[7],&a[8],&a[9]);
错了,你上面定义的是float型就应该是 %f。
还有你这输入的太麻烦了。
for(i=0;i<N;i++)
scanf("%f",&a[i]);
还有
if(a[i]<min)
min=a[i];
应该成
min=a[0];
for(i=0;i<N;i++)
if(min>a[i])
min=a[i];
还有if(a[i]>max)
max=a[i];
应改成
max=a[0];
for(i=0;i<N;i++)
if(max<a[i])
max=a[i];
既然a[i]是float。sum也最好是float
否则要强制转换
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式