図のフローチャートを開始から終了まで実行してsに1から3までの整数の和を得たい。 ①に入る記号はどれか。

選択肢をタップすると答えと解説が表示されます
出典:厚生労働省ホームページ(第70回臨床検査技師国家試験の問題および正答)。公共データ利用規約(第1.0版)に基づき利用。問題文・選択肢・図は公式の問題冊子のとおり掲載しています(文字の体裁を一部整え、図は冊子から切り出しています)。解説は medimichi が作成したものです。
正解は2番
解説
このフローチャートは、変数iを1から3まで変化させながら、その値を変数sに累積加算することで合計値を求める構造になっています。初期値としてs=0、i=1が設定されています。ループの判定箇所①で『i ≦ 3』という条件を用いることで、iが1の時、2の時、3の時のいずれも条件が真となり、sにそれぞれのiの値が加算されます。iが3まで加算された後、iは4にインクリメントされます。次に判定箇所に戻った際、i=4に対して『4 ≦ 3』は偽となるため、ループが終了し、sには1+2+3=6という正しい結果が格納されます。他の選択肢では、ループが正しく実行されなかったり、目的の範囲まで加算が行われなかったりします。
選択肢ごとの解説
- 1. この条件では、iが3になる前にループが終了してしまいます。具体的には、iが1と2の場合にのみ処理が実行され、iが3の時には条件『i < 3』が偽となるため、3が加算されません。結果として、sの値は1+2=3となり、目標の6になりません。正しくは:『i <= 3』に変更するか、ループの終了値を『i < 4』とする必要があります。選びやすい理由:プログラミングにおいて、ループ条件で『より小さい(<)』を用いることは一般的であるため、選びやすいかもしれません。混同注意:『以上/以下(<= / >=)』と『より大きい/小さい(> / <)』のどちらを使うか、あるいはループの終了値(境界条件)の設定で混乱することがあります。
- 2. 正解。この条件『i ≦ 3』は、iが1, 2, 3のいずれかの値である場合に真となり、ループ内の処理(sへの加算とiのインクリメント)が実行されます。iが1のときsに1、iが2のときsに2、iが3のときsに3がそれぞれ加算され、合計で1+2+3=6がsに格納されます。iが4になった時点で『i ≦ 3』は偽となるため、ループが終了し、期待通りの結果が得られます。
- 3. この条件では、iが最初に1であるため、『i = 3』は偽となり、ループは一度も実行されずに終了してしまいます。sの値は初期値の0のままになります。正しくは:ループを継続させるためには、範囲を表す比較演算子(≦や<)を使用する必要があります。選びやすい理由:条件分岐で特定の値と一致するかどうかを判断する際に『等しい(=)』を使用することはありますが、ループの継続条件としては不適切です。混同注意:条件判断における『等しい(=または==)』と、ループの範囲を定義する『比較演算子(<, <=, >, >=)』の使い分けで混乱することがあります。
- 4. この条件では、iが最初に1であるため、『i > 3』は偽となり、ループは一度も実行されずに終了してしまいます。sの値は初期値の0のままになります。正しくは:ループを継続させるためには、iが3以下の場合に真となるような条件(≦や<)を使用する必要があります。選びやすい理由:ループの終了条件として『カウンタが特定の値を超えたら終了』という考え方があるため、逆向きの比較として誤って選んでしまうかもしれません。混同注意:ループの開始条件と終了条件、またそれらの条件で用いる不等号の向きや厳密さ(厳密な不等号か否か)を混同しやすいです。
- 5. この条件では、iが最初に1であるため、『i ≧ 3』は偽となり、ループは一度も実行されずに終了してしまいます。sの値は初期値の0のままになります。正しくは:ループを継続させるためには、iが3以下の場合に真となるような条件(≦や<)を使用する必要があります。選びやすい理由:『以上(≧)』という条件は、ループの終了点を含む場合に用いられることがありますが、この場合はループの継続条件として不適切です。混同注意:『以上/以下(<= / >=)』と『より大きい/小さい(> / <)』のどちらを使うか、あるいはループの終了値(境界条件)の設定で混乱することがあります。
国試ポイント
フローチャートにおけるループ処理の理解、特にループの継続条件(終了条件)の記述方法とその境界値の扱いの正確さが問われています。プログラミングの基礎的な知識であり、臨床検査システムのロジックを理解する上で重要です。
混同注意
ループ条件における『<』と『≦』の使い分け、および『>』と『≧』の使い分け。特に、ループが『n回実行される』場合に、カウンタの初期値や終了値に応じてどの比較演算子を選ぶべきかで『オフバイワンエラー(off-by-one error)』を起こしやすいです。
次に同じ論点が出たら
同様の問題が出た場合は、まずループで処理したい値の範囲(この場合は1から3)と、カウンタ変数の初期値(この場合は1)を確認します。次に、その範囲の最初の値と最後の値が、提示された条件式でそれぞれ『真』となりループが実行されるか、そして範囲外の値になった際に『偽』となりループが終了するかを、具体的な数値を入れて一つずつシミュレーション(トレース)して確認することが重要です。
関連知識
プログラミングにおける基本的な制御構造(順次処理、条件分岐、繰り返し処理)、フローチャートの各記号の意味(開始/終了、処理、判断)、カウンタ変数やアキュムレータ変数の概念。情報科学の基礎知識です。