プログラミング最短学習コース

テーマ

COURSE 01/27 · Q231

次のプログラムの実行した際の表示結果を答えよ。

(1)x = 3
(2)y = 4
(3)goukei = x + y
(4)表示する("合計は",goukei,"です。")
答えと解説を見る

答え合計は7です。

解説変数xとyに入っている値を足し、その結果を別の変数に保存します。
xが3、yが4なら、合計は7になります。

COURSE 02/27 · Q233

次のプログラムの実行した際の表示結果を答えよ。

(1)x = 1
(2)x = 2
(3)表示する("現在のxの値は", x, "です。")
答えと解説を見る

答え現在のxの値は2です。

解説代入文は、右辺を計算してから左辺の変数へ保存します。
同じ変数へ後から代入すると、前の値は新しい値に置き換わります。

COURSE 03/27 · Q235

次のプログラムの実行した際の表示結果を答えよ。

(1)x = 1
(2)y = 2
(3)tmp = x
(4)x = y
(5)y = tmp
(6)表示する("現在のxの値は", x, "です。")
(7)表示する("現在のyの値は", y, "です。")
答えと解説を見る

答え現在のxの値は2です。 現在のyの値は1です。

解説二つの変数を交換するときは、一方の値を一時変数に退避します。
退避せずに上書きすると、最初の値を失ってしまいます。

COURSE 04/27 · Q236

次のプログラムの実行した際の表示結果を答えよ。

(1)x = 10
(2)x = x + 1
(3)表示する("現在のxの値は", x, "です。")
答えと解説を見る

答え現在のxの値は11です。

解説右辺のx+1を計算した結果を、同じxへ代入します。
読み出しは代入前に行われるので、xは元の値より1大きくなります。

COURSE 05/27 · Q241

次のプログラムの実行した際の表示結果を答えよ。

(1)Data = [3, 5, 9]
(2)表示する("Data[0]は", Data[0])
(3)表示する("Data[1]は", Data[1])
(4)表示する("Data[2]は", Data[2])
(5)表示する("Dataは", Data)
答えと解説を見る

答えData[0]は3 Data[1]は5 Data[2]は9 Dataは[3, 5, 9]

解説配列の添字が0から始まる場合、最初の要素はData[0]です。
添字を一つずつ増やすと、配列の先頭から順に参照できます。

COURSE 06/27 · Q242

次のプログラムの実行した際の表示結果を答えよ。

(1)Data = [3, 5, 9]
(2)Data[0] = 4
(3)表示する("現在のDataは",Data)
答えと解説を見る

答え現在のDataは[4, 5, 9]

解説Data[0]へ4を代入すると、配列の先頭要素だけが4になります。
配列全体の値が同じになる操作ではありません。

COURSE 07/27 · Q248

次のプログラムの実行した際の表示結果を答えよ。
2次元配列Matrixの要素の値Matrix[i, j]は次の通りである。
1 2 3
4 5 6

(1)表示する(Matrix[0, 0])
(2)表示する(Matrix[0, 1])
(3)表示する(Matrix[1, 2])
答えと解説を見る

答え1 2 6

解説添字は0から始まり、Matrix[行, 列]の順に位置を指定します。
Matrix[0,0]は1、Matrix[0,1]は2、Matrix[1,2]は6なので、1、2、6の順に表示されます。

COURSE 08/27 · Q252

次のプログラムの実行した際の表示結果を答えよ。

(1)x = 7
(2)もし x < 10 ならば:
(3)| 表示する("xに10を加える。")
(4)⎿ x = x + 10
(5)表示する("xの値は", x)
答えと解説を見る

答えxに10を加える。 xの値は17

解説x=7では条件x<10が成り立つため、まず「xに10を加える。
」と表示します。
続いてxを7+10=17へ更新し、分岐の外で「xの値は17」と表示します。

COURSE 09/27 · Q255

次のプログラムの実行した際の表示結果を答えよ。

(1)x = 7
(2)もし x > 10 ならば:
(3)| 表示する("xは10より大きいです。")
(4)そうでなければ:
(5)⎿ 表示する("xは10以下です。")
答えと解説を見る

答えxは10以下です。

解説x>10が偽のときは、xが10以下であることが分かります。
else側では、その条件に対応する処理が行われます。

COURSE 10/27 · Q260

次のプログラムの実行した際の表示結果を答えよ。

(1)x = 7
(2)もし x > 10 ならば:
(3)| 表示する("xは10より大きいです。")
(4)そうでなくもし x > 5 ならば:
(5)| 表示する("xは5より大きく10以下です。")
(6)そうでなければ:
(7)⎿ 表示する("xは5以下です。")
答えと解説を見る

