用C++解决一元二次方程根的问题集锦.docx
《用C++解决一元二次方程根的问题集锦.docx》由会员分享,可在线阅读,更多相关《用C++解决一元二次方程根的问题集锦.docx(13页珍藏版)》请在冰豆网上搜索。
![用C++解决一元二次方程根的问题集锦.docx](https://file1.bdocx.com/fileroot1/2022-10/12/8f59ef8e-04b2-4015-9e0f-eed93648be5b/8f59ef8e-04b2-4015-9e0f-eed93648be5b1.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+