戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

ITパスポート 2023年 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

🔒 解説は解答すると表示されます

1からmaxまでの総和を求める関数sigma【ITパスポート 解説】

正解の理由

問題は「1からmaxまでの整数の総和」を返す関数sigmaを作ることです。ループでnを1からmaxまで順に動かしているので、各回で現在の値nを合計(累積)する必要があります。したがって、累積変数calcXに「現在のnを足す」処理、すなわち の「calcX ← calcX + n」が適切です。これによりループ終了後にcalcXが1+2+...+maxの合計になります。

解法ステップ

  1. 問題文を確認:関数は引数max(正の整数)を受け取り、1からmaxまでの合計を返す。
  2. ループの役割を整理:for文でnが1→maxまで変化する。各回にnを合計に反映する必要がある。
  3. 累積変数の使い方:合計を保存する変数calcXは最初に0で初期化され、ループごとに更新される。更新は「今までの合計+今回の値」。
  4. 選択肢を照合:これができるのは (calcX ← calcX + n)だけ。
  5. 小さな例で検算:max=5なら 0→0+1→1+2→3+3→6+4→10+5→15。期待通り1+2+3+4+5=15。

選択肢別の誤答解説

  • ア: calcX ← calcX × n
    • 意味:累積値にnを掛ける。初回は0×1=0で、その後も0のままか、もし初期値が0でないときは積の挙動となり、合計にはならない。例えばmax=5では最終的に0(あるいは不定の掛け算結果)になり、合計とは無関係。
  • イ: calcX ← calcX + 1
    • 意味:毎回1だけ増やす。これは「要素の個数」を数える処理になり、結果はmaxになる(maxが5なら5)。求める合計(例えば5なら15)とは異なる。
  • ウ: calcX ← calcX + n
    • 意味:正しい。毎回その回の値nを足していく。ループ後に1からmaxまでの合計が得られる。
  • エ: calcX ← n
    • 意味:毎回累積値を上書きしてしまう。ループ終了時は最後に代入されたn(=max)だけが残る。合計ではなく最大値が返る。

よくある誤解

  1. 「足すのではなく1を足せばよい」と思うミス
    • calcX ← calcX + 1 は要素の数を数える処理で、合計にはならない点を混同しやすいです。
  2. 初期値の誤理解
    • 累積変数calcXは0で初期化する必要があります。1などにすると結果がずれます。0である理由は「何も足していない状態の合計は0」だからです。
  3. 代入と加算の違いを見落とす
    • calcX ← n は累積ではなく上書きです。過去の合計が消えるため合計は得られません。

補足コラム

  • ループで合計を求める方法は「逐次累積(アキュムレータ)」と呼ばれます。累積変数(この例ではcalcX)に対して、各繰り返しで値を加えていく手法です。
  • 数学的には、1からmaxまでの和はガウスの公式で直接求められます:
    ループを回す代わりにこの式を使えば計算回数を減らせます(大きな数に有利)。
  • 用語説明:
    • 整数型:小数点のない数(例:1, 2, 3)を扱うデータ型のこと。
    • 引数(ひきすう):関数に渡す入力値。ここではmaxが引数。
    • 戻り値(もどりち):関数が結果として返す値。ここでは合計が戻り値。
簡単な実装例(Python)
def sigma(max):
    calcX = 0           # 合計を保持する変数(整数型)
    for n in range(1, max+1):  # nを1からmaxまで増やす
        calcX = calcX + n      # 累積(これが正しい処理)
    return calcX

print(sigma(5))  # 15 が出力される
# 公式を使う例
def sigma_formula(max):
    return max * (max + 1) // 2
print(sigma_formula(5))  # 15

FAQ

Q1. calcXを0で初期化する理由は?
A1. 合計の初期状態は「何も足していない=0」です。もし1や他の値で初期化すると結果がずれます。
Q2. maxが0または負の値の場合はどうなる?
A2. 問題ではmaxは正の整数とあります。実装上は、maxが0だと合計は0、負ならループが実行されないかエラー扱いになります。現実の関数では入力の検証(負の値を受け取らないようにする)を行うことが望ましいです。
Q3. ループを使わずに速く求める方法は?
A3. 補足コラムにあるガウスの公式 を使えば1回の計算で結果が出ます。

関連キーワード: 逐次累積、for文、アキュムレータ、合計の公式、整数初期化、ループ設計
← 前の問題へこの年度をクイズで解く次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

ITパスポート
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について