在主函数中输入N个人的某门课程的成绩,分别用函数求平均分、最高分、最低分和各分数段人数。求看哪里错了

#define N 4
#include <stdio.h>
void num(int ave,int max,int min)
{ int f[N],i,sum=0;
for (i=0;i<N;i++)
sum=sum+f[i];
ave=(int)(sum/4.0+0.5);
max=f[0];
for (i=1;i<N;i++)
if (f[i]>max)
max=f[i];
min=f[0];
for (i=1;i<N;i++)
if (f[i]<min)
min=f[i];

}
void cou(int a,int b,int c,int d,int e)
{ a=0;b=0;c=0;d=0;e=0;
int f[N],i;
for (i=0;i<N;i++)
{ if (f[i]>=90) a=a+1;
else if (f[i]>=80 && f[i]<=89) b=b+1;
else if (f[i]>=70 && f[i]<=79) c=c+1;
else if (f[i]>=60 && f[i]<=69) d=d+1;
else e=e+1;
}
}
void main()
{
int f[N],i,j,ave,max,min,a,b,c,d,e;
printf("请输入四名同学成绩:");
for (i=0;i<N;i++)
scanf("%d",&f);
num(ave,max,min);
printf("平均分为%d,最高分为%d,最低分为%d\n",ave,max,min);
cou(a,b,c,d,e);
printf("90~100:%d,80~89:%d,70~79:%d,60~69:%d,59以下:%d\n",a,b,c,d,e);
}

没的说,肯定错的- -
而且错的有点离谱了~~~
f[N]?其他的都不看了,你把f[N]改成f[4]试试

哦,改了也不行,你main函数里的scanf也有问题

当然了,刚才又看到了一个#define N 4,那么用f[N]是没有问题了,但是主函数scanf还是有问题的,并且在调用函数的时候,根本就没有数据传输到函数形参里~

另外,你用的应该是C89在写,最好改用C99写,函数内部缺少return
具体的不说了,自己在研究一下吧
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-12-15
你这个有如下几个问题:
1.函数内的参数是值传递,不是地址传递,所以即便你运行子函数后,参数的值仍然是不变的。
2、主函数里f[N]是数组,赋值是应该为&f[i];
3、主函数与子函数中的f[N]是不相干的。

程序修改如下:
#define N 4
#include <stdio.h>
void num(int f[],int ave,int max,int min)
{ int i,sum=0;
for (i=0;i<N;i++)
sum=sum+f[i];
ave=(int)(sum/4.0+0.5);
max=f[0];
for (i=1;i<N;i++)
if (f[i]>max)
max=f[i];
min=f[0];
for (i=1;i<N;i++)
if (f[i]<min)
min=f[i];
printf("平均分为%d,最高分为%d,最低分为%d\n",ave,max,min);

}
void cou(int f[],int a,int b,int c,int d,int e)
{
int i;
for (i=0;i<N;i++)
{ if (f[i]>=90) a=a+1;
else if (f[i]>=80 && f[i]<=89) b=b+1;
else if (f[i]>=70 && f[i]<=79) c=c+1;
else if (f[i]>=60 && f[i]<=69) d=d+1;
else e=e+1;
}
printf("90~100:%d,80~89:%d,70~79:%d,60~69:%d,59以下:%d\n",a,b,c,d,e);
}
void main()
{
int f[N],i,j,ave,max,min,a,b,c,d,e;
a=0;b=0;c=0;d=0;e=0;
printf("请输入四名同学成绩:");
for (i=0;i<N;i++)
scanf("%d",&f[i]);
num(f,ave,max,min);
cou(f,a,b,c,d,e);
}本回答被提问者采纳
第2个回答  2012-12-15
void num(int ave,int max,int min) 这么定义 void num(int &ave,int &max,int &min)
void cou(int a,int b,int c,int d,int e) 换成 void cou(int &a,int &b,int &c,int &d,int &e)

原因是: 你想修改传入参数的值,则需要传入参数的地址或者引用,否则在子函数中使用的参数都是局部变量,在子函数中的改变不能被保留。只有return 和引用以及指针的这些方式才可以将子函数的改动体现出来。
第3个回答  2012-12-14
额,看不出错误。。。。。

int f[N],i,j,ave,max,min,a,b,c,d,e;调用函数已经调用过了,主函数中还用得着定义吗?》