2016-03-08 38 views
-2

当这个程序返回平均值时,每次都是零,我没有正确地将值传递给average()函数吗?我不知道要修复什么,因为我尝试切换数据类型并输出%f。
我不想为我完成代码,只需要一些指导。感谢任何可以提供帮助的人。为什么我的用户定义数组的平均值不正确? C

#include <stdio.h> 



float average(float arr[], float num) { 

for (z = 0; z < num; ++z) { 
    sum = arr[z]+1; 
} 

    avg = sum/num; 

    return avg; 

} 

int main(){ 
    int count; 
    int a; 
    float initial[a]; 
    float avg; 
    avg = average(initial, a); 
    printf("enter number of values you'd like averaged.\n "); 
    scanf("%i",&a); 
    count = a; 
    printf("enter numbers you'd like averaged\n"); 
    for(a= 0; a < count; a++) 
    { 
     scanf("%f",&initial[a]); 
    } 
    printf("The average is %d",avg); 
    return 0; 
} 
+2

这是不可读的。正确缩进和格式化代码。 – Olaf

+0

我没有看到任何平均值。它只是添加到数组元素.. –

+0

您的平均功能是错误的。它总是会返回'(arr [num] + 1)/ num'。 –

回答

2

存在多个问题。在此部分代码:

for (z = 0; z < num; ++z) { 
    sum = arr[z]+1; 
} 

您还没有计算或初始化的总和,你计算的最后一个元素加1用途:

float sum = 0, avg; 
for (z = 0; z < num; ++z) { 
    sum += arr[z]; 
} 

除了这个,你不填你数组,然后计算平均值。还有其他各种问题。这是一个生动的例子。 http://ideone.com/5nOV81

+0

是的,这照顾了它,毕竟不是那么糟糕,尽管对于真正的编码者来说,任何错误都可能是不可接受的。让我度过了一个真正的关键点,谢谢 – MessatsuX

2

main调用你的函数获取值入阵后(现在数组初始化) -

for(a= 0; a < count; a++) 
{ 
    scanf("%f",&initial[a]); 
} 
avg = average(initial, a); 
printf("The average is %f",avg); 
         ^^ note specifier is %f not %d as you used 

而且在功能average而不是这个 -

sum = arr[z]+1; 

做 -

sum+= arr[z]; //initliaze sum to 0 before loop 
1

你的成绩永远为零,因为你正在呼吁甚至阅读变量a和阵列initial前的平均方法...

avg = average(initial, a); 
0

你有几个失误

,这将是总和+ = ARR [Z];
,你必须阅读所有数字

for(a= 0; a < count; a++) 
{ 
scanf("%f",&initial[a]); 
} 
avg = average(initial, a); 

虽然平均的返回类型为浮动,所以你必须使用%F printf中后,初始化总和为0

你必须调用函数平均

printf("The average is %f",avg); 
相关问题