下面的代码获取一个整数数组,并创建一个带有移动的平均值的数组(即第i位的值是数组中第i位之前最后n个元素的平均值(如果它们存在);如果i〈n,则为i之前的现有元素的平均值。例如:对于n=3 1 2 3 4 5 6 -〉1 1.5 2 3 4 5
#include <stdio.h>
#include <stdlib.h>
float *
mobMean (int x[], int n, int nval)
{
int i, j, sum, num;
float *means;
if(means=malloc(sizeof(float) * nval))
{
for(i=0; i<nval; i++)
{
sum=0;
num=0;
for(j=i; j>=0 && i-j>=n; j--)
{
sum+=x[j];
num++;
}
*(means+i)=(float)sum/num;
}
}
else
printf("e");
return means;
}
int
main()
{
int a[10], i;
float *b;
for(i=0; i<10; i++)
scanf("%d", &a[i]);
b=mobMean(a,3,10);
for(i=0; i<10; i++)
printf("%f", *(b+i));
free(b);
return 0;
}
控制台(gcc编译器)作为输出返回-nan连续10次。不仅我的pc,而且在线编译器。谷歌没有一个线索,这是什么。我真的很感激你的帮助。
1条答案
按热度按时间a11xaf1n1#
此for循环的主体
由于条件
i-j>=n
而从不执行,因为最初i - j
等于0
。你可以这样写
这是一个演示程序。
程序输出为
我在for循环中声明了局部变量,如果你用语言标签c89标记了这个问题,你可以在代码块开始的循环之前声明它们。