這是例題程式
/* prog7_2, 使用for迴圈計算機率 */
#include
#include
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語言寫我就是寫不出.........
幫幫忙吧~~各路高手!!!!!
2006-07-10 10:01:03 · 4 個解答 · 發問者 k 2 in 電腦與網際網路 ➔ 程式設計
(我好像拿到錯誤的程式了XP
能直接po個程式讓我 run 一下嗎
感激不盡~~)
2006-07-10 12:12:30 · update #1
1. 您沒給亂數初值,所以每次的答案會都一樣。
#include
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
2007-09-12 02:45:52 補充:
我已在我的論壇發表一篇較完整的 rand( )
歡迎有興趣的網友前往觀看,
並提供意見與指正。^_^
http://www.phpbbserver.com/graphicsparalle/viewtopic.php?p=201
2006-07-10 11:46:37 · answer #1 · answered by ? 7 · 0⤊ 0⤋
#include
#include
int main(void)
{
int i,count=0;
for(i=1;i<=10000;i++)
if ((rand()%6+1)==3 || (rand()%6+1)==6)/* 取亂數當成擲骰子 */
count++;
printf("擲10000次骰子時,出現3點或\6點的次數為%d次\n",count);
printf("機率為%.3f\n",(float)count/10000);
return 0;
}
2006-07-10 12:42:32 · answer #2 · answered by 大 3 · 0⤊ 0⤋
你的問題好像是在這裡
for(i=1;i<=10000;i++)
if ((rand()%6+1)==3)/* 取亂數當成擲骰子 */
count++;
if ((rand()%6+1)==6)
count+=count++; /* 當骰子點數為3點時,count+1 */
這樣子感覺好像總共坐了兩萬次
第一個rand() 和第二個rand() 不會是同一個東西
for(i=1;i<=10000;i++){
if ((rand()%6+1)==3) || ((rand()%6+1)==6) /* 取亂數當成擲骰子 */
count++;}
很久沒用c了 語法錯了請自己修正
2006-07-10 10:29:17 · answer #3 · answered by 漂泊宿醉 1 · 0⤊ 0⤋
你好像在一個迴圈裡面取了兩次亂數了
你應該是要把亂數的質變成一個變數然後再用if來做聯集
2006-07-10 10:26:39 · answer #4 · answered by 哈哈 2 · 0⤊ 0⤋