第5回演習問題


問1(基礎):5人の身長を入力し、その平均値を求めるプログラムを配列を用いて作成せよ

問2(基礎):1から100までの数字を全て配列に入力し,その中からまず3の倍数だけを出力し,次に5の倍数だけを出力するプログラムを作成せよ.

問3(基礎):問2を拡張して、ユーザが入力した任意の数字の倍数を出力するプログラムに変更せよ.

問4(応用):文字列を入力し、その文字列を逆から表示するプログラムを作成せよ.入力される文字は英数字のみと仮定してよい.
ヒント:まず文字列の最後(ヌル文字'\0')がどこか、前から順に探す。そこから一文字ずつ表示しながら逆行すればよい。

問5(応用):二つの文字列msg1, msg2が与えられたとき、msg1とmsg2 が同じかどうか比較する関数、int string_compare(char msg1[255], char msg2[255]) を作成せよ。なお、この関数は、msg1とmsg2が等しければ整数値1を、そうでなければ0を返すものとする。さらに、main関数で、2つの文字列をユーザに入力させるようにし、string_compareの結果に基づいて、等しいかどうかを画面に表示するようにせよ。

問6(応用):1〜3学期の英数国の成績を入力し、以下のように学期ごとの平均を出力するプログラムを2次元配列を使って作成せよ

|     |英語|数学|国語|平均|
|1学期|  67|  78|  92|  79|
|2学期|  70|  89|  84|  81|
|3学期|  76|  97|  67|  80|
|平均 |  71|  88|  81|


問7(応用):10個の数字を入力し、それらを小さいものから順に表示するバブルソートのプログラムを作成せよ

*バブルソートのアルゴリズム*
1番目のデータから順に見て行って、隣合う2つのデータを比較して、 逆順だったら入れ替える。最後までいったら、一番右に最大の要素が並 ぶことになる.再び最初に戻って,最後より一つ手前まで同じ事を続け る。これを一番前まで続ける。

たとえば、4,2,3,1をバブルソートとする手順は

[1巡目]-先頭から最後のペアまで比較
1. 4と2を比較。4のほうが大きいので入替。2,4,3,1となる。
2. 4と3を比較。4のほうが大きいので入替。2,3,4,1となる。
3. 4と1を比較。4のほうが大きいので入替。2,3,1,4となる。 この時点で4が一番右に来る。
[2巡目]-先頭から最後から2つ目のペアまで比較
4. 2と3を比較。2のほうが小さいのでそのまま。
5. 3と1を比較。3のほうが大きいので入替。2,1,3,4となる。 3と4の比較は不要.この時点で3が右から2番目にくる。
[3巡目]-先頭から最後から3つ目のペアまで比較
6. 2と1を比較。2のほうが大きいので入替。1,2,3,4となる。 この時点で2が右から3番目にくる。
[4巡目]-先頭から最後から4つ目のペアまで比較
7. 比較するペアが無いので終了

ヒント:10個の数字は配列に入れる。隣同士の入れ替えは、
tmp = A[i]; /*A[i]の値を退避 */
A[i]=A[i+1]; /*A[i]をA[i+1]で上書き */
A[i+1]=tmp; /*A[i+1]に退避させたtmpを代入*/
のように行えばよい。

問8(発展):ハングマンゲームのプログラムを作成せよ。このゲームでは、マジックワードの長さだけがアンダーバー(_)で示されるので、その単語が何かを推測し、含まれると思う文字を入力する。文字を入力するたびに、マジックワードがその文字を含んでいるかをチェックし、含んでいればその文字を表示する。この問題では,マジックワードはプログラマが事前に設定するものとする.

開始時(マジックワード:cgengokensyu)
____________と表示

gと入力
_g__g_______と表示

・・・・
最後は”cgengokensyu”すべてが表示される


問9(発展):52枚のトランプをシャッフルし,5枚ずつ順番に表示するプログラムを配列を利用して作成せよ.

出力例:
ハート   クローバー ハート   クラブ  ダイヤ
   K        10        6         7      K
next?(0):

このような形式で,5枚表示され,ユーザが0を押すと次の5枚が表示される.このようにしてランダムに表示を続け,52枚全部が表示されると,終了する(最後は2枚だけが表示されることになる).

以上

masa-n@cs.kobe-u.ac.jp
(C) Masahide Nakamura, Kobe University