2019年度 コンピュータサイエンス第一 (クラス 1b, 2b)
試験問題サンプル

おおむねこんな問題が出題されます。
(回答は、空欄の中の文字を選択してコピー・ペーストすると表示されます)

fact.py

  1. 与えられた数 n の階乗 n! を 計算する関数 fact を書きたい。以下の空欄を埋めよ。
    def fact(n):
        x = 1
        for i in range(n):
            x = x * (i + 1)
        return x
    
  2. 同じ関数を、while文を使った別の書き方をするとどうなるか。 以下の空欄を埋めよ。
    def fact(n):
        x = 1
        while 0 < n:
            x = x * n
    
    n = n - 1
    return x
  3. 上の関数 fact を改良して、 n! ではなく n! ÷ (n-r)! を効率よく 計算する関数 fact2 を作りたい。 以下の空欄を埋めよ。
    def fact2(n, r):
        x = 1
    
    while 0 < r: x = x * n n = n - 1 r = r - 1
    return x

calendar.py

  1. 以下のプログラムは2019年11月の簡単なカレンダーを表示する。 実行結果の最初の5行を書け。
    a = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]
    for i in range(30):
        d = i + 1
        w = (d + 4) % 7
        print(d, ":", a[w])
    

    実行結果 (最初の5行のみ):

    1 : Fri 2 : Sat 3 : Sun 4 : Mon 5 : Tue
  2. このプログラムを改良して、週の変わり目 (SatSun に変わる間) に 横線 --- だけの行を表示させたい。 以下の空欄を埋めよ。
    a = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]
    for i in range(30):
        d = i + 1
        w = (d + 4) % 7
        print(d, ":", a[w])
    
    if w == 6: print("---")
  3. このカレンダーを12月用に変更する場合、 上のプログラム中のどの数字を書き換える必要があるか。 「xy」のような形ですべて書け。 なお、2019年12月1日は日曜日である。
    30 → 31 4 → 6

bar.py

  1. 以下のプログラムは何を表示するか。
    for i in range(5):
        y = 5-i
        s = str(y)+":"
        for x in range(4):
            s = s + "X"
        print(s)
    

    実行結果:

    5:XXXX 4:XXXX 3:XXXX 2:XXXX 1:XXXX
  2. 与えられた配列を使って、 縦の棒グラフを表示する関数 bar を書きたい。 プログラム中の空欄を埋めよ。
    def bar(a):
        for i in range(5):
            y = 5-i
            s = ""
            for x in range(len(a)):
                n = a[x]
    
    if y <= n: s = s + "X" else: s = s + " "
    print(s) return bar([4, 1, 0, 3])

    上のプログラムを実行すると、以下のように表示されるものとする:

    X
    X  X
    X  X
    XX X
    
  3. このプログラムには、明らかな制限がある。それはなにか。
    1. 棒グラフの高さは5行まで。 2. 表現できるのは整数の値のみ。

Yusuke Shinyama