2007年北理复试上机题

1、一个小球,从高为H的地方下落,下落弹地之后弹起高度为下落时的一半,比如第一次弹起高度为H/2,如此反复,计算从小球H高度下落到n次弹地往返的总路程。

要求:(1)用递归的方法实现。(2)输入H和n,输出结果。(3)注意程序的健壮性。(4)可以用C/C++实现。

#include<iostream>
using namespace std;

double f(double h, double n)
{
    if (n == 1)return h * 3 / 2;
    else return h * 3 / 2 + f(h / 2, n - 1);
}

int main()
{
    double H, n;
    cin >> H >> n;
    cout << f(H, n) << endl;
    return 0;
}

2、创建一个CPoint类,代表平面直角坐标系中的点,创建构造函数和运算符重载函数,运算符重载为类重载(非友元重载),可以实现计算两个点之间的距离。可以根据需要加入自己的成员变量或成员函数。

要求:(1)输入两个点的坐标,输出两个点之间的距离。(2)重载运算符为“-”。

#include<iostream>
#include<cmath>
using namespace std;

class P
{
private:
    double x, y;
public:
    P(double xx,double yy):x(xx),y(yy){}
    int operator -(P a)
    {
        double d = sqrt(pow(x - a.x, 2) + pow(y - a.y, 2));
        return d;
    }
};

int main()
{
    double x, y;
    cout << "请输入A点的坐标x,y的值:" << endl;
    cin >> x >> y;
    P a(x, y);
    cout << "请输入B点的坐标x,y的值:" << endl;
    cin >> x >> y;
    P b(x, y);
    cout << "A,B两点的距离是" << a - b << endl;
    return 0;
}

3、创建一个CTriangle类,需要用到第二题中创建的类,即用3点来代表一个三角形,输入三个点的坐标,实现判断此三角形是不是直角三角形,并输出此三角形的周长。可以根据需要加入自己的成员变量或成员函数。

要求:(1)输入三个点的坐标,输出周长并给出是否是直角三角形的信息。(2)注意程序的健壮性。

#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;

class P
{
private:
    double x, y;
public:
    P(double xx,double yy):x(xx),y(yy){}
    int operator -(P a)
    {
        double d = sqrt(pow(x - a.x, 2) + pow(y - a.y, 2));
        return d;
    }
};

int main()
{
    double x, y, d[3];
    cout << "请输入A点的坐标x,y的值:" << endl;
    cin >> x >> y;
    P a(x, y);
    cout << "请输入B点的坐标x,y的值:" << endl;
    cin >> x >> y;
    P b(x, y);
    cout << "请输入C点的坐标x,y的值:" << endl;
    cin >> x >> y;
    P c(x, y);
    d[0] = a - b;
    d[1] = a - c;
    d[2] = b - c;
    sort(d, d + 3);
    cout << "三角形的周长是" << d[0] + d[1] + d[2] << endl;
    if (pow(d[2], 2) == pow(d[1], 2) + pow(d[0], 2))cout << "这是一个直角三角形" << endl;
    else cout << "这不是直角三角形" << endl;
    return 0;
}

4、请自定义一个Student类,属性包括,Char name[10],int num。编程实现学生信息的输入、查询、浏览,其中浏览分为:升序和降序两种

#include<iostream>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std;

class Student
{
public:
    char name[10];
    int num;
    void show()
    {
        cout << "name is: " << name << ", num is: " << num << endl;
    }
    void check(char n[])
    {
        if (strcmp(name, n) == 0)cout << "name is: " << name << ", num is: " << num << endl;
    }
};

bool cmp(Student a, Student b)//升序排列
{
    return a.num < b.num;
}

int main()
{
    vector<Student> v;
    char name[10];
    int n;
    cout << "请按姓名学号的顺序输入学生信息:同时按下ctrl+z结束输入!" << endl;
    Student st;
    while (cin >> st.name >> st.num)v.push_back(st);
    sort(v.begin(), v.end(), cmp);//升序排列
    cin.clear();
    cout << "1 升序浏览  2 降序浏览  3 按姓名查询 4 退出" << endl;
    int choice;
    while (cin >> choice)
    {
        if (choice == 4)break;
        switch (choice)
        {
         case 1:
            for (int i = 0; i < (int)v.size(); i++)v[i].show();
            break;
         case 2:
            for (int i = (int)v.size() - 1; i >=0; i--)v[i].show();
            break;
         case 3:
            cout << "请输入您要查询学生的姓名:";
            cin >> name;
            for (int i = 0; i < v.size(); i++)v[i].check(name);
            break;
        }
    }
    return 0;
}

 

posted @ 2019-08-16 23:51  郭怡柔  阅读(159)  评论(0)    收藏  举报