【问题标题】:Calculating sum and average of an array with user input and functions in c用c中的用户输入和函数计算数组的总和和平均值
【发布时间】:2017-10-08 06:30:32
【问题描述】:

这里是初学者 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;
    }

【问题讨论】:

  • 问题很可能是当参数sumn 都是ints 时,avgNumbers 进行整数除法,向下舍入。您必须将任一参数转换为float,即(float)sum/n,而不是使用double 作为平均值,因为并非所有ints 范围都被float 覆盖。
  • 而且,您没有将n 作为参数传递给addNumbers。您遇到了一些编译错误 - 需要将错误添加到问题中

标签: c arrays function input


【解决方案1】:

调用 addNumbers() 和 avgNumbers() 时不需要 for 循环。此外,您正在发送地址代替方法中的值。用此代码替换您的代码。

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

【讨论】:

  • 如果您认为它可以解决您的问题。请点赞。
【解决方案2】:

您不需要在主函数中循环,因为您已经在 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;
}

【讨论】:

    【解决方案3】:

    首先,您在计算平均值时使用返回类型 float 但参数是 int 。在这种情况下,当您将 sum 除以 n 时,仅存储整数部分,因此您将获得的平均值不正确。在实际执行除法之前,您必须对值进行类型转换。类型转换是非常必要的,否则可能会产生不正确的结果。

    接下来就是在主函数中不需要for循环

    #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;
    }
    

    【讨论】:

    • 谢谢!这里的每个人都让我更容易理解。现在我可以看到我做错了什么。
    猜你喜欢
    • 2019-05-08
    • 2013-10-31
    • 2017-10-09
    • 1970-01-01
    • 1970-01-01
    • 2012-05-08
    • 2018-09-26
    • 1970-01-01
    • 2013-10-12
    相关资源
    最近更新 更多