課題 [6] 配列(2/9)

問 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
 ※番号は [1] から始まること([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 上でインデントを自動で揃える作業をやっていない).


ミスが無いことを確認したら次の問題へ → [ 問3 (ex0603.c) ]