2013-10-19 51 views
3

我有一個簡短的程序,應該將一個浮點值數組傳遞給三個不同的函數,以返回總和,平均值和最小值。我不明白爲什麼函數返回0值(或我錯誤地傳遞數組?)C:爲什麼我的函數返回0值?

我敢肯定,我錯過了一些簡單而基本的東西,但一直盯着這太長時間,真的看不到有什麼問題。

欣賞任何輸入。

#include <stdio.h> 
#define NUM 5 


float array_sum (float arr[]); 
float array_avg (float arr[]); 
float array_min (float arr[]); 

int main() 
{ 
    float array_nums[NUM] = {1.23, 4.56, 7.89, 10.1, 2.34}; 
    float arr_sum; 
    float arr_avg; 
    float arr_min; 

    arr_sum = array_sum(array_nums); 
    arr_avg = array_avg(array_nums); 
    arr_min = array_min(array_nums); 

    printf("\nThe sum of the elements in the array is %f.\n"), arr_sum; 
    printf("The average of the elements in the array is %f.\n"), arr_avg; 
    printf("The smallest value in the array is %f.\n\n"), arr_min; 

return (0); 
} 

float array_sum (float arr[]) 
{ 
    float sum = 0; 
    int i; 

    for (i = 0; i < NUM; i++) 
    { 
     sum += arr[i]; 
    } 

return (sum); 
} 

float array_avg (float arr[]) 
{ 

    int i; 
    float avg; 
    float sum = 0; 

    for (i = 0; i < NUM; ++i) 
    { 
     sum += arr[i]; 
    } 

    avg = sum/NUM; 

return (avg); 
} 

float array_min (float arr[]) 
{ 
    int i; 
    float min = arr[0]; 

    for (i=0; i < NUM; ++i) 
    { 
     if (arr[i] < min) 
     { 
      min = arr[i]; 
     } 
    } 

return (min); 
} 
+0

使用像gcc -Wall這樣體面的編譯器,它會告訴你,你的printfs缺乏足夠的格式參數。我想它也會告訴你,你正在計算表達式而沒有任何效果。 –

回答

5

printf■找參數的功能之外:

printf("\nThe sum of the elements in the array is %f.\n"), arr_sum; 
                 ^end of arguments 

應該

printf("\nThe sum of the elements in the array is %f.\n", arr_sum); 
+0

D'oh。確實簡單而根本。非常感謝! –

3

你的printf語句是不正確的。這是做正確的方式:

printf("\nThe sum of the elements in the array is %f.\n", arr_sum); 
printf("The average of the elements in the array is %f.\n", arr_avg); 
printf("The smallest value in the array is %f.\n\n", arr_min); 

您還可以限制小數位被這樣顯示:

printf("\nThe sum of the elements in the array is %0.2f.\n", arr_sum); //this will display 2 decimal places 
3

快速瀏覽,它是一個括號問題:

printf("\nThe sum of the elements in the array is %f.\n"), arr_sum; 

應該是:

printf("\nThe sum of the elements in the array is %f.\n", arr_sum); 
2

只是一個小錯誤。已糾正的代碼在這裏,

printf("\nThe sum of the elements in the array is %f.\n", arr_sum); 
    printf("The average of the elements in the array is %f.\n",arr_avg) ; 
    printf("The smallest value in the array is %f.\n\n", arr_min); 
5

正如其他人指出的,您的printf聲明是錯誤的;您將參數置於括號外(無意中,您使用了逗號運算符,它將評估逗號左側的內容,然後是逗號右側的內容,併產生最後一個結果)。

如果使用-Wall編譯器標誌,編譯器通常會發出警告(例如,「缺少%f的格式參數」)。一般來說,在使用C時你應該打開大多數警告,因爲它們經常指出你的程序中的錯誤和錯誤,否則它們很難被捕獲。