问题 1028: [编程入门]自定义函数求一元二次方程
时间限制: 1Sec 内存限制: 128MB 提交: 4313 解决: 2317
题目描述
求方程 的根,用三个函数分别求当b^2-4ac大于0、等于0、和小于0时的根,并输出结果。从主函数输入a、b、c的值。
输入
a b c
输出
x1=? x2=?
样例输入
4 1 1
样例输出
x1=-0.125+0.484i x2=-0.125-0.484i
一元二次方程
ax²+bx+c=0 (a≠0)
其求根依据判定式△的取值为三种 ( △=b²-4ac )
1. △>0,方程有两个不相等的实数根;
x1=[-b+√(△)]/2a; //( △=b²-4ac )
x2=[-b-√(△)]/2a;
2. △=0,方程有两个相等的实数根;
x1=x2=[-b+√(△)]/2a= -b/2a ;
3. △<0,方程无实数根,但有2个共轭复根。
x1=[-b+√(△)*i]/2a; //( △=b²-4ac )
x2=[-b-√(△)*i]/2a;
注意控制格式,保留三位小数输出
sqrt()开平方函数,参数为正数
参考:
#include"iostream" #include"cmath" //调用sqrt()开平方函数 #include"cstdio" //调用printf()控制格式化输出 using namespace std; float x1,x2,a,b,c,z; void func1(){ //大于零 x1=( -b+sqrt(z) )/( 2*a ); x2=( -b-sqrt(z) )/( 2*a ); } void func2(){ //等于零 x1=x2=( -b )/( 2*a ); } void func3(){ //小于零 z=sqrt(-z); printf("x1=%.3f+%.3fi x2=%.3f-%.3fi\n",-b/(2*a),z/(2*a),-b/(2*a),z/(2*a));//这里的i指的是Δ<0时,会有连个共轭复数根,i表示复数根
} int main(){ cin>>a>>b>>c; z=b*b-4*a*c; if(z>0){ func1(); }else if(z<0){ func3(); return 0; }else{ func2(); } printf("x1=%.3f x2=%.3f\n",x1,x2); return 0; }
My code:
#include<iostream> #include<stdio.h> #include<cmath> using namespace std; int main() { int a,b,c; cin>>a>>b>>c; int D=b*b-4*a*c; float d,d0; if(D>=0) d=sqrt(D); else d0=sqrt(-D); if(D>0) { printf("x1=%.3f x2=%.3f",(-b+d)*1.0/(2*a),(-b-d)*1.0/(2*a)); } else if(D==0) { printf("x1=%.3f x2=%.3f",(-b)*1.0/(2*a),(-b)*1.0/(2*a));//printf中的百分号%后的格式控制,是有用的, } //像%f可以控制输出一个小数的格式,但是如果你后面应对于你真正输出的值就是一个整数,那么它近乎没有作用 else //就像对于整除符号来说,用整除符号连接的表达式的结果,会自动转换成与被除数相同的类型 //整除运算符( / )需要注意的就是运算结果会自动转换为与被除数一致的数据类型。 { printf("x1=%.3f+%.3fi x2=%.3f-%.3fi",(-b*1.0)/(2*a),d0*1.0/(2*a),-b*1.0/(2*a),d0*1.0/(2*a)); } return 0; }
printf("x1=%.3f+%.3fi x2=%.3f-%.3fi",(-b*1.0)/(2*a),d0*1.0/(2*a),-b*1.0/(2*a),d0*1.0/(2*a));
复数有实部还有虚部
复数的表示形式:“实部值+虚部值i ”
方程会有一对儿共轭复根,实部就是-b/(2*a) 虚部就是 (加或减)根号Δ/(2*a)
期间出的一个关于生命区间的小错误,还是需要多多谨慎多多练习啊!
#include<iostream> #include<stdio.h> #include<cmath> using namespace std; int main() { int a,b,c; cin>>a>>b>>c; int D=b*b-4*a*c; if(D>=0) float d=sqrt(D);//在此处定义变量d,生命域就很有限,就只能在这个if语句中使用了 ,出了这个区间就会报错 else float d0=sqrt(-D); if(D>0) { printf("%.3f %.3f",(-b+d)/2*a,(-b-d)/2*a); } else if(D==0) { printf("%.3f %.3f",(-b+d)/2*a,(-b+d)/2*a); } else { printf("%.3f+%.3f %.3f-%.3f",-b/2*a,d0/2*a,-b/2*a,d0/2*a); } return 0; }
/*
*/
作者:Glacier
-------------------------------------------
个性签名:向上吧少年,加油!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,感谢!


浙公网安备 33010602011771号