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

全体

ペーパーテスト

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

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

    解答は、最初の #include <stdio.h> は省略せよ。また、 解答欄のスペースの都合で、空行は入れずに記入せよ。

    int main(void) {
    int i, j;
    for (i = 0; i < 12; i++)
    for (j = 0; j < 12; j++) 
        if (j % 3 == 0) putchar('@'); 
        if (i % 5 == 0) putchar('*'); else putchar('#');
                                           putchar('\n');
    return 0; }
    
  2. 次のプログラムは一つの整数値を読み込んで、 それを11倍してから(整数として)10で割った値と、0.5 倍した値を表示するプログラムである。

    たとえば、25 を入力すると、

        それを 11 倍してから 10 で割った値は 27 です。
        それを 0.5 倍した値は 12.500000 です。
    

    と出力する。 空欄を埋めて、プログラムを完成せよ。

    int main(void) {
        int num;
        printf("整数を入力して下さい: ");
        scanf("%d  ", &x   );
        printf("それを 11 倍してから 10 で割った値は %d    です。\n",   num * 11 / 10  );
        printf("それを 0.5 倍した値は %f    です。\n",   0.5 * num);
        return 0;
    }
    
  3. 次のプログラムの出力を書け。

    int main(void) {
        int k = 42;
    
        if (k % 4 == 0) {
            printf("A ");
        } else if (k % 2 == 0) {
            printf("B ");
        } 
        if (k % 3 == 0) {
            printf("C ");
        } else if (k % 7 == 0) {
            printf("D ");
        }
        printf("\n");
        return 0;
    }
    
  4. 0 以上 120 以下の 3 の倍数をすべて降順 (つまり、120, 117, 114, …, 3, 0の順)に出力するプログラムを完成させよ。

    int main(void) {
        int k;
    
        for (                         ) {
            printf("%d ", k);
        }
    
        printf("\n");
        return 0;
    }
    
  5. 以下のプログラムは、整数の組のデータを (i,j) という形式で出力する。 このプログラムの出力を書け。ただし、 空白は明示的に空白記号(␣)を、 改行は明示的に矢印(↓)を書くこと。
    int main(void) {
        int i, j, n = 4;
        for (i = 1; i < n; i++) {
            for (j = i; j >= 1; j--) {
                printf("(%d,%d) ", i + j, i - j);
            }
            printf("\n");
        }
        return 0;
    }
    
    • 正解は以下の通りである。

      (2,0)␣↓
      (4,0)␣(3,1)␣↓
      (6,0)␣(5,1)␣(4,2)␣↓
      
    • 最後にもう一行、(8,0)␣(7,1)␣(6,2)␣(5,3)␣↓ を付け足してしまう誤りが多かった。 for (i = 1; i < n; i++) という形は n - 1 回しか繰り返さないことに注意する。

オンラインテスト


Koji Kagawa