- (問題1) 以下の3個の関数を作成せよ. 関数 void horizon(int n) : 横にn個の#を表示して、改行. 関数 void square(int n) : 縦横n個(つまりn*n)の正方形型に#を表示. horizonを呼び出して実現. square(4)の例 #### #### #### #### 関数 void enix(int n) : 1辺1個の正方形型の#を表示し,1辺2個の正方形,1辺3個の正方形, … , 1辺n個の正方形を表示.(合計n個の正方形を表示) そして,main関数から,enix(4)を呼び出し,正方形を4個表示せよ. #は全角でも,半角でも良い. - (問題2) ある整数の各桁の数を逆順に表示する関数 void rev(int n)を作成し,main()関数より呼びしをせよ. 関数rev() は再帰を用いて作成せよ. 例 rev(123) --> "321"と表示される rev(4567) --> "7654"と表示される ヒント: int n の 一番下の位を表示するには, printf("%d", n%10); で可能である. - (問題3) rand() は,0以上 RAND_MAX以下 の乱数を発生させる関数である. srand() は,乱数の種を定める関数である. rand() は,乱数の種が同一であると,毎回同じ乱数を発生させる. 乱数の種を時刻と用いると,毎秒種が異なるプログラムを作成可能である. 以下は,乱数の種に時刻を指定し,乱数を3回発生させるプログラムである. #include #include #include void main() { int r; srand(time(NULL)); printf("1: %d / %d\n", rand(), RAND_MAX); printf("2: %d / %d\n", rand(), RAND_MAX); printf("3: %d / %d\n", rand(), RAND_MAX); } 実行し,動作を確認せよ. 10回程度実行し,「毎回異なる値が出るか,否か」を確認せよ. 毎回異なる場合,「値は異なるが毎回近い値が出るか,毎回大きく異なる値が出るか」を確認せよ. 1個目の乱数,2個目の乱数,3個目の乱数,個別に確認せよ. - (問題4) 実行すると,確率1/3で"Hello\n"と,確率2/3で"Bye\n"と表示されるプログラムを作成し,実行せよ. 毎回類似の値が出てしまって困る場合は,rand() を数回呼び出してから,rand() を実行せよ. 例 int r; srand(time(NULL)); rand(); rand(); rand(); rand(); rand(); r = rand(); - (問題5) ある生物は,誕生すると 確率90%で金を1グラム生み出し,死亡する. 確率10%で子を2体作成して,死亡する. 生み出された子孫の動きは上記と同様である. 誕生したばかりの上記の生物が100体いる. 生物が絶滅するまでに金は何グラム生み出されるか? プログラムでシミュレーションを行い,求めよ. 1回実行するのみでも良いが,できれば多数回(例えば100回)実行し,平均を求めよ. ヒント:再帰でプログラミングする. - (問題6) maze04.txt の (問題a)から(問題d)をせよ. (問題e)はやってもやらなくても良い.