問 7(提出プログラム名:ex0607.c)
以下の手順に従って成績処理を行うプログラムを ex0607.c として作りなさい.
このプログラムは n 人分の成績(0 以上 100 以下の整数)を読み込み,
合格者(60点以上)の人数と(合格者が 1 人以上いれば)最低合格点を出力するというものである.
なお,ここではマクロ SIZE の値を 40 と定義し,プログラム中ではマクロ定義を除いて 40 や 39 という数字を直接書いてはいけません.
ここでは n は 1 以上 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 上でインデントを自動で揃える作業をやっていない).
← [ 問 6 (ex0606.c) ]
ミスが無いことを確認したら次の問題へ → [ 問8 (ex0608.c) ]