プログラミング I
期末テスト（ペーパーテスト ）問題用紙（ ’12 年 2 月 15 日）

解答上、その他の注意事項

I. 問題は、問 I〜V まである。
II. 持ち込みは 不可 である。筆記用具・時計・学生証以外のものは、かばんの中などにしまうこと。
III. 解答用紙の右上の欄に学籍番号・名前を記入すること。
IV. 解答欄がマス目になっている場合は、1 字に 1 マスを用いること。特に空白にも必ず 1マスを用いること
V. 解答中の文字 (特に a と d) がはっきりと区別できるよう注意すること。
VI. 配点は 32 点とする。
（オンラインテスト — 8 点）

1

I. 次のプログラムは一つの実数値を読み込んで、その 1.618 倍の値を実数で表示するプログラムである。空欄を埋めて、プログラムを完成させよ。
1 #include <stdio.h>
2
3 int main(void) {4double d;5
printf("実数を入力して下さい: "); scanf(" (i) ",6printf("その 1.618 倍は (iii) です。\n",78 }return 0;(iv)(ii) ););

II. 次のプログラムの出力結果を書け。
1 #include <stdio.h>
2
3 int main(void) {4int a = 2, b = 4, c = 5, d = 3;
5if (a < b) {6a = b;7} else if (a < c) {8a = c;9} else if (a < d) {10a = d;11}12printf("%d", a);13
return 0;
14 }III. 以下のプログラムの空欄を埋めて、12 以上 60 未満の 6 の倍数を小さい順にすべて出力するプ
ログラムを完成させよ。
1 #include <stdio.h>23 int main(void) {4int n;5for (6printf("%d ", n);7}8return 0;9 }) {2

IV. 以下のプログラムの空欄に、• 整数の引数を受け取り、その数を 3 倍して 2 を引いた整数を返す関数
int foo(int n)を定義せよ。

1 #include <stdio.h>23
45 int main(void) {6int i = 3;
7
printf("%dを 3 倍し て 、それ から 2を 引いた 結果は %dです。 \n", i, foo(i));
89return 0;
10 }このプログラムは

3を 3 倍し て 、それ から 2を 引いた 結果は 7で す 。と出力する。

3

V. 以下の選択問題に答えよ。
(i) 次のプログラムの出力結果を下の選択肢より 1 つ選べ。
1 #include <stdio.h>
23 int main(void) {4int n;5double z;
67n = 8/5;
printf("%f ", (double)n);8z = 8/5;
printf("%f ", z);
9z = 8.0/5; printf("%f ", z);
10
printf("\n");11
12return 0;
13 }
(A).
(C).

1.600000 1.600000 1.600000
1.000000 1.600000 1.600000

(B).
(D).

1.000000 1.600000 1.000000
1.000000 1.000000 1.600000(ii) 次のプログラムの出力結果を下の選択肢より 1 つ選べ。
1 #include <stdio.h>
2
3 int main(void) {4int i;56for (i=1; i<80; i*=3) {7printf(" %d", i);8}9printf(" | %d\n", i);10
11return 0;
12 }
(A).
(C).

(B).
(D).

1 3 9 27 | 27
1 3 9 27 | 81

4

1 3 9 27 | 80
1 3 9 27 81 | 81

(iii) 次のプログラムの出力結果を下の選択肢より 1 つ選べ。
1 #include <stdio.h>
2
3 int main(void) {4int i, j;
56for (i = 0; i < 4; i++) {7for (j = 0; j < 3; j++) {8
printf("(%d,%d) ", i, i+j);
9}10
printf("\n");
11}
12
13
return 0;
14 }
(A).

(0,0) (0,1) (0,2)(1,1) (1,2) (1,3)(2,2) (2,3) (2,4)(3,3) (3,4) (3,5)(B).

(0,0) (0,1) (0,2)(1,0) (1,1) (1,2)(2,0) (2,1) (2,2)(3,0) (3,1) (3,2)(C).

(0,0) (0,1) (0,2) (0,3)(1,1) (1,2) (1,3) (1,4)(2,2) (2,3) (2,4) (2,5)(D).

(0,0) (0,1) (0,2) (0,3)(1,0) (1,1) (1,2) (1,3)(2,0) (2,1) (2,2) (2,3)

5

(iv) 次のプログラムの出力結果を下の選択肢より 1 つ選べ。
1 #include <stdio.h>
23 int main(void) {4int i, j;
56for (i = 0; i < 4; i++) {7for (j = i; j < 4; j++) {8
printf("(%d,%d) ", i, j);9}10
printf("\n");
11}
12
13
return 0;
14 }
(A).

