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;
}

 

posted @ 2019-08-12 15:23  郭怡柔  阅读(183)  评论(0)    收藏  举报