C语言求平均数

输入5人分数,求出低于平均分的人数。我这种算法错在哪儿?#include<stdio.h>intfun(inta[5],intb){intavg,t,num=0;avg=... 输入5人分数,求出低于平均分的人数。我这种算法错在哪儿?
#include<stdio.h>
int fun(int a[5], int b)
{
int avg,t,num=0;
avg=b/5;
for(t=0;t<5;t++)
{
if(a[t]<avg)
num++;
}
return num;
}
main()
{
int m[5],i,sum=0;
for(i=0;i<5;i++)
{
scanf("%d",&m[i]);
sum+=m[i];
}
fun(m[5],sum);
printf("%d\n",fun(m[5],sum));
}
展开
 我来答
匿名用户
2012-12-25
展开全部
fun()函数不需要执行两次
fun()函数的第一个参数是数组,也就是指针,因此调用时应该这样:
fun(m, sum)

另外,你统计平均时没有考虑小数情况,这样可能结果会有错误,比如平均分75.2,
但是你的平均分是75,这样就会导致原来75的没有被统计到

还有一个建议,fun()函数的两个参数最好分别是数组指针和数组长度,sum可以在fun()内部统计,这样函数的应用范围就更广了
追问
这里fun的第一个参数我老是把握不好是不是直接写数组名还是什么。。可能概念没搞清,请问怎么理解?应用范围更广怎么理解?
追答
这就看你的形参是怎么写的,你这里形参是int a[],是一个数组形式,相当于一个指针,
因此你直接给实参数组m[5]的名字m就好,m也相当于一个指针

话说回来,对于你的fun(int a[5], int b)而言,这里的5对于fun()函数无意义,因为函数并不知道你是几维数组,函数只认这个指针
epdc147
2012-12-25 · TA获得超过488个赞
知道小有建树答主
回答量:492
采纳率:0%
帮助的人:328万
展开全部
fun(m[5],sum);
这调用有问题

m[5]就是这个, 传个数组名就可以了

还有
int fun(int a[5], int b)

这个也有问题, 用数组做参数, 不用写大小
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友6b264c8
2012-12-25 · TA获得超过288个赞
知道小有建树答主
回答量:378
采纳率:0%
帮助的人:208万
展开全部
#include<stdio.h>
int fun(int a[], int b) //定义不应该是定义int a[5],定义成int a[]就行
{
int avg,t,num=0;
avg=b/5;
for(t=0;t<5;t++)
{
if(a[t]<avg)
num++;
}
return num;
}
main()
{
int m[5],i,sum=0;
for(i=0;i<5;i++)
{
scanf("%d",&m[i]);
sum+=m[i];
}
fun(m,sum); //调用函数时接收函数的地址就行,也就是传入数组的名字
printf("%d\n",fun(m,sum));
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
唐门云夕
2012-12-25 · 超过40用户采纳过TA的回答
知道小有建树答主
回答量:137
采纳率:100%
帮助的人:67.7万
展开全部
算法思想正确,但是可能会有一些问题。求平局数时最好还是double类型。int类可能不准确。
另外最后的fun函数其实只需要运行一次的。
fun(m[5],sum);
printf("%d\n",fun(m[5],sum));

改为:sum=fun(m,sum);
printf("%d\n",sum);

可以减小运行时间
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ssgo66
2012-12-25 · TA获得超过143个赞
知道小有建树答主
回答量:229
采纳率:0%
帮助的人:128万
展开全部
printf("%d\n",fun(m,sum));
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式