プロが教える店舗&オフィスのセキュリティ対策術

 Visual C++ 2005でプログラムをしている初心者です。おそらく基本的な間違いをしていると思います。
 
 次の様にプログラムしたところ、

/*賽を四回振ると?*/
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(){
int b[4], i, j;
double o[4], x, c[4];

printf("試行回数を入れてください。\n");
scanf_s("%d",&x);

for(i=0; i<4; i++){
c[i]=0;
}

for(i=0; i<x; i++){
for(j=0; j<4; j++){
srand(time(NULL));
b[j]=rand()%6+1;
}
if(b[0]==b[1]==b[2]==b[3]==1){
c[0]=c[0]+1;
}
else if(b[0]==1||b[1]==1||b[2]==1||b[3]==1){
c[1]=c[1]+1;
}
else if( b[0]!=b[1] && b[0]!=b[2] && b[0]!=b[3] && b[1]!=b[2] && b[1]!=b[3] && b[2]!=b[3] ){
c[2]=c[2]+1;
}
else{
c[3]=c[3]+1;
}
}
for(i=0; i<4; i++){
o[i]=x/c[i];
}

printf("四つの賽を%d回、投げたところ・・・・・・\n",x);


printf("四つとも1の場合は%d回となり、倍率は%lfとなりました。\n",c[0],o[0]);
printf("1がある場合は%d回となり、倍率は%lfとなりました。\n",c[1],o[1]);
printf("1以外のぞろ目がある場合は%d回となり、倍率は%lfとなりました。\n",c[3],o[3]);
printf("ブタの場合は%d回となり、倍率は%lfとなりました。\n",c[2],o[2]);
}

何度やっても次の様な結果になります(1296は入力値です)

試行回数を入れてください。
1296
四つの賽を1296回、投げたところ・・・・・・
四つとも1の場合は0回となり、倍率は0.000000となりました。
1がある場合は0回となり、倍率は0.000000となりました。
1以外のぞろ目がある場合は0回となり、倍率は0.000000となりました。
ブタの場合は0回となり、倍率は0.000000となりました。
続行するには何かキーを押してください . . .

予定としては

試行回数を入れてください。
1296
四つの賽を1296回、投げたところ・・・・・・
四つとも1の場合は1回となり、倍率は1296となりました。
1がある場合は670回となり、倍率は1.94となりました。
1以外のぞろ目がある場合は505回となり、倍率は2.57となりました。
ブタの場合は120回となり、倍率は10.8となりました。
続行するには何かキーを押してください . . .

位の結果が出ると思うのですが(計算が間違ってなければ)。

A 回答 (1件)

まず、scanf_s, printfの書式が間違っています。


%dとあるところは全て%lfに直してください。

> for(i=0; i<x; i++){
> for(j=0; j<4; j++){
> srand(time(NULL));
> b[j]=rand()%6+1;

srandは最初の一回だけ実行すればいいです。
そのプログラムを実行すると、あっという間に結果が表示されると思いますが、早すぎてtimeの値が変化しない、つまりいつも同じ値の乱数しか発生しません。

上の二つを直しても、if文の条件が間違っているので思った結果は出ません。
どこが間違っているか考えてみてください。
    • good
    • 0
この回答へのお礼

 ありがとう御座います。とても助かりました。

お礼日時:2009/02/04 18:44

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