#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 支持
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]); 已经越界了
那么scanf(“%d”,&a[n]); 已经越界了
1
当然不可以啊,必须是最初开始赋值为a[0],也就是说是有条件的,否则min和max就一直是a[0]
1
你的代码里面错误太多了,没有报错么?数组的长度是不能用变量来确定的,而且在while右边的括号中scanf不应该在里面吧,C++中可以实现。
2
“多一少一”问题占程序员常犯错误的10%以上!
避免“多一少一”问题的方法之一是将例如<10甚至<5的数代入程序片断,搬手指头心算验证一下程序到底应该写为
x、x-1、x+1中的哪个?
<、<=、==、>、>=中的哪个?
避免“多一少一”问题的方法之一是将例如<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);
}
#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);
}