📚 知識家圖書館 奇摩知識+ 紀念館

關於c語言的程式問題?

發問者 k (Lv.2) ・2006 年 7 月 10 日 ・程式設計

這是例題程式 /* 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
Jacob Lee(Lv.7) 2006 年 7 月 10 日

電腦與網際網路的其他問題