問 2(提出プログラム名:ex0602.c)
次の仕様のプログラムを ex0602.c として作りなさい.
①まず,整数 n を読み込む.
②続いて,整数を n 個読み込み,それらを配列へ格納する.
③最後に,配列内の各整数から「最後に読み込んだ整数」を引いた値を
実行例のように番号付きで出力する(番号は 0 ではなく 1 から始めよ).
ただし,
● 用意する配列の長さはマクロ SIZE で指定すること.
● マクロ SIZE の値は 8 と定義すること.
● マクロの定義部分(#define SIZE 8)以外では 8 や 7 と直接書かないこと.
● 最初に読み込む n は,1 以上 SIZE 以下の整数であると仮定してプログラムを作ってよい.
【気を付けるべき点1】
データ数 n を最初に読み込みますが,
講義で説明したように n を配列の長さとするのは誤りです.
具体的には,次のような間違いをする人が稀にいます:
int n;
printf("データ数 n を入力してください:");
scanf("%d", &n);
int a[n]; ← 誤り
配列の長さは定数として,実行に先立って確定していなければなりません.
それゆえ,本講義では長さをマクロ(例えば SIZE)として先に定義しておき,
int a[SIZE];
といった書き方を採用しています.
【気を付けるべき点2】
配列には n 個の整数が格納されていきますので,最後に読み込んだ数字は(仮に配列名を a とした場合)a[SIZE-1] ではなく a[n-1] になることに注意しましょう.
この問題では配列の長さを SIZE にしてありますが,これはあくまでも「最大で SIZE 個まで格納できる」だけであって,すべてを必ず使うわけではありません(この場合は n で決まります).
また,n を読み込んだ後の「▲個の整数を入力してください:」というメッセージでは
▲が n に対応している点も見落とさないようにしてください.
- 【プログラムの実行結果】(その1)※赤字は実行時にキーボードから入力する内容
※出力する番号は 0 ではなく 1 から始まっているか,[ ] で囲まれているか,数字とその個数は合っているか,それぞれ確認せよ.
データ数 n を入力してください:3 3 個の整数を入力してください:⏎ 10 15 11 [1] -1⏎ [2] 4⏎ [3] 0⏎
- 【プログラムの実行結果】(その2)※赤字は実行時にキーボードから入力する内容
データ数 n を入力してください:1 1 個の整数を入力してください:⏎ 123 [1] 0⏎
- 【プログラムの実行結果】(その3)※赤字は実行時にキーボードから入力する内容
データ数 n を入力してください:4 4 個の整数を入力してください:⏎ 5 0 5 2 [1] 3⏎ [2] -2⏎ [3] 3⏎ [4] 0⏎
【過去にあったミス(実際に減点となり,やり直しを命じられた例)】
■ 実行の画面出力が上の例と違う(きちんと確認していない).
(例1)表示する値が違っていたり,正負が逆になっている.
(例2)メッセージが「8 個の整数を入力してください:」に固定されている.
(例3)出力される番号が 0 から始まってしまっている([1] が [0] になっている)
■ n 個の整数を読み込んだり出力したりする際に SIZE を繰り返しの条件に使ってしまっている.
■ インデントに不備がある(VSCode 上でインデントを自動で揃える作業をやっていない).
← [ 問 1 (ex0601.c) ]
ミスが無いことを確認したら次の問題へ → [ 問3 (ex0603.c) ]