基本情報技術者 2011年 春期 午前(科目A) 問07
問題文
次の流れ図は、1から100までの整数の総和を求め、結果を変数に代入するアルゴリズムを示したものであるが、一部誤りがある。どのように訂正すればよいか。

選択肢
ア:①の処理を“”にする。(正解)
イ:②の条件判定を“”にする。
ウ:③の処理を“”にする。
エ:④の処理を“”にする。
🔒 解説は解答すると表示されます
累積和の初期化【午前解説】
正解の理由
本問題では1から100までの整数を足し合わせる累積処理を正しく行うため、合計を格納する変数の初期値を0にする必要があります。図の工程①が「1 → x」となっていると、ループで1から100までを加算した結果にさらに初期値1が加わってしまい、期待される合計より1大きくなります。したがって、初期化を“”にする選択肢、すなわち ア が正しい修正です。
正しい動作イメージ:
- ループ開始前に とする。
- 各反復で を行い、最後に でループを抜けたとき は になっている。
解法ステップ
- フローチャートの目的を確認する:1から100までの合計を求めること。
- ループの役割を把握する:判定が「i : 100」で、分岐が「≦」で下へ進む構造は「i ≤ 100 の間、加算を行いiを増やす」ことを示す。
- ループ不変量(ループの各時点で成り立つ関係)を考える:初期化が適切なら反復 k 回の後に となるはず。
- 各選択肢がその不変量・終了条件に与える影響を検討する(下記の選択肢別解説参照)。
- 正しい初期化が であることを確かめる( では結果が1だけ大きくなるため誤り)。
選択肢別の誤答解説
-
ア: ①を“”にする。
→ 正しい。累積和を求める変数は0で初期化するのが標準で、ループ処理後に となる。 -
イ: ②の条件判定を“”にする。
→ 誤り。判定を「i ≤ 99」にするとループは i=1..99 の加算しか行わず、合計は となり目的の5050にならない。 -
ウ: ③の処理を“”にする。
→ 誤り。これは合計をiに代入する操作であり、ループカウンタiを置き換えてしまいます。結果としてiの値が期待通り増加せず、ループ条件や加算の意味が崩れるため正しい合計は得られません(場合によっては不正な増加で早期終了したり無限ループになったりする可能性があります)。 -
エ: ④の処理を“”にする。
→ 誤り。もし工程④が i を更新する処理(元は )の代わりに に変わると、ループカウンタiが更新されなくなります。判定「i ≤ 100」は常に同じ真偽を保つため、ループは終了せず非終端(無限ループ)になります。以前の誤った説明で「終了してある値になる」とされたのは誤りで、正しくは「iが更新されないためループが抜けられない(無限ループ)」です。
よくある誤解
- 初期値を1にしても問題ないと考える誤解:合計変数を1で初期化すると期待結果より1大きくなる(オフ・バイ・ワン)。
- 判定条件の向きや記号の意味の混同:図の「≦」と「>」の配置を誤解して反対の枝を辿ると、意図したループが実現できない。
- 変数の役割混同:xは累積和、iはループカウンタという役割を取り違え、代入文を誤る(例: のようにカウンタを書き換える)。
補足コラム
- 1からnまでの和は公式 によって計算できます。n=100なら です。アルゴリズム的には累積変数を0で初期化してカウンタを1からnまで増やす方法が基本です。
- 同じ処理を簡潔な疑似コードで表すと次のようになります。
x = 0
i = 1
while i <= 100:
x = x + i
i = i + 1
# x は 5050
FAQ
Q1. なぜ累積変数を0で初期化するのですか?
A1. 足し算の単位元は0のため、何も足していない状態を正確に表すには0が必要です。1で初期化すると初めから余分な1が加わります。
A1. 足し算の単位元は0のため、何も足していない状態を正確に表すには0が必要です。1で初期化すると初めから余分な1が加わります。
Q2. カウンタを0から始めて100までにすれば初期値は変わりますか?
A2. 例えば i=0 から i≤100 で回す場合、ループ回数は101回になり合計は となり目的の合計とは異なります。取り扱う範囲に合わせて初期値と条件を設計する必要があります。
A2. 例えば i=0 から i≤100 で回す場合、ループ回数は101回になり合計は となり目的の合計とは異なります。取り扱う範囲に合わせて初期値と条件を設計する必要があります。
Q3. 図の判定記号「≦」「>」を逆に解釈してしまった場合は?
A3. 判定の向きが逆だとループの継続条件が変わり、早期に終了したり無限ループになったりするため、図中の分岐記号の意味をまず正確に読むことが重要です。
A3. 判定の向きが逆だとループの継続条件が変わり、早期に終了したり無限ループになったりするため、図中の分岐記号の意味をまず正確に読むことが重要です。
関連キーワード: フローチャート、累積和、ループ初期化、オフバイワン、ループ不変量、疑似コード、合算アルゴリズム

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

