求一组数的平均分,除去最大和最小值

C语言 码拜 8年前 (2016-05-25) 945次浏览
#include<stdio.h>
int main()
{
	int n,i,min,max;
	double s;
	while(scanf("%d",&n))
	{
		s=0;
		int a[n];
		scanf("%d",&a[n]);
		min=max=a[0];
		for(i=0;i<n;i++)
		{
			s+=a[i];
			if(min>a[i])  min=a[i];
			if(max<a[i])  max=a[i];
		}
		s=(s-min-max)/(n-2);
		printf("%.2lf %.2lf %.2lf\n",min,max,s);
	}
}

本人想问一下为什么这个输出结果的最大最小值一直是0.00,而且平均数一直乱码。

解决方案

3

 scanf(“%d”,&a[n]);不带这么玩的,要用循环,逐个输出
C99 都用上了啊,
C99标准,各编译器支持一向不是很好
不过gcc 支持

5

修改了一下,仅供参考

		int n,i;
		double s ,min,max;
		scanf("%d",&n);
		while(n > 0)
		{
			s=0.0;
			int *a = (int*)malloc(sizeof(int) *n);
			min = max = 0.0;
			for(i=0;i<n;i++)
			{
				scanf("%d",&a[i]);
				if (0 == i)
				{
					min = a[i];
					max = a[i];
				}
				s+=a[i];
				if(min>a[i])  min=a[i];
				if(max<a[i])  max=a[i];
			}
			free(a);
			s=(s-min-max)/(n-2);
			printf("%.2f %.2f %.2f\n",min,max,s);
			scanf("%d",&n);
		}

2

a 的大小是n
那么scanf(“%d”,&a[n]);  已经越界了

1

引用:
Quote: 引用:

修改了一下,仅供参考

		int n,i;
		double s ,min,max;
		scanf("%d",&n);
		while(n > 0)
		{
			s=0.0;
			int *a = (int*)malloc(sizeof(int) *n);
			min = max = 0.0;
			for(i=0;i<n;i++)
			{
				scanf("%d",&a[i]);
				if (0 == i)
				{
					min = a[i];
					max = a[i];
				}
				s+=a[i];
				if(min>a[i])  min=a[i];
				if(max<a[i])  max=a[i];
			}
			free(a);
			s=(s-min-max)/(n-2);
			printf("%.2f %.2f %.2f\n",min,max,s);
			scanf("%d",&n);
		}
if (0 == i)
        {
            min = a[i];
            max = a[i];
        }

这里可不可以直接改成min=max=a[0];

当然不可以啊,必须是最初开始赋值为a[0],也就是说是有条件的,否则min和max就一直是a[0]

1

你的代码里面错误太多了,没有报错么?数组的长度是不能用变量来确定的,而且在while右边的括号中scanf不应该在里面吧,C++中可以实现。

2

“多一少一”问题占程序员常犯错误的10%以上!
避免“多一少一”问题的方法之一是将例如<10甚至<5的数代入程序片断,搬手指头心算验证一下程序到底应该写为
x、x-1、x+1中的哪个?
<、<=、==、>、>=中的哪个?

5

#include<stdio.h>
#define Max 1000//定义一个符号常量
int main()
{
	int n,i,j;
	double t,min,max,s;
    double a[Max];
	while(~scanf("%d",&n))
	{
		s=0;

		for(i=0;i<n;i++)
		scanf("%lf",&a[i]);
		min=a[0];
		max=a[0];
		for(i=0;i<n-1;i++)
        {//冒泡排序,将数组从小到大排序
            for(j=0;j<n-i-1;j++)
            {
                if(a[j]>a[j+1])
                {
                    t=a[j];
                    a[j]=a[j+1];
                    a[j+1]=t;
                }
            }
        }
		for(i=1;i<n-1;i++)
		{//除去最大与最小值之后的加和
			s+=a[i];
		}
        max=a[n-1];
        min=a[0];
		printf("%.2lf %.2lf %.2lf\n",min,max,s/(n-2));
	}
}

代码仅供参考

2

#include<stdio.h>
#define max 50
void main()
{
int a,b;
scanf(“%d”,&a);
double c[max],Max,min,sum=0,s;
for(b=0;b<a;b++)
{
scanf(“%lf”,&c[b]);
}
Max=c[0];
min=c[0];
for(b=1;b<a;b++)
{
if(c[b]>Max)
{
Max=c[b];
}
if(c[b]<min)
{
min=c[b];
}
}
for(b=0;b<a;b++)
{
sum=sum+c[b];
}
s=(sum-min-Max)/(a-2);
printf(“%.2lf\n”,s);
}

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明求一组数的平均分,除去最大和最小值
喜欢 (0)
[1034331897@qq.com]
分享 (0)