情報のプログラミングの問題、解説を読めば分かるのに、自分では解けない……ということはありませんか?
この記事は、定期テストや共通テストの第3問で、プログラミングの問題に手が止まってしまう高校生に向けて書いています。
私はプログラミングの講師として、小学生から大学生まで教えてきました。今回は、大学入試センターが公開している過去の本試験や試作問題の第3問を読んで、出題の形を確かめたうえで、例題を自作してみました。
先に結論を書いておきます。
プログラミングの問題を解く土台は、上から1行ずつ、変数の中身を書き出す。この1つに集約されます。
あとは、問題の「型」ごとに最初の一手を知っておけば、何から手をつければいいか分からない、で止まることはぐっと減ると思います。
- トレース表の書き方(3つだけ決めておく)
- 共通テストのプログラミング問題の4つの型と、型ごとの最初の一手
- 間違えやすい所5つ(添字の始まり・「まで」・繰り返しの i など)
- 自作の練習問題3問(答えと解説つき)
- 外した問題を、トレース表で直す方法
解き方の土台は1つ|上から1行ずつ、変数を書き出す
プログラムの問題は、どんな形で出ても、やることの根っこは同じです。プログラムを上から1行ずつ追いかけて、変数にいま何が入っているかを確かめていく。これだけです。
ただし、その前提として「お作法」(順次処理・代入・変数・繰り返し・条件分岐・配列)が分かっている必要があります。「= は入れるという意味」「繰り返しは何周目に何が起きるかで見る」あたりがあやしい人は、先に高校の情報でプログラミングがわからない人へ|原因と立て直し方で確認してみてください。
しつこいですが、上の記事で解説しているお作法が分かっていないと、この記事で出す例題も解けませんので先にチェックしてみてくださいね。
また、この記事の例題は、共通テストで使われる日本語まじりの表記(共通テスト用プログラム表記)で書いています。表記そのものの説明は、情報Ⅰの共通テスト対策|大問の中身と勉強の順番を講師が整理にまとめています。
トレース表の書き方|3つだけ決めておく
変数の中身を書き出す表を、トレース表と呼びます。書き方に正解はありませんが、次の3つだけ決めておくと、迷わずに書けます。
- 変数ごとに列を作る:i、kaisu など、プログラムに出てくる変数を横に並べる
- 値が変わったときだけ書く:変わらない所は空けておくと、どこで何が動いたかが目で見える
- 繰り返しは1周1行、条件の結果も書く:「もし〜ならば」が成り立ったか(○)、成り立たなかったか(×)も、その行に書いておく
このあとの例題で、実際に書いてみます。
頭の中で追わずに、紙に書く。慣れるまでは、どんなに短いプログラムでも書き出すのがいちばんの近道です。
【重要】問題の型は4つ|型ごとの「最初の一手」
共通テストの第3問(プログラミング)は、1つの場面を題材にして、問1→問2→問3と続いていく形です。2025年と2026年の本試験では、どちらも次のような流れでした。
- 問1:プログラムは出さずに、図や表を読んで考え方をつかむ
- 問2:その考え方をプログラムにする
- 問3:問2のプログラムを改良する
つまり、前の問いが、後の問いの土台になっています。問2の問題文にも、問1で整理した考え方をもとにする、という流れが書かれています。問1を飛ばさずに順に解くのが、結局は近道かなと思います。
そのうえで、聞かれ方で分けると、問題の型はおおよそ次の4つです。まずは、下記の早見図で見比べてみましょう。

