資格ナビ電験三種の演習へ

機械

電験三種 令和7年度下期 機械 問14

問題・正答・学習用解説

問題

次のフローチャートに従って作成したプログラムを実行したとき,印字される A,B の値として,正しい組合せを次の(1)〜(5)のうちから一つ選べ。問14の図1問14の選択肢の図表

選択肢

  1. (1)
    (1)
  2. (2)
    (2)
  3. (3)
    (3)
  4. (4)
    (4)
  5. (5)
    (5)

正答と解説

正答:(3)

正答の考え方

正解は(3)です。初期値は A=10\displaystyle A=10,B=2\displaystyle B=2。処理の流れは『A←A+B を実行 → A≤40\displaystyle A\le 40 なら(YES)B←2B+1 として先頭の A←A+B へ戻る → A≤40\displaystyle A\le 40 でなくなったら(NO)A,B を印字』です。順に追います。 1回目:A=10+2=12\displaystyle A=10+2=12,12≤40\displaystyle 12\le 40 なので YES,B=2×2+1=5\displaystyle B=2\times 2+1=5。 2回目:A=12+5=17\displaystyle A=12+5=17,17≤40\displaystyle 17\le 40 なので YES,B=2×5+1=11\displaystyle B=2\times 5+1=11。 3回目:A=17+11=28\displaystyle A=17+11=28,28≤40\displaystyle 28\le 40 なので YES,B=2×11+1=23\displaystyle B=2\times 11+1=23。 4回目:A=28+23=51\displaystyle A=28+23=51,51≤40\displaystyle 51\le 40 ではない(NO)ので,ここでループを抜けて印字。 この時点で A=51\displaystyle A=51,B は3回目の更新後の23です。よって印字されるのは A=51\displaystyle A=51,B=23\displaystyle B=23 で,(3)が正解です。

各選択肢の解説

選択肢1

A=43\displaystyle A=43,B=26\displaystyle B=26 は各反復の A・B の計算が合いません。正しくは A は 12→17→28→51 と進み,40 を超えるのは51の時点で,そのときの B は23です。

選択肢2

A=51\displaystyle A=51 は正しいものの B=47\displaystyle B=47 が誤りです。B=47\displaystyle B=47 は2×23+1=47\displaystyle 2\times 23+1=47,すなわち4回目に B も更新したとした値ですが,4回目は A=51\displaystyle A=51 で判定が NO となり B は更新されないため,B は3回目の23のまま据え置かれます。

選択肢4

A=98\displaystyle A=98 まで進めるのは判定条件の取り違えです。A=51\displaystyle A=51 の時点で A≤40\displaystyle A\le 40 が不成立となりループを抜けるため,それ以上 A は増えません。98 はループ脱出を見落とした誤りです。

選択肢5

A=98\displaystyle A=98,B=95\displaystyle B=95 も判定条件(A≤40\displaystyle A\le 40なら継続、A>40で脱出)を取り違えてさらに反復を続けた誤りです。正しくは A=51\displaystyle A=51 で抜け,A=51\displaystyle A=51,B=23\displaystyle B=23 となります。

周辺知識

フローチャートのトレース(机上実行)は,変数の値を表にして1ステップずつ追うのが確実です。ポイントは三つ。第一に『代入文 A←A+B は右辺を先に計算してから左辺へ入れる』こと。第二に『判定(ひし形)で YES と NO のどちらへ進むか,条件の不等号の向きと等号の有無(≦か<か)を正確に読む』こと。本問は A≤40\displaystyle A\le 40 が成立する間ループし,成立しなくなった瞬間(A=51)\displaystyle A=51)に抜けるので,抜けた時点の A は40を超えた最初の値です。第三に『ループを抜けるとき B が何回更新済みか』を取り違えないこと。A の更新と B の更新は同じ反復内で行われますが,最後の反復では A を更新して判定で NO になりそのまま印字へ抜けるため,B はその回では更新されず一つ前(3回目)の23のままになります。この『最後にどちらが更新されてどちらが据え置きか』が選択肢を分ける典型的な引っかけです。表を作って A:12,17,28,51 と B:5,11,23 を並べ,A が40を超えた行で止める,と機械的に処理すればミスを防げます。プログラム問題は知識より丁寧なトレースが得点源で,焦らず一行ずつ書き出すのが鉄則です。