汽油与消费需求问题,以链接为参考,按照流程写的代码,但结果输出为负数,是哪部分有问题

汽油与消费需求问题,以链接为参考,按照流程写的代码,但结果输出为负数,是哪部分有问题

img


http://t.csdn.cn/aU8hN

img

img


#include 
#include 
double function(double q);
int main()
{
    int Q=3000,T=3,d=1000,s=2,N=36500;
    int K=N,I=0,C=0,flag=0;
    while(flag==0){    
    I=I+Q,C=C+d;
    if(T==K) 
     flag=1;
      double q=rand()/(RAND_MAX+1.0);; 
      double qi;
      qi=function(q);
      I=I-qi;
      if(I<=0)
      {
      I=0;
      K=K-1;    
      } 
      else
      {
       C=C+I*s;
       K=K-1;
      }    
    }
    printf("%lf",C*0.1/N);
}
double function(double q)
{
    double qi;
if(q>=0&&q<0.01)
    qi = (q+0.2)*5000;
else if(q>=0.01&&q<0.03)
    qi = (q+0.2)*5000;
else if(q>=0.03&&q<0.08  )  
    qi = (q+0.545)*2000;
else if(q>=0.08&&q<0.20)
    qi = (q+1.42)*833.33;
else if(q>=0.20&&q<0.40)
    qi = (q+2.5)*500;
else if(q>=0.40&&q<0.67)
    qi = (q+3.515)*370.37;
else if(q>=0.67&&q<0.85)
    qi = (q+2.12)*555.55;
else if(q>=0.85&&q<0.93) 
    qi = (q+0.47)*1250;      
else if(q>=0.93&&q<0.97) 
    qi = (q-0.23)*2500; 
else
    qi= (q-0.6)*5000;
return qi;
}



img

 #include <stdio.h>
#include <stdlib.h>
double function(double q);
int main()
{
    int Q=3000,T=3,d=1000,s=2,N=36500;
    int K=N,I=0,C=0,flag=0;
    while(flag==0)//当运送的时间间隔大于模拟中剩下的天数时,才进行运送货物 
       {
           for(int i=1;i<=N;i+=T)//每T天进行一次货物运输 
           {
           I=I+Q; 
           C=C+d;//计算进货后的存储量,计算此次进货的费用 
           for(int j=1;j<=T;j++)//在一个周期内进行存储量总费用的计算 
           {
               double q=rand()/(RAND_MAX+1.0); 
             double qi;
             qi=function(q);//需求量 
             I=I-qi;//库存量 
             if(I<=0)
               I=0;
             else//还有库存时需要进行存储费用的计算 
              C=C+I*s;
            } 
            K=K-T; 
            if(T==K)//如果运送时间间隔等于模拟中剩下的天数,无需进货 
           {
             flag==1; 
             break; 
           } 
       }
        printf("%lf",C*1.0/N); 
        return 0; 
        }
 
}
double function(double q)
{
    double qi;
if(q>=0&&q<0.01)
    qi = (q+0.2)*5000;
else if(q>=0.01&&q<0.03)
    qi = (q+0.2)*5000;
else if(q>=0.03&&q<0.08  )  
    qi = (q+0.545)*2000;
else if(q>=0.08&&q<0.20)
    qi = (q+1.42)*833.33;
else if(q>=0.20&&q<0.40)
    qi = (q+2.5)*500;
else if(q>=0.40&&q<0.67)
    qi = (q+3.515)*370.37;
else if(q>=0.67&&q<0.85)
    qi = (q+2.12)*555.55;
else if(q>=0.85&&q<0.93) 
    qi = (q+0.47)*1250;      
else if(q>=0.93&&q<0.97) 
    qi = (q-0.23)*2500; 
else
    qi= (q-0.6)*5000;
return qi;
}

你现在这代码,C值很大,要改为long long 类型。另外最后输出应该是C*1.0/N吧?

还是负的,好像关键错误不在这

img

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

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