用C解决一元二次方程根的问题集锦.docx
《用C解决一元二次方程根的问题集锦.docx》由会员分享,可在线阅读,更多相关《用C解决一元二次方程根的问题集锦.docx(16页珍藏版)》请在冰豆网上搜索。
![用C解决一元二次方程根的问题集锦.docx](https://file1.bdocx.com/fileroot1/2023-4/21/6242fa25-db61-4e47-a757-cd6031919e86/6242fa25-db61-4e47-a757-cd6031919e861.gif)
用C解决一元二次方程根的问题集锦
c++求一元二次方程ax^+bx+c=0的根
一
#include
#include
#defineESSP0.00000001
voidmain()
{
doublea,b,c,delta,root1,root2;
cout<<"Pleaseinputa:
";
cin>>a;
cout<<"Pleaseinputb:
";
cin>>b;
cout<<"Pleaseinputc:
";
cin>>c;
delta=b*b-4*a*c;
if(delta<-ESSP)
cout<<"Thisequationhasnorealroot."<elseif(delta>ESSP)
{
root1=(-b+sqrt(delta))/(2*a);
root2=(-b-sqrt(delta))/(2*a);
cout<<"Thisequtionhastwounequalizeroots:
"<}
else
{
root1=-b/(2*a);
cout<<"Thisequtionhastwoequalizeroots:
"<}
}
二
结构化编程方法:
//fortworoots
#include
#include
intmain()
{
doublea,b,c,rp,ip;//方程系数
doublex1,x2;//方程的根
doubled;//根的判别式
cout<<"inputa,b,c(方程系数):
";
cin>>a>>b>>c;
if(a==0)
cout<<"这不是二元一次方程";
else
{
d=b*b-4*a*c;
if(d>=0)
{
if(d==0)
{
x1=-b/(2*a);
cout<<"只有一个实根:
"<}
else
{
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
cout<<"有二个实根:
"<}
}
else
{rp=-d/(2*a);
ip=sqrt(-d)/(2*a);
x1=rp+ip;
x2=rp-ip;
cout<<"有二个虚根:
"<}
}
return0;
}
简单的类对象:
#include"iostream.h"
#include"math.h"
classFindRoot
{
private:
floata,b,c,d;
doublex1,x2;
public:
FindRoot(floatx,floaty,floatz);
voidFind();
voidDisplay();
};
FindRoot:
:
FindRoot(floatx,floaty,floatz)
{
a=x;
b=y;
c=z;
d=b*b-4*a*c;
}
voidFindRoot:
:
Find()
{
if(d>0)
{
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(a*a);
}
elseif(d==0)
{
x1=x2=(-b)/(2*a);
}
else
{
doublerp=-d/(2*a);
doubleip=sqrt(-d)/(2*a);
x1=rp+ip;
x2=rp-ip;
}
}
voidFindRoot:
:
Display()
{
if(d>0)
{
cout<<"x1="<}
elseif(d==0)
{
cout<<"x1=x2="<}
else
{
cout<<"x1="<cout<<"x2="<}
}
voidmain()
{
FindRootobj(1,2,3);
obj.Find();
obj.Display();
}
三
根据要求编写程序。
①从键盘输入三个实数a、b、c分别作为一个一元二次方程ax2+bx+c=0的三个系数。
使用系
统给出的平方根函数,编写一段程序,使之求出这个方程的两个根。
其中,求△=b2-4*a*c
的功能要以函数形式出现。
(提示:
求根公式,△<0时方程无解)
②已知a1=1,a2=1,当n大于等于2时,a(n+1)=3*a-a(n-1),要求用递归函数输出a1到a8。
①
#include"stdio.h"
#include"math.h"
voidmain()
{
floata,b,c,x1,x2,disc,realpart,imagpart;
printf("请输入三个数值\n");
scanf("%f%f%f",&a,&b,&c);
disc=b*b-4*a*c;
if(a==0)
printf("该方程不是一元二次方程组\n");
elseif(disc==0)
{
x1=(-b)/(2*a);
x2=(-b)/(2*a);
printf("x1=%.2f\tx2=%.2f\n",x1,x2);
}
elseif(b*b-4*a*c>0)
{
x1=(-b)+sqrt(disc);
x2=(-b)-sqrt(disc);
printf("x1=%.2f\tx2=%.2f\n",x1,x2);
}
else
printf("b²-4ac<0,该方程没有实根\n",x1,x2);
}
②
#include"stdio.h"
inta[8]={0};
intgetResult(intn)
{
if(n==1||n==2)
{
return1;
}
else
{
return3*getResult(n-1)-getResult(n-2);
}
}
voidmain()
{
inti;
a[0]=1;
a[1]=1;
for(i=2;i<8;i++)
a[i]=getResult(i+1);
for(i=0;i<8;i++)
printf("a%d=%d\n",i+1,a[i]);
}
四
用C语言编写一个程序,计算一元二次方程的解(x1,x2)。
一元二次方程:
Ax2+Bx+C=0(假设A=4,B=6,C=1)
按顺序输入a,b,c
#include"stdio.h"
#include"stdlib.h"
#include"math.h"
intmain(){
floata,b,c;
scanf("%f",&a);
scanf("%f",&b);
scanf("%f",&c);
printf("%f\n",(-b+sqrt(b*b-4*a*c))/2/a);
printf("%f",(-b-sqrt(b*b-4*a*c))/2/a);
system("pause");
return0;
};
五
解一元二次方程的C++程序
#include
#include
#include
voidsqrt1(double,double);
voidsqrt2(double,double);
voidprinter(double,double);
voidmain()
{
floata,b,c;
doublex1,x2;
cout<<"请输入a,b,c:
"<cin>>a>>b>>c;
if(b*b-4*a*c!
=0)
{
if(b*b-4*a*c)
{
sqrt1(x1,x2);
}
else
{
printer(x1,x2);
}
}
else
{
sqrt2(x1,x2);
}
}
voidsqrt1(doublex1,doublex2)//b*b-4ac>0
{
floata,b,c;
if(a!
=0)
{
x1=(-b+sqrt(b*b-4*a*c))/(2*a);
x2=(-b-sqrt(b*b-4*a*c))/(2*a);
cout<<"x1="<}
else
{
if(b==0)
{
if(c==0)
cout<<"x为任意解"<else
cout<<"无解"<}
else
{
x1=x2=-c/b;
cout<<"x1="<<"x2="<}
}
}
voidsqrt2(doublex1,doublex2)//b*b-4ac=0
{
floata,b,c;
x1=x2=-b/(2*a);
cout<<"x1="<<"x2="<}
voidprinter(doublex1,doublex2)//b*b-4ac<0
{
floata,b,c;
chari='i';//i后面为虚部
x1=(-b/(2*a))+(i*(sqrt(b*b-4*a*c)/(2*a)));
x2=(-b/(2*a))-(i*(sqrt(b*b-4*a*c)/(2*a)));
cout<<"x1="<}
六
用C++编几个程序
1编写一个程序求一元二次方程的解。
讨论下述情形:
(1)a=0,不是二次方程。
(2)b^2-4ac=0,有两个相等实根。
(3)b^2-4ac>0,有两个不等实根。
(4)b^2-4ac<0,有两个复根(表示成x+yi,x-yi)。
2.编写一个程序,打印下列图形:
1
12
123
1234
12345
3.编写一个函数将一nxn矩阵转置(即a[i][j]与a[j][i]的值交换),然后编写一main()
函数调用它(取n=3)。
第1个我记得书上有例题的
第2个:
#include
intmain()
{
for(inti=1;i<=5;i++)
{
for(intj=1;j<=i;j++)
printf("%d",j);
printf("\n");
}
return0;
}
3.
#include
#defineN3
intmain()
{
voidf(int);
inta[N][N];
for(inti=0;ifor(intj=0;jscanf("%d",&a[i][j]);
f(a);
for(inti=0;i{
for(intj=0;jprintf("%d",a[i][j]);
printf("\n");
}
return0;
}
voidf(inta[][])
{
inttemp;
for(inti=0;ifor(intj=i;j{
temp=a[i][j];
a[i][j]=a[j][i];
a[j][i]=temp;
}
}
七(复数)
#include"iostream.h"
#include"math.h"
voidmain()
{
floata,b,c;
cout<<"Inputax*x+bx+c=0:
\na=";
cin>>a;
cout<<"b=";
cin>>b;
cout<<"c=";
cin>>c;
if(b*b-4*a*c<0)
{
cout<<"Noradixinrealnumber!
"<complex x1,x2;
x1 = complex((-b)/(2*a), sqrt(-d)/(2*a));
x2 = complex((-b)/(2*a), -(sqrt(-d)/(2*a)));
return;
}
八建立复数类求方程的根
#include
#include
#include
using namespace std;
int main(void)
{
double a = 1.0, b = 0.0, c = 1.0; // ax^2 + bx + c = 0
complex x1,x2;
double d = b * b - 4.0 * a * c;
if (d >= 0)
{
x1 = (-b + sqrt(d))/(2*a);
x2 = (-b - sqrt(d))/(2*a);
}
else
{
x1 = complex((-b)/(2*a), sqrt(-d)/(2*a));
x2 = complex((-b)/(2*a), -(sqrt(-d)/(2*a)));
}
cout << "x1 = " << x1.real() << " + " << x1.imag() << "i" << endl;
cout << "x2 = " << x2.real() << " + " << x2.imag() << "i" << endl;
return 0;
}
九
复数类如下:
#include
#include
// class
class complex
{
private:
double a,b;
double _copy;
public:
double getreal();
double getimag();
double getZ();
void solution(double a,double b,double c,double p,complex &x1,complex &x2);
complex(int x)
{
a=x;b=0;
}
complex(double av,double bv):
a(av),b(bv)
{
}
complex(){}
complex(complex& _copy)
{
a=_copy.a;
b=_copy.b;
}
friend ostream& operator<<(ostream& i,complex& j);
friend istream& operator>>(istream& g,complex& i);
friend complex operator+(complex& x,complex& y);
friend complex operator-(complex& x,complex& y);
friend complex operator*(complex& x,complex& y);
friend complex operator/(complex& x,complex& y);
complex operator=(complex& y);
void output()
{
cout<<"z="< }
void put()
{
cout<<"("< }
void gen()
{int sign=1, double g,h;
if(b<0)
sign=-1;
else
sign=1;
g=sqrt((sqrt((a*a)+(b*b))+a)/2);
h=sign*sqrt((sqrt((a*a)+(b*b))-a)/2);
cout<<"the sqrt-root is:
"< }
};
ostream& operator<<(ostream& stream ,complex& x)
{
x.put();
return stream;
}
//input
istream& operator>>(istream& stream,complex& x)
{
cout<<"\treal=";
cin>>x.a;
cout<<"\timag=";
cin>>x.b;
return stream;
}
//add
complex operator+(complex& x,complex& y)
{
return complex(x.a+y.a,x.b+y.b);
}
//sub
complex operator-(complex& x,complex& y)
{
return complex(x.a-y.a,x.b-y.b);
}
//mul
complex operator*(complex& x,complex &y)
{
return complex((x.a*y.a)-(x.b*y.b),(x.a*y.b)+(x.b*y.a));
}
//div
complex operator/(complex& x,complex& y)
{
return complex(((x.a*y.a+x.b*y.b))/(y.a*y.a+y.b*y.b),(x.b*y.a-x.a*y.b)/(y.a*y.a+y.b*y.b));
}
//assignment
complex complex:
:
operator=(complex& y)
{
this->a=y.a;
this->b=y.b;
return *this;
}
double complex:
:
getreal()
{
return a;
}
double complex:
:
getimag()
{
return b;
}
double complex:
:
getZ(