次の2つは、条件がまったく同じです。それなのに、90点の人に出る結果が違います。
いまだけ無料PR|Udemy の講座擬似言語が読めずに止まるなら1行ずつ値を追う「科目B 基礎講義」0円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 文はここまで」の印
先に、名前ではなく動きから押さえます。
if から endif までが1つの if 文(選択処理)です。条件式を評価して、実行する処理を選びます。そして endif は、「この if 文はここで終わり」という印です。
終わったら、まっさらに戻る
endif を通り過ぎたら、その if 文でどの処理を選んだかは、もう関係なくなります。次の行からは、何も引きずらずに再開します。
「さっき優って出したな」とは覚えていません。プログラムは、そういう気の利き方をしません。
だから if … endif を2つ並べて書くと、if 文が2つできます。2つ目は1つ目の結果を知らないので、自分の条件だけを見て、独立に判断します。
いっぽう elseif は、if 文を終わらせずに、条件式と処理の組を増やす書き方です。endif がまだ来ていないので、ぜんぶで1つの if 文のままです。
同じ条件でも、elseif でつないだか if 文を分けたかで、実行される処理の数が変わる
A は1つの if 文(elseif でつなぐ)、B は if 文を2つ並べた形です。見分ける目印は endif の数です。
具体例 ── 90点のとき、1行ずつ何が起きるか
言葉だけだと分かりにくいので、実際に1行ずつ追います。
B(if 文を2つ並べた形)の場合
| 調べる行 | 何を調べるか | 結果 |
|---|---|---|
if (点数 > 80) |
90 > 80 を調べる | 真。中へ入る |
endif |
1つ目の if 文が終わる | ここでリセット |
if (点数 > 60) |
90 > 60 を調べる | 真。中へ入る |
「優」を出したことは、2つ目の if に伝わっていません。だから 90 > 60 も素直に調べて、真なので「良」も出ます。
A(1つの if 文)の場合
| 行 | 何をするか | 結果 |
|---|---|---|
if (点数 > 80) |
90 > 80 を調べる | 真。中へ入る |
"優" を出力する |
出力する | 「優」 |
elseif (点数 > 60) |
─ | 調べない |
endif |
if 文が終わる | ─ |
elseif (点数 > 60) は、偽だったのではありません。調べてすらいません。
90 > 60 は真です。それでも見に行かない。すでに上の条件式が真になって処理を実行したので、この if 文でやることは済んでいるからです。
実際に動かして確かめます。前半(A)と後半(B)を、同じ 点数 = 90 で続けて実行します。出力を見比べてください。
1つの if 文と、if 文を並べた形 ── 同じ 点数 = 90 で比べる
当サイトオリジナル
ループ開始前
いま計算していること
変数の状態
出力
トレース表(進めると1行ずつ積み上がります)
なぜ大事か ── 出題では、ここが空欄になる
この違いは、知識として問われるのではありません。プログラムの一部が空欄になり、選択肢に if のものと elseif のものが並ぶ形で出ます。
出典:令和6年度 基本情報技術者試験 科目B 公開問題 問1(プログラムの一部)
if ( )
return x
elseif (y > z)
return y
この形が読めると、空欄を考える前に分かることがあります。
空欄の下に elseif がある、ということは
1つの if 文です。だから 上の条件式が真なら、下の elseif は評価されません。
つまり、elseif (y > z) の行に進めたということ自体が、「空欄の条件は偽だった」という情報になります。空欄に何を入れるかを考えるとき、この情報がそのまま手がかりになります。
どちらを選ぶか ── 日本語で決まる
迷ったら、やりたいことを日本語で言ってみてください。言い方で決まります。
| やりたいことの言い方 | 使うもの | 例 |
|---|---|---|
| 「どれか1つだけ」 どれに当てはまるか |
1つの if 文 ( elseif でつなぐ) |
ランク分け・等級・区分・判定 |
| 「当てはまるもの全部」 それぞれ別に確かめたい |
if 文を並べる ( if … endif を2つ以上) |
チェック項目・条件ごとの加算 |
ランク分け・区分け・分類は、ほぼ必ず1つの if 文(elseif でつなぐ形)です。並んだ if で書かれていたら、それは重複して当てはまることを許しているというサイン ── つまり、書いた人がわざとそうしています。
練習
在庫が120 のとき、次のプログラムは何を出力しますか。
if (在庫 > 100) "多い" を出力する elseif (在庫 > 50) "普通" を出力する endif
金額が6000 のとき、次のプログラムは何を出力しますか。
if (金額 > 5000) "送料無料" を出力する endif if (金額 > 3000) "送料半額" を出力する endif
次の2つのうち、if を2つ並べて書くべきなのはどちらですか。
① 点数が80以上なら "優"、そうでなく60以上なら "良" ② 身長が150以上ならチェック、体重が40以上ならチェック
書き方の一覧
| 1つの if 文 | if 文を並べる | |
|---|---|---|
| 書き方 | elseif でつなぐ |
if … endif を並べる |
endif の数 |
1つ | 並べた数だけ |
| 実行される処理 | 1つだけ | 当てはまるだけいくつでも |
| 上の条件式が真のとき、下の条件式は | 評価されない | 評価される |
| 向いている場面 | ランク分け・区分け・判定 | チェック項目・条件ごとの加算 |
次に読む
> と ≧ の境界入口擬似言語の読み方 ─ 記号と書き方の一覧目次基本情報技術者試験 科目B 攻略ガイドこの記事で引用した資料
- 擬似言語の記述形式 IPAが公開している科目Bの公開問題・サンプル問題(PDF)の冒頭に掲載。名称は年度により「基本情報技術者試験用」と「基本情報技術者試験,応用情報技術者試験用」があるが、本文は同一
- 令和6年度 基本情報技術者試験 科目B 公開問題(2024年7月5日公開)
いずれも独立行政法人情報処理推進機構(IPA)が公表したものです。IPAは公表済みの試験問題について、教育目的での使用に許諾および使用料を不要としていますが、著作権は放棄していません。本記事では、引用した箇所の文言を改変していません(省略や補いがある場合は、その場に明記しています)。
点数からランクを決める例と、シミュレータのプログラムは当サイトのオリジナルです。

