問 8(提出プログラム名:ex0808.c)
このプログラム(ex0808.c)をダウンロードし,その中の関数 print_matrix を完成させなさい.
関数 print_matrix では,引数として与えられた 2 次元配列 a について,それを実行例のように正方行列のかたちで出力するものとする.ただし,整数の出力幅は 4 桁分とし,行ごとに合計値も出力するものとする.なお,この問題では for 文(または while 文)を使った 2 重ループで作ること.if 文は使ってはいけません(この場合,if 文が必要になることはないのですが,まれに if を使おうとする人がいるため念の為に注意しておきます).
また,関数 main の内容は一切書き換えないこと.
あわせて,この問題ではマクロの定義部分を除いて 3 と直接書いてはいけません.
【過去に本当にあった誤答】
for 文での繰り返しを全く理解できていないのか,以下のようなプログラムが提出されたことがあります.言うまでもなく論外です.マクロの定義値を 3 から 100 に変更するとなると,とんでもないことになります.
printf("%4d%4d%4d[合計%4d]\n", a[0][0], a[0][1], a[0][2], a[0][0]+a[0][1]+a[0][2]);
printf("%4d%4d%4d[合計%4d]\n", a[1][0], a[1][1], a[1][2], a[1][0]+a[1][1]+a[1][2]);
printf("%4d%4d%4d[合計%4d]\n", a[2][0], a[2][1], a[2][2], a[2][0]+a[2][1]+a[2][2]);
- 【プログラムの実行結果】(その1)※赤字は実行時にキーボードから入力する内容
※出力する各整数を 4 桁分の幅で出力できているか確認せよ.
printf(" %d", a[i][j]); という具合いに強引に空白で調整するのは誤りである.
行列データ(3 x 3)を入力してください:⏎ 1 2 3 4 5 6 7 8 9 1 2 3 [合計 6]⏎ 4 5 6 [合計 15]⏎ 7 8 9 [合計 24]⏎
- 【プログラムの実行結果】(その2)※赤字は実行時にキーボードから入力する内容
行列データ(3 x 3)を入力してください:⏎ 1 1 1 1 1 1 1 1 1 1 1 1 [合計 3]⏎ 1 1 1 [合計 3]⏎ 1 1 1 [合計 3]⏎
- 【プログラムの実行結果】(その3)※赤字は実行時にキーボードから入力する内容
行列データ(3 x 3)を入力してください:⏎ 1 1 1 0 1 1 0 0 1 1 1 1 [合計 3]⏎ 0 1 1 [合計 2]⏎ 0 0 1 [合計 1]⏎
【過去にあったミス(実際に減点となり,やり直しを命じられた例)】
■ 実行の画面出力が上の例と違う(きちんと確認していない).
(例1)整数の出力幅が 4 桁分になっていない.
(例2)出力されている行ごとの合計値が違っている.
■ マクロを使わずに直接 3 や 2 と書いてしまっている.
■ main 関数を書き換えてしまっている.
■ インデントに不備がある(VSCode 上でインデントを自動で揃える作業をやっていない).
← [ 問 7 (ex0807.c) ]
ミスが無いことを確認したら次の問題へ → [ 問 9 (ex0809.c) ]