You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

rand()相关表达式不生效:代码逻辑错误在哪里?

问题分析与解决:rand()相关逻辑未生效的原因

核心问题

你遇到的问题并非(double)rand() / RAND_MAX < 0.5这行代码本身失效,而是**cash变量没有在每次外层for循环开始时重置为初始值50**:

  • 第一次进入for循环时,cash从50开始,经过while循环后最终会变成0或250;
  • 后续999次for循环中,cash已经处于0或250的状态,cash > 0 && cash < 250的条件直接不成立,while循环完全不会执行,导致后续循环都无法触发随机逻辑,bets只会统计第一次循环的结果,看起来就像随机逻辑没生效;
  • 当你把随机判断换成常量(比如恒为true),第一次循环cash会到达250,之后每次for循环cash保持250,bets会累加1000次,看起来“正常运行”,但这其实是另一种逻辑错误。

修正后的代码

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void) {
    int bets = 0;
    srand((unsigned)time(NULL));

    for (int i = 1; i <= 1000; i++) {
        int cash = 50; // 将cash的声明移到for循环内部,每次循环重置为初始值
        while (cash > 0 && cash < 250) {
            if ((double)rand() / RAND_MAX < 0.5)
                cash++;
            else
                cash--;
        }
        if (cash == 250)
            bets++;
    }

    printf("initial amount $50\n");
    printf("target amount $250\n");
    printf("%d wins out of 1000\n", bets);
    printf("odds of winning=%lf\n", (double)bets / 1000); // 强制转换为double,避免整数除法结果为0

    return 0;
}

额外细节修正

原代码最后一行的bets / 1000是整数除法,除非bets等于1000,否则结果永远为0,需要强制转换为double才能得到正确的概率值。

内容的提问来源于stack exchange,提问作者rosalinda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 16:15:38