• 締切済み

c言語 パスカルの三角形

c言語でパスカルの三角形を出力するプログラムを作りたいのですが、上手くいきません。 何を直せばいいのか教えてください。 #include <stdio.h> #define N 10 int main(void){ int i, j = 1, x, y; int d[N][N]; /* 三角形を作成 */ for (i = 1 ; i < N ; i++){ d[i][0] = 1; while (j <= i - 1){ d[i][j] = d[i-1][j-1] + d[i-1][j]; j ++; } } /* 三角形の表示 */ for (y = 0; y < N; y++) { for (x = 0; x < N-y; x++) printf(" "); for (x = 0; x < y; x++) printf("%3d ", d[x][y]); printf("\n"); } return 0; } 実行結果 -2147417616 2665208 1629976532 1627572249 1629101723 1 1629982744 2665256 2665548 3407923 1629345053 1627571017 0 3538997 1629739051 10 1629345053 2665368 3670071 2665384 1629739040 1627927140 2665244 1628040295 57 1628810863 1629476960 1628602749 2665560 2665304 1629345053 0 1629739040 1629740576 1628992224 2 4411498 1628040588 -2147417600 0 1629476960 1629740664 1629739040 1 267574 0

みんなの回答

  • yama5140
  • ベストアンサー率54% (136/250)
回答No.3

while() の代わりに for にしてみました。 #include <stdio.h> #define N 10 int main( void ){ int i, j; int d[ N + 1 ][ N + 1 ]; d[ 0 ][ 0 ] = 0; // 1段目作成のための0段目初期化 d[ 0 ][ 1 ] = 1; // 〃 d[ 0 ][ 2 ] = 0; // 〃 /* 三角形を作成 */ for( i = 1; i <= N ; i++ ){ d[ i ][ 0 ] = 0; // i 段目の左端初期化 for( j = 1; j < ( i + 1 ); j++ ){ d[ i ][ j ] = d[ i - 1 ][ j - 1 ] + d[ i - 1 ][ j ]; } d[ i ][ j ] = 0; // i 段目の右端初期化★★★ } /* 三角形の表示 */ for( i = 1; i <= N; i++ ){ for( j = 0; j < ( ( N - i ) / 2 ); j++ ) printf( "*** " ); if( 1 == ( i % 2 ) ) printf( "* " ); for( j = 1; j < ( i + 1 ); j++ ){ printf( "%3d ", d[ i ][ j ] ); } printf( "\n" ); } return( 0 ); }

回答No.2

/* 三角形を作成 */ for (i = 0 ; i < N ; i++){  【iの初期値0】 d[i][0] = d[i][i] = j = 1;  【d[i][i]とjも初期値1】 while (j <= i - 1){ d[i][j] = d[i-1][j-1] + d[i-1][j]; j ++; } } 未検証です。 表示にについても未検証。 10*10の配列を確保した場合、要素番号は0~9? だったという記憶に基き・・・ 四半世紀くらいC言語には触っていないので、間違っていても大目に見てください。。。

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.1

>/* 三角形を作成 */ >for (i = 1 ; i < N ; i++){ >d[i][0] = 1; >while (j <= i - 1){ >d[i][j] = d[i-1][j-1] + d[i-1][j]; >j ++; >} >} 例えばiが1でjも1のとき、 d[1][1] = d[0][0] + d[0][1] という計算をすることになります。 このとき、d[0][0]とd[0][1]にはどういう値が入っていますか? 私には、不定の値が入っているように見えます。 Nをいきなり10とかにせず、3くらいにして手計算の結果と比べてみることをおすすめします。