2017-10-08 60 views
1

初學C代碼在這裏,我想弄清楚我的代碼究竟出了什麼問題。我使用兩個函數來計算用戶輸入的數組的總和和平均值。數組的大小由用戶決定。我嘗試查找示例,但沒有找到許多有用的提示。更可能的是,我只是不理解我做錯了什麼。任何人都可以請給我一些建設性的批評和指導。謝謝!在這裏使用用戶輸入和函數計算數組的總和和平均值

#include<stdio.h> 

/*function declarations*/ 
int addNumbers(int number[]); 
float avgNumbers(int sum, int n); 

int main(){ 
    int i, n, number[100], sum, result; 
    float average; 

    printf("How many numbers do you want to enter?\n"); 
    scanf("%d",&n); 

    for (i = 0; i < n ; i++) 
    { 
     printf("Enter the numbers %d:\n", i+1); 
     scanf("%d",&number[i]); 
    } 
    for (i = 0; i < n ; i++) 
    { 
     sum = 0; 
     sum = addNumbers(&number); 
     average = avgNumbers(sum,n); 
    } 

    printf("Sum: %d\n",sum); 
    printf("Average: %f\n",average); 

    return 0; 
} 

/*function returning the sum of the numbers*/ 
int addNumbers(int number[]) 
{ 
    int i, n, sum; 
    for (i = 0; i < n ; i++) 
    sum += number[i]; 
    return sum; 
    } 

/*function returning the average of the numbers*/ 
float avgNumbers(int sum, int n) 
{ 
    average = sum/n 
    return average; 
    } 
+0

的問題很可能是,當雙方的爭論'sum'和'N'是'int's,avgNumbers確實整數除法,四捨五入。你必須將參數中的任何一個轉換爲'float',即'(float)sum/n',而不是使用'double'作爲平均值,因爲並非所有的int範圍都被float所覆蓋。 –

+0

而且,你不會將'n'作爲參數傳遞給'addNumbers'。您遇到一些編譯錯誤 - 需要將錯誤添加到問題中 –

+1

請閱讀[mcve]頁面 –

回答

0

調用addNumbers()和avgNumbers()時不需要for循環。你也發送地址代替價值的方法。用此代碼替換您的代碼。

sum = 0; 
sum = addNumbers(number); 
average = avgNumbers(sum,n); 
+0

如果您認爲這是您的問題的解決方案。請註冊。 – kunwar97

0

你的,因爲你的主要功能已經在循環不需要循環您addNumber(int number[])但你需要傳遞的元素數量的數組作爲參數傳遞給addNumbers(int number[], int n)這樣。並且您每次都在for循環中分配sum = 0。在avgNumbers(int sum, int n)中,您需要聲明average並將0賦值給它。

你的代碼應該是這樣的。

#include<stdio.h> 

/*function declarations*/ 
int addNumbers (int number[], int n); 
float avgNumbers (int sum, int n); 

int main(){ 
    int i, n, number[100], sum, result; 
    float average; 

    printf ("How many numbers do you want to enter?\n"); 
    scanf ("%d", &n); 
    for (i = 0; i < n; i++){ 
     printf ("Enter the numbers %d:\n", i + 1); 
     scanf ("%d", &number[i]); 
    } 
    sum = 0; 
    sum = addNumbers(number, n); 
    average = avgNumbers(sum, n); 


    printf ("Sum: %d\n", sum); 
    printf ("Average: %f\n", average); 
    return 0; 
} 

/*function returning the sum of the numbers*/ 
int addNumbers (int number[], int n){ 
    int i, sum=0; 
    for (i = 0; i < n; i++) 
     sum += number[i]; 
    return sum; 
} 

/*function returning the average of the numbers*/ 
float avgNumbers (int sum, int n){ 
    float average = 0; 
    average = sum/n; 
    return average; 
} 
0

首先,您在計算平均值時使用返回類型float,但參數爲int。在這種情況下,當你除以n時,只有整數部分被存儲,因此你得到的平均值是不正確的。在實際執行分割之前,你必須改變你的價值。類型轉換是非常必要的,否則可能會產生不正確的結果。

接下來的事情就是你DONOT需要循環在主函數

#include<stdio.h> 
/*function declarations*/ 
int addNumbers (int number[], int n); 
float avgNumbers (int sum, int n); 

int main(){ 
    int i, n, number[100], sum, result; 
    float average; 

    printf ("How many numbers do you want to enter?\n"); 
    scanf ("%d", &n); 
    for (i = 0; i < n; i++){ 
     printf ("Enter the numbers %d:\n", i + 1); 
     scanf ("%d", &number[i]); 
    } 
    sum = 0; 
    sum = addNumbers(number, n); 
    average = avgNumbers(sum, n); 


    printf ("Sum: %d\n", sum); 
    printf ("Average: %f\n", average); 
    return 0; 
} 

/*function returning the sum of the numbers*/ 
int addNumbers (int number[], int n){ 
    int i, sum=0; 
    for (i = 0; i < n; i++) 
     sum += number[i]; 
    return sum; 
} 

/*function returning the average of the numbers*/ 
float avgNumbers (int sum, int n){ 
    float average = 0; 
    average = (float)sum/n; 
    return average; 
} 
+0

謝謝!這裏的每個人都讓我更容易理解。現在我可以看到我做錯了什麼。 – Tina