#include<iostream>
#include<cmath>
using namespace std;
int main()
{
double a,b,c,x1,x2,x,m;
cout<<"请输入a,b,c"<<end;
cin>>a>>b>>c;
m=b*b-4a*c;
if(int(a==0&&b!=0))
x=-(c/b);
cout<<"该方程为一次方程且解为x="<<x<<endl;
else if(int(a==0&b==0))
cout<<"无解!"<<endl;
else if (m>0)
x1=(-b+sqrt(m))/(28a);
x2=(-b-sqrt(m))/(28a);
cout<<"x1="<<x1<<"x2="<<x2<<endl;
else if(m=0)
x1=x2=-b/(2*a);
cout<<"x1=x2="<<x1<<endl;
else cout<<"该方程无实数解"<<endl;
}
这是第一次写的程序,编译结果惨烈。注意各if语句里的表达式,根据最后的测试结果,这样的表述和预期效果是一致的。新技能get~百度错误代码之后得知:“if语句如果有多句的话需要加大括号”。垂死病中惊坐起。。原来老师课上那句话是这个意思。
另外,发现常犯错误:
- 乘号*忘记打,特别是系数跟变量的时候。
-等号写成=。。
上图为第一次修改之后的程序。但是在运行时,分几种情况进行,发现在德塔等于0时会莫名其妙输出“该方程无实数解”。查了半天也没有找到问题所在。
在剪切,粘贴之后,又莫名其妙好了。。好了。。。
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
double a,b,c,x1,x2,x,m;
cout<<"请输入a,b,c"<<endl;
cin>>a>>b>>c;
m=b*b-4*a*c;
if(int(a==0&&b!=0))
{
x=-(c/b);
cout<<"该方程为一次方程且解为x="<<x<<endl;
}
else if(int(a==0&&b==0))
{
cout<<"无解!"<<endl;
}
else if(int(a!=0&&m>0))
{
x1=(-b+sqrt(m))/(2*a);
x2=(-b-sqrt(m))/(2*a);
cout<<"x1="<<x1<<"x2="<<x2<<endl;
}
else if (int(a!=0&&m==0))
{
x1=x2=-b/(2*a); cout<<"x1=x2="<<x1<<endl;
}
else cout<<"该方程无实数解"<<endl;
}
这是最终版本。缩进和并列有待熟练。