答えxは5より大きく10以下です。

解説条件を上から順に調べ、最初に真になった分岐だけを実行します。
7は10より大きくありませんが、5より大きいので中央の分岐です。

COURSE 11/27 · Q263

次のプログラムでageに19、is_studentにYesと入力した場合の実行した際の表示結果を答えよ。

(1)age = 【外部からの入力】 #19と入力
(2)is_student = 【外部からの入力】 #Yesと入力
(3)もし age <= 18 ならば:
(4)| 表示する("25%の割引")
(5)そうでなければ:
(6)| もし is_student == "Yes" ならば:
(7)| | 表示する("20%の割引")
(8)| そうでなければ:
(9)⎿ ⎿ 表示する("割引なし")
答えと解説を見る

答え20%の割引

解説年齢条件で対象外になった後、学生かどうかを調べます。
19歳の学生なら、学生向けの20%割引の条件に該当します。

COURSE 12/27 · Q265

次のプログラムでageに19、is_studentにYesと入力した場合の実行した際の表示結果を答えよ。

(1)age = 【外部からの入力】 #19と入力
(2)is_student = 【外部からの入力】 #Yesと入力
(3)もし age <= 18 or age >= 65 ならば:
(4)| price = 1200
(5)そうでなくもし age <= 25 and is_student == "Yes" ならば:
(6)|  price = 1500
(7)そうでなければ:
(8)⎿  price = 1800
(9)表示する(price, "円です。")
答えと解説を見る

答え1500円です。

解説19歳は最初の「18歳以下または65歳以上」に当てはまりません。
次の「25歳以下かつ学生」が成立するためpriceへ1500が直接代入され、「1500円です。
」と表示されます。
割引率を計算する処理はありません。

COURSE 13/27 · Q270

次のプログラムの実行した際の表示結果を答えよ。

(1)i を 1 から 5 まで 1 ずつ増やしながら繰り返す:
(2)⎿ 表示する("今のiは", i)
(3)表示する("繰り返し終了")
答えと解説を見る

答え今のiは1 今のiは2 今のiは3 今のiは4 今のiは5 繰り返し終了

解説iは1、2、3、4、5と変化し、各回で現在のiを1行ずつ表示します。
5回の繰り返しが終わると、ループの外にある「繰り返し終了」を最後に1回だけ表示します。

COURSE 14/27 · Q272

次のプログラムの実行した際の表示結果を答えよ。

(1)sum = 0
(2)i を 1 から 5 まで 1 ずつ増やしながら繰り返す:
(3)| sum = sum + i
(4)⎿ 表示する("現在の合計は", sum)
(5)表示する("最終的な合計は", sum)
答えと解説を見る

答え現在の合計は1 現在の合計は3 現在の合計は6 現在の合計は10 現在の合計は15 最終的な合計は15

解説変数iを毎回加えるなら、1、2、3、4、5を順番に合計します。
累積値は1、3、6、10、15と変化します。

COURSE 15/27 · Q276

次のプログラムの実行した際の表示結果を答えよ。
ただし、要素数(配列)は配列の要素数を返すものとする。

(1)Tokuten = [5, 7, 8, 4]
(2)sum = 0
(3)i を 0 から 要素数(Tokuten) - 1 まで 1 ずつ増やしながら繰り返す
(4)⎿ sum = sum + Tokuten[i]
(5)average = sum / 4
(6)表示する("4人の平均点は", average, "点です")
答えと解説を見る

答え4人の平均点は6点です

解説合計を求めるループでは、各値をsumへ加えます。
5+7+8+4は24で、4個の平均は6です。

COURSE 16/27 · Q278

次のプログラムの実行した際の表示結果を答えよ。

(1)count = 0
(2)i を 1 から 10 まで 1 ずつ増やしながら繰り返す:
(3)| もし i % 3 == 0 ならば:
(4)⎿ ⎿ count = count + 1
(5)表示する("3の倍数の個数は", count)
答えと解説を見る

答え3の倍数の個数は3

解説1から10までにある3の倍数は3、6、9の三つです。
条件が成り立つたびにcountを1増やすため、最後は「3の倍数の個数は3」と表示します。

COURSE 17/27 · Q281

次のプログラムでnumberに5→8→3→9→2と入力したときの実行した際の表示結果を答えよ。

