1、建立一个角类,在这个类中重载减号运算符,并实现求出角度的正弦值的函数。
#include <iostream>
#include<cmath>
using namespace std;
double const pi=3.1415926;
class angle{
//建立一个角类,在这个类中重载减号运算符,并实现求出角度的正弦值的函数。
public:
//友元函数-全局函数的形式重载
friend angle operator-(const angle & a, const angle & b);
public:
//成员函数
double getAngle(){
return degree;
}
double calcSin();
//构造函数
angle(){};
angle(int _de);
private:
double degree;
};
angle::angle(int _de):degree(_de){}
double angle::calcSin(){
return sin(pi/180 * this->degree);//this是指针,其指向用-> 成员访问符
}
angle operator-(const angle &a, const angle& b){
angle c;
c.degree = a.degree - b.degree;//可以用.是因为逻辑上相当于在类中
return c;
}
int main(){
angle a1(60);
angle a2(30);
angle a3 = a1 - a2;
cout<<a3.calcSin();
return 0;
}
2、建 立一 个 求 一 元二 次 方 程 解的 类( a*x^2+b*x+c=0 ),输入系数 a,b,c 的值后打印出这个方程的解来,也比较简单。 需要注意的是系数 a 不能为零以及方程有无解,单解还是双解的情况。
#include <iostream>
#include<cmath>
using namespace std;
int main(){
cout<<"输入一 元二 次 方 程 a*x^2+b*x+c=0 的系数 a,b,c 的值:";
double a,b,c;
cin>>a>>b>>c;
if(a==0){
cout<<"系数a不能为0"<<endl;
exit(0);
}
int x = pow(b,2)-4*a*c;
if(x<0) {
cout<<"方程无解"<<endl;
exit(0);
}
else if(abs(x)<0.000001){//==0 浮点数的==判断
cout<<"有一个解:"<<endl;
cout<<(-1*b)/(2*a)<<endl;
}else{
cout<<"有两个解"<<endl;
cout<<(-b+sqrt(pow(b,2)-4*a*c))/(2*a)<<" "<<(-b-sqrt(pow(b,2)-4*a*c))/(2*a)<<endl;
}
return 0;
}
3、实现一个多项式的类(a+b*x+c*x^2+d*x^3+...+),要求输入该多项式的系数和 x 的值后打印出这个多项式的值。这道题本身并不难,但他要求用好的算法(实际上就是递归)。(比较经典)
a+b*x+c*x^2+d*x^3=a+(b+c*x+d*x^2)*x=a+(b+(c+d*x)*x)*x
#include <iostream>
#include<cmath>
using namespace std;
int a[1000];
int x;
int fun(int n){
if(n==0) return a[0];//用数组存储数据
else {
return fun(n-1)+a[n]*pow(x,n);
}
}
int main(){
int n;
cout<<"请输入最高次项的次数:"<<endl;
cin>>n;
cout<<"请输入各个项的系数:"<<endl;
for(int i=0;i<=n;++i)
cin>>a[i];
cout<<"请输入x:"<<endl;
cin>>x;
if(n==0)
{
cout<<"结果:"<<a[0]<<endl;
}
cout<<"结果:"<<fun(n)<<endl;
return 0;
}
作者:无涯明月
上篇:北理复试上机题2003年