C中的数组初始化

计算科学 C 计算机算术
2021-12-16 06:13:42

在这段代码中,X 和 Y 数组应该是相同的,但由于某种原因,我终其一生都无法弄清楚,X[0] 始终为 1 而不是 0。我尝试将整个数组初始化为 0 ,直接将 X[0]=0 放入,使用一个常数,不管它总是 1 并且 Y 数组不会出现问题。任何见解都会很棒。这是代码:

#define N 3
#define M 3
#define A 0.0
#define B 1.0
#define C 0.0
#define D 1.0


int main()
    double h_x;
    h_x= (double) 1/(N+1);
    double h_y;
    h_y= (double) 1/(M+1);
    double X[N+2];
    double Y[M+2];
    double xhalf[N+1];
    double yhalf[M+1];
    int i,j;
    double o,k,l;

    X[0]=C; X[N+2]=D; Y[0]=C; Y[M+2]=D; xhalf[0]=h_x/2; yhalf[0]=h_y/2;
    for(i=1; i<=N; i++)
    {

        X[i]= X[i-1]+h_x;
        xhalf[i]=xhalf[i-1]+h_x;
        printf("%e\n", X[i]);
    }
    for(i=1; i<=M; i++)
    {

        Y[i]=Y[i-1]+h_y;
        yhalf[i]=yhalf[i-1]+h_y;
        printf("%e\n", Y[i]);
    }
return 0;
}

输出:

1.25 1.50 1.75 2.5e-1 5.0e-1 7.5e-1

2个回答

好吧,我做了一些修复和调试。我会说很多错误,我认为您是 C/Programming 的初学者?无论如何找到下面的代码......

#include <math.h>
#include <stdio.h>

#define N 3
#define M 3
#define A 0.0
#define B 1.0
#define C 0.0
#define D 1.0


int main(int argc, char *argv[]){

double h_x = (double) 1/(N+1);
double h_y = (double) 1/(M+1);
double X[N+2];
double Y[M+2];
double xhalf[N+1];
double yhalf[M+1];
int i,j;
double o,k,l;

X[0] = C; X[N+1] = D;
Y[0] = C; Y[M+1] = D;
xhalf[0] = h_x/2;
yhalf[0] = h_y/2;

// before
printf("\nhx= %f", h_x); printf("\th_y= %f\n", h_y);
printf("\nX[0]= %f", X[0]); printf("\tX[N+1]= %f", X[N+1]);
printf("\nY[0]= %f", Y[0]); printf("\tY[M+1]= %f\n\n", Y[M+1]);

for(i=1; i<=N; i++){
    X[i]= X[i-1]+h_x;
    xhalf[i]=xhalf[i-1]+h_x;
    printf("X[%d] = %e\n", i, X[i]);
}

for(i=1; i<=M; i++){
    Y[i]=Y[i-1]+h_y;
    yhalf[i]=yhalf[i-1]+h_y;
    printf("Y[%d] = %e\n", i, Y[i]);
}

// after
printf("\nhx= %f", h_x); printf("\th_y= %f\n", h_y);
printf("\nX[0]= %f", X[0]); printf("\tX[N+1]= %f", X[N+1]);
printf("\nY[0]= %f", Y[0]); printf("\tY[M+1]= %f\n\n", Y[M+1]);

return 0;
}

首先,当您为我们插入代码以帮助您时,请复制粘贴它完全正常工作(可编译)——包括库。

其次,请粘贴一个实际工作的工作版本,这样我们就不必从头开始工作。在这种情况下,为什么缺少 main 函数的左大括号?

第三,一个好的做法是不要像你那样将主函数留空,检查我的代码......

第四,您从 1 开始显示数组的索引,即您跳过了第一个值,这就是您没有看到零的原因。

第五,将数组初始化为 X 和 Y 的 (N+2) 和 (M+2) - 。但是在 C 中,您不能访问第 (N+2) 和 (M+2) 索引。这就是为什么在编译后和执行期间,我们得到一个“检测到堆栈粉碎”的错误。换句话说,例如,您初始化:

double array[5];

但是,您只能使用 array[0] 直到 array[4]。

除此之外,继续努力!我们都去过那里:)

我运行了你的代码,它给出了正确的输出,我想。您应该检查系统中的代码。您的代码中也存在语法错误。
检查我在标准输出部分得到的输出:https ://ideone.com/9siAoO