(1)max_value = 0
(2)i を 1 から 5 まで 1 ずつ増やしながら繰り返す:
(3)| number = 【外部からの入力】
(4)| もし number > max_value ならば:
(5)⎿ ⎿ max_value = number
(6)表示する("最大値は", max_value)
答えと解説を見る

答え最大値は9

解説max_valueは0から始まります。
5で5、8で8へ更新され、3では変わらず、9で9へ更新され、最後の2でも変わらないため、「最大値は9」と表示されます。

COURSE 18/27 · Q282

次のプログラムの実行した際の表示結果を答えよ。

(1)i を 1 から 9 まで 1 ずつ増やしながら繰り返す:
(2)| j を 1 から 9 まで 1 ずつ増やしながら繰り返す:
(3)⎿ ⎿ 表示する(i, "×", j, "=", i * j)
答えと解説を見る

答え1×1=1 1×2=2 ︙ 1×9=9 2×1=2 2×2=4 ︙ 9×8=72 9×9=81

解説二重ループでは、外側の値を固定したまま内側を一周します。
行と列の組合せを作るので、九九のような表を生成できます。

COURSE 19/27 · Q285

次のプログラムの実行した際の表示結果を答えよ。

(1)sum = 0, i = 0
(2)i < 5 の間繰り返す:
(3)| i = i + 1
(4)| sum = sum + i
(5)⎿ 表示する("現在のsumは", sum ,", iは", i)
(6)表示する("最終的なsumは", sum)
答えと解説を見る

答え現在のsumは1, iは1 現在のsumは3, iは2 現在のsumは6, iは3 現在のsumは10, iは4 現在のsumは15, iは5 最終的なsumは15

解説while文は条件が真の間だけ続きます。
iを1から増やしながら足すと、1+2+3+4+5で15になります。

COURSE 20/27 · Q292

配列Tokutenには5人の生徒の得点が入力されている。
60点以上を合格、59点以下は不合格とする。
配列Gouhiに「合格」または「不合格」を入力するプログラムとなるように、空欄に入る最も適切なものを選べ。
ただし、配列の添字は0から始まるものとし、要素数(配列)は配列の要素数を返すものとする。

(1)Tokuten = [79, 55, 69, 80, 32]
(2)Gouhi = [" ", " ", " ", " ", " "]
(3)i を( ア )繰り返す:
(4)| もし( イ )ならば:
(5)| ⎿ Gouhi[i] = "合格"
(6)| そうでなければ:
(7)⎿ ⎿ Gouhi[i] = "不合格"

( ア )
1.0 から 要素数(Tokuten) まで 1 ずつ増やしながら
2.0 から 要素数(Tokuten) - 1 まで 1 ずつ増やしながら
3.1 から 要素数(Tokuten) まで 1 ずつ増やしながら
4.1 から 要素数(Tokuten) - 1 まで 1 ずつ増やしながら

( イ )
1.Tokuten[i] >= 60
2.Tokuten[i] <= 59
3.Gouhi[i] == "合格"
4.Gouhi[i] == "不合格"
答えと解説を見る

答えア 2.0 から 要素数(Tokuten) - 1 まで 1 ずつ増やしながら イ 1.Tokuten[i] >= 60

解説5要素の添字は0~4なので、iは0から要素数(Tokuten)−1まで動かします。
各Tokuten[i]が60以上なら同じ位置のGouhi[i]を「合格」にし、それ以外を「不合格」にするため、アは選択肢2、イは選択肢1です。

COURSE 21/27 · Q301

次のプログラムは、配列 Tokuten に格納されたテストの素点をもとに、階級が0~9、10~19、……、80~89、90~の度数分布を作成するものである。
度数分布は配列Dosuに格納する。
Dosu[0]に階級0~9の度数、Dosu[1]に階級10~19の度数、……、Dosu[9]に階級90~の度数を格納する。
素点は0から100の整数値である。
a % bはaをbで割ったときのあまりを返し、a ÷ bはaをbで割ったときの商を返す。
配列の添字は0から始まるものとし、要素数(配列)は配列の要素数を返すものとする。
空欄に入る最も適切なものを選べ。

(1)Tokuten = 【外部からの入力】
(2)Dosu = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] #配列を初期化
(3)i を 0 から 要素数(Tokuten) - 1 まで 1 ずつ増やしながら繰り返す:
(4)| もし Tokuten[i] == 100 ならば:
(5)| | index = ( ア )
(6)| そうでなければ:
(7)| ⎿ index = ( イ )
(8)⎿ Dosu[index] = Dosu[index] + 1
(9)表示する("度数分布は", Dosu)

