北京理工大学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++求解一元二次方程
建立一个求一元二次方程解的类(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++求解一元二次方程
相关文章推荐
- 北理计算机学院2004年机试真题
- 北京理工大学2002年机试第二题
- 北京理工大学2002年机试第二题
- 北京理工大学2002年机试(A)
- Forbes2004年billionair榜单:Larry Yung中国唯一billionaire
- 2004年个人版防病毒软件评测报告
- 2004年CRM中国公开赛
- 2004年的第一场雪
- 2004年国内十大暴利行业
- 2004年最后一天
- 2004年五大最佳管理工具(收藏)
- 2004年钢铁行业信息化现状
- 2004年我爱上了这些
- 语不惊人死不休--2004年一针见血的名言 (网络收藏,并非本人原创)
- 2004年人民大学新闻研究生参考书目(二)
- 2004年各主要城市人均工资一览表
- Google地图的功能:对比深圳1979和2004年的卫星图ATLAS OF OUR CHANGING ENVIRONMENT
- 欢迎参加北京理工大学网游开发小组软件测试发布会
- 到2004年Java技术发展预测
- 2004年北京公务员考试申论试题以及参考答案