以下のプログラムは動作はするがインデンテーションが滅茶苦茶でプログラム の構造を正しく反映していない。(そして、おそらく作成者の意図したように は動かない。)プログラムの構造を明確にするために「プログラミング」の インデンテーションの約束事(別紙)に厳密に従って(特に 5 番目のルー ルに注意)、必要に応じてブレースを挿入し、インデントしなおせ。ただし、 ブレース内の字下げは紙幅の制限のため 3 文字分とせよ。
もちろん、プログラムの意味(実行結果)が変わらないようにすること。 (つまり、作成者の(よくわからない)意図を忖度するのではなく、 コンパイラーが解釈する通りにインデントすること。)
解答は、最初の #include <stdio.h>
は省略せよ。
また、解答欄のスペースの都合で、(最後は別として)空行は入れずに記入せよ。
なお、putchar
は p-----r
のように省略してよい。
正解は以下の通りである。
次のプログラムは、「整数を入力してください。」 と出力してから一つの 整数値を読み込んで、1 からその数までの整数を順に、ただし、 3 で割り切れるか、または 5 で割り切れる数は飛ばして表示するプログラムである。 例えば、20 を入力すると、
整数を入力して下さい: 20↵
1 2 4 7 8 11 13 14 16 17 19
と出力する。 空欄を埋めて、プログラムを完成せよ。
正解(例)とコメントは以下のとおりである。
番号 | 正解例 | コメント |
---|---|---|
(ⅰ) | i = 1; i <= n; i++ |
≦ は使えない。 |
(ⅱ) | i % 3 == 0 || i % 5 == 0 |
n % 3 == 0 || n % 5 == 0 といううっかりが多かった。 |
以下のプログラムの空欄 (ⅰ) に、
2 つの double
型の引数 \(a\), \(b\) を受け取り、\(\dfrac{a - b}{a + b}\) を返す関数
double foo(double a, double b)
の定義
を書き、空欄 (ⅱ) に
実引数 x
, y
での foo
の呼出しを表す式
を書け。
正解は、以下の通り。
foo(x, y)
次のプログラムの出力結果を下の選択肢より 1 つ選べ。
(A). | 0.000000 0.000000 0.000000 |
(B). | 0.000000 0.000000 0.750000 |
(C). | 0.000000 0.750000 0.000000 |
(D). | 0.000000 0.750000 0.750000 |
(E). | 0.750000 0.000000 0.000000 |
(F). | 0.750000 0.000000 0.750000 |
(G). | 0.750000 0.750000 0.000000 |
(H). | 0.750000 0.750000 0.750000 |
正解は、(E) である。
次のプログラムの出力結果を下の選択肢より 1 つ選べ。
(A). | A D |
(B). | A B D |
(C). | A C D |
(D). | A B C D |
(E). | B D |
(F). | C D |
(G). | B C D |
(H). | D |
正解は (C) である。
次のプログラムの出力結果を下の選択肢より 1 つ選べ。
(A). | 8 4 2 1!0 |
(B). | 8 4 2!0 |
(C). | 8 4 2 1!1 |
(D). | 8 4 2!1 |
正解は (A) である。
次のプログラムの出力結果を下の選択肢より 1 つ選べ。
(A). |
(1,1) (1,3) (1,9) (2,1) (2,3) (2,9) (4,1) (4,3) (4,9) (8,1) (8,3) (8,9) |
(B). |
(1,1) (1,2) (1,4) (1,8) (3,1) (3,2) (3,4) (3,8) (9,1) (9,2) (9,4) (9,8) |
(C). |
(1,1) (3,1) (9,1) (1,2) (3,2) (9,2) (1,4) (3,4) (9,4) (1,8) (3,8) (9,8) |
(D). |
(1,1) (2,1) (4,1) (8,1) (1,3) (2,3) (4,3) (8,3) (1,9) (2,9) (4,9) (8,9) |
正解は (A) である。
次のプログラムの出力結果を下の選択肢より 1 つ選べ。
(A). |
5 54 543 5432 54321 |
(B). |
5 45 345 2345 12345 |
(C). |
54321 5432 543 54 5 |
(D). |
54321 4321 321 21 1 |
(E). |
1 12 123 1234 12345 |
(F). |
1 21 321 4321 54321 |
(G). |
12345 1234 123 12 1 |
(H). |
12345 2345 345 45 5 |
正解は (F) である。
次のプログラムの出力結果を下の選択肢より 1 つ選べ。
(A). | (0,0),(0,1),(0,2),(0,3),(1,0),(1,1),(1,2),(1,3),(2,0),(2,1),(2,2),(2,3), |
(B). | (0,0),(0,1),(0,2),(1,0),(1,1),(1,2),(3,0),(3,1),(3,2), |
(C). | (0,0),(0,1),(0,3),(1,0),(1,1),(1,3),(3,0),(3,1),(3,3), |
(D). | (0,0),(0,1),(0,2),(1,0),(1,1),(1,2), |
正解は (B) である。
(7) 次のプログラムの出力結果を下の選択肢より 1 つ選べ。
(A). | 2 4 2 4 |
(B). | 2 4 4 2 |
(C). | 4 2 2 4 |
(D). | 4 2 4 2 |
正解は (C) である。
次のプログラムの出力結果を下の選択肢より 1 つ選べ。
(A). | 6 9 1 9 2 7 8 9 3 9 4 9 10 |
(B). | 6 9 1 9 2 7 6 9 3 9 4 7 5 |
(C). | 6 9 7 9 8 9 6 9 7 9 8 9 10 |
(D). | 6 9 1 9 2 10 6 9 3 9 4 10 5 |
(E). | 6 9 1 9 2 10 11 9 3 9 4 10 11 |
(F). | 6 9 10 9 10 11 6 9 10 9 10 11 12 |
正解は (B) である。
次のプログラムの出力結果を下の選択肢より 1 つ選べ。
(A). (1,8,6)(2,7,6)(3,6,6)(4,5,6)(5,4,6)(6,3,6)
|
(B). (1,8,6)(1,8,6)(2,7,6)(2,7,6)(3,6,6)(3,6,6)
|
(C). (1,8,6)(2,8,6)(3,7,7)(4,7,7)(5,6,8)(6,6,8)
|
(D). (1,8,6)(2,8,6)(3,7,6)(4,7,6)(5,6,6)(6,6,6)
|
(E). (1,8,6)(2,8,6)(3,8,6)(4,8,6)(5,8,6)(6,8,6)
|
(F). (1,8,6)(2,7,6)(3,6,7)(4,5,7)(5,4,8)(6,3,8)
|
正解は (D) である。
次のプログラムの出力結果を下の選択肢より 1 つ選べ。
(A). | 1 2 1 4 1 2 1 6 1 2 1 4 1 2 1 |
(B). | 2 1 4 1 3 2 1 6 2 1 4 1 3 2 1 |
(C). | 2 1 4 2 1 6 2 1 4 2 1 |
(D). | 1 2 3 1 4 1 2 6 1 2 3 1 4 1 2 |
(E). | 1 3 1 2 1 6 1 2 1 4 1 3 1 2 1 |
(F). | 1 2 4 1 2 6 1 2 4 1 2 |
正解は (D) である。
下に示すように、正の整数 n をキーボードから受け取って、1 から n までの整数を空白で区切って表示するが、
2 でも 3 でも割り切れない整数
は数の代わりに、*
を表示するプログラムを作成せよ。
(n として負の数または 0 を受け取ったときは、改行のみ表示するか、もしくは何も表示しなくてよい。)
正の整数を入力してください: 4↵
* 2 3 4
実行例 2:
正の整数を入力してください: 15↵
* 2 3 4 * 6 * 8 9 10 * 12 * 14 15
実行例 3:
正の整数を入力してください: 0↵
実行例 4:
正の整数を入力してください: 1↵
*
正解例は以下の通りである。
下に示すように、0 以上の段数 n
をキーボードから受け取って、
ディスプレイ上に、一辺の長さが n
の左上直角三角形を表示するプログラムを作成せよ。
ただし、4 の倍数行目の下には空行を挿入せよ。
文字は行ごとに 0, 9, 8, 7, 6, 5, 4, 3, 2, 1, の繰り返しで、行の最後の字が 1 になるように表示せよ。
また、一番最後に(4 の倍数行目の下以外に余分な空行を開けずに)end
と表示せよ。
(n として負の数または 0 を受け取ったときは、end
のみ表示する。)
非負の整数を入力してください: 9↵
987654321
87654321
7654321
654321
54321
4321
321
21
1
end
実行例 2:
非負の整数を入力してください: 12↵
210987654321
10987654321
0987654321
987654321
87654321
7654321
654321
54321
4321
321
21
1
end
実行例 3:
非負の整数を入力してください: 0↵
end
正解例は以下の通りである。
int 型の引数 \(n\) を受け取り、次のように定義される数列 \(\{a_i\}, \{b_i\}\):
\[\begin{eqnarray}
a_1 & = & 1 \\
b_1 & = & -1 \\
a_k & = & k a_{k - 1} + b_{k - 1}\ \ \ (k > 1)\\
b_k & = & - k b_{k - 1}\ \ \ (k > 1)
\end{eqnarray}\]
の \(a_1\) から \(a_n\) までを空白区切りで表示する関数 void foo(int n)
を定義せよ。\(n\) は 1 以上と仮定して良い。
main
関数は以下のコードを利用して、確認せよ。
実行例は、以下のようになる。
実行例 1:
正の整数を入力してください: 10↵
1 1 5 14 94 444 3828 25584 270576 2342880
(参考) 階乗と同程度に急速に増大するので、32 bit の整数では第 12 項程度までしか正確に求まらない。
正解例は以下の通りである。
int
型の配列 va
, vb
と、
これらの配列の共通の要素数を表す int
型の引数 n
をこの順に受け取り、
\(0 \le i < n\) の整数 i
に対して、常に va[0]
, va[1]
, …, va[i]
の和が
vb[i]
よりも小さい場合は 1、そうでない場合は 0 を返す関数
int bar(const int va[], const int vb[], int n)
を定義せよ。
main
関数は以下のコードを利用して、確認せよ。
この場合、プログラムは、
a と b については成り立つ。 a と c については成り立たない。
と出力する。(a
, b
, c
をいろいろ変えて試してみよ。 )
正解例は以下の通りである。