關於c語言的程式問題?
這是例題程式
/* prog7_2, 使用for迴圈計算機率 */
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i,count=0;
for(i=1;i<=10000;i++)
if ((rand()%6+1)==3)/* 取亂數當成擲骰子 */
count++;
if ((rand()%6+1)==6)
count+=count++; /* 當骰子點數為3點時,count+1 */
printf(\"擲10000次骰子時,出現3點的次數為%d次\\n\",count);
printf(\"機率為%.3f\\n\",(float)count/10000);
system(\"pause\");
return 0;
}
[上面是假設擲骰子10000次,利用亂數取值,計算出點數為3的次數與機率的例題]
我要問的是
如果是擲骰子10000次>>利用亂數取值 >>只要出現3或是6點>>次數則加1
>>並列印計算出3&6出現的次數與機率
一般來說機率是變為1/3,但用c語言寫我就是寫不出.........
幫幫忙吧~~各路高手!!!!!
1 則回答
最佳解答
1. 您沒給亂數初值,所以每次的答案會都一樣。
#include <time.h>
srand(time()); // 加在 for 之前。
2. 您每個迴圈都用了 2 次的 rand(),所以您是取樣了 2 萬次,不是 1 萬次。
int d;
d = rand()%6+1; // +1 可以不用,這樣您要改判斷 2 和 5,程式會快點。
3. 主要問題:您的 for 後沒打 {}!所以,只有第一列(if (3) ... count++;)跑了一萬次!
if (6) 只跑了一次!
4. 主要問題:count += count++;
若下一次 是6,您把 1萬次 3 的次數*2+1!
若下一次不是6,您得到的是 3的次數!
改成:
for (i=0; i<10000; i++)
{ d = rand()%6 +1;
if (d==3 || d==6)
count++;
}
2006-07-11 05:22:56 補充:
#include <stdio.h>#include <stdlib.h>#include <time.h>#define T 10000int main(){int i, c, d;srand(time(NULL));for (c=i=0; i<T; i++){d = rand()%6; if (d==2 || d==5) c++;} printf("Times of 3 or 6 in %d runs is %d\nThe probability is %f\n", i, c, (float)c/i); return 0;}
2007-09-12 02:45:52 補充:
我已在我的論壇發表一篇較完整的 rand( )
歡迎有興趣的網友前往觀看,
並提供意見與指正。^_^
http://www.phpbbserver.com/graphicsparalle/viewtopic.php?p=201