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

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

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

1

I. 次のプログラムは一つの整数値を読み込んで、その空欄を埋めて、プログラムを完成させよ。

7の値を実数で表示するプログラムである。
5#include <stdio.h>
int main(void) {int n;
printf("整数を入力して下さい: "); scanf("}

printf("その 7/5 はreturn 0;(iii) です。Y=n",(i)(iv)",(ii)););

II. 次のプログラムの出力結果を書け。
#include <stdio.h>
int main(void) {int i = 2;
if (i >= 4) {i += 4;}else if (i >= 2) {i += 2;}if (i >= 0) {i -= 3;}printf("%d", i);}return 0;

III. 以下のプログラムの空欄を埋めて、5 以上 50 未満の 5 の倍数を小さい順にすべて出力するプログラムを完成させよ。
#include <stdio.h>
int main(void) {int i;}for (printf("%d ", i);}return 0;) {2IV. 以下のプログラムの空欄に、• 整数の引数を受け取り、その数を 2 倍してさらに 1 を足した整数を返す関数
int foo(int n)を定義せよ。

#include <stdio.h>

int main(void) {int i = 3;
printf("%d を 2 倍して、それに 1 を足した結果は %d です。Y=n", i, foo(i));}

return 0;

このプログラムは¨¥§ 3 を 2 倍して、それに 1 を足した結果は 7 です。と出力する。

¦3

V. 以下の選択問題に答えよ。
(i) 次のプログラムの出力結果を下の選択肢より 1 つ選べ。
#include <stdio.h>
int main(void) {double z;z = 2/5;
printf("%f ", z);z = (double)(2/5); printf("%f ", z);z = 2/((double)5); printf("%f ", z);printf("Y=n");
}
(A).
(C).

return 0;0.400000 0.400000 0.400000
0.000000 0.000000 0.400000

(B).
(D).

0.000000 0.400000 0.400000
0.000000 0.400000 0.000000(ii) 次のプログラムの出力結果を下の選択肢より 1 つ選べ。
#include <stdio.h>
int main(void) {int i;

}

(A).
(C).

for (i=1; i<40; i*=2) {printf("%d ", i);}printf("| %dY=n", i);return 0;

1 2 4 8 16 32 64 | 64
2 4 8 16 32 64 | 64

(B).
(D).

41 2 4 8 16 32 | 64
2 4 8 16 32 | 64

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

(0,0) (1,0) (2,0)(0,1) (1,1) (2,1)(0,2) (1,2) (2,2)(0,3) (1,3) (2,3)(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) (1,0) (2,0) (3,0)(0,1) (1,1) (2,1) (3,1)(0,2) (1,2) (2,2) (3,2)(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)(iv) 次のプログラムの出力結果を下の選択肢より 1 つ選べ。
#include <stdio.h>
int main(void) {int i, j;}for (i = 0; i < 4; i++) {for (j = 0; j <= i; j++) {printf("(%d,%d) ", i, j);}printf("Y=n");}return 0;

(A).

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

(B).

(0,0)
(0,1) (1,1)(0,2) (1,2) (2,2)(0,3) (1,3) (2,3) (3,3)(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,0) (1,1) (1,2)(2,0) (2,1)
(3,0)

5

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

例えば 、

int data[NUM] = { 17, 38, 100, 95, 23, 62, 77, 45, 69, 81 };のとき、このプログラムは¨¥§ 奇数は 7 個あります。と出力する。

¦

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

(vi) 次のプログラムの出力結果を下の選択肢より 1 つ選べ。
#include <stdio.h>
int arr[4][3] = { { 1, 0, 1 },{ 0, 1, 0 },{ 0, 1, 0 },{ 1, 0, 0 } };int main(void) {int i, j;for (i=0; i<3; i++) {for (j=0; j<4; j++) {if (arr[j][i]==1) {printf("○");} else {printf("×");}}printf("Y=n");
}
}

(A).

return 0;○×○×○××○×○××(B).

○×○×○××○×××○

(C).

○××○
×○○×
○×××

(D).

○××××○○×○××○(vii) 関数 int bar(int n) は、n が 3 の倍数であるか、または n を 10 進数で表したとき 1 の位の数が 3 であるときには 1 を、そうでないときは 0 を返す関数でる。
int bar(int n) {return;}プログラムの空欄にあてはまるものを下の選択肢から 1 つ選べ。
(A). n%10==0 && n%3==3(B). n%10==0 || n%3==3(C). n%10==3 && n%3==0(D). n%10==3 || n%3==07

(viii) 関数 firstNegative は int の配列 arr を引数として受け取り、arr の最初に現れる負の数の要素の位置（ 添字）を返す関数である。また、この引数の配列には必ず負の数が含まれていると仮定して良い。
（つまり、負の数が含まれない場合は考慮しなくて良い。）#include <stdio.h>
int firstNegative(int arr[]) {int i = 0;
while (あ) {;い}return i;}

int data[] = { 1, 2, 3, -6, 4, -5, -7 };int main(void) {printf("最初に負の要素が現れる添字は %d です。Y=n", firstNegative(data));return 0;

}

例えば 、

int data[] = { 1, 2, 3, -6, 4, -5, -7 };のとき、このプログラムは¨¥§ 最初に負の要素が現れる添字は 3 です。と出力する。

¦空欄

(A).
(C).

あ

い

あ: arr[i]<0
あ: arr[i]>=0の組み合わせとして、正しいものを下の選択肢から 1 つ選べ。
い: i++
い: arr[i]++

(B).
(D).

あ: arr[i]>=0
あ: arr[i]<0(ix) 次のプログラムの出力結果を下の選択肢から 1 つ選べ。
#include <stdio.h>void baz(int n) {if (n>0) {baz(n-2);
printf("%d ", n);baz(n-1);}}
int main(void) {baz(4);return 0;}
(A).
(C).

2 1 4 1 3 2 1
1 2 3 1 4 1 2

(B).
(D).

8

2 1 4 1 3 1 2
1 2 3 1 4 2 1

い: i++
い: arr[i]++プログラミング I・期末テスト解答用紙 （ ’09 年 2 月 18 日）

学籍番号

氏名

(各 1 点)

I.
(i).

(ii).

(iii).

(iv).

II.

(2 点)

III.

(4 点)

IV.

(4 点)

V.

(各 2 点)
(i).

(ii).

(iii).

(iv).

(v).

(vi).

(vii).

(viii).

(ix).

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

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

2