C-2个数组的平均值-始终为0

时间:2020-07-03 15:48:41

标签: c arrays function pointers

我有2个数组,我想要平均值,为什么当我尝试运行代码时avg总是为0?

void avg(int a[], int b[], float d[]);
void main()
{
 int a[N],b[N],i,c[N]={0};
    float D[N]={0};
 avg(a,b,D);
    printf("D array is: ");
    for(i=0;i<N;i++)
        printf("%d, ",D[i]);
}
void avg(int a[], int b[], float d[])
{
    int i;
    for(i=0;i<N;i++)
    {
        d[i]=((a[i]+b[i])/2.0);
    }
}

2 个答案:

答案 0 :(得分:1)

代码中有几个问题:

  1. 函数avg不返回任何内容,并且C中没有引用变量概念,您可以使用在函数中传递的原始值进行操作。

  2. a[N]b[N]未初始化,这是一个很大的错误。

  3. 通过%d类型说明符尝试打印浮点值。


代码已重新定义:

#include <stdio.h>
#include <stdlib.h>

#define MAX 5

float* find_average(int[], int[]); // to return floating point array as a pointer

int main(void) {
    int arrayA[] = {2, 3, 3, 4, 5};
    int arrayB[] = {4, 3, 1, 1, 2};

    // allocating memory for the array
    float *average = (float *)malloc(sizeof(float) * MAX);

    // getting the values and assigning it to 'average' pointer
    average = find_average(arrayA, arrayB);

    // printing each value of 'average'
    for (int i = 0; i < MAX; i++)
        printf("Average %d : %.2f\n", (i + 1), *(average + i));
    
    return 0;
}

float* find_average(int a[], int b[]) {
    static float average[MAX]; // to keep the values safe
    
    for (int i = 0; i < MAX; i++)
        average[i] = (a[i] + b[i]) / 2.0;

    return average;
}

这将输出:

Average 1 : 3.00 // a[0] + b[0]
Average 2 : 3.00 // a[1] + b[1]
Average 3 : 2.00 // a[2] + b[2]
Average 4 : 2.50 // a[3] + b[3]
Average 5 : 3.50 // a[4] + b[4]

答案 1 :(得分:0)

您的代码中有一些错误,我已在我的代码中更正

初始化数组大小和数组元素。

使用指针将数组传递给函数并返回数组

#include<stdio.h>
void avg(int *a, int *b, float *d,int n);
void main()
{
    int N;
    int a[50],b[50],i;
    float D[50];
    printf("Enter size of array\n");
    //initialize the length of array
    scanf("%d",&N);
    //initialize by taking input from keyboard
    printf("Enter the first array\n");
    for(i=0;i<N;i++)
     {
        scanf("%d",&a[i]);
     }
    printf("Enter the second array\n");
    for(i=0;i<N;i++)
    {
        scanf("%d",&b[i]);
    }
   //call by address
   avg(&a[0],&b[0],&D[0],N);
   printf("D array is: ");
   for(i=0;i<N;i++)
    {
        printf("%f, ",D[i]);
    }
}

平均函数的正确形式。

要将结果存储在数组D中,必须使用按地址调用方法

void avg(int *a, int *b, float *d,int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        *(d+i)=((*(a+i)+*(b+i))/2.0);
    }
}

样本输入

Enter size of array
4
Enter the first array
1
2
3
4
Enter the second array
1
2
3
4

这将输出为

D array is: 1.000000, 2.000000, 3.000000, 4.000000,
相关问题