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

問 7(提出プログラム名:ex0607.c)

以下の手順に従って成績処理を行うプログラムを ex0607.c として作りなさい.
このプログラムは n 人分の成績(0 以上 100 以下の整数)を読み込み,
合格者(60点以上)の人数と(合格者が 1 人以上いれば最低合格点を出力するというものである.
なお,ここではマクロ SIZE の値を 40 と定義し,プログラム中ではマクロ定義を除いて 40 や 39 という数字を直接書いてはいけません
ここでは n1 以上 SIZE 以下と仮定してプログラムを作ってよい.

【プログラムとして実現すべき手順】
以下の手順通りに書かれていない場合は,たとえ正しく動作しても不正解とみなすので注意せよ.
ここでは,全員分の成績を記録するために長さ SIZE の int 配列 score を使用し,
合格者数は変数 cnt で,最低合格点は変数 min でそれぞれ表すものとする.

① 整数 n(人数を表す)を読み込む.
② 初期値として cnt = 0 としておく.
for ( i = 0; i < n; i++ ){ ... } として次の④~⑦を繰り返す:
  ④ i 番目の人の成績 score[i] を読み込む.
  ⑤ もし score[i] >= 60 ならば次の⑥,⑦を実行する:
    ⑥ cnt の値を 1 増やす.
    ⑦ もし (cnt == 1)または(score[i] < min) ならば min = score[i] とする.

⑧ もし cnt > 0 ならば,合格者数 cnt と最低合格点 min を出力する.
 さもなくば「合格者はいませんでした」とだけ出力する.

【補足説明】
この問題の場合,不合格の点(< 60)は最低点の候補にならないことに注意が必要です.
それゆえ,⑦における score[i]min の比較は,⑤の条件が成立する場合に限って行うように(if 文の中に if 文がくるように)設計しています.

さらに,⑦ では cnt == 1 である場合にもその際の得点(score[i])を min に代入しています.
なぜなら,この時に初めて合格者が見つかったことになるので,その人の得点を仮の最低点としているのです.

  • 【プログラムの実行結果】(その1)赤字は実行時にキーボードから入力する内容
    合格者数と最低点が正しいことを必ず確認せよ.
人数を入力してください:4
全員の成績を入力してください:
62 59 61 60
合格者数 = 3
最低点 = 60
  • 【プログラムの実行結果】(その2)赤字は実行時にキーボードから入力する内容
    ※誤って最低点や合格者数を表示させてしまっていないか注意せよ.
    (この場合は「合格者はいませんでした⏎」と表示させるだけである)
人数を入力してください:5
全員の成績を入力してください:
10 20 30 40 50
合格者はいませんでした
  • 【プログラムの実行結果】(その3)赤字は実行時にキーボードから入力する内容
人数を入力してください:2
全員の成績を入力してください:
90 90
合格者数 = 2
最低点 = 90

【過去にあったミス(実際に減点となり,やり直しを命じられた例)】
実行の画面出力が上の例と違うきちんと確認していない).
  (例1)合格者数,最低点が違っている.
  (例2)合格者がいない場合(実行例2)でも合格者数と最低点を出力してしまっている.
■ 問題文で指示されている手順に従ってプログラムを作っていない.
インデントに不備がある(VSCode 上でインデントを自動で揃える作業をやっていない).


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