我有 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);
}
}
代码中存在几个问题:
-
该函数
avg
不返回任何内容,并且 C 中没有可以使用函数中传递的原始值进行操作的引用变量概念。 -
a[N]
和b[N]
未初始化,这是一个巨大的错误。 -
尝试通过
%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 : %.2fn", (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]
您的代码中有一些错误,我已经在我的代码中纠正了这些错误
数组大小和数组元素的初始化。
使用指针将数组传递给函数并返回数组
#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 arrayn");
//initialize the length of array
scanf("%d",&N);
//initialize by taking input from keyboard
printf("Enter the first arrayn");
for(i=0;i<N;i++)
{
scanf("%d",&a[i]);
}
printf("Enter the second arrayn");
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,