所以我需要制作一个我可以参考的数组,从[-2:25]开始。如果我从0开始,代码工作正常,但我需要执行一个低通滤波器,所以我需要x(n)的-2和-1值,我需要能够像A [ - 一样引用它2]
代码:
#include <stdio.h>
#include <math.h>
#include <complex.h>
int main(void)
{
int N=25; //Setting Number of Iterations
int i; //Initializing Variables
double xn; //
double hn;
double A[27];
FILE *fp;
fp=fopen("data3.txt","w"); //Save to File
do { i=-2;i<N;i++;
{ xn = 2*exp(-0.01*i)*sin(0.2*i);
A[i] = xn;}
} while (i>0);
(i=0;i<N;i++) //For loop for i=
{
xn = 2*exp(-0.01*i)*sin(0.2*i);
A[i] = xn;
fprintf(fp,"%d\t%f\t%f\n",i,xn,A[i]); //Saving results to File
printf("xn= %d\t%f\n",i, A[i]);
}
printf("xn1 = %f\n", A[1]);
printf("xn5 = %f\n", A[5]);
return(0);
答案 0 :(得分:4)
这没什么意义。 A[-2]
是未定义的行为。尝试分配给它可能会覆盖其他变量。如果A
有27个元素,则索引为0 - 26.只需在代码中A[i+2]
使用A[i]
。
答案 1 :(得分:1)
数组是指针,你可以p - 2
就好了。但是,您需要仔细管理索引。
我建议你做的是创建两个变量。第一个是你的数组A.将它的大小设置为元素的数量,而不是索引:如果你的范围是-2到25,那么它应该是一个长度为27(25 - -2)的数组。
然后,创建第二个变量P,它将是:
double *P = &A[2];
然后你可以做P[-2]
,这将指向A [0]的地址。
答案 2 :(得分:0)
了解你的循环结构。等价地:
// (init; break condition; step)
for (i = ...; i < N; ++i) {
... // do stuff
}
int i = ...; // init
if(i < N) { // initial check (may be unnecessary by construction)
do {
... // do stuff
++i; // step
} while(i < N); // break condition
}
int i = ...; // init
while(i < N) { // break condition
... // do stuff
++i; // step
}