user-0 提问: 求一组数的平均分，除去最大和最小值。

回复:
user: user-1
content: #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); }

user: user-2
content: #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)); 	} }   代码仅供参考

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

user: user-0
content: 引用 8 楼 qaz_7 的回复:[quote=引用 4 楼 starytx 的回复:] 修改了一下，仅供参考 		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];[/quote]  明白了，min=max=a[0]; 每次都是和第一个比较，所以不可以这样赋值。

user: user-4
content: 引用 8 楼 qaz_7 的回复:[quote=引用 4 楼 starytx 的回复:] 修改了一下，仅供参考 		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];[/quote]当然不可以啊，必须是最初开始赋值为a[0]，也就是说是有条件的，否则min和max就一直是a[0]

user: user-5
content: 引用 5 楼 paschen 的回复:a 的大小是n  那么scanf("%d",&a[n]);  已经越界了  大小为n的数组有效范围是a[0] -  a[n-1]

user: user-6
content: 估计楼主自己都不知道自己的代码想表达什么意思。 1、你确定这代码能够得出去除最大值和最小值后的平均数？ 2、你确定这代码能够通过编译？ 即使能通过编译得出的结果也不是你想要的。 一句话：语法不对，语义不通！

user: user-0
content: 引用 4 楼 starytx 的回复:修改了一下，仅供参考 		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];

user: user-0
content: 引用 5 楼 paschen 的回复:a 的大小是n  那么scanf("%d",&a[n]);  已经越界了 但是我在定义啊a[n]之前有先输入n的大小啊

user: user-0
content: 引用 3 楼 qq423399099 的回复:int a[n]; scanf("%d",&a[n]);  我以为这样可以直接先输入一串数据

user: user-5
content: a 的大小是n  那么scanf("%d",&a[n]);  已经越界了

user: user-4
content: 修改了一下，仅供参考 		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); 		}

user: user-7
content: int a[n]; scanf("%d",&a[n]);

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

user: user-4
content: 你确定这代码能通过编译？

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