2017-08-20 10 views
-1

私はCで簡単なコードを書いています。このようなコマンドがなくてもループ中に要素値が変化しているという問題があります。最初のループで計算されたすべての要素は、ループの終了後にゼロになります。しかし、2番目以上の番号のループで計算された要素は正しい値を示し、ゼロにはなりません(明らかに)。では、なぜこれらの要素がゼロになったのですか?間違いはどこですか?配列要素の値がC言語でループ中に変化する

毎回u(1,0)の値を出力しました。

#include <stdio.h>  /* Standard Library of Input and Output */ 
#include <complex.h> /* Standard Library of Complex Numbers */ 
#include <math.h> 
#include <string.h> 
#include <stdlib.h> 

#define pi 3.141592 

int main() { 
    // Declaration variables 
    // Integers 
    int N = 2, Nx = N, Ny = N, i, j; // IMPORTANT GIVE N-1 FOR N 
    double x[Nx], y[Ny], lengthX = 1.0, lengthY = 1.0; 
    double complex u[Nx][Ny]; 

    // FOR X DIRECTION 
    for (i = 0; i <= Nx; i++) { 
     x[i] = (double)i/(Nx + 1) * lengthX; 
     //printf("x coordi is %.15f \n", x[i]); 
    } 

    // FOR Y DIRECTION 
    for (j = 0; j <= Ny; j++) { 
     y[j] = (double)j/(Ny + 1) * lengthY; 
     //printf("x coordi is %.15f \n", x[i]); 
    } 

    for (j = 0; j <= Ny; j++) { 
     for (i = 0; i <= Nx; i++) { 
      printf("x coordi is %.15f \n", x[i]); 
      u[i][j] = sin(2.0 * pi * x[i]) * cos(2.0 * pi * y[j]); 
      // x[i] = (double)i/(Nx + 1) * lengthX; 
      printf("u is (i,j) = (%i,%i)\t%.15f\t%f\t%f\n", i, j, u[i][j], x[i], y[j]); //correct 
      printf("u is (i,j) = (%i,%i)\t element u[1][0] is %.15f \n\n\n", i, j, u[1][0]); 
     } 
     printf("\n\n\n End of inside loop (i,j)=(%i,%i) u(1,0) is \t%.15f \n", i, j, u[1][0]); 
    } 
    printf("\n\n u is %i\t%i\t%.15f \n\n", i, j, u[1][0]); 

    printf("\n\n\n\n Why u(1,0) value become zero in the last loop ???????\n"); 
printf("\n\n\n\n Not only u(1,0) value become zero, but all u(:,0) in the last loop became zero !\n"); 
    // 
    return 0; 
} 
+1

'I = 0を設定します。 i <=Nx' => 'i = 0;私はあなたの配列があなたの配列の外側にあるか、次の行に書きます。 –

+1

'for(j = 0; j <= Ny; j ++)'が間違っていれば、配列を 'Ny-1'にしか索引付けできません。 –

+0

多くの感謝ジャン=フランソワ・ファーブルAND天気ヴェーン – STRANGE

答えて

0

私はあなたの質問を理解していればx[0]y[0]はゼロであり、他のすべてのインデックスがOKです。だからあなたのコードにはいくつかのバグがあります。 1. for (j=0; j<=Ny; j++)for (i=0; i<=Nx; i++)あなたはプログラムのために割り当てられていないメモリにアクセスしており、読み取り専用である可能性があります。エラーSEGFAULTが発生する可能性があります。 2. x[i]=(double)i/(Nx+1)*lengthX; jとiがゼロに初期化されたときの計算と、最初のインデックスでゼロになる理由を計算します。

for (i=1; i<=Nx; i++) { 
     x[i-1]=(double)i/(Nx+1)*lengthX; 
     //printf("x coordi is %.15f \n", x[i]); 
} 

// FOR Y DIRECTION 

for (j=1; j<=Ny; j++) 
{ 
     y[j-1]=(double)j/(Ny+1)*lengthY; 
     //printf("x coordi is %.15f \n", x[i]); 
} 
+0

あなたの簡単な説明をよろしくお願いします。 – STRANGE

0

アレイがオーバーフロー床の上とそのrange.Justである、あなたはループを修正する必要があります。 のみNxの要素があります原因、for(i = 0; i < Nx; i++)for (i=0; i<=Nx; i++)を交換しますが、もう一つの

+0

よろしくお願いします。Ethan2048 – STRANGE

関連する問題