这段代码是顺利航行,直到我明确地包含IF-STATEMENT在DO-WHILE LOOP内部包含BREAK,如果fv1 = 0(对于任何被零除的值是未定义的),应该报告数学错误。但是,意外的结果被打印出来。如何成功摆脱这种do-while循环?
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
const double R = 0.082054;
double f(double a,double b,double P,double T,double v);
double f(double a,double b,double P,double T,double v)
{
double q =P*pow(v,3)-(P*b+R*T)*pow(v,2)+a*v-a*b;
return q;
}
double fPrime(double a,double b,double P,double T,double v);
double fPrime(double a,double b,double P,double T,double v)
{
double s =3*P*pow(v,2)-2*(P*b+R*T)*pow(v,1)+a;
return s;
}
int main()
{
//INPUT STAGE!
cout << "Use gas constant, R: " << R << endl;
double a,b,P,T,Tc;
cout << "\nUse test value, a: ";
cin >> a;
cout << "\nUse test value, b: ";
cin >> b;
cout << "\nUse pressure, P (atm): ";
cin >> P;
cout << "\nUse absolute temperature, T (K): ";
cin >> T;
double v,v1=0,fv,fv1,N,e;
int iteration = 0;
cout << "\nUse initial guess for molal volume, v: ";
cin >> v;
cout << "\nUse maximum number of iterations, N: ";
cin >> N;
cout << "\nUse tolerance, e: ";
cin >> e;
cout << "\n";
do
{
v = v1;
fv = f(a,b,P,T,v);
fv1 = fPrime(a,b,P,T,v);
if (fv1=0)
{
cout << "Math Error";
break;
}
v1 = v-(fv/fv1);
cout << iteration+1 << setw(12) << v << setw(16) << v1 << setw(16) << abs(v1-v) << endl;
iteration++;
}
while(iteration<N && abs(v1-v)>e);
return 0;
}
所以休息不会终止DO-WHILE循环? –
@标记路易在'if(fv1 = 0)'你将0赋值给'fv1',然后测试它是真还是假。它总是错误的,因为你将**赋值给** 'fv1' – peedurrr
@Mark - 是的,它会 - “条件陈述”是一种用词不当...... if(bool){break; }将退出循环包含条件,而不是条件。 – John