2018 年度プログラミング・期末テスト・解答例

全体

ペーパーテスト

  1. 以下のプログラムは動作はするがインデンテーションが滅茶苦茶でプログラムの構造を正しく反映していない。 (そして、おそらく作成者の意図したように は動かない。) プログラムの構造を明確にするために「プログラミング」のインデンテーションの約束事(別紙)に厳密に従って (特にⅴ番目のルールに注意)、必要に応じてブレースを挿入し、 インデントしなおせ。ただし、この問題では、ブレース内の字下げは3文字分とせよ。

    もちろん、プログラムの意味(実行結果)が変わらないようにすること。

    解答は、最初の #include <stdio.h> は省略せよ。また、 解答欄のスペースの都合で、空行は入れずに記入せよ。なお、 putcharp-----rwhilew---e のように省略してよい。

    int main(void) {
    int i, j;
    for (i = 0; i < 6; i++) 
    for (j = 1; j < 100; j *= 2)
    if (j % 10 == 4) putchar('@');
    else putchar('*'); putchar('#');
    if (i % 3 == 0) putchar('$'); 
    return 0;
    }
    
  2. 次のプログラムは、「実数を入力してください。」と出力してから一つの実数値を読み込んで、 その数を初項とし、以降の各項が前項の 0.5 倍 になる数列(公比 0.5 の等比数列)の、第 1 項から第 10 項まで表示するプログラムである。 空欄を埋めて、プログラムを完成させよ。

    #include <stdio.h>
    
    int main(void) {
        int i; 
        double d;
    
        printf("実数を入力してください。"); scanf("%lf", &d);
        for (   i = 0;  i < 10; i++    ) {
            printf("%.2f ", d);
               d /= 2   ;
        }
        putchar('\n');
    
        return 0;
    }
    
  3. 以下のプログラムの空欄に、

    • 3つのdouble型の引数 a, b, c を受け取り、 \(b^2 - 4 a c\) を返す関数
          double discriminant(double a, double b, double c)

    を定義せよ。(解答欄は横幅が狭いので、適当なところで改行を入れること。)

    #include <stdio.h>
    
    
    
    
    
    
    int main(void) { double a = 1, b = 4, c = 6; printf("%.2f * x * x + %.2f * x + %.2f の判別式は %.2f です。\n", a, b, c, discriminant(a, b, c)); return 0; }

    このプログラムは

    1.00 * x * x + 4.00 * x + 6.00 の判別式は -8.00 です。
    

    と出力する。

  4. 正解は以下の通りである。(問題文の掲載は省略する。)

    (ⅰ).  (D),   
    (ⅱ).  (C),   
    (ⅲ).  (B),   
    (ⅳ).  (C),   
    (ⅴ).  (B),   
    (ⅵ).  (D),   
    (ⅶ).  (A),   
    (ⅷ).  (B),   
    (ⅸ).  (A),   
    (ⅹ).  (D),   
    

オンラインテスト


Koji Kagawa