您的位置:首页 > 编程语言 > C语言/C++

北京理工大学2004年机试第二题

2017-02-22 15:17 155 查看
题目要求:

建立一个求一元二次方程解的类(a*x^2+b*x+c=0),输入系数a,b,c 的值后打印出这个方程的解来,也比较简单。需要注意的是系数a 不能为零以及方程有无解,单解还是双

解的情况。

解题思路:

这道题实际上还会蛮简单的,只是有些点注意一下就好了,比如输入a的时候做一些判断

我记录这道题的原因是总共可以说有两类解决的思路

1.直接写代码,做出答案

2.用类,做出答案

因为长时间不接触c++,确实有些生疏了。这个也算是让我复习到了类的知识。

我的答案代码如下:

#include<iostream>
#include<math.h>
using namespace std;
int main(){
int a,b,c;
cout<<"请输入系数a,b,c:";
cin>>a>>b>>c;
while(a==0){
cout<<"非法,请重新输入系数(a,b,c):";
cin>>a>>b>>c;
}
int z = pow(b,2.0)-4*a*c;
if(z<0){
cout<<"该方程有复数解"<<endl;
double r = -b/(2*a);
double i = sqrt(-z)/(2*a);
cout<<"复数解一:"<<r<<"+"<<i<<"i"<<endl;
cout<<"方程解二:"<<r<<"-"<<i<<"i"<<endl;
}else if(z==0){
cout<<"该方程只有一个解,方程解为:";
double x = -b/(2*a);
printf("%.lf\n",x);
}else{
cout<<"该方程有双解,";
double x1 = (-b+sqrt(z*1.0))/(2*a);
double x2 = (-b-sqrt(z*1.0))/(2*a);
cout<<"方程解一:";
printf("%.2lf\n",x1);
cout<<"方程解二:";
printf("%.2lf\n",x2);
}

return 0;
}

用类,代码如下:
#include<iostream>
#include<cmath>
using namespace std;
class Root{
public:
Root(){};
Root(int x,int y,int z){
a = x;
b = y;
c = z;
}
void result();
private:
int a;
int b;
int c;
};
void Root::result(){
double dd = pow(b,2.0)-4*a*c;
if(dd==0){
cout<<"该方程有单根,为"<<-b/(2*a)<<endl;
}else if(dd>0){
cout<<"该方程有双根:为"<<(-b+sqrt(dd))/(2*a)<<","<<(-b-sqrt(dd))/(2*a)<<endl;
}else{
cout<<"该方程有复根:为"<<-b/(2*a)<<"+"<<sqrt(-dd)/(2*a)<<"i,"<<-b/(2*a)<<"-"<<sqrt(-dd)/(2*a)<<"i"<<endl;
}
}
int main(){
int a,b,c;
cout<<"请输入系数:";
cin>>a>>b>>c;
while(a==0){
cout<<"输入不合法,请重新输入系数:";
cin>>a>>b>>c;
}
Root root(a,b,c);
root.result();
return 0;

}

我还看到了一个真正是放在工程里写出来的,让我学到了工程该怎使用,也算是很棒的。
链接如下:利用C++求解一元二次方程
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ 一元二次方程