在这里使用用户输入和函数计算数组的总和和平均值

问题描述:

初学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]页面 –

调用addNumbers()和avgNumbers()时不需要for循环。你也发送地址代替价值的方法。用此代码替换您的代码。

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

如果您认为这是您的问题的解决方案。请注册。 – kunwar97

你的,因为你的主要功能已经在循环不需要循环您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; 
} 

首先,您在计算平均值时使用返回类型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