我的功能waveres有问题。它应该作为浮点返回幅度,但不是。它返回一个随机的高数字。我认为这是我的头文件中的定义不是"看到"由主要功能。其他功能确实有效,所以我没有包含它们。当waveres函数运行时,它会输出正确的放大器值。
标头文件
#include <stdio.h>
#include <math.h>
#include <time.h> /* til random funksjonen */
#include <stdlib.h>
void faseforskyvning(float epsi[]);
float waveres(float S[],float w[],float *x, float *t, float epsi[]);
void lespar(float S[], float w[]);
主程序
#include "sim.h"
main()
{
float epsi[9], t = 1.0, x = 1.0;
float S[9], w[9];
float amp;
faseforskyvning(epsi);
lespar(S,w);
amp=waveres(S,w,&x,&t,epsi);
printf("%f\n", amp);
}
waveres:
#include "sim.h"
float waveres(float S[],float w[],float *x, float *t, float epsi[])
{
float amp = 0, k;
int i;
for(i=0;i<10;i++)
{
k = pow(w[i],2)/9.81;
amp = amp + sqrt(2*S[i]*0.2)*cos(w[i]*(*t)+k*(*x)+epsi[i]);
printf("%f\n",amp);
}
return(amp);
}
示例输出,其中最后两个数字应该是相同的。
0.000000
0.261871
3.750682
3.784552
3.741382
3.532950
3.759173
3.734213
3.418669
3.237864
1078933760.000000
错误的来源可能是我编译错误。这是编译器的输出:
make
gcc -c -o test.o test.c
gcc -c -o faseforskyvning.o faseforskyvning.c
gcc -c -o waveres.o waveres.c
gcc -c -o lespar.o lespar.c
gcc test.o faseforskyvning.o waveres.o lespar.o -o test -lm -E
gcc: warning: test.o: linker input file unused because linking not done
gcc: warning: faseforskyvning.o: linker input file unused because linking not done
gcc: warning: waveres.o: linker input file unused because linking not done
gcc: warning: lespar.o: linker input file unused because linking not done
答案 0 :(得分:5)
你有未定义的行为,你迭代直到10
for(i=0;i<10;i++)
但是您的数组的大小为9
,这意味着最大的索引是8
float epsi[9], t = 1.0, x = 1.0;
float S[9], w[9];
您需要将循环更改为
for(i=0;i<9;i++)
此外,您的数组未初始化,这也会引发未定义的行为。例如
float w[9]={0};
使用0