CO-P22|情報Ⅰ 対策問題
次のプログラムは、10人の出席(1)・欠席(0)データから出席率(%)を求める。空欄【ア】に入るものはどれか。 (1) Shusseki = [1, 1, 0, 1, 1, 1, 0, 1, 1, 1] (2) goukei = 0 (3) i を 0 から 9 まで 1 ずつ増やしながら繰り返す: (4) ⎿ goukei = goukei + Shusseki[i] (5) 表示する(【ア】) (表示: 80)
解答・解説を見る
正解: 1
正答
1
この問題のポイント
0/1データの合計=該当数、割合の計算式 を問う問題です。
解説
出席を1、欠席を0で表しておくと、全部足すだけで出席人数が出ます(1が人数分だけ足されるため)。「もし〜ならば」で数えなくても合計だけで該当数が出る——この0/1フラグの合計は集計プログラムの頻出イディオムです。
まず(3)(4)のループをトレースします。Shusseki は 1,1,0,1,1,1,0,1,1,1 なので、
i=0〜1で goukei=2、i=2は0を足して2のまま、i=3〜5で5、i=6は0のまま5、i=7〜9で8。
ループ後 goukei=8(出席8人)です。
空欄は求める出力(80)から逆算します。出席率(%) = 出席人数 ÷ 全体 × 100 = 8÷10×100 = 80。ただしここで整数の商の罠があります。8 ÷ 10 を先に計算すると、整数の商では0になり、0×100=0 で失敗します。先に100を掛けて(8×100=800)、それから10で割る(800÷10=80)、つまり goukei × 100 ÷ 10 の順序でなければなりません。
「割ってから掛ける」と0になる——この演算の順序の罠は、整数演算を使う共通テストのプログラム問題で狙われ続けている定番ポイントです。割合・百分率の式を書くときは「掛け算を先に」と機械的に覚えておくのが安全です。
選択肢の確認
1.○ 8×100÷10 = 800÷10 = 80。掛け算が先なので0にならない。
2.× 8÷10 は整数の商で0。%にもなっていない。
3.× 8×10÷100 = 80÷100 = 0。式の形も順序も誤り。
4.× 10÷8 から始まり式の意味が崩れている(全体÷出席人数)。
ここだけは覚えよう
0/1データは合計=該当数、割合は「先に掛けてから割る」 — 整数の商では 8÷10=0 になる罠に注意。