2004年北理复试上机题目
1、建立一个角类,在这个类中重载减号运算符,并实现求出角度的正弦值的函数。
#include<iostream> #include<cmath> using namespace std; const double pi = 3.1415; class Angle { private: double c; public: Angle(int cc) :c(cc) {}; Angle() {}; Angle operator -(Angle x) { return Angle(c - x.c); } void show() { cout << "角度:" << c << " 正弦值:" << sin(pi * c / 180) << endl; } }; int main() { Angle a(120), b(90), c; c = a - b; a.show(); b.show(); c.show(); return 0; }
2、建立一个求一元二次方程解的类( a*x^2+b*x+c=0 ),输入系数 a,b,c 的值后打印出这个方程的解。需要注意的是系数 a 不能为零以及方程有无解,单解还是双解的情况。
#include<iostream> #include<cmath> using namespace std; class F { private: double a, b, c; double d; public: F() {}; F(int aa, int bb, int cc) :a(aa), b(bb), c(cc) {}; void perform() { if (a == 0) { cout << "系数a无效输入。" << endl; return; } d = pow(b, 2) - 4 * a*c; if (d < 0)cout << "方程无解" << endl; else if (d == 0)cout << "方程有一个解为" << -b / (2 * a) << endl; else cout << "方程有两个解分别为" << (-b + sqrt(d)) / (2 * a) << "和" << (-b - sqrt(d)) / (2 * a) << endl; } }; int main() { F f(1, -3, 2); f.perform(); return 0; }
3、实现一个多项式的类(a+b*x+c*x^2+d*x^3+...+),要求输入该多项式的系数和 x 的值后打印出这个多项式的值。这道题本身不难,但要求用好的算法(可以用递归或者循环)。
#include<iostream> #include<stack> using namespace std; class F { private: int x; stack<int> s; public: F(stack<int> ss, int xx) :s(ss), x(xx) {} int cal() { int ans = 0; while (!s.empty()) { ans = s.top() + ans * x; s.pop(); } return ans; } }; int main() { int n, t, x; stack<int> s; cout << "请输入最高项次数:"; cin >> n; cout << "请输入各项系数:"; for (int i = 0; i <= n; i++) { cin >> t; s.push(t); } cout << "请输入x的值:"; cin >> x; F f(s, x); cout << "多项式的结果是:" << f.cal() << endl; return 0; }

浙公网安备 33010602011771号