以下の問に答えよ。
下に示すように、正の整数 n をキーボードから受け取って、初項 1, 公比 2 の等比数列の
第 1 項から第 n 項までを表示するプログラムを作成せよ。ただし、一の位が 2 になる数は
代わりにそれに 1 を足した数を表示すること。
(n として負の数または 0
を受け取ったときは、改行のみ表示するか、もしくは何も表示しなくてよい。)
正の整数を入力してください: 4↵
1 3 4 8
実行例 2:
正の整数を入力してください: 15↵
1 3 4 8 16 33 64 128 256 513 1024 2048 4096 8193 16384
実行例 3:
正の整数を入力してください: 0↵
実行例 4:
正の整数を入力してください: 1↵
1
下に示すように、正の整数 n をキーボードから受け取って、ディスプレイ上に、
一辺の長さが n の左下直角三角形を表示するプログラムを作成せよ。文字は
各行ごとに 1, 2, 3, 4, …, 8, 9, 0, 1, 2,… (つまり、列番を
10 で割った余り)を表示するが、全体で 5 の倍数個目(5 個目、10 個目、
15 個目、20 個目、…)には代わりに「#
」を表示する。
(n として負の数または 0 を受け取ったときは何も表示しない、あるいは改行のみを表示する、
のいずれかで良い。)
正の整数を入力してください: 5↵
1
12
1#3
123#
1234#
実行例 2:
正の整数を入力してください: 13↵
1
12
1#3
123#
1234#
1234#6
123#567
1#3456#8
123#5678#
1234#6789#
1234#6789#1
123#5678#012
1#3456#8901#3
実行例 3:
正の整数を入力してください: 0↵
int
型の引数 \(n\) を受け取り、
次のように定義される数列
\[\begin{eqnarray}
a_0 & = & n \\
a_k & = & \frac{2 a_{k - 1}}{3} & (k > 0\; かつ\; a_{k - 1} が\, 3\, の倍数のとき)\\
a_k & = & \frac{a_{k - 1}}{2} & (k > 0\; かつ\; a_{k - 1} が\, 3\, の倍数でない\, 2\, の倍数のとき)\\
a_k & = & a_{k - 1} - 1 & (k > 0\; かつ\; a_{k - 1} が\, 3 \,の倍数でも\, 2\, の倍数でもないとき)\\
\end{eqnarray}
\]
の、初めて \(a_k = 0\) となる正の
整数 \(k\) を返す関数 int
foo(int n)
を定義せよ。\(n\) は 0 以上と仮定してよい。
例えば、\(n = 9\) のとき、\(\{ a_k \}\) は
\[a_0 = 9, a_1 = 6, a_2 = 4, a_3 = 2, a_4 = 1, a_5 = 0, a_6 = 0, a_7 = 0, \ldots\]
という数列なので、foo(9)
は 5 である。
main
関数は、以下のコードを使用して、確認せよ。
int main(void) { int i; for (i = 1; i <= 30; i++) { printf("foo(%d) = %d\n", i, foo(i)); } return 0; }
この main
関数の出力は次のようになる。
foo(1) = 1 foo(2) = 2 foo(3) = 3 foo(4) = 3 foo(5) = 4 foo(6) = 4 foo(7) = 5 foo(8) = 4 foo(9) = 5 foo(10) = 5 foo(11) = 6 foo(12) = 5 foo(13) = 6 foo(14) = 6 foo(15) = 6 foo(16) = 5 foo(17) = 6 foo(18) = 6 foo(19) = 7 foo(20) = 6 foo(21) = 7 foo(22) = 7 foo(23) = 8 foo(24) = 6 foo(25) = 7 foo(26) = 7 foo(27) = 7 foo(28) = 7 foo(29) = 8 foo(30) = 7
int
型の配列 v
と、
この配列の要素数を表す int
型の引数 no
をこの順に受け取り、
v
の隣り合う要素の差 v[i] - v[i - 1]
の絶対値が 5
以上になる回数を返す関数
int bar(const int v[], int no)
を定義せよ。例えば、
/* 差の絶対値が 5 以上の箇所を下線で示す。 */ int va[10] = {1, 6, 2, 4, 1, 5, 8, 2, 9, 7}; int vb[12] = {0, -6, -2, 6, -4, 2, 8, 4, 0, 2, 4, -2};
のとき、
bar(va, 10)
は 3、
bar(vb, 12)
は 6、
である。