以下の問に答えよ。
下に示すように、正の整数 n を受け取って、初項 3, 公差 7 の等差数列の 第 1 項から第 n 項までを表示するプログラムを作成せよ。ただし、一の位が 4 になる数は とばすこと。(n として負の数または 0 を受け取ったときは、改行のみ表示するか、もしくは何も表示しなくてよい。)
実行例 1:
正の整数を入力してください: 4↵
3 10 17
実行例 2:
正の整数を入力してください: 15↵
3 10 17 31 38 45 52 59 66 73 80 87 101
実行例 3:
正の整数を入力してください: 0↵
実行例 4:
正の整数を入力してください: 1↵
3
下に示すように、正の整数 n を受け取ってディスプレイ上に、 一辺の長さが n の左下直角三角形を表示するプログラムを作成せよ。文字は 9876543210 を繰返し使う(9 からはじめて 9ずつ増えていく数の一の位を使う)が、3 の倍数列目(3 列目、6 列目、9 列目、12 列目、 …)には代わりに「!」を表示する 。(n として負の数または 0 を受け取ったときは何も表示しない、あるいは改行のみを表示する、 のいずれかで良い。)
実行例 1:
正の整数を入力してください: 4↵
9
87
65!
32!0
実行例 2:
正の整数を入力してください: 12↵
9
87
65!
32!0
98!65
43!10!
87!54!2
10!87!54
32!09!76!
43!10!87!5
43!10!87!54
32!09!76!43!
実行例 3:
正の整数を入力してください: 0↵
int 型の引数 \(n\) を受け取り、 \( (k - 1)! \le n < k! \) となる正の整数 \(k\) を返す関数 int foo(int n) を定義せよ。n は 1 以上と仮定してよい。
ただし、 \(k! = k \times (k - 1) \times \ldots \times 2 \times 1\) である。例えば、\(6! = 6 \times 5 \times 4 \times 3 \times 2 \times 1 = 720\) である。
main 関数は、以下のコードを使用して、確認せよ。
/* … 略 … */ int main(void) { int i; for (i = 1; i < 25; i++) { printf("foo(%d) = %d\n", i, foo(i)); } return 0; }
この出力は次のようになる。
foo(1) = 2 foo(2) = 3 foo(3) = 3 foo(4) = 3 foo(5) = 3 foo(6) = 4 foo(7) = 4 foo(8) = 4 foo(9) = 4 foo(10) = 4 foo(11) = 4 foo(12) = 4 foo(13) = 4 foo(14) = 4 foo(15) = 4 foo(16) = 4 foo(17) = 4 foo(18) = 4 foo(19) = 4 foo(20) = 4 foo(21) = 4 foo(22) = 4 foo(23) = 4 foo(24) = 5
int 型の配列 v と、 この配列の要素数を表す int 型の引数 no、 int 型の引数 u をこの順に受け取り、 v の要素のうち、u 以下のものの和を返す関数 int bar(const int v[], int no, int u)を定義せよ。例えば、
int va[10] = {1, 2, 2, 4, 1, 5, 8, 5, 9, 5};
のとき、 bar(va, 10, 0) は 0、 bar(va, 10, 1) は 2、 bar(va, 10, 2) は 6、
int vb[12] = {0, -2, 2, -2, 1, 2, 1, 5, 0, -2, 2, 1};
のとき、 bar(vb, 12, 0) は -6、 bar(vb, 12, 1) は -3、 bar(vb, 12, 2) は 3 である。