我是c++初学者,最近编了一个求解一元二次方程的小程序,但总是有一个错误,找不出来,希望牛人帮忙。

程序如下:
#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;
}
}
}

第1个回答  2011-06-29
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;
}追问

您修改的我试过了,不对。看来错误在其他地方,还是谢谢你!

追答

怎么可能不对?我用的是devc++,你呢?

第2个回答  2011-06-29
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;
}本回答被提问者采纳
第3个回答  2011-06-29
1、#include "cmath.h"
修改成
#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;
}
}
}

第4个回答  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;

}

}
另外,站长团上有产品团购,便宜有保证

C++程序求一元二次方程的根
我编写了一个程序,但是结果总是有问题,大家帮忙看一下是哪里错了,谢谢!include<iostream> include<cmath> using namespace std;int main(){ int n;double a[1000],b[1000],c[1000],delta[1000];cin>>n;for(int i=1;i<=n;i++){ cin>>a[i]>>b[i]>>c[i];delta[i]=b[i]*...

我编写了一个小程序 (C++) 为什么显示结果是0.0000000
void main (){ int n=10;double r=0.1,p;p=pow(1+r,n);\/\/改成p=pow(1.0+r,n);不知道会不会制动转,还是手动转比较有安全感 printf("p%f\\n");\/\/问题的原因是这个了,改成printf("p%lf\\n",p);你的数据类型是double,所以输出格式用lf比较好,主要是精度和表示范围上的问题。...

怎么用c语言编写一个小程序?
1、首先打开DEV C++软件,点击“新建源代码”,在编辑页面输入以下代码。2、因为题目要求我们先输入一个整数,所以在定义变量时,就应该将其定义为整数型,注意,在输入,输出函数中,整数型对应的是“%d”。3、接下来就要对输入的整数进行判断,在C语言中,if是判断语句,所以用它来对整数进行判断。if...

用c++我自己编写一个小程序,怎么才能够生成一个独立的安装程序啊,在操...
如果你用的是VC的话,在你用F5调试之后,它会在你的工程目录下生成一个Debug文件夹,里面有一个和你工程名一样的exe文件,它就是可以直接运行的应用程序文件

c++一个小程序编写
include<cstdlib>#include<cmath>#include<iostream>using namespace std;float triangle(float,float,float);int main(){int a,b,c;cin>>a>>b>>c;cout<<triangle(a,b,c);system("pause");return 0;}float triangle(float x, float y,float z){int p;p=(x+y+z)\/2;return sqrt(p*...

我编了一个小程序,里面设置随机数种子的函数报错?
srand 是库函数 放 主函数 或者 某个 函数里就行 如 main 里 不能放函数外面!!!除非是不用酷暑,自定义的函数!声明自定义函数

我编了一个C语言小程序:输入三角形的三边长,求各角与面积。编译时出了...
同学,你有几点错误:1. for循环之后,如果有{},那么你的代码不应该含有 "; ",如for(;;){} 2. 所有的for都应该在main里面 3. printf("format",var, ...) 使用的是变量名,而不是地址 scanf("format", &varp,...) 使用的是变量地址!你如果可以加强对C\/C++语言的学习,就更好了 。

如何在电脑编写一个小程序,输出字符串
在电脑编写一个小程序,输出字符串,就找相应的软件开发工具。例如:在这里我们借助的软件是Visual C++6、0。打开软件,先新建一个工程,在新建一个C++源文件,这些你听起来可能有点陌生,不要担心,你只需要按照下面操作就好。在建好文件之后,在源文件处,输入下列代码#includeusing namespace std;...

用C++编的一个小程序,运行后只有进程,没有窗口,这是为什么?程序如下
HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam );int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd ){ WNDCLASS wndcls;wndcls.cbClsExtra=0; \/\/\/ 这里重复设置了, 并且漏设置了 wndcls.cbWndExtra = 0;wndcls.cbClsExtra=0;wndcls.hbr...

我做出来 一个c++小程序 怎么让图标改一下 还有里面的界面 都是一个...
黑框框是控制台,改图片什么的,需要使用到一些图形库,比如MFC啦,QT5啦,之类之类的

相似回答