# 共通テスト情報Ⅰ：変数・条件分岐・繰返しの読み方と演習

> 処理を一行ずつ追跡し、配列の集計と探索を学ぶ基礎単元。例題、トレース表、12問の演習と解説で条件の境界や更新順序を確認します。

- **Canonical URL:** https://flashcards.world/guides/ja/information-i-variables-branches-loops-ja/
- **Markdown URL:** https://flashcards.world/guides/ja/information-i-variables-branches-loops-ja.md
- **Topic / Curriculum:** 大学入学共通テスト 情報Ⅰ（2027年度）
- **Language:** ja

# 変数・条件分岐・繰返しの読み方と演習

プログラムの問題では、知っている命令名を探すだけでなく、与えられた値がどの順序で変わるかを確かめます。この単元では、整数と短い配列を使い、代入、分岐、繰返し、集計を練習します。四則演算と大小比較ができれば始められます。

2027年度共通テストの問題作成方針では、プログラミング問題に大学入試センター独自の表記を使うとしています。問題に書かれた定義を読み取る練習が必要です。以下は理解のための独自教材であり、公式問題の転載や公式表記の完全な再現ではありません。[大学入試センター・令和9年度試験](https://www.dnc.ac.jp/kyotsu/shiken_jouhou/r9/index.html)

## この単元でできるようになること

- 代入前と代入後の値を分けて追跡する。
- 一つにつながった分岐と、独立した条件判定を区別する。
- 配列の要素数と添字を区別し、繰返し回数を数える。
- 合計、個数、最大値を求める処理の理由を説明する。
- 境界や特殊な入力を使って、誤った処理を見つける。

## 1. この教材の表記

`x ← 式` は、右側を現在の値で計算し、その結果を x に保存する操作です。条件の `=` は等しいかの比較です。`A[i]` は配列 A の添字 i の要素で、この教材では添字を0から始めます。

「iをaからbまで」は両端を含め、1ずつ増やします。a > bなら本体を実行しません。「条件の間」は本体の前に条件を調べます。整数はこの教材の値の範囲で正確に計算できるものとします。実際の試験では、その問題の表記や配列の規約を優先してください。

## 2. 代入は、その時点の値を保存する

次を上から順に実行します。

```text
x ← 3
y ← x + 2
x ← 7
```

| 実行後の行 | x | y |
|---|---:|---:|
| x ← 3 | 3 | 未設定 |
| y ← x + 2 | 3 | 5 |
| x ← 7 | 7 | 5 |

yには式そのものを保存するのではなく、計算結果5を保存しています。xが変わってもyは自動更新されません。

同じ理由で、xとyの値を交換するには元の値を残す必要があります。

```text
t ← x
x ← y
y ← t
```

紙に「現在のx」「現在のy」を別々に書き、一行ずつ更新してみてください。一度上書きした値を、後の行で元の値として使わないことが大切です。

## 3. 分岐は、条件とつながりを読む

年齢に応じた入場料を次のように定めます。

```text
もし 年齢 < 6 なら
    料金 ← 0
そうでなく、年齢 < 18 なら
    料金 ← 500
そうでなければ
    料金 ← 1000
```

6歳では最初の条件が偽、二番目が真なので500円です。18歳では二番目も偽になり1000円です。5・6・7歳、17・18・19歳を試すと、境界の扱いを確認できます。

「そうでなく」は前の条件が偽だった場合だけ続きます。一方、独立した二つの `もし` はそれぞれ判定します。例えば n = 12 に対して「n > 0ならrを1」「n > 10ならrを2」を順に実行すると、後から上書きされてrは2です。

「かつ」は両条件が真、「または」は少なくとも一方が真のときに成立します。「4以上かつ偶数」なら2と5は除かれ、8は含まれます。複数条件は、各条件の真偽を分けて書くと確認しやすくなります。

## 4. 繰返しは、開始・継続条件・更新を確認する

```text
x ← 1
x < 10 の間
    x ← 2 × x
```

| 本体の実行回数 | 判定時のx | x < 10 | 本体を実行した後のx |
|---|---:|---|---:|
| 1回目 | 1 | 真 | 2 |
| 2回目 | 2 | 真 | 4 |
| 3回目 | 4 | 真 | 8 |
| 4回目 | 8 | 真 | 16 |
| 終了判定 | 16 | 偽 | 本体を実行しない |

本体は4回です。条件は5回調べています。「本体の回数」と「条件を調べた回数」は同じとは限りません。また、終了時のxは16です。条件が真だった最後の値8と混同しないようにします。

開始時点で条件が偽なら、本体は一度も実行されません。更新によって条件が偽になる方向に進むかも確認してください。

## 5. 配列を集計する

A = [3, 8, 5, 8] とします。要素数は4、有効な添字は0・1・2・3です。次は5以上の要素について、合計と個数を求めます。

```text
s ← 0
c ← 0
i を0から3まで繰り返す
    もし A[i] ≥ 5 なら
        s ← s + A[i]
        c ← c + 1
```

| i | A[i] | 条件 | 更新後のs | 更新後のc |
|---:|---:|---|---:|---:|
| 0 | 3 | 偽 | 0 | 0 |
| 1 | 8 | 真 | 8 | 1 |
| 2 | 5 | 真 | 13 | 2 |
| 3 | 8 | 真 | 21 | 3 |

sは条件に合った要素の合計、cはその個数です。8が二度登場しても、それぞれ別の要素として処理します。「値の種類数」を求める問題なら別の処理が必要です。

最大値を求める場合は初期値にも注意します。空でない配列では、最初の要素を候補にし、残りの要素と比較できます。

```text
m ← A[0]
i を1から最後の添字まで繰り返す
    もし A[i] > m なら
        m ← A[i]
```

[-7, -2, -5] なら候補は−7 → −2 → −2となります。0で初期化すると、配列にない0を最大値として返してしまいます。空配列を許す場合は、最大値が存在しない場合をどう扱うか別に決める必要があります。

### 初期化する位置と、集計後の処理

個数cを0に戻すのは、全体の集計を始める前です。各要素を読むたびに0へ戻すと、以前に数えた結果が消えます。一方、クラスごとの人数を別々に数えるなら、各クラスの集計を始めるときに初期化します。「何についての合計・個数なのか」を先に決めます。

平均を計算する場合は、集計後にcが正であることを確認してからs ÷ cを計算します。c = 0なら該当する要素がなく、平均を定義できません。「平均なし」と示すなど、仕様に合った処理を選びます。これは平均が0という意味ではありません。

繰返しの中に別の繰返しがある場合は、それぞれの範囲を確認します。2グループの各3要素を一度ずつ処理するなら、内側の本体は2 × 3 = 6回です。内側の回数が外側の値によって変わる場合は、各回の回数を足し合わせます。

## 6. 探索では「見つけた」という情報を保つ

配列に負の数が一つでもあるかを調べるなら、次のように書けます。

```text
見つかった ← 偽
各要素vについて
    もし v < 0 なら
        見つかった ← 真
```

後の要素が正でも、フラグを偽へ戻しません。[-2, 3]では最初に負の数を見つけているからです。最初の該当要素だけが必要なら、見つけた時点で終了する方法もあります。全該当要素の個数が必要なら、最後まで調べる必要があります。

位置を返す探索では、未発見をどう表すかも決めます。0始まりの配列で0を未発見にすると、先頭で見つかった場合と区別できません。例えば−1を未発見の印にし、結果が−1ならそのまま添字に使わないようにします。

最大値が複数ある場合も同様です。[5, 9, 9, 2]で最初の最大値の添字を返すなら、候補を添字0から始め、より大きい値でだけ更新すると1になります。同じ値でも更新するなら最後の最大値の添字2になります。必要な答えが「値」「最初の位置」「最後の位置」のどれかを確認します。

「目標より大きい値が出たら探索を終了する」という方法には、昇順に整列済みという前提が必要です。未整列の [9, 3]で3を探すとき、9で終了すると後の3を見落とします。

## 7. 自分で解く12問

解答を見る前に、途中の値か判断理由を書いてください。ここで示す問題はすべて本教材のオリジナルです。制限時間や配点は公式試験のものではありません。

**問1：代入。** `x ← 2、y ← x + 3、x ← 4、y ← y + y` の順に実行する。最後のyはどれか。A：5、B：8、C：10、D：14。

**問2：境界。** 第3節の料金表に従うと、6歳と18歳の料金の組合せはどれか。A：0円・500円、B：500円・1000円、C：0円・1000円、D：500円・500円。

**問3：独立した分岐。** `r ← 0、n ← 12` の後、独立した条件として「n > 0ならr ← 1」「n > 10ならr ← 2」を実行する。最後のrを答え、二番目を「そうでなく、n > 10なら」に変えた場合との違いを説明せよ。

**問4：集計。** 第5節の処理で条件を `A[i] > 5` に変更すると、最後のsとcはいくつか。

**問5：最大値。** 最大値候補を0から始める処理の誤りを示す入力はどれか。A：[2, 7, 3]、B：[0, 0]、C：[-7, -2, -5]、D：[-3, 1]。各選択肢の本当の最大値も答えよ。

**問6：繰返し。** `x ← 3` とし、`x < 20` の間 `x ← 2 × x` を実行する。本体の実行回数と終了時のxはいくつか。

**問7：添字。** 要素数 n > 0 の0始まり配列で、iを0からnまで両端を含めて回し、A[i]を読む処理がある。誤りを説明し、n = 1の場合を使って確認せよ。

**問8：二重の繰返し。** 二つのグループ [2, 5, 8] と [1, 4, 7] の全要素を一度ずつ調べる。「4以上かつ偶数」の要素を数えるといくつになるか。「かつ」を「または」に変えるとどうなるか。

**問9：集計の修正。** [2, 3, -1]について、各要素を調べる前にcを0へ戻し、正ならcを1増やす処理を書いた。最後のcと、正しく個数を求めるための修正を答えよ。

**問10：未発見。** 負の数があるか調べるフラグを偽で始め、「負の要素なら真、そうでなければ偽」を各要素について実行する。[-2, 3]で誤る理由と修正を説明せよ。

**問11：平均。** 5以上の要素の平均を求めたい。入力が [1, 2]の場合、合計sと個数cはいくつか。その後に必要な処理を答えよ。

**問12：探索の前提。** 目標3を探し、目標より大きい値が出たら未発見として終了する処理を考える。[1, 3, 9]と[1, 9, 3]で結果はどう違うか。処理が正しいために必要な前提も答えよ。

## 8. 解答と考え方

**問1：C、10。** yは最初に5となり、最後に5 + 5で10になる。Aは最後の更新を忘れた値。Bはyに現在のxを使った誤り。Dはxの変更に合わせてyも7に変わると考えた誤り。

**問2：B。** 6は「6未満」ではなく、18は「18未満」ではない。Aは両方の境界を誤り、Cは6歳だけを誤り、Dは18歳だけを誤っている。

**問3：独立した場合は2、つながった場合は1。** 独立した条件では二つとも真になり、後の代入が残る。「そうでなく」の場合は最初の条件が真なので、二番目の分岐へ進まない。

**問4：s = 16、c = 2。** 二つの8だけが該当する。5は「5以上」には含まれるが「5より大きい」には含まれない。

**問5：C。** 本当の最大値はAが7、Bが0、Cが−2、Dが1。誤った処理はCで0を返す。A・B・Dでたまたま正解しても、処理が一般に正しい証拠にはならない。

**問6：3回、24。** 3 → 6 → 12 → 24の順で、24になった後の判定で終了する。終了時の値は継続条件を満たす必要がない。

**問7：最後にA[n]を読むのが誤り。** n = 1なら存在するのはA[0]だけなのに、A[1]も読もうとする。両端を含むなら終点をn − 1に直す。あるいはi < nという条件で回す。

**問8：「かつ」なら2個、「または」なら5個。** 前者は8と4。後者は2・5・8・4・7が該当し、1だけがどちらの条件も満たさない。一つの要素が両方の条件に合っても、その要素を二重には数えない。

**問9：0。** 最後の−1を調べる前にもcが0へ戻り、その後は増えない。初期化を全要素の処理より前へ移すと、2と3で一回ずつ増え、最後は2となる。

**問10：最後が偽になる。** −2で真になった情報を、後の3で消してしまう。「そうでなければ偽」の代入を取り除き、非負の要素ではフラグを変えないようにする。最初に発見した時点で探索を終了してもよい。

**問11：s = 0、c = 0。** 該当する要素がないため、0 ÷ 0を計算してはいけない。c = 0を先に判定し、「該当する要素がない」と示す。平均が0と答えるのは誤り。

**問12：前者は添字1で発見し、後者は未発見として終了してしまう。** この早期終了には昇順に並んでいるという前提が必要。未整列でも扱うなら、目標より大きい要素を見ただけでは終了せず、その先も調べる。

## 9. 復習の進め方

誤答を「代入順序」「条件の境界」「分岐のつながり」「添字」「初期値」に分けて記録します。該当する例題を自分で再現してから、数値を変えた問題を解いてください。同じ答えを覚えただけでなく、途中の値と理由を説明できるか確認します。

付属の32枚のカードは、この単元の判断を短く確認するために使えます。カードで思い出せても演習で間違えた場合は、トレース表に戻ります。次に学ぶ範囲は、より複雑な探索・整列、関数、モデル化・シミュレーションです。これらは本単元では扱っていません。

復習できたかは、初めて見る短い処理でも途中の値を書けるか、誤った処理に対して反例を一つ示せるかで確かめます。この教材内で全問正解しても、情報Ⅰ全体や共通テスト全科目の準備が完了したことにはなりません。

範囲の位置付けは、文部科学省の情報Ⅰ教材にある「コンピュータとプログラミング」に対応する基礎技能です。情報Ⅰ全体には情報社会、情報デザイン、ネットワークとデータ活用も含まれます。[文部科学省・情報Ⅰ教材](https://www.mext.go.jp/a_menu/shotou/zyouhou/detail/1416756.htm)

## Curated Flashcard Decks & Practice Sets

- **共通テスト情報Ⅰ：変数・条件分岐・繰返しを追跡する**: [Interactive Deck](https://flashcards.world/flashcards/sets/6d9211c5-3218-4f02-a1be-364e6d926eca/) | [Markdown (.md)](https://flashcards.world/flashcards/sets/6d9211c5-3218-4f02-a1be-364e6d926eca.md)
