我是c++初学者,最近编了一个求解一元二次方程的小程序,但总是有一个错误,找不出来,希望牛人帮忙。
程序如下:#include"iostream.h"#include"cmath.h"usingnamespacestd;voidmain(){floata,b,c,d,x...
程序如下:
#include "iostream.h"
#include "cmath.h"
using namespace std;
void main()
{
float a,b,c,d,x1,x2,rpart,ipart;
cout<<"方程为a*x^2+b*x+c=0,请输入a、b、c的值"<<endl;
cin>>a>>b>>c;
if (a==0)
{
if (b==0)
cout<<"方程无解";
else
{
x1=-c/b;
cout<<"一元一次方程的根是"<<x1<<endl;
}
}
else
{
d=b*b-4*a*c;
if (d<0)
{
rpart=-b/(2*a);
ipart=sqrt(-d)/(2*a);
x1=rpart+ipart*i;
x2=rpart-ipart*i;
cout<<"方程有两个复根:x1="<<x1<<" x2="<<x2<<endl;
}
if (d==0)
{
x1=-b/(2*a);
cout<<"方程有两个相等的实根,x1=x2="<<x1<<endl;
}
else
{
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
cout<<"方程有两个不相等的实根,x1="<<x1<<" x2="<<x2<<endl;
}
}
} 展开
#include "iostream.h"
#include "cmath.h"
using namespace std;
void main()
{
float a,b,c,d,x1,x2,rpart,ipart;
cout<<"方程为a*x^2+b*x+c=0,请输入a、b、c的值"<<endl;
cin>>a>>b>>c;
if (a==0)
{
if (b==0)
cout<<"方程无解";
else
{
x1=-c/b;
cout<<"一元一次方程的根是"<<x1<<endl;
}
}
else
{
d=b*b-4*a*c;
if (d<0)
{
rpart=-b/(2*a);
ipart=sqrt(-d)/(2*a);
x1=rpart+ipart*i;
x2=rpart-ipart*i;
cout<<"方程有两个复根:x1="<<x1<<" x2="<<x2<<endl;
}
if (d==0)
{
x1=-b/(2*a);
cout<<"方程有两个相等的实根,x1=x2="<<x1<<endl;
}
else
{
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
cout<<"方程有两个不相等的实根,x1="<<x1<<" x2="<<x2<<endl;
}
}
} 展开
4个回答
展开全部
1、cmath.h修改成math.h
2、i的使用有问题,电脑不会在你*i的时候自动在一个数后面追加一个i的
3、最好定义主函数为int型,另外这个前面加else
下面是我给你修改的,供参考!
#include "iostream.h"
#include "math.h"
using namespace std;
int main()
{
float a,b,c,d,x1,x2,rpart,ipart;
cout<<"方程为a*x^2+b*x+c=0,请输入a、b、c的值"<<endl;
cin>>a>>b>>c;
if (a==0)
{
if (b==0)
cout<<"方程无解";
else
{
x1=-c/b;
cout<<"一元一次方程的根是"<<x1<<endl;
}
}
else
{
d=b*b-4*a*c;
if (d<0)
{
rpart=-b/(2*a);
ipart=sqrt(-d)/(2*a);
//x1=rpart+ipart*i;
//x2=rpart-ipart*i;
cout<<"方程有两个复根:x1="<<rpart<<"+"<<ipart<<"i"<<" x2="<<rpart<<"-"<<ipart<<"i"<<endl;
}
else if (d==0)
{
x1=-b/(2*a);
cout<<"方程有两个相等的实根,x1=x2="<<x1<<endl;
}
else
{
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
cout<<"方程有两个不相等的实根,x1="<<x1<<" x2="<<x2<<endl;
}
}
getchar();
getchar();
return 0;
}
2、i的使用有问题,电脑不会在你*i的时候自动在一个数后面追加一个i的
3、最好定义主函数为int型,另外这个前面加else
下面是我给你修改的,供参考!
#include "iostream.h"
#include "math.h"
using namespace std;
int main()
{
float a,b,c,d,x1,x2,rpart,ipart;
cout<<"方程为a*x^2+b*x+c=0,请输入a、b、c的值"<<endl;
cin>>a>>b>>c;
if (a==0)
{
if (b==0)
cout<<"方程无解";
else
{
x1=-c/b;
cout<<"一元一次方程的根是"<<x1<<endl;
}
}
else
{
d=b*b-4*a*c;
if (d<0)
{
rpart=-b/(2*a);
ipart=sqrt(-d)/(2*a);
//x1=rpart+ipart*i;
//x2=rpart-ipart*i;
cout<<"方程有两个复根:x1="<<rpart<<"+"<<ipart<<"i"<<" x2="<<rpart<<"-"<<ipart<<"i"<<endl;
}
else if (d==0)
{
x1=-b/(2*a);
cout<<"方程有两个相等的实根,x1=x2="<<x1<<endl;
}
else
{
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
cout<<"方程有两个不相等的实根,x1="<<x1<<" x2="<<x2<<endl;
}
}
getchar();
getchar();
return 0;
}
追问
您修改的我试过了,不对。看来错误在其他地方,还是谢谢你!
追答
怎么可能不对?我用的是devc++,你呢?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
g++version 4.4.3编译运行通过!~
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
float a,b,c,d,x1,x2,rpart,ipart;
cout<<"方程为a*x^2+b*x+c=0,请输入a、b、c的值"<<endl;
cin>>a>>b>>c;
if (a==0)
{
if (b==0)
cout<<"方程无解";
else
{
x1=-c/b;
cout<<"一元一次方程的根是"<<x1<<endl;
}
}
else
{
d=b*b-4*a*c;
if (d<0)
{
rpart=-b/(2*a);
ipart=sqrt(-d)/(2*a);
//x1=rpart+ipart;
//x2=rpart-ipart;
cout<<"方程有两个复根:x1="<<rpart<<"+"<<ipart<<"i"<<" x2="<<rpart<<"+"<<ipart<<"i"<<endl;
}
else if(d==0)
{
x1=-b/(2*a);
cout<<"方程有两个相等的实根,x1=x2="<<x1<<endl;
}
else
{
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
cout<<"方程有两个不相等的实根,x1="<<x1<<" x2="<<x2<<endl;
}
return 0;
}
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
float a,b,c,d,x1,x2,rpart,ipart;
cout<<"方程为a*x^2+b*x+c=0,请输入a、b、c的值"<<endl;
cin>>a>>b>>c;
if (a==0)
{
if (b==0)
cout<<"方程无解";
else
{
x1=-c/b;
cout<<"一元一次方程的根是"<<x1<<endl;
}
}
else
{
d=b*b-4*a*c;
if (d<0)
{
rpart=-b/(2*a);
ipart=sqrt(-d)/(2*a);
//x1=rpart+ipart;
//x2=rpart-ipart;
cout<<"方程有两个复根:x1="<<rpart<<"+"<<ipart<<"i"<<" x2="<<rpart<<"+"<<ipart<<"i"<<endl;
}
else if(d==0)
{
x1=-b/(2*a);
cout<<"方程有两个相等的实根,x1=x2="<<x1<<endl;
}
else
{
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
cout<<"方程有两个不相等的实根,x1="<<x1<<" x2="<<x2<<endl;
}
return 0;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1、#include "cmath.h"
修改成
#include "math.h"
2、using namespace std;
这句没用,删掉。
3、函数中缺少一个变量i的定义。
这三个修改好后,就可以编译通过了,至于逻辑,你再仔细研究下吧
修改成
#include "math.h"
2、using namespace std;
这句没用,删掉。
3、函数中缺少一个变量i的定义。
这三个修改好后,就可以编译通过了,至于逻辑,你再仔细研究下吧
追问
把#include "cmath.h"修改成#include "math.h",会有警告。
去掉using namespace std;这句话,错误就更多了。
追答
1、警告正常,如果想削除那个警告,可以在sqrt前面加上(float)
2、用的什么编译器?去掉using namespace std;这句话不应该有更多错误。
3、第三点你改了吗?
我改之后的参考如下
#include "iostream.h"
//#include "cmath.h"//temp 修改这句
#include "math.h"
//using namespace std;//temp 删除这句
void main()
{
//temp 追加这句
int i = 1;
float a,b,c,d,x1,x2,rpart,ipart;
cout>a>>b>>c;
if (a==0)
{
if (b==0)
cout<<"方程无解";
else
{
x1=-c/b;
cout<<"一元一次方程的根是"<<x1<<endl;
}
}
else
{
d=b*b-4*a*c;
if (d<0)
{
rpart=-b/(2*a);
//temp 修改这句
ipart=(float)sqrt(-d)/(2*a);
//ipart=sqrt(-d)/(2*a);
x1=rpart+ipart*i;
x2=rpart-ipart*i;
cout<<"方程有两个复根:x1="<<x1<<" x2="<<x2<<endl;
}
if (d==0)
{
x1=-b/(2*a);
cout<<"方程有两个相等的实根,x1=x2="<<x1<<endl;
}
else
{
//temp 修改这句
x1=(float)(-b+sqrt(d))/(2*a);
x2=(float)(-b-sqrt(d))/(2*a);
// x1=(-b+sqrt(d))/(2*a);
//x2=(-b-sqrt(d))/(2*a);
cout<<"方程有两个不相等的实根,x1="<<x1<<" x2="<<x2<<endl;
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2011-07-06
展开全部
#include<iostream.h>
#include<math.h>
#include<iomanip.h>
void main()
{
float a,b,c;
double x1,x2;
cout<<"请输入a,b,c:"<<endl;
cin>>a>>b>>c;
if(a!=0)
{
if((b*b-4*a*c)>=0)
{
x1=(-b+sqrt(b*b-4*a*c))/(2*a);
x2=(-b-sqrt(b*b-4*a*c))/(2*a);
cout<<"x1="<<x1<<setw(5)<<"x2="<<x2<<endl;
}
else
cout<<"无解"<<endl;
}
else
{
if(b==0)//2个=是判断相等,一个是赋值。
{
if(c==0)//这里也是一样的。
cout<<"x为任意解"<<endl;
else
cout<<"无解"<<endl;
}
else
{ x1=-c/b;
x2=-c/b;}
cout<<"x1="<<x1<<setw(5)<<"x2="<<x2<<endl;
}
}
另外,站长团上有产品团购,便宜有保证
#include<math.h>
#include<iomanip.h>
void main()
{
float a,b,c;
double x1,x2;
cout<<"请输入a,b,c:"<<endl;
cin>>a>>b>>c;
if(a!=0)
{
if((b*b-4*a*c)>=0)
{
x1=(-b+sqrt(b*b-4*a*c))/(2*a);
x2=(-b-sqrt(b*b-4*a*c))/(2*a);
cout<<"x1="<<x1<<setw(5)<<"x2="<<x2<<endl;
}
else
cout<<"无解"<<endl;
}
else
{
if(b==0)//2个=是判断相等,一个是赋值。
{
if(c==0)//这里也是一样的。
cout<<"x为任意解"<<endl;
else
cout<<"无解"<<endl;
}
else
{ x1=-c/b;
x2=-c/b;}
cout<<"x1="<<x1<<setw(5)<<"x2="<<x2<<endl;
}
}
另外,站长团上有产品团购,便宜有保证
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询