2007年北理复试上机题

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

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

 

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

int Distance(float h,int i,int n)
{
    if(i>n)
        return 0.0;
    if(i==1)
        return h+Distance(h,++i,n);
    else
        return h+Distance(h/2.0,++i,n-1);
}

int main()
{
    float h;
    int n;
    cout<<"请输入高度h:\n";
    cin>>h;
    cout<<"请输入n"<<endl;
    cin>>n;
    cout<<Distance(h,1,n);
    return 0;

}

 

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

 

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

#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
class CPoint
{
    public:
        int x;
        int y;
    
        CPoint(int a,int b)
        {
            x=a;
            y=b;
        
        }
        double operator -(CPoint b)
        {
            return sqrt((b.x-x)*(b.x-x)+(b.y-y)*(b.y-y));
        }

};

int main()
{
    int x,y;
    cout<<"请输入第一个点的坐标"<<endl;
    cin>>x>>y;
    CPoint a(x,y);
    cout<<"请输入第二个点的坐标"<<endl;
    cin>>x>>y;
    CPoint b(x,y);
    cout<<a-b<<endl;

    return 0;
}

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

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

#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
class CPoint
{
    public:
        int x;
        int y;
        CPoint ()
        {

        }
    
        CPoint(int a,int b)
        {
            x=a;
            y=b;
        
        }
        double operator -(CPoint b)
        {
            return sqrt((b.x-x)*(b.x-x)+(b.y-y)*(b.y-y));
        }

};
class CTriangle
{
public:
    CPoint p1,p2,p3;
    double length[3];
    CTriangle()
    {
    }
    CTriangle(CPoint a,CPoint b,CPoint c)
    {
        p1=a;
        p2=b;
        p3=c;
        length[0]=p1-p2;
        length[1]=p2-p3;
        length[2]=p3-p1;
        sort(length,length+3);
    }
    bool Judge()
    {
        if(length[0]*length[0]+length[1]*length[1]==length[2]*length[2])
            return true;
        else
            return false;


    }
    double GetC()
    {
        double C=0;
        for(int i=0;i<3;i++)
        {
            C+=length[i];
        }
        return C;
    }
    
};

int main()
{
    int x,y;
    cout<<"请输入第一个点的坐标"<<endl;
    cin>>x>>y;
    CPoint a(x,y);
    cout<<"请输入第二个点的坐标"<<endl;
    cin>>x>>y;
    CPoint b(x,y);
    cout<<"请输入第三个点的坐标"<<endl;
    cin>>x>>y;
    CPoint c(x,y);
    CTriangle Tr(a,b,c);
    if(Tr.Judge()==true)
        cout<<"该三角形是直角三角形"<<endl;
    else
        cout<<"该三角形不是直角三角形"<<endl;
    cout<<"周长:"<<Tr.GetC()<<endl;

    return 0;
}

 

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

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

class CStudent
{
public:
    char name[10];
    int num;
    CStudent()
    {
    }
    CStudent(char na[],int n)
    {
        strcpy(name,na);
        num=n;
    }
};
bool cmp1(CStudent s1,CStudent s2)
{
    return s1.num<s2.num;

}
bool cmp2(CStudent s1,CStudent s2)
{
    return s1.num>s2.num;

}


int main()
{
    int n,n1;;
    char name[10];
    int num;
    vector<CStudent> vi;
    while(1)
    {
        cout<<"请输入操作,1,输入学生信息2,查询学生信息3,浏览学生信息,4,退出"<<endl;
        cin>>n;
        if(n==1)
        {
            cout<<"请输入学生姓名"<<endl;
            cin>>name;
            cout<<"请输入学生学号"<<endl;
            cin>>num;
            CStudent a(name,num);
            vi.push_back(a);
        }
        if(n==2)
        {
            cout<<"1,以姓名查询,2,以学号查询"<<endl;
            cin>>n1;
            if(n1==1)
            {
                cout<<"请输入姓名"<<endl;
                cin>>name;
                for(vector<CStudent>::iterator it=vi.begin();it!=vi.end();it++)
                {
                    if(strcmp((*it).name,name)==0)
                        cout<<"学号为:"<<(*it).num<<endl;
                }
            }
            if(n1==2)
            {
                cout<<"请输入学号"<<endl;
                cin>>num;
                for(vector<CStudent>::iterator it=vi.begin();it!=vi.end();it++)
                {
                    if(num==(*it).num)
                        cout<<"姓名为:"<<(*it).name<<endl;
                }
            }

        }
        if(n==3)
        {
            cout<<"1,升序 2,降序\n"<<endl;
            cin>>n1;
            if(n1==1)
                sort(vi.begin(),vi.end(),cmp1);
            else
                sort(vi.begin(),vi.end(),cmp2);
            for(vector<CStudent>::iterator it=vi.begin();it!=vi.end();it++)
                {
                    
                        cout<<(*it).num<<"  "<<(*it).name<<endl;
                }

        }
        if(n==4)
            break;
    }
    
    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值