なかでも型2の「空欄を埋める」は、問2・問3の中心になる形で、毎年まとまった数が出ています。ここは特に、手順をしっかり押さえておきたい所です。
それでは、共通の例題を使って、1つずつみていきましょう。
例題の場面
Aさんは5日間、毎日走った距離(km)を配列 Kyori に記録しました。配列の添字は1から始まるものとします。つまり Kyori[1] が1日目、Kyori[5] が5日目です。
Kyori = [3, 5, 2, 6, 4]
1日目が3km、2日目が5km、3日目が2km、4日目が6km、5日目が4kmです。
この配列は、下の例題で使っていきますので、紙に書き出しておいてください。
型1:プログラムの前に、図や表で手を動かす(問1型)
問1では、プログラムを書く前に「人の手でやるとどうなるか」を聞かれることが多いです。たとえば、こんな問いです。
5日間のうち、前の日より多く走った日は何日ありますか?
問題文に戻って、いったんご自身で考えてみてください。
2日目(3→5)と4日目(2→6)なので、答えは2日です。
簡単すぎて拍子抜けしたかもしれません。でも、ここで大事なのは答えより「自分がどういう手順で数えたか」です。
一方でもし「どういうこと?」と手が止まった方は、とにかく「読み飛ばさない」くせをまずつけてください。一文読んで意味を取る。一文読んで意味を取る。それの繰り返しです。落ち着いて冷静に考えれば必ずわかります。分からないまま次へ進むと、もっと分からなくなります。
問題を続けますね。(意味を取りながら進めましょう)
2日目から順に、その日と前の日を比べた。1日目は前の日がないので比べなかった。……この手順が、そのまま問2のプログラムになります。当たり前すぎて書くまでもないと思われるかもしれませんが、やること(プログラム)を理解できていなければ書けません。何をしたのかを、言葉にして書いてみましょう。
最初の一手:答えを出したら、自分の手順を一言でメモしておく。問2でプログラムを読むときの地図になります。
型2:空欄を埋める|選択肢を見る前に、自分で答えを出す
次は、問1の手順をプログラムにしたものです。
空欄【ア】に入るものを選んでください。
(01) Kyori = [3, 5, 2, 6, 4]
(02) kaisu = 0
(03) i を 2 から 要素数(Kyori) まで 1 ずつ増やしながら繰り返す:
(04) | もし Kyori[i] > 【ア】 ならば:
(05) ⎿ ⎿ kaisu = kaisu + 1
(06) 表示する(kaisu, "日")
※要素数(Kyori) は、配列 Kyori の要素の数(ここでは5)を返す関数です。本番でも、こうした関数は問題文の中で説明されます。
【アの選択肢】⓪ Kyori[i – 1] ① Kyori[i] ② Kyori[i + 1] ③ kaisu
ご自身で考えてみましょう。
空欄を埋める問題は、先に選択肢を見ないのがコツです。先に選択肢を眺めると、形の似たものがどれも正しそうに見えてしまうからです。次の順番で、まずは自分で答えを出してみましょう。
- プログラムの目的を1文で言う:「前の日より多く走った日を数える」
- 上から1行ずつ読んで、空欄のまわりの行が何をしているかをつかむ:プログラムは(01)から順に、1行も飛ばさずに読みます。いきなり空欄のまわりだけを見ても、変数に何が入っているか分からないからです。そのうえで空欄のまわりを見ると、(05)の kaisu = kaisu + 1 は、自分自身に1を足して、日数を数えています。だから(04)に入るべき条件は「前の日より多く走った日ならば」になるはずです
- 変数の意味を当てはめて、自分で答えを出す:Kyori[i] は「いま比べている日(i日目)の距離」。比べる相手は「前の日の距離」なので、i の1つ前の Kyori[i – 1] です
- 選択肢から、自分の答えを探す:⓪に Kyori[i – 1] があります
- 答えが出ないとき・迷ったときは、選択肢を入れて回してみる:自分で答えが出せないときや、2つで迷ったときは、選択肢を1つずつ入れて、最初の周と最後の周を追ってみます。⓪なら i=2 のとき Kyori[2]>Kyori[1](5>3)で、2日目と1日目を比べている。②だと最後の周(i=5)で Kyori[6] になり、5日分しかない配列からはみ出してしまいます
答えは⓪ Kyori[i – 1]です。
ちなみに、繰り返しが「2から」始まっているのも、同じ理由です。i=1 から始めると Kyori[0] を見ることになり、添字が1から始まる配列には存在しません。こういう所に気づけると、プログラムの意味がぐっと見えてきます。
トレース表に書くと、こうなります。
(※慣れないとややこしく感じるのは当然です。でも論理を1つずつ追っていくとシンプルに見えるようになってきますので安心してください。)
| i | Kyori[i – 1] | Kyori[i] | (04)の条件 | kaisu |
|---|---|---|---|---|
| (はじめ) | 0 | |||
| 2 | 3 | 5 | ○ | 1 |
| 3 | 5 | 2 | × | |
| 4 | 2 | 6 | ○ | 2 |
| 5 | 6 | 4 | × |
本番の選択肢は、このように形の似たもの(i−1、i、i+1 など)が並ぶことが多いです。だからこそ、目的と前後の行から自分で答えを出してから、選択肢を見るのが効きます。選択肢に数字を入れて1つずつ試すのは、自分の答えが出ないときや、2つで迷ったときの確かめ方として取っておきましょう。
型3:値や回数を答える|トレース表をそのまま使う
「この変数の値はいくつになるか」「この行は何回実行されるか」を、数字で答える問いもあります。たとえば、上のプログラムで次のように聞かれたとします。
(04)の「もし〜ならば」の判定は何回行われますか? また、(05)は何回実行されますか?
トレース表があれば、数えるだけです。判定は i=2〜5 の4回、(05)は条件が成り立った2回です。
ここで引っかかりやすいのが、「判定した回数」と「条件が成り立って中の処理をした回数」を混ぜてしまうことです。どちらを聞かれているのか、問題文の言葉を1文ずつ確かめましょう。
最初の一手:表を書いて、聞かれている行に印をつけてから数える。頭の中だけで数えると、1つずれやすいです。
型4:前のプログラムを改良する(問3型)|変わった所だけを見る
問3では、問2のプログラムに処理を足したり、外側にもう1つ繰り返しをかぶせたりして、改良版を作ることが多いです。プログラムは長くなりますが、慌てなくて大丈夫です。
例として、「前の日からいちばん伸びた日と、伸びた距離を表示する」ように改良してみます。空欄【イ】に入るものは何でしょうか?
(01) Kyori = [3, 5, 2, 6, 4]
(02) saidai = 0, hi = 0
(03) i を 2 から 要素数(Kyori) まで 1 ずつ増やしながら繰り返す:
(04) | sa = Kyori[i] - Kyori[i - 1]
(05) | もし sa > saidai ならば:
(06) | | saidai = sa
(07) ⎿ ⎿ hi = 【イ】
(08) 表示する(hi, "日目に", saidai, "km伸びた")
【イの選択肢】⓪ i ① i – 1 ② i + 1 ③ Kyori[i]
改良の問題は、次の順番で読むと迷いにくくなります。
- 前のプログラムと同じ所を見つける:(03)の繰り返しは問2と同じ。i が「何日目か」を表すのも同じ
- 新しく出てきた変数の意味を言葉にする:sa は「前の日との差」、saidai は「これまでで一番大きい差」、hi は「その日が何日目か」
- 部品に分けて読む:準備((02)の初期値)→ 繰り返し → 判定 → 表示
- 空欄は型2の手順で:目的と前後の行から自分で答えを出し、迷ったら最初と最後の周で確かめる
hi に入れたいのは「何日目か」なので、答えは⓪ iです。差は 2日目が+2、3日目が−3、4日目が+4、5日目が−2 なので、表示は「4日目に4km伸びた」になります。①なら3日目、②なら5日目と、1つずれた日が表示されてしまいますね。
ちなみに本番では、「この処理を、図の⓪〜③のどの位置に入れるか」を選ぶ形も出ています。この場合も、入れる位置ごとに最初の周を追ってみれば、どれが正しいか見えてきます。
なお、表示する 以外の関数(要素数 など)は、基本的に問題文の中で説明されます。問題文の説明がいちばんの正解なので、表記を丸暗記するより、そこを読み落とさないほうが大事ですね。
型が分かれば、「何から手をつければいいか分からない」で止まらなくなります。どの型でも、最後に頼りになるのは、実際の数字を入れて1行ずつ追うことです。
間違えやすい所5つ|添字の始まり・「まで」・繰り返しの i
ここからは、例題を解いていて引っかかりやすい所をまとめます。どれも、プログラミングを始めたばかりのうちはつまずきやすい所です。
| 間違えやすい所 | よくある勘違い | 確かめ方 |
|---|---|---|
| ① 添字の始まり | 配列の番号はいつも0から | 問題文の「添字は◯から始まる」を必ず読む |
| ② 「〜まで」 | 最後の数は含まない | 「0 から 4 まで」は4も含む。最後の周を書き出す |
| ③ 繰り返しの i | i が何を表すのか分からない(いきなり出てくる) | i は1周ごとに1ずつ増える番号。トレース表に i の列を作り、周ごとの値を書く |
| ④ 上書きと初期値 | 前の値も残っている | 代入した瞬間に前の値は消える。最初に入れた値も表に書く |
| ⑤ > と >= | どちらでも同じ | 「ちょうど等しいとき」どちらに進むかを試す |
なかでも気をつけたいのが、①の添字の始まりです。
大学入試センターが示している表記の説明では、特に説明がなければ添字は0から始まる、とされています。一方で、2025年・2026年の本試験の第3問では、問題文で配列の添字は1から始まると指定されていました。
つまり、問題によって違うということです。思い込みで解き始めずに、まず問題文で添字の始まりを確かめてください。これだけで防げる失点は、けっこうあると思います。
②の「まで」は、授業で Python に慣れている人ほど注意です。Python の range(0, 4) は3で止まりますが、共通テストの表記の「0 から 4 まで」は4まで繰り返します。
③の i は、繰り返しの行でいきなり出てくるので、戸惑う人が多いところです。「i を 2 から 要素数(Kyori) まで 1 ずつ増やしながら繰り返す」とあれば、i には1周目に2、2周目に3……と、1周ごとに1ずつ増えた値が入ります。
例題のように、配列の何番目を見るかに使うことが多いです。ただ、問題によっては、繰り返しの中で i を使わないこともあります。i が出てきたら、まず「この問題では、i は何を表しているか(何日目か、何人目か)」を言葉にしてみましょう。
④の上書きは、「x = x + 1」のような行で起きやすいです。右側の x は「その時点の x」で、計算した結果で x が新しく書き換わります。前の値はもう残っていません。
練習問題|自作の3問で試してみよう