1.ア 9 イ Tokuten[i] % 10
2.ア 9 イ Tokuten[i] ÷ 10
3.ア 10 イ Tokuten[i] % 10
4.ア 10 イ Tokuten[i] ÷ 10
答えと解説を見る

答え2.ア 9 イ Tokuten[i] ÷ 10

解説0から9の10個の区間へ得点を分類するなら、得点を10で割った整数部分を添字として使えます。
90点台や100点は最後の区間へまとめます。

COURSE 22/27 · Q310

次のプログラムは配列Arrayをバブルソートで昇順に整列するものである。
実行回数ができるだけ少なくなるように空欄に入る最も適切なものを選べ。
ただし、バブルソートとは次の手順により配列の並びを整列するものである。
・隣り合う2つの要素の値を比較し、左側のほうが値が大きければ要素の値を交換する。
・この操作を左から順に行う。
→配列内の最大の要素が右端に来る。
・右端を除いた部分(未ソート部分)でこの操作を繰り返す。
・未ソート部分がなくなれば終了する。
配列の添字は左端を0とし、要素数(配列)は配列の要素数を返すものとする。

(1)Array = 【外部からの入力】
(2)i を 0 から ( ア ) まで 1 ずつ増やしながら繰り返す:
(3)| j を 0 から ( イ ) まで 1 ずつ増やしながら繰り返す:
(4)| | もし Array[j] > Array[j + 1]ならば:
(5)| | | tmp = Array[j]
(6)| | | Array[j] = Array[j + 1]
(7)⎿ ⎿ ⎿ Array[j + 1] = tmp
(8)表示する("バブルソート後:", Array)

( ア )
1.要素数(Array)
2.要素数(Array) - 1
3.要素数(Array) - 2
4.要素数(Array) - 3
( イ )
1.要素数(Array) - i
2.要素数(Array) - i - 1
3.要素数(Array) - i - 2
4.要素数(Array) - i - 3
答えと解説を見る

答えア 3.要素数(Array) - 2 イ 3.要素数(Array) - i - 2

解説要素数をnとすると、全体の走査はi=0~n−2のn−1回で十分なので、アは要素数(Array)−2です。
i周目には右端側のi個が確定しており、jとj+1を比べる最後のjはn−i−2となるため、イは要素数(Array)−i−2です。

COURSE 23/27 · Q315

次のプログラムは配列Arrayの中に変数targetの値が存在するかを調べる線形探索のものである。
線形探索が正しく実行されるように空欄に入る最も適切なものを選べ。
線形探索とは次の手順で配列の要素の値を探索するものである。
・配列の要素を前から順にひとつずつ調べていく。
・変数targetの値と等しい要素の値を見つけたら、要素の番号を表示する。
・配列の中に変数targetの値と等しい要素の値が存在しなければ、存在しない旨を表示する。
配列の添字は左端を0とし、要素数(配列)は配列の要素数を返すものとする。

(01)Array = 【外部からの入力】
(02)target = 【外部からの入力】
(03)found = -1
(04)iを 0 から 要素数(Array) - 1 まで 1 ずつ増やしながら繰り返す:
(05)| もし ( ア )ならば:
(06)⎿ ⎿ found = i
(07)もし ( イ ) ならば:
(08)| 表示する(target, "は配列の", found, "番目の要素です")
(09)そうでなければ:
(10)⎿ 表示する(target, "は配列の中に存在しません")

( ア )
1.Array[i] == target
2.Array[i] != target
3.Array[i] >= target
4.Array[i] <= target

( イ )
1.found == -1
2.found != -1
3.found == 0
4.found != 0
答えと解説を見る

答えア 1.Array[i] == target イ 2.found != -1

解説Array[i]がtargetと等しいとき、その添字iをfoundへ保存するので、アは選択肢1です。
foundは−1で始まり、見つかれば0以上の添字に変わるため、発見済みを判定するイはfound != −1、つまり選択肢2です。

COURSE 24/27 · Q318

乱数()は0以上1未満の実数をランダムに返す関数であり、整数(x)は実数xを超えない最大の整数を返す関数である。
1から5の整数をランダムに返す関数は次のうちどれか。

1.5 * 整数(乱数())
2.5 * 整数(乱数()) + 1
3.整数(5 * 乱数())
4.整数(5 * 乱数()) + 1
答えと解説を見る

答え4.整数(5 * 乱数()) + 1

解説0以上1未満の乱数に5を掛けて整数部分を取り、1を加えると1〜5になります。
整数部分は0〜4のいずれかです。

COURSE 25/27 · Q324

