English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

這是例題程式
/* 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

4 個解答

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 #include #include #define T 10000int main(){int i, c, d;srand(time(NULL));for (c=i=0; i
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

fedest.com, questions and answers