では、実際に手を動かしてみましょう。紙とペンを用意して、トレース表を書きながら解いてみてください。3問とも、配列の添字は1から始まるものとします。
問題1|表示される値は?(型3)
(01) Tensu = [60, 80, 75, 90]
(02) gokei = 0
(03) i を 1 から 要素数(Tensu) まで 1 ずつ増やしながら繰り返す:
(04) | もし Tensu[i] >= 75 ならば:
(05) ⎿ ⎿ gokei = gokei + Tensu[i]
(06) 表示する(gokei)
表示される gokei の値はいくつでしょうか?
答えと解説を見る
答えは245です。75点以上の点数(80・75・90)を足しています。
ポイントは、条件が「>=」(75以上)であること。75点も足すので、80+75+90=245 になります。「>」(75より大きい)と読んでしまうと、75を足さずに170と答えてしまいます。間違えやすい所の⑤ですね。
問題2|空欄に入るものは?(型2)
毎月の貯金額を配列 Chokin に入れ、合計が初めて100円以上になったのが何か月目かを表示します。空欄【ウ】に入るものを選んでください。
(01) Chokin = [30, 50, 20, 40]
(02) gokei = 0, tsuki = 0
(03) 【ウ】 の間繰り返す:
(04) | tsuki = tsuki + 1
(05) ⎿ gokei = gokei + Chokin[tsuki]
(06) 表示する(tsuki, "か月目に100円以上")
【ウの選択肢】⓪ gokei < 100 ① gokei <= 100 ② gokei > 100 ③ tsuki < 100
答えと解説を見る
答えは⓪ gokei < 100です。表示は「3か月目に100円以上」になります。
合計は 30 → 80 → 100 と増えていきます。⓪なら、合計が100になった時点で「100未満」ではなくなるので、3か月目で繰り返しが終わります。
①の「100以下の間」だと、合計がちょうど100のときにもう1周してしまい、4か月目(合計140)と表示されてしまいます。ちょうど等しいときにどうなるかを試すと、違いがはっきりしますね。②は、最初の合計が0なので1回も繰り返さずに終わってしまいます。
問題3|何回実行される?(型3)
(01) kazu = 0
(02) i を 1 から 9 まで 2 ずつ増やしながら繰り返す:
(03) ⎿ kazu = kazu + i
(04) 表示する(kazu)
(03)は何回実行されるでしょうか? また、表示される kazu の値はいくつでしょうか?
答えと解説を見る
答えは5回、表示は25です。
i は 1、3、5、7、9 と2ずつ増えます。「9 まで」なので、9のときも実行されます(間違えやすい所の②)。足していくと 1+3+5+7+9=25 です。
本番と同じ形で練習したい人は、大学入試センターのサイトで公開されている過去の試験問題や試作問題に挑戦してみてください。過去問の使い方や順番は、情報Ⅰの共通テスト対策の記事にまとめています。
外した問題の直し方|トレース表で「最初にずれた行」を探す
練習問題や過去問で外してしまったとき、解説を読んで「なるほど」で終わらせていませんか?
おすすめは、最初にずれた行を探すことです。やり方はシンプルです。
- 自分が書いたトレース表と、正しいトレース(解説、または実際に動かした結果)を横に並べる
- 上から順に見て、値が最初にずれた行を探す
- その行で使われているお作法(代入?条件?添字?繰り返しの範囲?)を確かめる