このプログラムはコインを20回投げるという試行を100セット行い、各セットで表が出た回数を度数分布表にまとめるものである。
乱数()は0以上1未満の実数をランダムに返す関数であり、配列の添字は0から始まるものとする。
空欄に入る最も適切なものを選べ。

(1)dosu = [0, ... ,0] #すべての要素が0,十分な要素数
(2)toss = 20, set = 100
(3)i を 1 から set まで 1 ずつ増やしながら繰り返す:
(4)| count = 0
(5)| j を 1 から toss まで 1 ずつ増やしながら繰り返す:
(6)| | もし 乱数() < 0.5 ならば:
(7)| ⎿ ⎿ count = count + 1
(8)⎿ ( ア )
(9)表示する("結果:", dosu)

1.dosu[j] = count
2.dosu[i] = count
3.dosu[count] = count
4.dosu[count] = dosu[count] + 1
答えと解説を見る

答え4.dosu[count] = dosu[count] + 1

解説各セットで表が出た回数をcountに数え、dosu[count]を1増やします。
countを添字にすることで、「表がn回だったセットが何回あったか」を度数分布として集計できます。

COURSE 26/27 · Q325

ランダムに誕生日を生成していき、初めて同じ誕生日が現れるまでの回数をカウントするプログラムとなるように、空欄に入る最も適切なものを選べ。
ランダム日付()は1月1日から12月31日までの日付のうち一つをランダムに返す関数であり、要素追加(配列, 値)は配列の末尾に新しい要素を追加する関数である。
また、「配列 に 値 が含まれている」は配列に値が含まれているときに真となり、そうでなければ偽となるとする。

(01)Birthdays = [] #空の配列
(02)found = 0 , count = 0
(03)( ア ) の間繰り返す:
(04)| day = ランダム日付()
(05)| count = count + 1
(06)| もし Birthdays に day が含まれている ならば:
(07)| | ( イ )
(08)| そうでなければ:
(09)⎿ ⎿ 要素追加(Birthdays, day)
(10)表示する("同じ誕生日が見つかるまでの回数:", count)

( ア )( イ )
1.found = 0
2.found = 1
3.found == 0
4.found == 1
答えと解説を見る

答えア 3.found == 0 イ 2.found = 1

解説新しい値を既存配列へ追加する前に、同じ値があるかを調べます。
重複が見つかったらフラグを1にし、重複なしのときだけ追加します。

COURSE 27/27 · Q330

次のプログラムはあるコンビニに設置された1台のATMの平均待ち時間についてのシミュレーションである。
・このATMの作動時間は1日900分である。
・顧客は毎分0.1の確率で訪れる。
・顧客一人あたりのATM利用時間は2分から6分のランダムな時間である。
乱数()は0以上1未満の実数を返す関数であり、ランダム整数(n, m)はnからmの整数をランダムに返す関数である。
空欄に入る最も適切なものを選べ。
※ 読みやすくするため、変数名も日本語にしている。

(01)営業終了時刻 = 900
(02)現在時刻 = 0
(03)利用時間 = 0 #利用時間が0ならば利用可能状態
(04)待ち客数 = 0 #現在の待っている人数
(05)総待ち時間 = 0 #複数人いる場合重複して数える
(06)顧客数 = 0 #来客者数全体
(07)現在時刻 < 営業終了時刻 の間繰り返す:
(08)| もし 乱数() < 0.1 ならば:
(09)| | 待ち客数 = 待ち客数 + 1
(10)| ⎿ 顧客数 = 顧客数 + 1
(11)| もし 利用時間 > 0 ならば:
(12)| ⎿ 利用時間 = 利用時間 - 1
(13)| もし ( ア ) ならば:
(14)| | 利用時間 = ランダム整数(2, 6)
(15)| ⎿ 待ち客数 = 待ち客数 - 1
(16)| もし 待ち客数 > 0 ならば:
(17)| ⎿ 総待ち時間 = 総待ち時間 + 待ち客数
(18)⎿ 現在時刻 = 現在時刻 + 1
(19)表示する("本日の来客者数:", 顧客数)
(20)表示する("平均待ち時間", 総待ち時間 / 顧客数)

( ア )
1.待ち客数 > 0
2.利用時間 == 0
3.待ち客数 > 0 and 利用時間 == 0
4.待ち客数 > 0 or 利用時間 == 0
答えと解説を見る

答え3.待ち客数 > 0 and 利用時間 == 0

解説待ち行列に客がいて、かつATMが空いているときに次の客の処理を開始します。
平均待ち時間は、待ち時間の合計を客数で割って求めます。