C语言的问题,建一个函数统计一队数组超过平均值的个数,并求一组50个数据的超过平均值的个数,改错

#include "stdafx.h"
#include<conio.h>
#include<stdio.h>
#include<string.h>

int average(int a,int k)
{
int i,average,all=0,n=0;
for(i=0;i<k;i++)
all=all+a[i];
average=all/k;
for(i=0;i<k;i++)
{
if(a[i]>average)
n++;
}
return n;

}

void main(void)
{
int a[1000],k,n,i;
printf("input a number:");
scanf("%d",&k);
printf("input a:");
for(i=0;i<k;i++)
scanf("%d",&a[i]);
n=average(a,k);

getch();

}

首先存在楼上各位说的问题,另外:
除的时候取整出的问题,可以改为用double代替int,不过用double就要处理精度问题;
为了避免处理精度问题,可以求出总和sum,再看a[i] * total > sum ?。代码如下:

#include "stdafx.h"
#include<conio.h>
#include<stdio.h>
#include<string.h>

int average(int a[],int k)
{
int i,sum,all=0,n=0;
for(i=0;i<k;i++)
sum=sum+a[i];

for(i=0;i<k;i++)
{
if(a[i]*k>sum)
n++;
}
return n;

}

void main(void)
{
int a[1000],k,n,i;
printf("input a number:");
scanf("%d",&k);
printf("input a:");
for(i=0;i<k;i++)
scanf("%d",&a[i]);
n=average(a,k);

getch();

}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-08-13
第一,int average(int a,int k) 这个函数参数列表有问题。本意是由主函数调用average函数传递参数分别是一个数组名和人数。那么此处第一个形参类型应该是int*而不是int。
改为int average(int* a,int k)
第二,主函数中n=average(a,k);之后应该有个输出n的语句否则没法看结束
printf("%d\n",n);
第2个回答  2011-08-13
int average( int * a,int k)
第3个回答  2011-08-13
int average(int a,int k)
实参和形参不匹配,改为:
int average(int a[],int k)
第4个回答  2011-08-13
int average(int a[],int k)
你传的是个数组,这里形参必须用数组接收实参。
第5个回答  2011-08-13
首先第一行那个库函数我没见过,不知道你怎么加上去的。去掉吧。
其次函数传参问题。main函数传递给average函数的是一个地址,即a的首地址。在average中,你应该定义一个指针指向它,你里面居然还用到数组,不知道是哪里来的。
修改后程序如下:
#include<stdio.h>
#include<conio.h>
#include<string.h>

int average(int *a,int k)
{
int i,average,n,all;
n = 0;
all = 0;
for(i=0;i<k;i++)
{
all=all+*(a+i); /*用指针对应数组里面的内容*/
}
average=all/k;
for(i=0;i<k;i++)
{
if(*(a+i)>average) /*用指针对应数组里面的内容*/
n++;
}
return n;
}

int main(void)
{
int a[1000],k,n,i;
printf("input a number:");
scanf("%d",&k);
printf("input a:");
for(i=0;i<k;i++)
scanf("%d",&a[i]);
n=average(a,k);
printf("%d",n);
getch();
return 0;
}