(0,0) (1,0) (2,0) (3,0)(1,1) (2,1) (3,1)(2,2) (3,2)
(3,3)

(B).

(0,0) (0,1) (0,2) (0,3)(1,0) (1,1) (1,2)(2,0) (2,1)
(3,0)

(C).

(0,0) (1,0) (2,0) (3,0)(0,1) (1,1) (2,1)(0,2) (1,2)
(0,3)

(D).

(0,0) (0,1) (0,2) (0,3)(1,1) (1,2) (1,3)(2,2) (2,3)
(3,3)

6

(v) 次のプログラムは、int の配列 data の中の 70 未満の要素の個数を数えて出力する。
12345678910
1112131415
1617
18#include <stdio.h>#define NUM 10
int main(void) {int k, n=0;
int data[NUM] = { 17, 38, 100, 95, 23, 62, 77, 45, 69, 81 };for (if (data[k] < 70) {n++;}}) {printf("70 未満の 要素は %d 個あります 。 \n", n);return 0;}
例えば 、

int data[NUM] = { 17, 38, 100, 95, 23, 62, 77, 45, 69, 81 };のとき、このプログラムは

70 未満の 要素は 6 個あ ります 。

と出力する。
プログラムの空欄に当てはまるものを以下の選択肢から 1 つ選べ。
(A). k=0; k<=NUM; k++(B). k=0; k<NUM; k++(C). k=1; k<=NUM; k++(D). k=1; k<NUM; k++7

(vi) 次のプログラムの出力結果を下の選択肢より 1 つ選べ。
123
4
5
6
7
8
9
10
1112
13
14
15
16
17

#include <stdio.h>
int arr[4][4] = { { 1, 2, 3, 4 },{ 5, 6, 7, 8 },{ 9, 0, 1, 2 },{ 3, 4, 5, 6 } };int main(void) {int i, j;for (i=0; i<4; i+=2) {for (j=1; j<4; j+=2) {printf("%d", arr[i][j]);}printf("\n");}return 0;}(A).

5735(B).

(C).

2402

2042(D).

5375(vii) 関数 int bar(int n) は、n が 7 で割って 3 余り、かつ 10 で割って 4 余る整数であるときには 1 を、そうでないときは 0 を返す関数である。
1 int bar(int n) {2
return3 };プログラム（の一部）の空欄にあてはまるものを下の選択肢から 1 つ選べ。
(A). n%7==3 || n%10==4(B). n/7%3 || n/10%4(C). n%7==3 && n%10==4(D). n/7%3 && n/10%48

(viii) 関数 firstZ は int の配列 vc を引数として受け取り、vc の最初に現れる 0 の位置（添字）を返す関数である。また、この引数の配列には必ず 0 が含まれていると仮定して良い。
（つまり、0 が含まれない場合は考慮しなくて良い。）
1234567891011121314151617#include <stdio.h>
int firstZ(int vc[]) {int k = 0;
while (あ) {い ;}return k;}
int data[] = { 1, 3, -3, -6, 4, -5, -7, 0, 9, -1, 0 };int main(void) {printf("最初に 0が 現れ る添字は %dです。 \n", firstZ(data));return 0;}
例えば 、

int data[] = { 1, 3, -3, -6, 4, -5, -7, 0, 9, -1, 0 };のとき、このプログラムは

最初に 0が 現れ る添字は 7で す 。

と出力する。
空欄

(A).
(C).

あ

い

あ: vc[k]!=0
あ: vc[k]==0の組み合わせとして、正しいものを下の選択肢から 1 つ選べ。
い: k++
い: k--

(B).
(D).

9

あ: vc[k]==0
あ: vc[k]!=0

い: k++
い: k--

(ix) 次のプログラムの出力結果を下の選択肢から 1 つ選べ。
1234567891011121314#include <stdio.h>void baz(int n) {if (n>0) {baz(n-3);
printf("%d ", n);baz(n/3);}}
int main(void) {baz(9);
return 0;}
(A).
(C).

(B).
(D).

1 3 1 9 1 3 1
3 6 3 9 3 6 310

1 3 9 2 6 1 3
3 1 6 2 9 3 1

プログラミング I・期末テスト解答用紙 （ ’12 年 2 月 15 日）

学籍番号

氏名

( 各 1 点)

I.
(i).

(ii).

(iii).

(iv).

II.

(2 点)

III.

(4 点)

IV.

(4 点)

V.

( 各 2 点)
(i).

(ii).

(iii).

(iv).

(v).

(vi).

(vii).

(viii).

(ix).

裏面に感想を記入する欄があります。
（ 計算用紙として使っても構いません。）

授業・テストの感想.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................

2