アプリ版:「スタンプのみでお礼する」機能のリリースについて

問1:ジャンケンを十回行って、何勝何敗、何引き
分けかを表示するプログラムを作れ。
問2:計算機とじゃんけんを行って、貴方が計算
機より2回多く勝つまで続けるプログラムを作れ。

上記の問題が、どうしてもわかりません。"問1を少し変えれば問2はできる"と思うのですが・・・。
コンピュータにランダムで手を出させ、かつ勝敗の回数をカウントさせたいのですがうまくいきません。

どこをどう変えればよいのか、どなたか回答願います。
できればソースを添えてお願いします。

使っている言語はC言語です。また、私はC言語初心者なので、if文やfor文、do~while文あたりまでしか使えません。
下記に示すのは私が作った、問1のソースです。参考までに。
----------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
main(){
int i, a, b;time_t seed;
seed=time(&seed); srand(seed*(seed%12345));
a=3.0*(float)rand()/(RAND_MAX+1.0)+1;

for(i=0;i<10;i++){
printf("1、2、3 ?\n");
scanf("%d",&b);
printf("PCは%d\n",a);

if(a==b){
printf("アイコッ!\n");
}else{
if((a==1 && b==2) || (a==2 && b==3) || (a==3 && b==1 )){
printf("PCが勝ちッ!\n");
}else{printf("PCが負けッ!\n");}
}/*if の括弧閉じ*/

}/* for の括弧閉じ*/

printf( "結果発表ッ!\n" );
printf( "私は%d 回勝ちッ!\n",b );
printf( "PCは%d 回勝ちッ!\n", a);
printf( "引き分けは %d 回ッ!\n", (10 - a - b) );
return 0;

}/*main() の括弧閉じ*/
--------------------------------------------------------------
--------------------------------------------------------------

A 回答 (2件)

続きです。

質問というか注意すべき点があります。

(1)乱数の計算結果はfloatなのにintに丸めちゃっていいのですか?
きっとコンパイラが警告を出してくれると思いますが、しっかりaに代入するときにキャストしてあげたほうがいいです。
それと乱数の発生(PCの結果は)1回だけでいいんでしょうか?

(2)入力時の考慮
1,2,3以外の値が入力された場合も何らかの処理をしてしまいます。
それは無条件にPCが負けと判断していいですか??

(3)勝ち負け引き分けの計算
先ほども回答したようにfor文を抜けた後のaは、初めに算出したaと一緒です。
すなわちrand()の結果を出しているだけです。
bに関しては、最後に入力した値です。

※大方の処理は合っているのでここではあえてソースは提示しません。
 ヒントを参考に手を加えてみてください。
 きっとあ~こうだったんだ。という実感が出来ると思います。
    • good
    • 0
この回答へのお礼

おかげさまで、できました~(^▽^)
ありがとうございましたッ!!!
とても参考になりましたッ!

お礼日時:2008/06/19 17:28

for以降のprint文での勝ちの回数が考慮されてません。


これでは最後に残っているa,bの値が表示されていませんか?
もし勝ちの回数を表示するのであれば、自分が勝った回数(PCでもいいです)を格納しておく変数が必要になります。

問2に関しても、自分が何回勝ったか格納しておく変数が必要です。
そして2回勝ったらfor文から抜ける処理(break;)を追加してあげればオッケーです。

この回答への補足

なんとッ!たまたまなのかうまくいったような気がしたので、合ってるのかなぁなどと思っていました(^^;)>
しかし、自分が勝った回数を格納しておく方法がわかりません。

補足日時:2008/06/19 15:58
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!