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

全体

ペーパーテスト

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

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

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

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

    #include <stdio.h>
    
    int main(void) {
        int n;
    
        printf("整数を入力してください。"); scanf("%d", &n    );
        while (   -1000 <= n && n <= 1000   ) {
            printf("%d ", n);
            n *= -2;
        }
        putchar('\n');
        return 0;
    }
    
  3. 以下のプログラムの空欄に、

    • 3つのdouble型の引数 x, y, z を受け取り、 その平均値を返す関数
          double average3(double x, double y, double z)

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

    #include <stdio.h>
    
    
    
    
    
    
    int main(void) { double a = 1.0, b = 1.5, c = 3.0; printf("%f と %f と %f の平均は %f です。\n", a, b, c, average3(a, b, c)); return 0; }
  4. 正解は以下の通りである。(問題文の掲載は省略する。)

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

オンラインテスト


Koji Kagawa