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

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

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

1

I. 以下のプログラムは動作はするがインデンテーションが滅茶苦茶でプログラムの構造を正しく反映していない。（そして、おそらく作成者の意図したようには動かない。）プログラムの構造を明確にするために「プログラミング」のインデンテーションの約束事（別紙）に厳密に従って（特に V 番目のルールに注意）、必要に応じてブレースを挿入し、インデントしなおせ。ただし、この問題では、ブレース内の字下げは 3 文字分とせよ。
もちろん、プログラムの意味（実行結果）が変わらないようにすること。（つまり、作成者の（よくわからない）意図を忖度するのではなく、コンパイラーが解釈する通りにインデントすること。）
解答は、最初の #include <stdio.h> は省略せよ。また、解答欄のスペースの都合で、（最後は別として）空行は入れずに記入せよ。なお、putchar は p-----r のように省略してよい。

int main(void) {int i, j;for (i = 0; i < 9; i++)
if (i % 2 == 0)
for (j = 1; j < 9; j++)putchar(’&’);
else
putchar(’@’);
putchar(’*’);
return 0;}
II. 次のプログラムは、「整数を入力してください。」と出力してから一つの整数値を読み込んで、その 1/3 の値を小数第 3 位まで出力し、もし入力した整数が、-1 以下か 101 以上のときは続けて「想定外の入力です。」と出力するプログラムである。空欄を埋めて、プログラムを完成させよ。
1 #include <stdio.h>
23 int main(void) {4int n;5printf("整数を入力してください。"); scanf("%d", &n);(i));
6printf("その␣1/3␣ は ␣%.3f␣ です。\n",7if ((ii)) {8printf("想定外の入力です。\n");9}10putchar(’\n’);11
12
return 0;
13 }2

実行例 1実数を入力してください。 12
その 1/3 は 4.000 です。



実行例 2実数を入力してください。 100
その 1/3 は 33.333 です。



実行例 3





実数を入力してください。 -9
その 1/3 は -3.000 です。
想定外の入力です。



III. 以下のプログラムの空欄に、√• 2 つの double 型の引数 s, p を受け取り、 s2 − 4p を返す関数
double diff(double s, double p)を定義せよ。（平方根を求めるライブラリー関数は sqrt である。）

1234567891011121314#include <stdio.h>#include <math.h>int main(void) {double s = 7, p = 10;
printf("2 数の和が ␣%.2f 、積が ␣%.2f␣ のとき、差は ␣%.2f␣ です。\n",s, p, diff(s, p));return 0;}
このプログラムは

2 数の和が 7.00 、積が 10.00 のとき、差は 3.00 です。

と出力する。

3IV. 以下の問に答えよ。
(i) 次のプログラムの出力結果を下の選択肢より 1 つ選べ。
1 #include <stdio.h>
2
3 int main(void) {4
double x, y, z, w;
5
6x = ((double)2) / 5; printf("%f␣", x);
7y = 2 / 5;
printf("%f␣", y);8
w = 5; z = 2 / w;
printf("%f␣", z);
9putchar(’\n’);10
11
return 0;
12 }
(A).
(C).

0.000000 0.400000 0.400000
0.400000 0.000000 0.400000

(B).
(D).

0.400000 0.400000 0.000000
0.400000 0.000000 0.000000(ii) 次のプログラムの出力結果を下の選択肢より 1 つ選べ。
1 #include <stdio.h>
23 int main(void) {4int a = 2, b = 3, c = 5, d = 8;
5if (a < b) {6a = b;7}8if (a < c) {9a = c;10} else if (a < d) {11a = d;12}
13
printf("%d\n", a);1415
return 0;
16 }
(A).

2(B).

(C).

3

45(D).

8

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

(B).
(D).

0 1 2 3 4 5+6
0 1 2 3 4 5 6+6

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

(9,8) (9,2)(4,8) (4,2)(2,8) (2,2)(1,8) (1,2)(B).

(8,9) (8,4) (8,2) (8,1)(2,9) (2,4) (2,2) (2,1)(C).

(9,8) (9,4) (9,2) (9,1)(3,8) (3,4) (3,2) (3,1)(1,8) (1,4) (1,2) (1,1)(D).

(8,9) (8,3) (8,1)(4,9) (4,3) (4,1)(2,9) (2,3) (2,1)(1,9) (1,3) (1,1)

5

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

1
23345
4567
56789

(B).

(C).

