擬似言語の elseif と、if を並べる違い|同じ条件なのに結果が変わる【基本情報技術者試験 科目B】

基本情報技術者試験

現行FE シラバス Ver9.2 準拠擬似言語の記述形式は2022年から変更なし最終更新 2026-08-20

次の2つは、条件がまったく同じです。それなのに、90点の人に出る結果が違います。

A

if (点数 > 80)
  "優" を出力する
elseif (点数 > 60)
  "良" を出力する
endif

B

if (点数 > 80)
  "優" を出力する
endif
if (点数 > 60)
  "良" を出力する
endif

90点のとき、A は「優」だけ。B は「優」と「良」の両方が出ます。

この違いは、実際の試験でそのまま問われます。選択肢に if のものと elseif のものが並んでいて、どちらかを選ばせる出題です。

なぜ結果が変わるのかと、どちらを選べばいいのかを、順に見ていきます。

先に知っておくこと

if そのものの読み方(もし〜なら)が不安なら、先に 選択処理 if / elseif / else を見てください。この記事は、そこから1点だけを取り出して詳しく扱います。

意味 ── endif は「この分かれ道はここまで」の印

先に、名前ではなく動きから押さえます。

if は分かれ道です。条件を見て、進む道を選びます。そして endif は、「この分かれ道はここで終わり」という印です。

終わったら、まっさらに戻る

endif を通り過ぎたら、分かれ道はもう無かったことになります。次の行からは、何も引きずらずに再開します。

「さっき優って出したな」とは覚えていません。プログラムは、そういう気の利き方をしません。

だから if … endif を2つ並べて書くと、分かれ道が2つできます。2つ目は1つ目の結果を知らないので、自分の条件だけを見て、独立に判断します。

いっぽう elseif は、分かれ道を終わらせずに、道を増やす書き方です。endif がまだ来ていないので、ぜんぶで1つの分かれ道のままです。

elseif でつなぐと分かれ道は1つで、通れるのは1本だけ。if を並べると分かれ道が別々になり、両方通れる

同じ条件でも、つないだか切ったかで通る道の数が変わる

言い方をそろえておきます

ここから先、A を「ひとつの分かれ道」、B を「別々の分かれ道」と呼びます。elseif や endif という名前より、この2つの違いのほうが大事です。

具体例 ── 90点のとき、1行ずつ何が起きるか

言葉だけだと分かりにくいので、実際に1行ずつ追います。

B(別々の分かれ道)の場合

調べる行 何を調べるか 結果
if (点数 > 80) 90 > 80 を調べる 真。中へ入る
endif 1つ目の分かれ道が終わる ここでリセット
if (点数 > 60) 90 > 60 を調べる 真。中へ入る

「優」を出したことは、2つ目の if に伝わっていません。だから 90 > 60 も素直に調べて、真なので「良」も出ます。

A(ひとつの分かれ道)の場合

行 何をするか 結果
if (点数 > 80) 90 > 80 を調べる 真。中へ入る
"優" を出力する 出力する 「優」
elseif (点数 > 60) ─ 調べない
endif 分かれ道が終わる ─
ここがいちばん大事

elseif (点数 > 60) は、偽だったのではありません。調べてすらいません。

90 > 60 は真です。それでも見に行かない。すでに上の道に入ったので、この分かれ道での用事は済んでいるからです。

実際に動かして確かめます。前半(A)と後半(B)を、同じ 点数 = 90 で続けて実行します。出力を見比べてください。

ひとつの分かれ道と、別々の分かれ道 ── 同じ 点数 = 90 で比べる

当サイトオリジナル


ループ開始前

いま計算していること

まだ計算していません

変数の状態

トレース表(進めると1行ずつ積み上がります)

なぜ大事か ── 出題では、ここが空欄になる

この違いは、知識として問われるのではありません。プログラムの一部が空欄になり、選択肢に if のものと elseif のものが並ぶ形で出ます。

出典:令和6年度 基本情報技術者試験 科目B 公開問題 問1(プログラムの一部)

  if (  )
    return x
  elseif (y > z)
    return y

この形が読めると、空欄を考える前に分かることがあります。

空欄の下に elseif がある、ということは

ひとつの分かれ道です。だから 上の道に入ったら、下の elseif は調べられません。

つまり、elseif (y > z) の行に進めたということ自体が、「空欄の条件は偽だった」という情報になります。空欄に何を入れるかを考えるとき、この情報がそのまま手がかりになります。

どちらを選ぶか ── 日本語で決まる

迷ったら、やりたいことを日本語で言ってみてください。言い方で決まります。

やりたいことの言い方 使うもの 例
「どれか1つだけ」
どれに当てはまるか
ひとつの分かれ道
(elseif でつなぐ)
ランク分け・等級・区分・判定
「当てはまるもの全部」
それぞれ別に確かめたい
別々の分かれ道
(if を並べる)
チェック項目・条件ごとの加算
見分けの目印

ランク分け・区分け・分類は、ほぼ必ず「ひとつの分かれ道」です。並んだ if で書かれていたら、それは重複して当てはまることを許しているというサイン ── つまり、書いた人がわざとそうしています。

練習

在庫が120 のとき、次のプログラムは何を出力しますか。

if (在庫 > 100)
  "多い" を出力する
elseif (在庫 > 50)
  "普通" を出力する
endif

金額が6000 のとき、次のプログラムは何を出力しますか。

if (金額 > 5000)
  "送料無料" を出力する
endif
if (金額 > 3000)
  "送料半額" を出力する
endif

次の2つのうち、if を2つ並べて書くべきなのはどちらですか。

① 点数が80以上なら "優"、そうでなく60以上なら "良"
② 身長が150以上ならチェック、体重が40以上ならチェック

書き方の一覧

ひとつの分かれ道 別々の分かれ道
書き方 elseif でつなぐ if … endif を並べる
endif の数 1つ 並べた数だけ
通れる道 1本だけ 当てはまるだけ何本でも
上に入ったとき、下の条件は 調べられない 調べられる
向いている場面 ランク分け・区分け・判定 チェック項目・条件ごとの加算

次に読む

この記事で引用した資料

いずれも独立行政法人情報処理推進機構(IPA)が公表したものです。IPAは公表済みの試験問題について、教育目的での使用に許諾および使用料を不要としていますが、著作権は放棄していません。本記事では問題文を改変せずに引用しています。

点数からランクを決める例と、シミュレータのプログラムは当サイトのオリジナルです。

Copied title and URL