以下の問に答えよ。
scanfなどで、 正の整数 n を受け取って、下の実行例に示すようにディスプレイ上に高さと幅が n の、 文字の三角形を表示するプログラムを作成せよ。 ただし、 i が j で割り切れるときは、 i 行 j 列めの文字は ‘*’、そうでないときは ‘_’になるようにせよ。
実行例1:正の整数を入力して下さい: 4 * ** *_* **_*実行例2:
正の整数を入力して下さい: 10 * ** *_* **_* *___* ***__* *_____* **_*___* *_*_____* **__*____*
文字列 strを引数として受け取り、 strの中に現われる文字 '!'を その時点での'!'の出現回数に置き換えて (つまり、1回目の出現は '1'に、 2回目の出現は'2'に、…、置き換えて) 出力する関数 void countBang(const char *str)を定義せよ。 (ただし、配列の記法str[i]や、それと同等の*(str+i) という記法は使わず、ポインタのインクリメントを使うこと。)
テンプレートとしては次のようなものを使用せよ。 (このどこかにcountBangの定義を挿入する。)
#include <stdio.h> int main(void) { countBang("! little, ! little, ! little Indians.\n"); countBang("! ! !, dah.\n"); countBang("!!!!!!!!!!!!.\n"); return 0; }実行例:
1 little, 2 little, 3 little Indians. 1 2 3, dah. 123456789101112.
分数を n, dの 2つのint型のメンバを持つ構造体 struct ratioとして定義し、次のような関数 bakersTransformationを定義せよ。
ratio構造体へのポインタを受け取り、そのメンバの値が、置き換える。
- n*2 ≤ dならば、n を 2*nで、
- n*2 > dならば、n を 2*(d-n)で、
テンプレートとしては次のようなものを使用せよ。 (このどこかに struct ratio と bakersTransformation の定義を挿入する。)
#include <stdio.h> int main(void) { struct ratio r; int i, n; printf("初期値を ?/? の形式で入力して下さい。 "); scanf("%d/%d", &r.n, &r.d); printf("繰返し回数は? "); scanf("%d", &n); for (i=0; i<n; i++) { bakersTransformation(&r); printf("%d/%d ", r.n, r.d); } printf("\n"); return 0; }実行例1:
初期値を ?/? の形式で入力して下さい。 1/5 繰返し回数は? 10 2/5 4/5 2/5 4/5 2/5 4/5 2/5 4/5 2/5 4/5実行例2:
初期値を ?/? の形式で入力して下さい。 3/11 繰返し回数は? 10 6/11 10/11 2/11 4/11 8/11 6/11 10/11 2/11 4/11 8/11実行例3:
初期値を ?/? の形式で入力して下さい。 6/17 繰返し回数は? 10 12/17 10/17 14/17 6/17 12/17 10/17 14/17 6/17 12/17 10/17実行例3:
初期値を ?/? の形式で入力して下さい。 7/23 繰返し回数は? 15 14/23 18/23 10/23 20/23 6/23 12/23 22/23 2/23 4/23 8/23 16/23 14/23 18/23 10/23 20/23