最初にずれた行が、そのまま自分の理解の穴です。2つ目以降のずれは、最初のずれに引きずられて起きていることが多いので、まずは1か所だけ直せば十分です。
たとえば問題2で①を選んだ人は、3周目が終わったあとの判定(合計がちょうど100のとき)で正解とずれます。そこで「100以下の間」と「100未満の間」の違いを確かめれば、次は同じ所で間違えにくくなります。
わからないまま、読み飛ばさない
とにかくダメなのは、わからないまま読み飛ばすことです。この記事でも、何度も口を酸っぱくして話していることですね。
あたりまえのことですが、これが本当に大事でもう、それだけと言ってもいいくらいです。
教科書の例題も、過去問も、1行ずつ「なぜこう動くのか」を理解してから次へ進む。間違えたら、見直しで同じことをやる。これを徹底するだけで、プログラミングの問題は解けるようになっていくと私は思っています。
もし授業で使っている環境が家でも使えるなら、例題を自分で打ち込んで動かしてみるのもおすすめです。数字を1つ変えて動かすだけでも、トレースの答え合わせになります(ブラウザだけで動かせる環境については、高校情報Ⅰのプログラミング|授業で学ぶ内容と使う言語を整理で紹介しています)。
AI に聞くのも、確かに効率的ですよね。ただ、答えが出たからOK、ではなく、「この行で、なぜこの値になるのか」まで説明してもらいましょう。最短距離を取るためではなく、学習のために聞いている、ということを忘れないでくださいね。
※AIのサービスには年齢の条件があります。18歳以上でないと使えないものや、18歳未満は保護者の許可が必要なものがあるので、使う前に規約を確認してください。18歳未満のうちは、保護者の方のアカウントで一緒に使うのが安心です。
よくある質問
定期テストと共通テストで、解き方は違いますか?
土台(上から1行ずつ、変数を書き出す)は同じです。ただ、定期テストの出し方は学校や先生によって違い、授業で使っている言語(Python など)のまま出ることもあります。表記が違っても、お作法は同じなので、この記事の手順はそのまま使えます。
Python で出る定期テストに備えたい人は、授業で使う書き方とつまずきやすい所を高校の授業のPython入門|情報Ⅰで使う書き方とつまずく所にまとめています。
定期テスト前の勉強の進め方(2週間前から何をやるか)は、情報Ⅰの定期テスト対策と勉強法|何から始める?分野別に整理にまとめています。
時間が足りなくなります。どうすればいいですか?
トレース表は、全部の周を書かなくても大丈夫です。空欄の問題なら最初の周と最後の周、値が変わる変数だけに絞りましょう。また、第3問は前の問いが後の問いの土台になっているので、問1から順に解くのがおすすめです。
トレース表は、毎回書かないといけませんか?
慣れるまでは、書くのがおすすめです。慣れてきたら、値が変わる変数だけをメモする程度でも構いません。迷ったときや、選択肢が2つに絞れないときは、きちんと書き出しましょう。
練習には、何を使えばいいですか?
土台は、教科書の例題と過去問です。そのうえで、共通テストの表記に慣れておきたい人は、共通テストの表記でプログラムを解説している参考書を1冊用意すると進めやすいと思います。
授業用か共通テスト用か、プログラミングの経験があるかで変わる本の選び方は、情報Ⅰの参考書・問題集の選び方|目的と経験別に講師が整理にまとめています。
共通テストの表記で、プログラムに慣れる
『世界一わかりやすい 大学入学共通テスト 情報Ⅰやさしい講座』(技術評論社)。情報Ⅰの範囲を講義形式で一通り学べて、プログラムは共通テストの表記で解説されています。
書籍を見るまとめ|型を知って、1行ずつ追えば解ける
高校の情報のプログラミング問題は、上から1行ずつ、変数の中身を書き出すことが土台です。
共通テストの第3問は、問1で考え方をつかみ、問2でプログラムにし、問3で改良する流れが続いています。聞かれ方は「手を動かす」「空欄を埋める」「値や回数を答える」「改良する」の4つ。中心になる空欄の問題は、選択肢を見る前に、目的と前後の行から自分で答えを出すのが基本です。迷ったときは、最初と最後の周に数字を入れて確かめましょう。
そして、添字が0から始まるか1から始まるかは、問題文で必ず確かめること。外した問題は、トレース表で最初にずれた行を探して、そこだけを確実に直していきましょう。
お作法が全く分からない状態からでも、全く心配いりません。1行ずつの積み重ねで、ちゃんと解けるようになっていきます。
共通テストの情報Ⅰ対策に、まず1冊
講義形式で情報Ⅰの範囲を一通り学べる『世界一わかりやすい 大学入学共通テスト 情報Ⅰやさしい講座』(技術評論社)。プログラムは共通テストの表記で解説されています。
書籍を見る