問 1(提出プログラム名:ex0601.c)
整数を SIZE 個だけ読み込み,それらを入力とは逆順に出力するプログラムを作りなさい.
ただし,SIZE はマクロとし,その値を 5 と定義しなさい.
この問題では,練習2(p0602.c)とは異なり,用意してよい配列は 1 つだけとするので間違えないこと.
(出力に際しては,整数の桁数を指定するのではなく,直前に空白を入れて " %d" という書式での出力を繰り返すことで構いません)
提出するソースファイル(ソースプログラム)のファイル名は ex0601.c としなさい.
なお,次の点に注意せよ:
● 必ず配列と for 文を使うこと.
(変数を 5 個用意したり,scanf や printf を 5 回書いたりするなどは論外である)
● プログラム中に 5 や 4 という数字を直接書かないこと.必要ならば SIZE や SIZE-1 と書きなさい.
(ただし,#define SIZE 5 という定義だけは書いてよい)
● この問題は逆順に出力(表示)するのが目的であり,配列内の数字を逆順に入れ替えてはいけません.また,用意してよい配列は 1 つだけなので,別の配列を用意してそちらへ逆順にコピーするのもいけません.
● 最後に “以上です\n” と出力すること.
【過去に本当にあった誤答例】
講義での説明を全く聞いていなかった可能性もありますが,「何のために配列の長さを SIZE で管理しているのか」(その趣旨)を全く理解できていないのか,過去に次のようなプログラムが提出されてきたことがあります(言うまでもなく論外です;採点していて目を疑いました).
scanf("%d%d%d%d%d", &x[SIZE-1], &x[SIZE-2], &x[SIZE-3], &x[SIZE-4], &x[SIZE-5]);
printf(" %d %d %d %d %d\n", x[SIZE-1], x[SIZE-2], x[SIZE-3], x[SIZE-4], x[SIZE-5]);
もしも SIZE が 1000 だった場合にはとんでもないことになることは容易に想像できると思います.
一方,この課題を適切に解けていれば,SIZE の値が何に変わろうと #define 部分だけを書き換えるだけですぐに対応できるはずです.
- 【プログラムの実行結果】(その1)※赤字は実行時にキーボードから入力する内容
※「整数を 5 個入力してください:」というメッセージを出力させるにあたって
5 と直接書いてはいけません. "%d" と SIZE を使うこと.
整数を 5 個入力してください:2 1 10 8 4 入力された数を逆順に出力します:⏎ 4 8 10 1 2⏎ 以上です⏎
- 【プログラムの実行結果】(その2)※赤字は実行時にキーボードから入力する内容
※数字の出力では空白(半角スペース)も入れることを忘れないこと
(数字がくっついてしまわないよう注意せよ)
整数を 5 個入力してください:1 2 33 4444 55 入力された数を逆順に出力します:⏎ 55 4444 33 2 1⏎ 以上です⏎
【過去にあったミス(実際に減点となり,やり直しを命じられた例)】
■ 実行の画面出力が上の例と違う(きちんと確認していない).
(例1)正しく逆順になっていない.
(例2)表示される数字が違っている.
■ 注意書きを見落としていてプログラム中に 5 や 4 といった数字を直接書いている.
■ インデントに不備がある(VSCode 上でインデントを自動で揃える作業をやっていない).
ミスが無いことを確認したら次の問題へ → [ 問2 (ex0602.c) ]