仮の宿 学習室 資格 基本情報技術者 合格ラボ 擬似言語の読み方
基本情報技術者 FUNDAMENTAL IT ENGINEER
擬似言語の読み方
講義 3 本・確認問題 25 問 | 本試験では「科目B」(20問)の一部 | 最終更新 2026-09-24
この章で学ぶこと 科目Bのプログラムは「擬似言語」という共通の書き方で出される。まずは記号と宣言の形を丸ごと覚えてしまおう。 if・for・while・do while の4つを覚え、変数の値を1行ずつ紙に書き出す「トレース」を身につける。 擬似言語の配列は要素番号が1から始まる。配列の走査と関数呼出し、値渡しまでを一気に押さえる。
1. 擬似言語の書き方をおぼえる
科目Bのプログラムは「擬似言語」という共通の書き方で出される。まずは記号と宣言の形を丸ごと覚えてしまおう。
科目Bで出てくるプログラムは、C言語でもPythonでもなく、IPAが決めた「擬似言語」で書かれている。文法はとても少なく、覚えることは1ページに収まる。逆に言うと、この1ページを覚えていないと問題文がまったく読めない。まずここを固めるのが最短ルートになる。
いちばん大事なのは代入の記号だ。擬似言語では代入を矢印 ← で書く。x ← 1 は「変数 x に 1 を入れる」という意味で、右辺を計算してから左辺の変数に格納する。プログラミング経験がある人ほど = を代入と読みたくなるが、擬似言語の = は「等しい」という比較の意味しかない。== という書き方は擬似言語には存在しない。
変数は使う前に「型: 名前」の形で宣言する。整数型: i、実数型: x、文字列型: s、論理型: flag のように書く。論理型に入るのは true と false の2つだけだ。値がまだ入っていない状態は「未定義の値」と表される。
比較は数学の記号をそのまま使う。等しいは =、等しくないは ≠、以下は ≦、以上は ≧、大小は > と <。条件をつなぐときは and(かつ)、or(または)、not(否定)を使う。文字列どうしの連結は + で書く。
手続と関数の宣言は ○ で始まる。戻り値がある関数は ○戻り値の型: 関数名(型: 引数, 型: 引数) と書き、戻り値がない手続は ○関数名(型: 引数) と書く。関数の中で return 値 を実行すると、その値を返してその場で関数を終える。注釈を書きたいときは /* コメント */ か // コメント を使う。
本文の途中に出てくるプログラムは、行番号つきで表示される。設問が「3行目の…」と指すことが多いので、読むときは必ず行番号を意識する習慣をつけておくとよい。
擬似言語の記述形式(これだけ覚えれば読める) 種類 書き方 手続・関数の宣言 ○戻り値の型: 関数名(型: 引数, 型: 引数) / 戻り値なしは ○関数名(型: 引数) 変数宣言 整数型: i / 実数型: x / 文字列型: s / 論理型: flag 配列宣言 整数型の配列: a / 整数型の二次元配列: m 代入 x ← 1 / 配列リテラルは a ← {1, 2, 3} 条件分岐 if (条件) … elseif (条件) … else … endif 繰返し(回数) for (i を 1 から 10 まで 1 ずつ増やす) … endfor 繰返し(条件) while (条件) … endwhile / do … while (条件) 戻り値 return 値 論理演算 and / or / not 比較 = / ≠ / ≦ / ≧ / > / < コメント /* コメント */ / // コメント 未定義 未定義の値
宣言・代入・比較・論理演算・関数宣言・return がひととおり入った例
// 2つの整数のうち大きいほうを返す関数 ○整数型: larger(整数型: a, 整数型: b) if (a ≧ b) return a endif return b ○main() 整数型: x 整数型: y 文字列型: s 論理型: flag x ← 3 y ← x + 4 /* y は 7 になる */ flag ← (x ≠ y) and not (x > y) s ← "答えは" + "7" 出力(larger(x, y))
用語 擬似言語 IPAが試験用に定めた、特定のプログラミング言語に依存しない記述形式。宣言・代入・分岐・繰返し・関数呼出しだけの少ない文法でできており、科目Bのアルゴリズム問題はすべてこの形式で出題される。 代入(←) 右辺の式を計算した結果を左辺の変数に格納する操作。x ← x + 1 のように、同じ変数を右辺と左辺の両方に書くこともでき、この場合は「今のxに1を足した値を新しいxにする」という意味になる。 変数宣言 使う変数の型と名前を「整数型: i」のように書いて用意すること。型には整数型・実数型・文字列型・論理型などがあり、配列は「整数型の配列: a」、二次元配列は「整数型の二次元配列: m」と書く。 論理型 true(真)と false(偽)の2つの値だけをとる型。比較式の結果は論理型になるので、flag ← (x > 5) のように比較結果をそのまま変数に入れられる。ifの条件に書けるのは論理型の値だけである。 比較演算子 2つの値の関係を調べて true か false を返す記号。等しい=、等しくない≠、以下≦、以上≧、より大きい>、より小さい<の6種類。C言語のような != や <> や == は擬似言語では使わない。 手続と関数 処理に名前をつけてまとめたもの。戻り値があるものを関数といい ○整数型: f(整数型: n) のように戻り値の型を書く。戻り値がないものを手続といい ○出力(整数型: n) のように型を書かない。 return 関数の中で「この値を呼び出し元に返して関数を終える」ことを表す文。return より後ろの行は実行されない。分岐の中に複数のreturnがあるプログラムでは、最初に到達したreturnだけが実行される。
例題
例題:上のプログラムの14行目で y の値はいくつになるか。
x ← 3 y ← x + 4 答えと考え方 7 になる。← は右辺を先に計算してから左辺に入れる記号なので、x + 4 = 3 + 4 = 7 が y に格納される。13行目で x に 3 が入っていることを見落とさないこと。
例題:flag ← (x ≠ y) and not (x > y) を x が 3、y が 7 のときに評価するとどうなるか。
論理型: flag flag ← (x ≠ y) and not (x > y) 答えと考え方 true になる。x ≠ y は 3 ≠ 7 なので true、x > y は 3 > 7 なので false で、not false は true。true and true なので flag は true。and は両方が true のときだけ true になる。
例題:次のプログラムで、a が 5、b が 5 のとき return されるのはどちらか。
○整数型: larger(整数型: a, 整数型: b) if (a ≧ b) return a endif return b 答えと考え方 a のほう(5)が返る。a ≧ b は 5 ≧ 5 で true なので return a が実行され、そこで関数は終わる。return より後ろの return b には決して到達しない。
出典・根拠:IPA 基本情報技術者試験 試験要綱 Ver.5.6 出題範囲(科目B試験)アルゴリズムとプログラミング/IPA「試験で使用する情報技術に関する用語・プログラム言語など」Ver.5.1 別紙2 擬似言語の記述形式
2. 分岐と繰返しを追う
if・for・while・do while の4つを覚え、変数の値を1行ずつ紙に書き出す「トレース」を身につける。
分岐は if (条件) で始まり endif で終わる。条件が成り立たないときの別の条件は elseif (条件)、どれにも当てはまらない場合は else に書く。elseif と else は省略できるが、endif は必ず必要だ。上から順に条件を調べ、最初に true になった枝だけを実行して endif の後ろへ飛ぶ。だから if (x > 10) の次に elseif (x > 5) と書いてあれば、後者は「10以下で5より大きい」ときにだけ実行される。
回数が決まっている繰返しは for (i を 1 から 10 まで 1 ずつ増やす) … endfor と書く。この for は終わりの値10を含むので、10回まわる。増やす量は 1 でなくてもよく、「1 から 10 まで 3 ずつ増やす」なら i は 1, 4, 7, 10 の4回になる。逆向きに数えるときは「10 から 1 まで 1 ずつ減らす」と書く。
条件で回る繰返しは while (条件) … endwhile と do … while (条件) の2つがある。while は先に条件を調べる前判定なので、最初から条件が false なら本体は1回も実行されない。do while は本体を実行してから条件を調べる後判定なので、必ず1回は実行される。この違いを問う問題は頻出なので、どちらの形かを最初に確認する。
繰返しから途中で抜けたいときは、擬似言語に break のような専用の文が用意されていないことが多い。代わりに「見つけたら true にする論理型の変数」や「見つけた位置を入れる変数」を用意し、while (i ≦ 上限 and 見つかっていない) のように条件へ組み込むのが定番の書き方になる。
プログラムを読むコツは、頭の中で追わずに紙に表を書くことだ。表の列に変数名を並べ、1行実行するごとに変わった変数の値だけを書き足していく。これをトレースという。特に繰返しでは、ループに入る直前の値・1回目終了時の値・2回目終了時の値…と機械的に並べると、間違いがはっきり見える。
トレースで事故が起きやすいのは3か所ある。ループ本体を最後に何回実行したか(終わりの値を含むか)、条件を調べるのが本体の前か後か、そして代入の順序だ。x ← y の直後に y ← x と書いても値は入れ替わらない。入替えには一時変数がいる。
繰返し3種類の違い(同じ条件でも回数が変わる) 書き方 条件を調べる位置 最小の実行回数 向いている場面 for (i を a から b まで n ずつ増やす) 本体の前(回数は最初に決まる) 0回(aがbを超えていれば) 回数が分かっている繰返し while (条件) … endwhile 本体の前(前判定) 0回 条件が成り立つ間だけ続ける do … while (条件) 本体の後(後判定) 1回 まず1回やってから続けるか決める
for と if を組み合わせた例(sum の最終値をトレースで求める)
整数型: i 整数型: sum sum ← 0 for (i を 1 から 5 まで 1 ずつ増やす) if (i > 3) sum ← sum + i × 2 else sum ← sum + i endif endfor
用語 if / elseif / else / endif 条件分岐の構文。上から順に条件を評価し、最初に true になった枝だけを実行して endif の後ろへ進む。どの条件も false で else があれば else の中を実行し、else がなければ何も実行しない。 for(回数繰返し) 「for (i を 1 から 10 まで 1 ずつ増やす)」の形で、繰返しの回数があらかじめ決まっている構文。終わりの値も含めて実行されるので、1から10までなら10回まわる。増分を変えたり「1 ずつ減らす」と書いて逆順にもできる。 while(前判定) 条件を先に調べてから本体を実行する繰返し。条件が最初から false なら本体は0回しか実行されない。本体の中で条件に使う変数を必ず変化させないと、無限ループになる点に注意する。 do while(後判定) 本体を実行してから条件を調べる繰返し。条件の成否にかかわらず本体は最低1回実行される。同じ条件でも while より実行回数が1回多くなることがあり、その差が設問になりやすい。 トレース プログラムを1行ずつ実行したつもりで、変数の値の変化を表に書き出す作業。ループ1周ごとに値を並べると、境界での回数のずれや条件の判定ミスが目に見える形で分かる。科目Bで最も確実な解き方である。 多重ループ 繰返しの中に別の繰返しが入っている構造。内側は外側が1周するたびに最初からやり直される。外側がm回、内側がn回なら本体は m×n 回実行されるが、内側の回数が外側の変数に依存する場合は回数を足し上げる必要がある。 ループの脱出 条件を満たした時点で繰返しを終える書き方。擬似言語では専用の文を使わず、論理型の見つけたフラグや位置を表す変数を用意し、while の条件に and で組み込んで抜けるのが一般的である。
例題
例題:上のプログラムを1周ずつトレースすると sum はどう変化するか。
/* トレース表 i : 1 2 3 4 5 sum: 1 3 6 14 24 */ 答えと考え方 ループ前 sum=0。i=1: 1>3 は false なので sum=0+1=1。i=2: false なので sum=1+2=3。i=3: false なので sum=3+3=6。i=4: 4>3 は true なので sum=6+8=14。i=5: true なので sum=14+10=24。最終値は 24。表にすると (i, sum) = (1,1) (2,3) (3,6) (4,14) (5,24) となる。
例題:次の2つのプログラムで、cnt の最終値はそれぞれいくつか。
/* 前判定 */ x ← 100 cnt ← 0 while (x < 10) cnt ← cnt + 1 endwhile /* 後判定 */ x ← 100 cnt ← 0 do cnt ← cnt + 1 while (x < 10) 答えと考え方 左(while)は 0、右(do while)は 1。while は先に x < 10 を調べるが x は 100 なので本体に入らない。do while は本体を先に実行するので cnt が 1 になり、その後で条件を調べて終わる。前判定と後判定の差がそのまま1回分の差になる。
例題:次の多重ループで、5行目は何回実行されるか。
整数型: i 整数型: j for (i を 1 から 3 まで 1 ずつ増やす) for (j を 1 から i まで 1 ずつ増やす) cnt ← cnt + 1 endfor endfor 答えと考え方 6回。外側の i が 1 のとき内側の j は 1 の1回、i が 2 のとき j は 1, 2 の2回、i が 3 のとき j は 1, 2, 3 の3回まわるので、1+2+3 = 6 回になる。内側の終わりの値が外側の変数 i なので、単純な掛け算(3×3=9)にはならない点に注意する。
例題:配列から最初に 4 が現れる位置を求めたい。break を使わずにどう書くか。
pos ← 0 i ← 1 while (i ≦ aの要素数 and pos = 0) if (a[i] = 4) pos ← i endif i ← i + 1 endwhile 答えと考え方 見つけた位置を入れる変数 pos を 0 で初期化し、while の条件に「pos = 0」を and でつなぐ。4 を見つけると pos に位置が入り、次の条件判定で pos = 0 が false になるのでループが終わる。これが擬似言語での途中脱出の定番の形である。
出典・根拠:IPA 基本情報技術者試験 試験要綱 Ver.5.6 出題範囲(科目B試験)アルゴリズムとプログラミング/IPA「試験で使用する情報技術に関する用語・プログラム言語など」Ver.5.1 別紙2 擬似言語の記述形式
3. 配列と関数を読む
擬似言語の配列は要素番号が1から始まる。配列の走査と関数呼出し、値渡しまでを一気に押さえる。
配列は「整数型の配列: a」と宣言し、a ← {4, 9, 2, 7} のように波かっこで中身をまとめて入れられる。ここでいちばん重要なのは、擬似言語の要素番号が1から始まることだ。a[1] が先頭の 4 で、a[4] が末尾の 7 になる。多くのプログラミング言語は0から始まるので、経験者ほど1つずれる間違いをしやすい。
配列の長さは「aの要素数」と書く。この書き方を使うと、for (i を 1 から aの要素数 まで 1 ずつ増やす) と書くだけで、要素の個数が変わっても全部の要素を先頭から順に処理できる。この形が配列の走査の基本形で、科目Bのほとんどの配列問題はこの形の変形にすぎない。
二次元配列は「整数型の二次元配列: m」と宣言し、m ← {{1, 2, 3}, {4, 5, 6}} のように行を並べて書く。要素は m[行][列] の順で指定し、こちらも行・列とも1から数える。この例では m[1][3] が 3、m[2][1] が 4 になる。表を上から下へ、左から右へ読むイメージで添字を追うとよい。
関数は ○整数型: total(整数型の配列: a) のように、引数にも型を書いて宣言する。配列も引数として渡せる。呼び出す側は total(x) のように書き、return で返ってきた値をそのまま式の中で使える。戻り値のない手続は値を返さないので、代入の右辺には書けない。
関数の中で宣言した変数は、その関数の中でしか使えない。これを変数のスコープという。別の関数に同じ名前の変数があっても、それらは無関係の別物として扱われる。だから関数の中身を読むときは、その関数の中だけを見ればよい。
引数の渡し方は値渡しが基本だ。呼び出すときに引数の値がコピーされて関数に渡されるので、関数の中で引数の変数を書き換えても、呼び出した側の変数は変わらない。ただし配列を渡した場合は、配列そのもの(の参照)が共有され、関数の中で a[1] ← 0 のように要素を書き換えると呼び出し元にも影響することがある。設問では「配列の要素を書き換えているか」を必ず確認する。
配列 a ← {4, 9, 2, 7} の要素番号と値 書き方 指すもの 値 a[1] 先頭の要素 4 a[2] 2番目の要素 9 a[3] 3番目の要素 2 a[4] 末尾の要素 7 aの要素数 要素の個数 4 a[aの要素数] 末尾の要素(長さが変わっても正しい) 7 a[0] 存在しない(0から始まらない) ―
配列の走査と、配列を引数に取る関数の呼び出し
// 配列の中で 3 より大きい要素だけを合計する関数 ○整数型: total(整数型の配列: a) 整数型: i 整数型: s s ← 0 for (i を 1 から aの要素数 まで 1 ずつ増やす) if (a[i] > 3) s ← s + a[i] endif endfor return s ○main() 整数型の配列: x x ← {2, 5, 3, 8} 出力(total(x)) /* 5 + 8 = 13 が出力される */
用語 配列 同じ型の値を並べて番号で取り出せるようにしたもの。擬似言語では「整数型の配列: a」と宣言し、a ← {4, 9, 2, 7} と初期化する。要素の取り出しは a[i] と書き、番号は1から始まる。 要素番号は1から 擬似言語の配列は先頭が a[1]、末尾が a[要素数] である。C言語やPythonのように0から始まるわけではないので、a[0] は存在しない。走査のループも 1 から始めるのが基本形になる。 aの要素数 配列 a に入っている要素の個数を表す書き方。for (i を 1 から aの要素数 まで 1 ずつ増やす) と書けば、配列の長さに依存しない走査ができる。末尾の要素は a[aの要素数] で取り出せる。 二次元配列 行と列の2つの番号で要素を指定する配列。「整数型の二次元配列: m」と宣言し、m ← {{1, 2, 3}, {4, 5, 6}} のように書く。m[i][j] は i 行 j 列の要素で、行も列も1から数える。 走査 配列の要素を先頭から順に1つずつ調べていくこと。合計を求める、最大値を探す、条件に合う個数を数えるといった処理は、すべて走査の中で変数を更新する形で書ける。科目Bの基本パターンである。 スコープ 変数が使える範囲のこと。関数の中で宣言した変数はその関数の中だけで有効で、関数を抜けると消える。別の関数に同名の変数があっても互いに影響しないので、関数は独立した部品として読める。 値渡し 呼び出し時に引数の値をコピーして関数に渡す方式。関数の中でその引数を書き換えても、呼び出した側の変数の値は変わらない。整数や文字列を渡した場合の基本の考え方である。
例題
例題:上の total を a ← {2, 5, 3, 8} で呼んだとき、8行目は何回実行されるか。
for (i を 1 から aの要素数 まで 1 ずつ増やす) if (a[i] > 3) s ← s + a[i] endif endfor 答えと考え方 2回。i=1 は 2 > 3 が false、i=2 は 5 > 3 が true で s=5、i=3 は 3 > 3 が false(3は3より大きくない)、i=4 は 8 > 3 が true で s=13。条件が true になるのは i=2 と i=4 の2回だけである。3 が含まれないことに注意する。
例題:m ← {{1, 2, 3}, {4, 5, 6}} のとき、m[1][3] + m[2][1] はいくつか。
整数型の二次元配列: m m ← {{1, 2, 3}, {4, 5, 6}} 出力(m[1][3] + m[2][1]) 答えと考え方 7 になる。m[1] は1行目の {1, 2, 3} なので m[1][3] はその3番目で 3。m[2] は2行目の {4, 5, 6} なので m[2][1] はその1番目で 4。3 + 4 = 7。行も列も1から数えるので、m[0][0] のような書き方はしない。
例題:次のプログラムで出力される値は何か。値渡しの意味を考えて答えること。
○整数型: twice(整数型: n) n ← n × 2 return n ○main() 整数型: v 整数型: w v ← 5 w ← twice(v) 出力(v) 出力(w) 答えと考え方 5 と 10 の順で出力される。twice に渡されるのは v の値のコピーなので、関数の中で n ← n × 2 としても呼び出し元の v は 5 のままである。関数が返した値を受け取った w だけが 10 になる。引数を書き換えても呼び出し元に伝わらないのが値渡しである。
出典・根拠:IPA 基本情報技術者試験 試験要綱 Ver.5.6 出題範囲(科目B試験)アルゴリズムとプログラミング/IPA「試験で使用する情報技術に関する用語・プログラム言語など」Ver.5.1 別紙2 擬似言語の記述形式
確認問題(25問) 四肢択一。「正解と解説」を開くと、正解の理由と他の選択肢が違う理由を確認できます。
問1|代入の記号
擬似言語で「変数 x に 1 を代入する」ことを表す書き方はどれか。
x ← 1 x = 1 x := 1 1 → x 正解と解説 正解:A. x ← 1 擬似言語の代入は矢印 ← で書き、右辺を計算した値を左辺の変数に格納する。「x = 1」は擬似言語では代入ではなく「x と 1 が等しい」という比較の意味になる。「x := 1」はPascalなど他言語の代入記法、「1 → x」は関数電卓などの記法で、いずれも擬似言語では使わない。
根拠:IPA 基本情報技術者試験 試験要綱 Ver.5.6 出題範囲(科目B試験)アルゴリズムとプログラミング/IPA「試験で使用する情報技術に関する用語・プログラム言語など」Ver.5.1 別紙2 擬似言語の記述形式
問2|比較演算子
擬似言語で「x と y が等しくない」ことを表す条件式はどれか。
x != y x ≠ y x <> y x ≒ y 正解と解説 正解:B. x ≠ y 擬似言語の比較は数学の記号をそのまま使い、等しくないは ≠ と書く。ほかに = ≦ ≧ > < がある。「!=」はC言語やJavaの記法、「<>」はSQLやBASICの記法で擬似言語には存在しない。「≒」は「およそ等しい」を表す記号で、比較演算子として定義されていない。
根拠:IPA 基本情報技術者試験 試験要綱 Ver.5.6 出題範囲(科目B試験)アルゴリズムとプログラミング/IPA「試験で使用する情報技術に関する用語・プログラム言語など」Ver.5.1 別紙2 擬似言語の記述形式
問3|代入と計算
次のプログラムを実行し終えたとき、変数 x に入っている値はどれか。
代入の順に注意して読む
整数型: x 整数型: y x ← 3 y ← x + 4 x ← y × 2 6 10 14 20 正解と解説 正解:C. 14 3行目で x は 3、4行目で y は 3 + 4 = 7 になり、5行目で x に 7 × 2 = 14 が入る。6 は 3 × 2 と誤って計算した値、10 は 3 + 7 と足した値、20 は最後の x を 10 と勘違いした場合の値である。← は右辺を先に計算してから左辺へ入れる。
根拠:IPA 基本情報技術者試験 試験要綱 Ver.5.6 出題範囲(科目B試験)アルゴリズムとプログラミング/IPA「試験で使用する情報技術に関する用語・プログラム言語など」Ver.5.1 別紙2 擬似言語の記述形式
問4|値の交換
次のプログラムの実行が終わったとき、変数 a と b の値の組合せはどれか。
一時変数を使った値の入替え
整数型: a 整数型: b 整数型: t a ← 5 b ← 8 t ← a a ← b b ← t a は 5, b は 8 a は 8, b は 8 a は 5, b は 5 a は 8, b は 5 正解と解説 正解:D. a は 8, b は 5 6行目で t に a の値 5 を退避し、7行目で a に b の 8 を入れ、8行目で b に退避した 5 を戻すので a は 8、b は 5 になる。t を使わずに a ← b、b ← a と書くと 7行目で 5 が失われ、どちらも 8 になってしまう。値は交換されるので「5と8のまま」も誤り。
根拠:IPA 基本情報技術者試験 試験要綱 Ver.5.6 出題範囲(科目B試験)アルゴリズムとプログラミング/IPA「試験で使用する情報技術に関する用語・プログラム言語など」Ver.5.1 別紙2 擬似言語の記述形式
問5|ifの分岐
次のプログラムの実行が終わったとき、変数 y の値はどれか。
if・elseif・else の選ばれ方
整数型: x 整数型: y x ← 8 if (x > 10) y ← 1 elseif (x > 5) y ← 2 else y ← 3 endif 1 2 3 未定義の値 正解と解説 正解:B. 2 x は 8 なので 4行目の x > 10 は false、次に 6行目の x > 5 は true となり y ← 2 だけが実行され、残りの枝は飛ばされる。1 は最初の条件が成り立った場合の値、3 はどの条件も成り立たない場合の値。いずれかの枝は必ず実行されるので未定義にはならない。
根拠:IPA 基本情報技術者試験 試験要綱 Ver.5.6 出題範囲(科目B試験)アルゴリズムとプログラミング/IPA「試験で使用する情報技術に関する用語・プログラム言語など」Ver.5.1 別紙2 擬似言語の記述形式
問6|forの回数
次のプログラムの実行が終わったとき、繰返しの回数を数えている変数 cnt の値はどれか。
for の繰返し回数を数える
整数型: i 整数型: cnt cnt ← 0 for (i を 1 から 5 まで 1 ずつ増やす) cnt ← cnt + 1 endfor 0 4 5 6 正解と解説 正解:C. 5 for は終わりの値 5 を含むので i は 1, 2, 3, 4, 5 の5回変化し、cnt は 5 になる。4 は終わりの値を含まないと誤解した場合、6 は 0 から数え始めたと誤解した場合の値。ループ本体が一度も実行されないのは開始値が終了値を超えている場合だけなので 0 も誤り。
根拠:IPA 基本情報技術者試験 試験要綱 Ver.5.6 出題範囲(科目B試験)アルゴリズムとプログラミング/IPA「試験で使用する情報技術に関する用語・プログラム言語など」Ver.5.1 別紙2 擬似言語の記述形式
問7|forの合計
次のプログラムの実行が終わったとき、変数 sum の値はどれか。
繰返しで値を積み上げる基本形
整数型: i 整数型: sum sum ← 0 for (i を 1 から 4 まで 1 ずつ増やす) sum ← sum + i endfor 4 6 15 10 正解と解説 正解:D. 10 sum は 0 から始まり 1、3、6、10 と変化するので最終値は 10 である。6 は i を 3 までしか回さなかった場合の値、15 は 5 まで回した場合の値、4 は繰返し回数そのものである。for の終わりの値を含めるかどうかで答えが変わるので必ず確認する。
根拠:IPA 基本情報技術者試験 試験要綱 Ver.5.6 出題範囲(科目B試験)アルゴリズムとプログラミング/IPA「試験で使用する情報技術に関する用語・プログラム言語など」Ver.5.1 別紙2 擬似言語の記述形式
問8|配列の参照
次のプログラムの実行が終わったとき、変数 v の値はどれか。
擬似言語の配列は要素番号が1から始まる
整数型の配列: a 整数型: v a ← {4, 9, 2, 7} v ← a[2] + a[4] 16 6 11 13 正解と解説 正解:A. 16 擬似言語の配列は a[1] が先頭なので a[2] は 9、a[4] は 7 であり、和は 16 になる。6 は a[1] + a[3] = 4 + 2 と添字を1つずつ小さくした場合、11 は a[2] + a[3] = 9 + 2 と a[4] を a[3] と取り違えた場合、13 は a[1] + a[2] = 4 + 9 と先頭から2つを足した場合の値である。
根拠:IPA 基本情報技術者試験 試験要綱 Ver.5.6 出題範囲(科目B試験)アルゴリズムとプログラミング/IPA「試験で使用する情報技術に関する用語・プログラム言語など」Ver.5.1 別紙2 擬似言語の記述形式
問9|要素数の走査
次のプログラムの実行が終わったとき、配列の要素を合計している変数 sum の値はどれか。
配列を先頭から末尾まで走査する定型
整数型の配列: a 整数型: i 整数型: sum a ← {3, 1, 4, 1, 5} sum ← 0 for (i を 1 から aの要素数 まで 1 ずつ増やす) sum ← sum + a[i] endfor 9 11 14 5 正解と解説 正解:C. 14 aの要素数 は 5 なので i は 1 から 5 まで動き、3 + 1 + 4 + 1 + 5 = 14 が sum に入る。9 は最後の要素を含め忘れて 3 + 1 + 4 + 1 とした場合、11 は先頭を飛ばして 2 番目から加えた場合、5 は要素数そのものである。aの要素数 は配列の長さを表す書き方である。
根拠:IPA 基本情報技術者試験 試験要綱 Ver.5.6 出題範囲(科目B試験)アルゴリズムとプログラミング/IPA「試験で使用する情報技術に関する用語・プログラム言語など」Ver.5.1 別紙2 擬似言語の記述形式
問10|whileの回数
次のプログラムの実行が終わったとき、変数 cnt の値はどれか。ここで × は乗算を表す。
条件が false になるまで繰り返す
整数型: x 整数型: cnt x ← 1 cnt ← 0 while (x < 20) x ← x × 2 cnt ← cnt + 1 endwhile 4 6 32 5 正解と解説 正解:D. 5 x は 1 から 2、4、8、16、32 と変化し、32 になった時点で x < 20 が false になって終わる。本体を実行したのは5回なので cnt は 5 である。4 は x が 16 になった時点で止めた場合、6 は1回多く数えた場合の値。32 は cnt ではなく x の最終値である。
根拠:IPA 基本情報技術者試験 試験要綱 Ver.5.6 出題範囲(科目B試験)アルゴリズムとプログラミング/IPA「試験で使用する情報技術に関する用語・プログラム言語など」Ver.5.1 別紙2 擬似言語の記述形式
問11|論理演算
次のプログラムの実行が終わったとき、変数 p と q の値の組合せはどれか。
比較の結果は論理型の値になる
整数型: x 論理型: p 論理型: q x ← 10 p ← (x ≧ 10) q ← not (x ≠ 10) p は true, q は true p は true, q は false p は false, q は true p は false, q は false 正解と解説 正解:A. p は true, q は true ≧ は「以上」なので 10 ≧ 10 は true となり p は true。x ≠ 10 は 10 ≠ 10 で false であり、not false は true なので q も true になる。≧ を「より大きい」と読むと p が false、not を付け忘れると q が false になるが、いずれも誤りである。
根拠:IPA 基本情報技術者試験 試験要綱 Ver.5.6 出題範囲(科目B試験)アルゴリズムとプログラミング/IPA「試験で使用する情報技術に関する用語・プログラム言語など」Ver.5.1 別紙2 擬似言語の記述形式
問12|do-while
次の後判定の繰返しの実行が終わったとき、変数 x の値はどれか。
後判定の繰返し(条件は本体の後で調べる)
整数型: x x ← 30 do x ← x - 7 while (x > 10) 2 9 16 23 正解と解説 正解:B. 9 x は 30 → 23 → 16 → 9 と減り、9 になった時点で x > 10 が false になって終わる。23 と 16 は途中の値で、条件判定を1回早く打ち切った場合に選びやすい。2 はさらに1回多く引いた値である。do while は条件を本体の後で調べるので、条件が false になった値がそのまま残る。
根拠:IPA 基本情報技術者試験 試験要綱 Ver.5.6 出題範囲(科目B試験)アルゴリズムとプログラミング/IPA「試験で使用する情報技術に関する用語・プログラム言語など」Ver.5.1 別紙2 擬似言語の記述形式
問13|入れ子のif
次のプログラムの実行が終わったとき、変数 z の値はどれか。
if の中にさらに if がある形
整数型: x 整数型: y 整数型: z x ← 6 y ← 4 if (x > y) if (x - y > 3) z ← 1 else z ← 2 endif else z ← 3 endif 1 2 3 未定義の値 正解と解説 正解:B. 2 6行目の x > y は 6 > 4 で true なので外側の if の中へ入る。7行目の x - y > 3 は 2 > 3 で false なので内側の else が実行され z は 2 になる。1 は内側の条件が成り立った場合、3 は外側の条件が成り立たない場合の値で、どちらの else が対応するかを取り違えると誤答する。
根拠:IPA 基本情報技術者試験 試験要綱 Ver.5.6 出題範囲(科目B試験)アルゴリズムとプログラミング/IPA「試験で使用する情報技術に関する用語・プログラム言語など」Ver.5.1 別紙2 擬似言語の記述形式
問14|減らすfor
次のプログラムの実行が終わったとき、変数 s の値はどれか。
逆向きに数える for
整数型: i 整数型: s s ← 0 for (i を 5 から 2 まで 1 ずつ減らす) s ← s + i endfor 14 9 12 15 正解と解説 正解:A. 14 i は 5, 4, 3, 2 と変化するので s は 5 + 4 + 3 + 2 = 14 になる。15 は 1 まで数えた場合の値、9 は 5 と 4 だけを足した値、12 は終わりの値 2 を含め忘れて 5 + 4 + 3 とした場合の値である。「減らす」でも終わりの値 2 は含まれる点が要点である。
根拠:IPA 基本情報技術者試験 試験要綱 Ver.5.6 出題範囲(科目B試験)アルゴリズムとプログラミング/IPA「試験で使用する情報技術に関する用語・プログラム言語など」Ver.5.1 別紙2 擬似言語の記述形式
問15|とびとびfor
次のプログラムの実行が終わったとき、変数 cnt の値はどれか。増分が 1 でないことに注意すること。
増分が1でない for
整数型: i 整数型: cnt cnt ← 0 for (i を 1 から 10 まで 3 ずつ増やす) cnt ← cnt + 1 endfor 3 5 10 4 正解と解説 正解:D. 4 i は 1, 4, 7, 10 と進み、次は 13 で 10 を超えるため終わる。よって本体は4回実行され cnt は 4 になる。3 は終わりの値 10 を含めなかった場合、5 は 10 を超えた 13 まで数えた場合、10 は増分を 1 と誤読した場合の値である。増分が1でないときは値を並べて数えるのが確実である。
根拠:IPA 基本情報技術者試験 試験要綱 Ver.5.6 出題範囲(科目B試験)アルゴリズムとプログラミング/IPA「試験で使用する情報技術に関する用語・プログラム言語など」Ver.5.1 別紙2 擬似言語の記述形式
問16|前判定while
次のプログラムの実行が終わったとき、変数 cnt に入っている値はどれか。
条件が最初から成り立たない繰返し
整数型: x 整数型: cnt x ← 100 cnt ← 0 while (x < 10) x ← x + 1 cnt ← cnt + 1 endwhile 1 10 0 90 正解と解説 正解:C. 0 while は本体に入る前に条件を調べる前判定なので、x が 100 で x < 10 が最初から false のとき本体は一度も実行されず cnt は 0 のままである。1 は do while(後判定)に書き換えた場合の値。10 や 90 は条件の向きを取り違えて回数を数えた場合の値である。
根拠:IPA 基本情報技術者試験 試験要綱 Ver.5.6 出題範囲(科目B試験)アルゴリズムとプログラミング/IPA「試験で使用する情報技術に関する用語・プログラム言語など」Ver.5.1 別紙2 擬似言語の記述形式
問17|条件付き集計
次のプログラムの実行が終わったとき、5 以上の要素の個数を数えている変数 cnt の値はどれか。
条件に合う要素の個数を数える
整数型の配列: a 整数型: i 整数型: cnt a ← {2, 7, 4, 9, 6} cnt ← 0 for (i を 1 から aの要素数 まで 1 ずつ増やす) if (a[i] ≧ 5) cnt ← cnt + 1 endif endfor 3 2 4 5 正解と解説 正解:A. 3 5 以上の要素は 7、9、6 の3個なので cnt は 3 になる。4 は 4 を「5以上」と誤って含めた場合、5 は要素数そのもの、2 は 6 を数え落とした場合の値である。≧ は「以上」なので 5 そのものも条件を満たす点に注意する。
根拠:IPA 基本情報技術者試験 試験要綱 Ver.5.6 出題範囲(科目B試験)アルゴリズムとプログラミング/IPA「試験で使用する情報技術に関する用語・プログラム言語など」Ver.5.1 別紙2 擬似言語の記述形式
問18|出力の順序
次のプログラムを実行したとき、出力される値を順に並べたものはどれか。ここで 出力(x) は x の値を1つ表示する手続とする。
分岐を含む繰返しの出力順
整数型: i for (i を 1 から 3 まで 1 ずつ増やす) if (i ≠ 2) 出力(i) endif 出力(i × 10) endfor 1, 10, 2, 20, 3, 30 1, 10, 20, 30 1, 10, 20, 3, 30 10, 20, 30 正解と解説 正解:C. 1, 10, 20, 3, 30 6行目の 出力(i × 10) は if の外なので毎回実行される。i が 2 のときだけ 3行目の条件 i ≠ 2 が false になり 出力(i) が飛ばされるため、1, 10, 20, 3, 30 の順になる。1, 10, 2, 20, 3, 30 は if を無視した場合、1, 10, 20, 30 は i が 3 のときも 出力(i) を飛ばした場合、10, 20, 30 は 出力(i) を一度も実行しない場合である。
根拠:IPA 基本情報技術者試験 試験要綱 Ver.5.6 出題範囲(科目B試験)アルゴリズムとプログラミング/IPA「試験で使用する情報技術に関する用語・プログラム言語など」Ver.5.1 別紙2 擬似言語の記述形式
問19|実行回数
次のプログラムを実行したとき、8行目は何回実行されるか。
最大値を求める定型(行番号に注意)
整数型の配列: a 整数型: i 整数型: max a ← {3, 8, 5, 8, 2} max ← a[1] for (i を 2 から aの要素数 まで 1 ずつ増やす) if (a[i] > max) max ← a[i] endif endfor 2 1 3 4 正解と解説 正解:B. 1 max は 3 で始まる。i=2 で 8 > 3 が true となり8行目が実行されて max は 8。以降 i=3 は 5 > 8、i=4 は 8 > 8、i=5 は 2 > 8 がいずれも false なので実行されない。よって1回だけである。4 はループの回数、2 は同値の 8 も更新すると誤解した場合の値。
根拠:IPA 基本情報技術者試験 試験要綱 Ver.5.6 出題範囲(科目B試験)アルゴリズムとプログラミング/IPA「試験で使用する情報技術に関する用語・プログラム言語など」Ver.5.1 別紙2 擬似言語の記述形式
問20|二重ループ
次の多重ループの実行が終わったとき、変数 cnt の値はどれか。
内側の回数が外側の変数で変わる多重ループ
整数型: i 整数型: j 整数型: cnt cnt ← 0 for (i を 1 から 3 まで 1 ずつ増やす) for (j を 1 から i まで 1 ずつ増やす) cnt ← cnt + 1 endfor endfor 3 9 12 6 正解と解説 正解:D. 6 内側の繰返しは i 回まわるので、i が 1、2、3 のときそれぞれ1回、2回、3回となり合計 1 + 2 + 3 = 6 回である。9 は内側も常に3回と誤解して 3 × 3 とした値、3 は外側の回数だけを数えた値、12 は 4 × 3 と数えた場合の値である。
根拠:IPA 基本情報技術者試験 試験要綱 Ver.5.6 出題範囲(科目B試験)アルゴリズムとプログラミング/IPA「試験で使用する情報技術に関する用語・プログラム言語など」Ver.5.1 別紙2 擬似言語の記述形式
問21|二次元配列
次のプログラムの実行が終わったとき、変数 s の値はどれか。ここで m[i][j] は i 行 j 列の要素を表す。
行と列の添字を追う(どちらも1から)
整数型の二次元配列: m 整数型: i 整数型: j 整数型: s m ← {{1, 2, 3}, {4, 5, 6}} s ← 0 for (i を 1 から 2 まで 1 ずつ増やす) for (j を 1 から 3 まで 1 ずつ増やす) if (i = j) s ← s + m[i][j] else s ← s - m[i][j] endif endfor endfor 9 -11 21 -9 正解と解説 正解:D. -9 i=1 では m[1][1]=1 を加え m[1][2]=2 と m[1][3]=3 を引いて -4、i=2 では m[2][1]=4 を引き m[2][2]=5 を加え m[2][3]=6 を引いて -5 となり、合計 -9 である。21 は全要素を加えた値、9 は加減を逆にした場合、-11 は m[1][1] を加え忘れて m[2][2] だけを加えた場合の値である。
根拠:IPA 基本情報技術者試験 試験要綱 Ver.5.6 出題範囲(科目B試験)アルゴリズムとプログラミング/IPA「試験で使用する情報技術に関する用語・プログラム言語など」Ver.5.1 別紙2 擬似言語の記述形式
問22|逆順コピー
次のプログラムの実行が終わったとき、配列 b の内容はどれか。
添字を計算して並びを反転する
整数型の配列: a 整数型の配列: b 整数型: i a ← {5, 3, 9, 1} b ← {0, 0, 0, 0} for (i を 1 から aの要素数 まで 1 ずつ増やす) b[aの要素数 - i + 1] ← a[i] endfor {5, 3, 9, 1} {1, 9, 3, 5} {1, 3, 9, 5} {0, 0, 0, 0} 正解と解説 正解:B. {1, 9, 3, 5} aの要素数 は 4 なので、代入先は i=1 で b[4]、i=2 で b[3]、i=3 で b[2]、i=4 で b[1] となり、b には a を逆順に並べた {1, 9, 3, 5} が入る。{5, 3, 9, 1} は a のままの並び、{1, 3, 9, 5} は両端だけを入れ替えた並び、{0, 0, 0, 0} は代入が行われなかった場合である。
根拠:IPA 基本情報技術者試験 試験要綱 Ver.5.6 出題範囲(科目B試験)アルゴリズムとプログラミング/IPA「試験で使用する情報技術に関する用語・プログラム言語など」Ver.5.1 別紙2 擬似言語の記述形式
問23|線形探索
次のプログラムの実行が終わったとき、変数 pos の値はどれか。
見つかったら繰返しを抜ける定型
整数型の配列: a 整数型: i 整数型: pos a ← {7, 4, 9, 4, 2} pos ← 0 i ← 1 while (i ≦ aの要素数 and pos = 0) if (a[i] = 4) pos ← i endif i ← i + 1 endwhile 2 0 1 4 正解と解説 正解:A. 2 i=1 では a[1] が 7 なので何も起きず、i=2 で a[2] が 4 と一致して pos に 2 が入る。次の条件判定で pos = 0 が false になるため繰返しはここで終わり、後ろにある4番目の 4 は調べられない。4 は要素の値または後ろ側の位置、0 は見つからなかった場合の初期値である。
根拠:IPA 基本情報技術者試験 試験要綱 Ver.5.6 出題範囲(科目B試験)アルゴリズムとプログラミング/IPA「試験で使用する情報技術に関する用語・プログラム言語など」Ver.5.1 別紙2 擬似言語の記述形式
問24|配列と関数
次の関数 total を total({2, 5, 3, 8}) と呼び出したとき、戻り値はどれか。
配列を引数に取る関数の戻り値
○整数型: total(整数型の配列: a) 整数型: i 整数型: s s ← 0 for (i を 1 から aの要素数 まで 1 ずつ増やす) if (a[i] > 3) s ← s + a[i] endif endfor return s 5 8 13 18 正解と解説 正解:C. 13 3 より大きい要素は 5 と 8 なので s は 13 となり、これが return で返る。18 は全要素の合計で条件を無視した値、5 と 8 は条件に合う要素の一方だけを見た値である。a[i] > 3 は「3 より大きい」なので 3 自身は含まれない点が要点である。
根拠:IPA 基本情報技術者試験 試験要綱 Ver.5.6 出題範囲(科目B試験)アルゴリズムとプログラミング/IPA「試験で使用する情報技術に関する用語・プログラム言語など」Ver.5.1 別紙2 擬似言語の記述形式
問25|値渡し
次のプログラムの main を実行したとき、出力される値を順に並べたものはどれか。ここで 出力(x) は x の値を1つ表示する手続とする。
値渡しでは呼び出し元の変数は変わらない
○整数型: twice(整数型: n) n ← n × 2 return n ○main() 整数型: v 整数型: w v ← 5 w ← twice(v) 出力(v) 出力(w) 10, 10 5, 10 5, 5 10, 5 正解と解説 正解:B. 5, 10 引数は値渡しなので twice には v の値のコピーが渡され、関数の中で n を 2 倍しても呼び出し元の v は 5 のままである。戻り値 10 を受け取った w だけが 10 になるので出力は 5, 10 となる。10, 10 は引数の書換えが呼び出し元に及ぶと誤解した場合、5, 5 は戻り値を無視した場合の誤りである。
根拠:IPA 基本情報技術者試験 試験要綱 Ver.5.6 出題範囲(科目B試験)アルゴリズムとプログラミング/IPA「試験で使用する情報技術に関する用語・プログラム言語など」Ver.5.1 別紙2 擬似言語の記述形式
演習:この章の問題を解く ランダム出題の演習ツールです(JavaScript が有効な場合に動きます)。上の「確認問題」はそのままでもすべて読めます。
← 前の章:企業活動と法務 次の章:データ構造とアルゴリズム(科目B) →
※ 解説は学習用の情報提供です。最新の出題範囲・制度は必ずIPAの公式発表をご確認ください。 ※ 出題はIPA公開のシラバスVer.9.2(2026年1月8日適用)に沿った仮の宿 学習室のオリジナル問題です。擬似言語の記述形式もIPA公開の仕様に合わせています。試験制度・実施要項はIPAの公式発表をご確認ください(2027年度春ごろに新試験制度へ移行予定)。