38PM59|第38回 臨床工学技士国家試験 過去問
図のフローチャートでaに20を入力したとき、出力Sはどれか。 ただし、(a mod 2)はaを2で割った余りを表す。

解答・解説を見る
正解: 3
正答
3
この問題のポイント
この問題では、フローチャートを上から順に追い、変数aとSがどのように変化するかを読み取ります。
図では、aに20を入力した後、
- S ← 0
- a ≧ 1 なら処理を続ける
- aが偶数なら S ← S + a
- その後、a ← a - 1
- aが1未満になったらSを出力
という流れです。
つまり、a = 20から1までのうち、偶数だけをSに加える処理です。
解説
まず、aに20を入力し、Sを0にします。
- a = 20
- S = 0
次に、フローチャートではaが1以上である限り処理を続けます。
判定式
- (a mod 2) = 0
は、aを2で割った余りが0かどうかを見ています。
余りが0なら、aは偶数です。したがって、そのときだけ
- S ← S + a
を実行します。
その後、偶数でも奇数でも
- a ← a - 1
を実行して、再びa ≧ 1の判定に戻ります。
aは20から1まで1ずつ減っていくため、Sに加えられるのは次の偶数です。
- 20
- 18
- 16
- 14
- 12
- 10
- 8
- 6
- 4
- 2
したがって、
- S = 20 + 18 + 16 + 14 + 12 + 10 + 8 + 6 + 4 + 2
- S = 2 × (10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1)
- S = 2 × 55
- S = 110
よって、出力Sは110です。
図で見るポイント
「(a mod 2) = 0」の判定がyesのときだけSにaを加えます。つまり、偶数だけを合計する処理です。
ひっかけポイント
aが奇数のときはSに加えませんが、a ← a - 1は実行されます。奇数を飛ばしても、aは必ず1ずつ減っていきます。
選択肢の確認
1.誤り。
90は、20から2までの偶数の一部を足し忘れた場合などに近い値です。20、18、16、14、12、10、8、6、4、2をすべて加えます。
2.誤り。
100は、偶数の合計を途中で誤って計算した場合に出やすい値です。正しくは110です。
3.正しい。
20から2までの偶数をすべて加えると、20 + 18 + 16 + 14 + 12 + 10 + 8 + 6 + 4 + 2 = 110となります。
4.誤り。
210は、1から20までのすべての整数を合計した値です。このフローチャートでは偶数だけを加えるため、210にはなりません。
5.誤り。
220は、偶数の合計を2倍にしたような値です。Sに加える処理は各偶数につき1回だけです。
覚えるポイント
- modは割り算の余りを表します。
- (a mod 2) = 0 なら、aは偶数です。
- このフローチャートは、20から1までの偶数だけを合計します。
- 20 + 18 + 16 + 14 + 12 + 10 + 8 + 6 + 4 + 2 = 110です。
- フローチャート問題では、条件分岐と繰り返しの戻り先を丁寧に追います。