121321
4321
54321

12345
3456
567
78
9(vi) 次のプログラムの出力結果を下の選択肢より 1 つ選べ。
1 #include <stdio.h>
2
3 int main(void) {4int n = 0;
5
6
printf("%d␣", n++);7printf("%d␣", n--);8printf("%d␣", --n);9printf("%d␣", ++n);10
printf("%d␣", n);1112
return 0;
13 }
(A).
(C).

(B).
(D).

0 1 0 -1 0
1 0 0 -1 0

6

0 1 -1 0 0
1 0 -1 0 0

(D).

12345
1234
123
12
1

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

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

5 1 7(B).

(C).

1 7 3

7 1 5(D).

(viii) 次のプログラムの出力結果を下の選択肢から 1 つ選べ。
123
4
56
7
8
9
10
11
12
13
14
15
16

#include <stdio.h>void bar(int x, int y[]) {int tmp = x;x= y[0];y[0]= tmp;}
int main(void) {int x= 3;
int y[] = { 5 };bar(x, y);printf("x␣=␣%d,␣y[0]␣=␣%d\n", x, y[0]);return 0;}
(A).
(C).

(B).
(D).

x = 3, y[0] = 5
x = 5, y[0] = 3

7x = 3, y[0] = 3
x = 5, y[0] = 5

3 7 1

(ix) 次のプログラムの出力結果を下の選択肢より 1 つ選べ。
1234
5678910111213
14
15
16
1718
1920
2122232425
26
2728
2930

#include <stdio.h>
int x = 2;
void baz(void) {static int x = 3;
printf("%d␣", x++);}void qux(void) {printf("%d␣", x++);}int main(void) {int i, x = 5;
baz();
qux();
printf("%d␣", x++);for (i = 1; i <= 2; i++)int x = 0;baz();
qux();
printf("%d␣", x++);}baz();
qux();
printf("%d␣", x);{

return 0;}
(A).
(C).

(B).
(D).

3 2 5 3 3 0 3 4 0 3 5 1
3 2 5 3 3 0 3 4 0 3 5 68

3 2 5 4 3 0 5 4 0 6 5 1
3 2 5 4 3 0 5 4 0 6 5 6

(x) 次のプログラムの出力結果を下の選択肢から 1 つ選べ。
1234
567
8
910
1112
13
14

#include <stdio.h>void foo(int n) {if (n < 10) {foo(n + 3);
printf("%d␣", n);foo(n * 2);}}
int main(void) {foo(1);return 0;}
(A).
(C).

(B).
(D).

9 3 5 7 9 1 9 3 5 7 9
8 4 7 2 5 8 1 8 4 79

7 4 8 1 8 5 2 7 4 8
7 4 8 1 8 5 9（計算・下書き用紙）

10「プログラミング」インデンテーションについての約束事
http://guppy.eng.kagawa-u.ac.jp/2019/Programming/indentation.html より抜粋したものである。（ただし今回の問題に関係ない部分は割愛した。また、字下げ幅はオリジナルは 4 だが、ここでは紙幅の制限のため、3 とした。）
I. 原則として、一行には文は一つしか書かない。
II. ブレース（{〜}）の中は、外よりも 3 字分を字下げする。
III. 開きブレース（{）は if や else, while, for などのキーワードと同じ行に改行せずに書く。開きブレースのあとは何も書かず改行する。
IV. 閉じブレース（}）は if や while, for などのキーワードのはじめの文字と列をそろえて書く。
その行には閉じブレース以外には何も書かない。
• ただし、else . . . が続く場合は、閉じブレース（}）と同じ行に書く。
V. if 文, if 〜 else 文 や for 文, while 文などでは、選択されたり、繰り返したりされる文が一つだけの場合も、ブレース（{〜}）に囲む。
この約束事だけは、教科書のプログラム例は必ずしもそうなっていないので、特に注意する。

• ただし、else のあとにすぐ一つの if 文が続く else if . . . というかたちは、 else { if. . . } とはしない。

（計算・下書き用紙）

2

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

学籍番号氏名(4 点)

I.
i n t

m a i n ( v o i d )i n t

i ,j ;

r e t u r n

0 ;{}(2 点 × 2)

II.
(i).
(ii).

III.

(4 点)

IV.

( 各 2 点)
(i).

(ii).

(iii).

(iv).

(v).

(vi).

(vii).

(viii).

(ix).

(x).
授業・テストの感想.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................

2