メインコンテンツへスキップ
見出し画像

【基本情報】科目B 基礎確認ミニ問題集20問|トレース・配列・ループを全問解説

    「トレース表・配列・ループの解説を読んだ。自分だけでも解けるかな?」

    今回は、その確認に使えるオリジナル20問を用意しました📚 全問4択、解答と途中の考え方付き。まずは答えを見ずに解いて、正解数に加えて、どこで値を追えなくなったかを確認しましょう。

    1.この問題集の使い方

    問1〜5はトレース、問6〜10は配列、問11〜15はループ、問16〜20は組合せです。基礎練習なので、最初は時間を測らずに取り組んでください。

    全20問はアルゴリズムの基礎に絞っています。公式の科目B試験やその出題割合・難易度を再現した模擬試験ではなく、情報セキュリティなどは扱いません。この問題集の得点から本試験の合否を判断することはできません。

    この記事の問題はIT資格攻略chのオリジナル基礎演習です。説明用に型宣言などを省いた擬似言語を使います。←は代入、=は比較、≠は「等しくない」を表します。forの終点は含みます。配列の要素番号は、特記がなければ1から始まります。公式問題では、その問題の定義と表記を確認してください。

    答えは問題の後にまとめました。解くときは選んだ記号と、途中の値を記録してください。迷った問題には印を付けておくと、復習先を選びやすくなります。

    2.基礎確認20問

    問1 代入後の値

    最後のxは?

    x ← 4
    x ← x + 3
    x ← x × 2
    • ア:10

    • イ:11

    • ウ:14

    • エ:16

    問2 2つの変数

    最後の(a, b)は?

    a ← 3
    b ← 4
    a ← a + b
    b ← a - b
    • ア:(7, 3)

    • イ:(7, -1)

    • ウ:(3, 4)

    • エ:(7, 7)

    問3 一時変数

    最後の(a, b)は?

    a ← 2
    b ← 9
    temp ← a
    a ← b
    b ← temp
    • ア:(2, 9)

    • イ:(9, 9)

    • ウ:(2, 2)

    • エ:(9, 2)

    問4 境界の条件

    最後のyは?

    x ← 5
    y ← 0
    if (x が 5 より大きい)
        y ← 1
    else
        y ← 2
    endif
    • ア:0

    • イ:2

    • ウ:1

    • エ:5

    問5 2つの条件

    最後のzは?

    x ← 4
    y ← 7
    if ((x が 3 より大きい) and (y が 7 より小さい))
        z ← 10
    else
        z ← 20
    endif
    • ア:0

    • イ:7

    • ウ:10

    • エ:20

    問6 添字と値

    最後のxは?

    data ← {7, 4, 9, 2}
    i ← 3
    x ← data[i]
    • ア:3

    • イ:4

    • ウ:9

    • エ:2

    問7 値を添字へ

    最後のxは?

    data ← {3, 1, 4, 2}
    i ← data[2]
    x ← data[i + 1]
    • ア:1

    • イ:2

    • ウ:3

    • エ:4

    問8 書き換え後の参照

    最後の配列は?

    data ← {2, 5, 8}
    data[1] ← data[2]
    data[3] ← data[1] + 1
    • ア:{2, 5, 3}

    • イ:{5, 5, 6}

    • ウ:{5, 5, 3}

    • エ:{2, 5, 6}

    問9 配列の交換

    最後の配列は?

    data ← {6, 2, 9}
    temp ← data[1]
    data[1] ← data[3]
    data[3] ← temp
    • ア:{9, 2, 9}

    • イ:{6, 2, 6}

    • ウ:{2, 6, 9}

    • エ:{9, 2, 6}

    問10 隣接要素の範囲

    1始まりの6要素の配列でdata[i]とdata[i+1]を比較する。iを1から増やすとき、範囲外を読まない最後のiは?

    • ア:4

    • イ:6

    • ウ:5

    • エ:7

    問11 forの合計

    最後のsumは?

    sum ← 0
    for (i を 1 から 4 まで 1 ずつ増やす)
        sum ← sum + i
    endfor
    • ア:10

    • イ:6

    • ウ:4

    • エ:15

    問12 増分が2のfor

    最後のcountは?

    count ← 0
    for (i を 2 から 7 まで 2 ずつ増やす)
        count ← count + 1
    endfor
    • ア:2

    • イ:4

    • ウ:6

    • エ:3

    問13 while終了時の値

    最後のxは?

    x ← 2
    while (x が 10 より小さい)
        x ← x × 2
    endwhile
    • ア:8

    • イ:10

    • ウ:16

    • エ:32

    問14 whileが0回

    最後のcountは?

    x ← 8
    count ← 0
    while (x が 5 以下)
        x ← x + 1
        count ← count + 1
    endwhile
    • ア:1

    • イ:0

    • ウ:3

    • エ:8

    問15 条件判定の回数

    whileの条件を判定する回数は?

    x ← 1
    while (x が 3 以下)
        x ← x + 1
    endwhile
    • ア:4

    • イ:3

    • ウ:2

    • エ:1

    問16 配列の合計

    最後のsumは?

    data ← {2, 5, 1, 4}
    sum ← 0
    for (i を 1 から 4 まで 1 ずつ増やす)
        sum ← sum + data[i]
    endfor
    • ア:10

    • イ:11

    • ウ:4

    • エ:12

    問17 条件に合う個数

    最後のcountは?

    data ← {3, 7, 5, 2, 8}
    count ← 0
    for (i を 1 から 5 まで 1 ずつ増やす)
        if (data[i] が 5 以上)
            count ← count + 1
        endif
    endfor
    • ア:2

    • イ:3

    • ウ:5

    • エ:20

    問18 負の数の最大値

    最後のmaxは?

    data ← {-6, -2, -9}
    max ← data[1]
    for (i を 2 から 3 まで 1 ずつ増やす)
        if (data[i] が max より大きい)
            max ← data[i]
        endif
    endfor
    • ア:0

    • イ:-9

    • ウ:-2

    • エ:-6

    問19 二重ループ

    最後のcountは?

    count ← 0
    for (i を 1 から 2 まで 1 ずつ増やす)
        for (j を 1 から 3 まで 1 ずつ増やす)
            count ← count + 1
        endfor
    endfor
    • ア:5

    • イ:3

    • ウ:9

    • エ:6

    問20 範囲が変わる二重ループ

    最後のcountは?

    count ← 0
    for (i を 1 から 4 まで 1 ずつ増やす)
        for (j を 1 から i まで 1 ずつ増やす)
            count ← count + 1
        endfor
    endfor
    • ア:10

    • イ:16

    • ウ:8

    • エ:4

    3.解答一覧

    画像

    4.全問解説

    問1 正解 ウ

    4→7→14。2行目で更新した7を3行目に使います。

    問2 正解 ア

    aは7に更新されます。その後bは7−4=3。更新後のaを使います。

    問3 正解 エ

    tempに2を保存し、aへ9、bへ2を入れます。上書き前の値がtempに残ります。

    問4 正解 イ

    5>5は偽。else側を実行するのでy=2です。

    問5 正解 エ

    4>3は真、7<7は偽。andは両方が真のときだけ真なので、else側の20です。

    問6 正解 ウ

    i=3は位置を表します。3番目の値は9です。

    問7 正解 ア

    data[2]=1なのでi=1。i+1=2となり、data[2]の値1を読みます。

    問8 正解 イ

    data[1]が5に変わった後、その5+1=6をdata[3]に入れます。

    問9 正解 エ

    元のdata[1]=6をtempへ保存し、1番目へ9、3番目へ6を入れます。

    問10 正解 ウ

    i+1は6以下である必要があります。i=5ならdata[5]とdata[6]、i=6ではdata[7]を読んでしまいます。

    問11 正解 ア

    1+2+3+4=10。終点4を含みます。

    問12 正解 エ

    実行時のiは2、4、6。次の8は7を超えるため、本体は3回です。

    問13 正解 ウ

    2→4→8→16。8<10は真なので16へ更新します。次の判定が偽で終了します。

    問14 正解 イ

    最初の8≦5が偽です。本体は一度も実行しません。

    問15 正解 ア

    x=1、2、3で真、4で偽。本体3回に、終了するための判定1回を加えて4回です。

    問16 正解 エ

    sumは0→2→7→8→12。添字の1+2+3+4を足す処理ではありません。

    問17 正解 イ

    条件に合う値は7、5、8の3つ。countへ加えるのは1なので、値の合計20ではありません。

    問18 正解 ウ

    maxは−6から始まり、−2で更新、−9では更新しません。負の数でも大小関係をそのまま比較します。

    問19 正解 エ

    外側2回、そのたびに内側3回。2×3=6です。

    問20 正解 ア

    内側の回数は1、2、3、4と変わります。1+2+3+4=10。4×4ではありません。

    5.間違えた問題から復習先を選ぶ

    • 問1〜5:トレース表の記事へ。現在の値、実行順、真偽判定を確認

    • 問6〜10:配列と添字の記事へ。番号と値、更新後の状態、参照範囲を確認

    • 問11〜15:for・whileの記事へ。開始値、増分、最後の条件判定を確認

    • 問16〜20:配列の状態とループの表を分けて書き、1回ずつ追う

    正解した問題でも、途中経過を書けなかった場合はもう一度確認してみましょう。選択肢から推測した正解と、処理を追って出した正解を分けて振り返ると、次の課題が見つかります。

    6.復習は「間違えた操作」を1行で残す

    「配列が苦手」ではなく、「data[3]を値3だと思った」「whileの最後の偽を数え忘れた」と書きます。翌日は解説を隠して、同じ手順で解き直してください。

    慣れてきたら初期値や条件を1つだけ変え、答えがどう変化するかを試しましょう。例えば問13の条件を「10より小さい」から「8より小さい」へ変えると、最後のxは8になります。8<8が偽になるためです。

    基礎を確認したら、探索・ソート・データ構造・関数などへ学習を広げ、公式問題にも取り組んでいきましょう🔥

    関連記事は基本情報の無料記事まとめへ。公式の問題文・表記を確認するならIPA 科目Bサンプル問題へ。

    シリーズを順番に学ぶ

    あなたへのおすすめ