こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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

投稿日時 - 2013-06-29 14:43:42

QNo.8154839

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.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 );
}

投稿日時 - 2013-06-30 07:28:54

ANo.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言語には触っていないので、間違っていても大目に見てください。。。

投稿日時 - 2013-06-29 16:32:36

ANo.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くらいにして手計算の結果と比べてみることをおすすめします。

投稿日時 - 2013-06-29 14:57:22

あなたにオススメの質問