m0_62138486 2023-03-10 15:03 采纳率: 98.6%
浏览 48
已结题

我的代码为什么输入什么结果都输出零

我的代码为什么输入什么结果都输出零

img

img

img

img

img

img

#include <stdio.h> 
#include <stdlib.h>
#include <time.h>
int main()
{
    int n;//模拟次数 
    int k=1,count=0;
    srand((unsigned)time(NULL));
    double r;
    int T1,T3,T2;
    scanf("%d",&n);
    while(k<=n)
    {
          r=rand()%2;
          if(r>=0&&r<0.7)
            T1=0;
        else if(r>=0.7&&r<0.9)
          T1=5;
        else
          T1=10; 
           r=rand()%2;
           if(r>=0&&r<0.3)
             T3=28;
           else if(r>=0.3&&r<0.7)
          T3=30;
        else if(r>=0.7&&r<0.9)
          T3=32; 
        else
          T3=34;
        T2=rand()%2;
        if(T1+T2>T3)
         count=count+1;    
        k=k+1;
    }
    printf("赶上火车的频率p为%lf",count/n*0.1); 
}

img

  • 写回答

6条回答 默认 最新

  • CSDN专家-sinJack 2023-03-10 15:18
    关注

    if(T1+T2>T3) 这个条件应该永远不成立,导致没执行,count为0
    T1+T2不可能大于T3的,根据代码,T3至少为28,T1最大为10,T2最大为1

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • CSDN专家-link 2023-03-10 15:14
    关注

    主要是count和n都是整数,且count小于n,所以35行count/n * 0.1=0 * 0.1 = 0
    两个整数相除是整除,会丢失小数部分,所以你要改为 :
    printf("赶上火车的频率p为%lf",count * 0.1 / n);

    评论 编辑记录
  • ksgpjhqf 2023-03-10 15:17
    关注
    1. rand()返回值是整数,rand()%2是求随机整数除以2的余数,所以结果只能是0或1,于是T1等于0或10,T2等于0或1,T3等于28或34;
    2. 你的T2算得不对;
    3. 若count小于n,则count/n等于0,count/n*0.1等于0.0,要先转化为浮点型
    
    #include <stdio.h> 
    #include <stdlib.h>
    #include <time.h>
    
    int main()
    {
        int n;//模拟次数 
        int k=1,count=0;
        srand((unsigned)time(NULL));
        int r;
        int T1,T3,T2;
        scanf("%d",&n);
        while(k<=n)
        {
            r=rand()%10;
            if(r>=0&&r<7)
                T1=0;
            else if(r>=7&&r<9)
                T1=5;
            else
                T1=10; 
            r=rand()%10;
            if(r>=0&&r<3)
                T3=28;
            else if(r>=3&&r<7)
                T3=30;
            else if(r>=7&&r<9)
                T3=32; 
            else
                T3=34;
            //用二项分布近似正态分布
            T2=0;
            for(r=0;r<16;r++){
                T2+=rand()%2;
            }
            T2+=22;
            if(T1+T2>T3)
                count=count+1;    
            k=k+1;
        }
        printf("赶上火车的频率p为%lf",(double)count/n); 
    }
     
    
    评论 编辑记录
  • 扑天鹰 2023-03-10 15:12
    关注

    这个缩进实在难看代码

    评论
  • 有问必答小助手 2023-03-10 15:53
    关注
    您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
    PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632
    评论
  • CSDN-Ada助手 CSDN-AI 官方账号 2023-03-11 18:21
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 3月18日
  • 已采纳回答 3月10日
  • 创建了问题 3月10日

悬赏问题

  • ¥15 k210显示failed init to model
  • ¥15 Evil-droid生成的APK手机已经下载但无法建立任务
  • ¥25 c语言韩信点兵的变式
  • ¥15 怎么根据书上的例子完成这个问题呢?
  • ¥15 ECharts 增加Zoom,整行包括右边的Text一起滑动
  • ¥15 关于网上一个easyx制作的见缝插针小游戏(c++)
  • ¥15 开地址法双散列函数处理碰撞
  • ¥15 想问一下这个是什么情况 虚拟机Linux打不开了
  • ¥15 联通光猫掉注册了怎么重新注册上去
  • ¥15 关于unity开发steamvr程序遇到的问题