問78
頻出度★★☆
手続 calcMod3 を呼び出したときの出力はどれか。 〔プログラム〕 ○calcMod3() 整数型: totalValue, i totalValue ← 0 for (i を 1 から 7 まで 1 ずつ増やす) if (i ÷ 3 の余り が 0 と等しい) totalValue ← totalValue + i endif endfor totalValue を出力する
この問題の解説と、これまでの解答の記録です。
手続 calcMod3 を呼び出したときの出力はどれか。 〔プログラム〕 ○calcMod3() 整数型: totalValue, i totalValue ← 0 for (i を 1 から 7 まで 1 ずつ増やす) if (i ÷ 3 の余り が 0 と等しい) totalValue ← totalValue + i endif endfor totalValue を出力する
2 は加算される値(3 と 6)でも合計でもありません。1〜7 の中で 3 の倍数は 3 と 6 の 2 個なので、その「個数」を答えと取り違えると 2 になりますが、出力されるのは個数ではなく合計 totalValue なので誤りです。
3 は i=3 のときに最初に加算した時点での途中経過です。ループは i=7 まで続き i=6 も 3 の倍数なので加算され、最終値は 9 になります。i=3 で集計を止めてしまうと 3 を選んでしまいます。
7 はループの上限値(i の最大値)であって合計ではありません。totalValue は条件を満たした i の総和なので、上限の 7 がそのまま出力されることはありません。
正解 for ループで i を 1 から 7 まで 1 ずつ動かし、条件「i ÷ 3 の余り が 0 と等しい」(=i が 3 の倍数)を満たすときだけ totalValue に i を足し込みます。1〜7 のうち 3 の倍数は 3 と 6 だけなので、totalValue は i=3 で 0+3=3、i=6 で 3+6=9 となり、最後に出力されるのは 9 です。よって正解は エ「9」です。