【问题标题】:How can i solve this issue with average num in array我如何用数组中的平均数解决这个问题
【发布时间】:2020-04-15 17:46:36
【问题描述】:

我想使用函数打印数组中元素的平均数量

这是我的尝试:

#include<stdio.h>
#include<stdlib.h>
#define MAX_SIZE 100
void avgee();
int main()
{
    int a[MAX_SIZE],n,i;
    double avg=0,sum=0;
    printf("Enter the numbers of average:");
    scanf("%d", &n);
    printf("Enter the numbers: \n");
    for(i=1;i<=n;i++)
        scanf("%d", &a[i]);
    avgee(a,n);
    return 0;
}
void avgee(int a[MAX_SIZE],int n)
{
    int i,sum,avg;
    printf("Average number is:");
    for (i=1;i<=n;i++)
    {
        sum=sum+a[i];
        avg=sum/n;
    }
    printf("%f",avg)
}

由于某种原因它不起作用,有人可以帮忙吗?

【问题讨论】:

  • 有几处错误。你没有初始化sum。您会在循环内部而不是外部找到平均值(实际上并不是故障),并且您将数组从1 索引到&lt;= n,而它们应该从0&lt; n;。您将avg 定义为int,而它应该是double。您需要在划分之前转换sum
  • 请注意编译器警告,由于最后一行缺少; 导致错误。
  • 非常感谢

标签: c arrays average function-definition


【解决方案1】:

函数的声明应该是void avgee(int a[MAX_SIZE],int n);,而不是void avgee();。另外,你也忘了在printf("%f",avg)后面加上;

【讨论】:

  • 我错过了原型机。
【解决方案2】:

对于初学者来说,函数原型应该放在 main 之前。在这种情况下,编译器可以检查函数是否被正确调用。

该函数不应输出任何消息。它应返回平均值。函数的调用者决定输出什么消息。

函数的声明方式如下

double average( const int a[], size_t n );

并定义为

double average( const int a[], size_t n )
{
    double sum = 0.0;

    for ( size_t i = 0; i < n; i++ )
    {
        sum += a[i];
    }

    return n == 0 ? 0.0 : sum / n;
}

注意数组的索引是从0开始的。

所以在 main 你应该写

printf("Enter the numbers: \n");
for( i = 0; i < n; i++ )
    scanf("%d", &a[i]);

printf( "Average number is: %f\n", average( a, n ) );

这是一个演示程序。

#include <stdio.h>

#define MAX_SIZE    100

double average( const int a[], size_t n );

int main(void) 
{
    int a[MAX_SIZE];

    size_t n = MAX_SIZE;

    printf( "Enter the numbers of average: " );
    scanf( "%zu", &n );

    if ( MAX_SIZE < n ) n = MAX_SIZE;

    printf( "Enter the numbers:\n" );

    for( size_t i = 0; i < n; i++ )
    {
        scanf( "%d", &a[i] );
    }       

    printf( "Average number is: %.1f\n", average( a, n ) );

    return 0;
}

double average( const int a[], size_t n )
{
    double sum = 0.0;

    for ( size_t i = 0; i < n; i++ )
    {
        sum += a[i];
    }

    return n == 0 ? 0.0 : sum / n;
}

它的输出可能看起来像

Enter the numbers of average: 10
Enter the numbers:
1 2 3 4 5 6 7 8 9 10
Average number is: 5.5

【讨论】:

    【解决方案3】:

    平均 avg 应声明为 printf("%f",avg) 的双精度。

    您的循环应该只迭代到&lt;n 场景并且计算平均值应该在循环之外。 喜欢,

    avg=sum/n;
    printf("%f",avg);
    

    【讨论】:

      【解决方案4】:

      这是您的代码的工作版本

      #include <stdio.h>
      
      void avgee();
      
      int main() {
        int n, i;
        printf("Enter the numbers of average: ");
        scanf("%d", &n);
        int a[n];
        printf("Enter the numbers: \n");
        for(i = 0;i < n; i++) {
          scanf("%d", &a[i]);
        }
        avgee(a, n);
        return 0;
      }
      
      void avgee(int a[], int n) {
        int i, sum = 0;
        for(i = 0;i < n; i++) {
          sum += a[i];
        }
        printf("Average number is: %.2f", sum * 1.0 / n);
      }
      

      【讨论】:

        猜你喜欢
        • 2020-06-07
        • 1970-01-01
        • 1970-01-01
        • 2021-06-19
        • 2020-06-29
        • 1970-01-01
        • 2022-06-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多