为什么 rand() 不起作用?逻辑错误在哪里?



/*对不起,我不在英语世界。请理解。*我的问题是为什么行★不起作用??*当它是常量而不是"(double(rand((/rand_MAX"时,它就起作用了!*/

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
int cash = 50;
int bets = 0;
srand((unsigned)time(NULL));

for (int i = 1; i <= 1000; i++) {
while (cash > 0 && cash < 250) {
if ((double)rand() / RAND_MAX < 0.5) ★
cash++;
else cash--;
}
if (cash == 250)
bets++;
}
printf("initial amount $50n");
printf("target amount $250n");
printf("%d wins out of 1000n", bets);
printf("odds of winning=%lf", bets / 1000);
return 0;
}

我已经尝试过测试您的代码;我发现的唯一错误是你没有重新填充现金变量。

由于while循环在cash=0或cash=250时退出,因此在下一个循环中,while语句在第一次迭代时退出。

因此,您将获得100%或0%的胜利。

尝试在while循环之前设置cash=50。

我给出一个建议:不要在if语句中进行计算,使用这样的东西:

res = (double)rand() / RAND_MAX;
if (res < 0.5) {
...
}

这样就更容易通过调试器了解res.的值

我希望这能帮助你。

相关内容

最新更新