問64
頻出度★★☆
関数 sigma は, 正の整数を引数 max で受け取り, 1から max までの整数の総和を戻り値とする。プログラム中の a に入れる字句として, 適切なものはどれか。 〔プログラム〕 ○整数型: sigma(整数型: max) 整数型: calcX ← 0 整数型: n for (n を 1 から max まで 1 ずつ増やす) a endfor return calcX
この問題の解説と、これまでの解答の記録です。
関数 sigma は, 正の整数を引数 max で受け取り, 1から max までの整数の総和を戻り値とする。プログラム中の a に入れる字句として, 適切なものはどれか。 〔プログラム〕 ○整数型: sigma(整数型: max) 整数型: calcX ← 0 整数型: n for (n を 1 から max まで 1 ずつ増やす) a endfor return calcX
「calcX ← calcX × n」は乗算。calcX の初期値が 0 なので、何回掛けても calcX は 0 のままで、総和にならない(積を求めるなら初期値を 1 にする必要がある)。誤り。
「calcX ← calcX + 1」は毎回 1 だけ加える。ループ回数ぶん 1 が足されるだけなので、結果は max(繰返し回数)になり、1+2+…+max の総和にならない。誤り。
正解 関数 sigma は 1 から max までの整数の総和を返す。calcX は初期値 0 に設定され、for ループは n を 1 から max まで 1 ずつ増やしながら繰り返す。総和を求めるには、各回ループで現在の n を累積変数 calcX に足し込めばよい。a に「calcX ← calcX + n」を入れると、calcX は 0 →1 →1+2 →1+2+3 →… と進み、ループ終了時に 1+2+…+max の総和になる。よって正解はウ。
「calcX ← n」は加算ではなく代入。毎回 calcX を n で上書きするため、ループ終了時に残るのは最後の値 max だけで、総和にならない。誤り。