課題10 課題12

課題11

じゃんけんプログラム

次の手順に従い、コンピュータとじゃんけんで対戦できるプログラムを作成せよ。

  1. じゃんけんの手(グー、チョキ、パー)は、プログラムの中では、 数値(   (A)   ) で表す。

  2. 表示に使う文字列は「ポインタ」の「配列」に格納する。

    	char *hand[3] = { "グー", "チョキ", "パー" };
          

    これにより、(A) の数値を、手の名称に変換できる。

  3. コンピュータの手は乱数で設定する。
    (A) のいずれかを得たいので、 乱数を(   (B)   )で割った余りを使用する。

    はじめに種の初期化を行うのを忘れないように。

  4. scanfを用いて、ユーザの入力を読み込む。 読み込む際には、グー、チョキ、パーに対応する数値を示して、ユーザに分かりやすくすること。

  5. scanfは入力を変換できなかった場合、 返り値として 0 を返すことを利用すると、数値として読み込もうとしたにも関わらず、 アルファベット等が入力された場合のエラー処理として次のようなものが利用できる。

    	if (0 == scanf("%d", &human)) {
    		while ('\n' != getchar()) {
    			;
    		}
    		human = -1;
    	}
          

    scanf の書式指定子として "%d" を指定して 変数 human に読み込もうとしている。

    もし、数字以外が入力された場合、scanf の返り値が 0 となるので、 getchar を用いて、改行文字が読み込まれるまで入力を処理する。

    その結果、「次の行の先頭」が入力位置となることで、きちんと入力処理が できるはずである。

    本来は、fgets (まだ programingE では取り上げていない) 等で「1行」を読み込み sscanf を行う等の手法を取った方が良い。
  6. ユーザが入力した数値が (A) に含まれていなければ、再入力を促す。

  7. プログラムとユーザの手が決まった段階で勝敗判定を行う。 手の組合わせは 3×3 = 9通りあるが、すべてを列挙することなく、 うまく判定する方法を考えよ。

    ヒント: プログラムとユーザの手を「引いたもの」が 0 の時は「(   (C)   )」である。

  8. 勝敗結果を表示して、プログラムを終了する。

できあがったら、実際にじゃんけんをしてみて意図通りに動くか確認せよ。

その後、各自で次のような変更を加えてみよ。


課題10 日程表 課題12

tacha@tack.fukui-med.ac.jp
$Id: kadai11.html,v 1.3 2008/06/27 02:52:22 tacha Exp $