对于循环不会从负面开始

时间:2015-08-07 00:49:18

标签: c++ arrays for-loop

所以我需要制作一个我可以参考的数组,从[-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);

3 个答案:

答案 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
}