アルゴリズムとプログラミング|令和5年度 ITパスポート試験 問64
関数sigmaは,正の整数を引数maxで受け取り,1からmaxまでの整数の総和を戻り値とする。プログラム中のaに入れる字句として,適切なものはどれか。
〔プログラム〕
```
○整数型: sigma(整数型: max)
整数型: calcX ← 0
整数型: n
for (n を 1 から max まで 1 ずつ増やす)
a
endfor
return calcX
```
- calcX ← calcX × n
- calcX ← calcX + 1
- ✓ これが正解calcX ← calcX + n
- calcX ← n
解説
合計を貯める変数に、そのつどnを足していく式が入ります。
この関数は、引数maxで受け取った値までの整数を順に足し合わせ、その合計を戻り値として返します。合計を貯めておく変数calcXは0から始まり、繰返しでは変数nが1からmaxまで1ずつ増えていきます。したがって繰返しの中では、いまのnの値をcalcXに足し込む必要があります。これを式に書くと、calcXにcalcXとnを足したものを代入する形になります。maxが3であれば、calcXは0から1、3、6と変わり、最後に6が返ります。よってaに入るのは、calcXにcalcXとnの和を代入する式です。
ほかの選択肢はなぜ違うのか
- calcXにcalcXとnの積を代入すると、calcXは最初が0なので、何度掛けても0のままです。総和を求めたいのに掛け算を使っており、そもそも足し合わせる動きになっていません。初期値が0の変数に掛け算を重ねても0のままだ、という点を手掛かりにすると、その場で外せます。
- calcXにcalcXと1の和を代入すると、繰返しの回数だけ1が足されるので、最後に残るのはmaxそのものです。1からmaxまでを足した合計にはならず、nの値が結果に反映されません。
- calcXにnを代入すると、そのたびに前の値が上書きされてしまいます。繰返しが終わった時点で残るのは最後のnの値、つまりmaxだけであり、それまでに足したものが消えてしまいます。
この問題に関係する言葉
- 引数
- 戻り値
- 関数
出典:令和5年度 ITパスポート試験 問64(改変:原典の図表をテキストに書き起こした)
同じ単元をまとめて解くならアルゴリズムとプログラミングへ。
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)