首页 文章

为什么这些源代码(C)提供了不同的化学反应结果? [等候接听]

提问于
浏览
-5

当我在Linux,Windows和在线编译器上运行这些源代码时,它总是提供不同的结果,但我认为两个源代码都是相同的 . 请描述有关这些代码的任何想法 .

第一个代码:

#include<iostream>
using namespace std;
int main()
{
    double a=100.0,b=50.0,c=0.0,da,db,dc;
    double k1=0.008,k2=0.002,delta=0.1,T=5.0,t,time=0.0;
    int N;
    t=(T/delta);
    N=(int)t;
    cout<<"Time"<<"\t"<<"A"<<"\t"<<"B"<<"\t"<<"C"<<"\t\n";
    cout<<time<<"\t"<<a<<"\t"<<b<<"\t"<<c<<"\t\n";
    for(int i=0;i<N;i++)
    {
        //Look the below line
        a=a+(k2*c-k1*a*b)*delta;
        b=b+(k2*c-k1*a*b)*delta;
        c=c+(2*(k1*a*b-k2*c))*delta;

        time+=delta;
        cout<<time<<"\t"<<a<<"\t"<<b<<"\t"<<c<<"\t\n";
    }
    return 0;

}

第二代码:

#include<iostream>
using namespace std;
int main()
{
    double a=100.0,b=50.0,c=0.0,da,db,dc;
    double k1=0.008,k2=0.002,delta=0.1,T=5.0,t,time=0.0;
    int N;
    t=(T/delta);
    N=(int)t;
    cout<<"Time"<<"\t"<<"A"<<"\t"<<"B"<<"\t"<<"C"<<"\t\n";
    cout<<time<<"\t"<<a<<"\t"<<b<<"\t"<<c<<"\t\n";
    for(int i=0;i<N;i++)
    {
        //Separate the previous code into two line.
        da=k2*c-k1*a*b;
        db=k2*c-k1*a*b;
        dc=2*(k1*a*b-k2*c);

        a=a+da*delta;
        b=b+db*delta;
        c=c+dc*delta;

        time+=delta;
        cout<<time<<"\t"<<a<<"\t"<<b<<"\t"<<c<<"\t\n";
    }
    return 0;
}

Output : After first iteration:

first code gives  : 0.1 96  46.16   7.09018 
second code gives : 0.1 96  46      8

1 回答

  • 6

    请注意,在第一个列表中,a的值在您向b提供新值时已更改 .

    a=a+(k2*c-k1*a*b)*delta; //a is now different
    b=b+(k2*c-k1*a*b)*delta;
                 ^ now different
    

    在第二个列表中,da,db和dc计算基于a,b和c的不变值 .

    da=k2*c-k1*a*b; 
    db=k2*c-k1*a*b;
               ^ ^ Still the same.
    

相关问题