誰幫我看看編譯怎么出錯了,謝謝


#include<iostream.h>
#include <math.h>
double j1=0.0,j2=0.0,j3=0.0;
double f(double a,double b,double c,double d,double n)
{return a*n*n*n+b*n*n+c*n+d;}
double f1(double a,double b,double c,double n)
{return 3*a*n*n+2*b*n+c ;}
double QR(double A,double B,double C,double D)
{
double x=0,x0;
do
{x0=x;
x=x0-f(A,B,C,D,x0)/f1(A,B,C,x0);}
while(fabs(x-x0)>=1e-5)
j1=x;
double p1=A,p2=B+A*x,p3=-D/x;
double delta=p2*p2-4*p1*p3;
if (delta<0)
cout<<"有兩復根,計算失敗";
else if (delta=0)
{j2=j3=-p2/2/p1;
cout<<"有相同的兩根";}
else {j2=(-p2-sqrt(delta))/(2*p1);
j3=(-p2+sqrt(delta))/(2*p1);}
}
void main()       
{double T,p;
double Tc,Pc,w,R;
    cout<<"溫度T="; 
    cin>>T; 
    cout<<endl; 
    cout<<"壓力p="; 
    cin>>p; 
    cout<<endl; 
    cout<<"Tc="; 
    cin>>Tc; 
    cout<<endl; 
    cout<<"Pc="; 
    cin>>Pc; 
    cout<<endl;
    cout<<"w="; 
    cin>>w; 
    cout<<endl; 
cout<<"R="; 
    cin>>R; 
    cout<<endl; 
double ac,b,k,v,alpha,a;
ac=0.45724*R*R*Tc*Tc/Pc;
b=0.07780*R*Tc/Pc;
k=0.37464+(1.54226-0.26992*w)*w;
v=1.0+k*(1.0-pow(T/Tc,0.5));
alpha=pow(v,2.0);
a=ac*alpha;
double q1,q2,q3,q4;
q1=p;
q2=p*b-R*T;
q3=a-2*R*T*b-3*p*b*b;
q4=p*b*b*b+R*T*b*b-a*b;
QR(q1,q2,q3,q4);
double max,min;
max=j1>j2?(j1>j3?j1:j3):(j2>j3?j2:j3);-------------箭頭指在這里說致命錯誤。
min=j2<j1?(j2<j3?j2:j3):(j1<j3?j1:j3);
cout<<"氣相摩爾容積=max 平方米每摩爾"endl;
cout<<"液相摩爾容積=min 平方米每摩爾"endl;
double DV1,DV2,maxexp=0.0078964,minexp=0.000085663;
DV1=(max-maxexp)/maxexp;
DV2=(min-minexp)/minexp;
cout<<"氣相摩爾容積相對誤差=DV1*100%"endl;
cout<<"液相摩爾容積相對誤差=DV2*100%"endl;
}

5 个解决方案

#1


 

#include<iostream>
#include <math.h>
using namespace std;
double _j1=0.0,j2=0.0,j3=0.0;
double f(double a,double b,double c,double d,double n)
{return a*n*n*n+b*n*n+c*n+d;}
double f1(double a,double b,double c,double n)
{return 3*a*n*n+2*b*n+c ;}
double QR(double A,double B,double C,double D)
{
    double x=0,x0;
    do
    {x0=x;
x=x0-f(A,B,C,D,x0)/f1(A,B,C,x0);}
while(fabs(x-x0)>=1e-5);
    _j1=x;
double p1=A,p2=B+A*x,p3=-D/x;
double delta=p2*p2-4*p1*p3;
if (delta<0)
    cout<<"有兩復根,計算失敗";
else if (delta==0)
{j2=j3=-p2/2/p1;
    cout<<"有相同的兩根";}
else {j2=(-p2-sqrt(delta))/(2*p1);
    j3=(-p2+sqrt(delta))/(2*p1);}
}
int main()   
{double T,p;
    double Tc,Pc,w,R;
      cout<<"溫度T=";  
        cin>>T;  
  cout<<endl;  
    cout<<"壓力p=";  
      cin>>p;  
        cout<<endl;  
  cout<<"Tc=";  
    cin>>Tc;  
      cout<<endl;  
        cout<<"Pc=";  
  cin>>Pc;  
    cout<<endl;
      cout<<"w=";  
        cin>>w;  
  cout<<endl;  
  cout<<"R=";  
    cin>>R;  
      cout<<endl;  
      double ac,b,k,v,alpha,a;
      ac=0.45724*R*R*Tc*Tc/Pc;
      b=0.07780*R*Tc/Pc;
      k=0.37464+(1.54226-0.26992*w)*w;
      v=1.0+k*(1.0-pow(T/Tc,0.5));
      alpha=pow(v,2.0);
      a=ac*alpha;
      double q1,q2,q3,q4;
      q1=p;
      q2=p*b-R*T;
      q3=a-2*R*T*b-3*p*b*b;
      q4=p*b*b*b+R*T*b*b-a*b;
      QR(q1,q2,q3,q4);
      double max,min;
      max=_j1>j2?(_j1>j3?_j1:j3):(j2>j3?j2:j3);//-------------箭頭指在這里說致命錯誤。
  min=j2<_j1?(j2<j3?j2:j3):(_j1<j3?_j1:j3);
      cout<<"氣相摩爾容積=max 平方米每摩爾"<<endl;
      cout<<"液相摩爾容積=min 平方米每摩爾"<<endl;
      double DV1,DV2,maxexp=0.0078964,minexp=0.000085663;
  DV1=(max-maxexp)/maxexp;
      DV2=(min-minexp)/minexp;
      cout<<"氣相摩爾容積相對誤差=DV1*100%"<<endl;
      cout<<"液相摩爾容積相對誤差=DV2*100%"<<endl;
return 0;
}
這里主要修改了一些中文字符,以及部分語法錯誤。

#2


g++編譯沒有報錯啊,就給了一個warning,說是函數QR聲明返回double類型,但是卻沒有返回值,但是程序仍然是可運行的。
數學化學太深奧了...

#3


該回復於2012-04-30 11:05:11被版主刪除

#4


引用 2 樓  的回復:
g++編譯沒有報錯啊,就給了一個warning,說是函數QR聲明返回double類型,但是卻沒有返回值,但是程序仍然是可運行的。
數學化學太深奧了...

可我是在vc中編譯 ,一直是有一個錯誤。  好無奈那

#5


引用樓主  的回復:
#include<iostream.h>
#include <math.h>
double j1=0.0,j2=0.0,j3=0.0;
double f(double a,double b,double c,double d,double n)
{return a*n*n*n+b*n*n+c*n+d;}
double f1(double a,double b,double c,doubl……

高手,還是有錯誤,?、請教

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com