课后作业3、类和对象(编程题)

7-1 宿舍谁最高?

学校选拔篮球队员,每间宿舍最多有 4 个人。现给出宿舍列表,请找出每个宿舍最高的同学。定义一个学生类 Student,有身高 height,体重 weight 等。

输入格式:

首先输入一个整型数 n (1≤n≤106),表示有 n 位同学。

紧跟着 n 行输入,每一行格式为:宿舍号 name height weight
宿舍号的区间为 [0, 999999], name 由字母组成,长度小于 16,heightweight 为正整数。

输出格式:

按宿舍号从小到大排序,输出每间宿舍身高最高的同学信息。题目保证每间宿舍只有一位身高最高的同学。

注意宿舍号不足 6 位的,要按 6 位补齐前导 0。

输入样例:

7
000000 Tom 175 120
000001 Jack 180 130
000001 Hale 160 140
000000 Marry 160 120
000000 Jerry 165 110
000003 ETAF 183 145
000001 Mickey 170 115

输出样例:

000000 Tom 175 120
000001 Jack 180 130
000003 ETAF 183 145
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;

struct stu
{
    int room;
    char name[16];
    int h,w;
}a[1000000] = {0},temp;


int main()
{
    int n,i,k = 0;
    int d[1000];
    cin>>n;
    for(i = 0;i < n;i++)
    {
        cin>>temp.room>>temp.name>>temp.h>>temp.w;
        d[k++] = temp.room;
        if(a[temp.room].h == 0)
        {
            a[temp.room] = temp;
        }
        else
        {
            if(temp.h>a[temp.room].h)
            {
                a[temp.room] = temp;
            }
        }
    }
    for(i = 0;i < k;i++)
    {
        if(a[d[i]].room !=-1)
        {
            printf("%06d %s %d %d\n",a[d[i]].room,a[d[i]].name,a[d[i]].h,a[d[i]].w);
            a[d[i]].room = -1;
        }
    }
    return 0;
}

7-2 类的定义和使用

定义一个日期类Date,内有数据成员year、month和day,分别代表年、月、日,并若干有成员函数:构造函数用于初始化数据成员,isLeap函数用于闰年的判断。编写主函数:创建日期对象,判断该年是否是闰年。

输入格式:

每组测试数据仅包含一个测试用例,每个测试用例占一行包括三个数,分别表示年、月、日。

输出格式:

如果是闰年则输出yes,不是则输出no。

输入样例:

2006 3 5

输出样例:

no

 

#include <iostream>
using namespace std;
class Date
{
private:
    int year,month,day;
public:
    Date(int y,int m,int d)
    {
      year=y;
      month=m;
      day=d;
    }
  	int isleap()
    {
      if(year%4==0 && year%100!=0||year%400==0)
        return 1;
      else
        return 0;
    }
};
int main()
{
    int year,month,day;
    cin>>year>>month>>day;
    Date a(year,month,day);
    if(a.isleap())
        cout<<"yes"<<endl;
    else
        cout<<"no"<<endl;
    return 0;
}

 

7-3 立方体类

定义立方体类Box,数据成员有长宽高且都是整数,构造函数初始化数据成员,成员函数计算体积,主函数中输入长宽高,输出立方体体积。

输入格式:

输入立方体的长宽高,中间用空格分隔。

输出格式:

输出体积并换行。

输入样例:

在这里给出一组输入。例如:

1 2 3

输出样例:

在这里给出相应的输出。例如:

6

 

#include<iostream>
using namespace std;
    
class Box
{
public:
    int l,w,h;
    Box(int x,int y,int z): l(x),w(y),h(z){}
    int V()
    {
        return l*w*h;
    }
};
    
int main()
{
    int x,y,z;
    cin>>x>>y>>z;
    Box a(x,y,z);
    cout<<a.V()<<endl;
    return 0;
}

7-4 类的定义和使用

请定义一个Point类,有两个数据成员:x和y, 分别代表x坐标和y坐标,并有若干构造函数和一个移动的成员函数,可输出移动后新的坐标值。

输入:

第一行的两个数 分别表示 点的x坐标和y坐标。 第二行的两个数 分别表示 x和y方向移动的距离。

输出:

移动后的点的x坐标和y坐标。

输入样例:

1  5
2  5

输出样例:

3 10

 

#include<iostream>
using namespace std;

class Point
{
public:
    float x,y;
    Point(float a,float b): x(a),y(b){}
    void move(float dx,float dy)
    {
        x += dx;
        y += dy;
    }
    void print()
    {
        cout<<x<<" "<<y<<endl;
    }
};

int main()
{
    float x,y,dx,dy;
    cin>>x>>y>>dx>>dy;
    Point p(x,y);
    p.move(dx,dy);
    p.print();
    return 0;
}

7-5 2017final游泳池过道造价

有一个圆形游泳池,现在需要在其周围建一过道,并在其四周围上矩形栅栏,如图所示。若过道造价为20元/平方米。要求计算并输出过道的造价。请定义一个Circle类,内有私有数据成员radius表示半径,并有若干成员函数;定义一个Rectangle类,内有私有数据成员length、width表示长和宽,并有若干成员函数。(设圆周率PI = 3.14159,所有数据均为double类型)

07202367b54f7359bec569a689a36d67.png

输入格式:

输入一行数据a b c,分别表示游泳池半径、栅栏的长和宽。其中a>0,b>2*a,c>2*a。

输出格式:

对每一行的输入数据,输出过道的造价。

输入样例:

3 7 8

输出样例:

554.514

 

#include<iostream>
#define Pi 3.14159
using namespace std;

class Circle
{
private:
        double radius;
public:
    Circle(double a): radius(a){}
    double getr()
    {
        return radius;
    }
};
class Rectangle
{
private:
    double l,w;
public:
    Rectangle(double b,double c): l(b),w(c){}
    double getl()
    {
        return l;
    }
    double getw()
    {
        return w;
    }
};

int main()
{
    double a,b,c;
    cin>>a>>b>>c;
    Circle cc(a);
    Rectangle d(b,c);
    double S = d.getl() * d.getw() - cc.getr() * cc.getr() * Pi;
    cout<<S*20<<endl;
}

 

7-6 立方体类的实现

立方体类Box的实现,完成计算体积、计算表面积、输出结果等功能。其中给定的主函数为:

int  main( ){
    float ab;
    cin>>ab;
    Box  obj;
    obj.seta( ab );
    obj.getvolume( );
    obj.getarea( );
    obj.disp( );
    return 0;
}

输入格式:

立方体的边长,可以是float类型的数据。

输出格式:

立方体的体积和表面积,中间用一个空格隔开,末尾换行。

输入样例:

3

输出样例:

27 54

 

#include<iostream>
using namespace std;

class Box
{
private:
    float a;
public:
    void seta(float x)
    {
        a=x;
    }
    float getvolume()
    {
        return a*a*a;
    }
    float getarea( )
    {
        return 6*a*a;
    }
    void disp( )
    {
        cout<<a*a*a<<" "<<6*a*a<<endl;
    }
};

int  main( )
{
    float ab;
    cin>>ab;
    Box  obj;
    obj.seta( ab );
    obj.getvolume( );
    obj.getarea( );
    obj.disp( );
    return 0;
}

7-7 该日是该年的第几天

定义一个日期类Date,内有数据成员年、月、日,另有成员函数:构造函数用于初始化数据成员,输出,闰年的判断。
编写主函数:创建日期对象,计算并输出该日是该年的第几天。 输入格式: 测试输入包含若干测试用例,每个测试用例占一行。当读入0 0 0时输入结束,相应的结果不要输出。

输入样例:

2006 3 5
2000 3 5
0 0 0
输出样例:(括号内为说明)

64 (2006年3月5日是该年的第64天)
65 (2000年3月5日是该年的第65天)

 

#include <iostream>
using namespace std;

int A[12]={31,29,31,30,31,30,31,31,30,31,30,31};
int B[12]={31,28,31,30,31,30,31,31,30,31,30,31};

class Date
{
private:
    int year,month,day;
public:
    Date(int y,int m,int d)
    {
      year=y;
      month=m;
      day=d;
    }
    void print()
    {
        if(year%4==0 && year%100!=0||year%400==0)
            for(int i=0;i<month-1;i++)
            {
               day += A[i];
            }
        else
            for(int i=0;i<month-1;i++)
            {
                day+=B[i];
            }
        cout<<day<<endl;
    }
};
int main()
{
    int year,month,day;
    cin>>year>>month>>day;
    while(year!=0 && month!=0 && day!=0)
    {
        Date a(year,month,day);
        a.print();
        cin>>year>>month>>day;
    }
    return 0;
}

7-8 2018final世界杯也疯狂之球队积分计算

这是一个世界杯赛场,有球队类,其中,队名、记录每场比分的数组、累计积分 是其三个私有数据成员;有两个成员函数,分别是根据各场比分计算累计积分、以及计算净胜球总和。请添加适当的构造函数。
积分计算规则是:胜者得三分,负者不得分,打平双方各得一分。

输入格式:

输入仅一行,表示这个球队信息,分别是 1或2(1表示该队是主队,2表示该队是客队)、若干场比分(主队进球数:客队进球数,场数小于20)。每项信息间以空格隔开。

输出格式:

输出一行,分别是该队的累计积分和净胜球数,两项信息间以空格隔开。

输入样例:

在这里给出一组输入。例如:

1 3:5 5:0 2:2 3:7

输出样例:

在这里给出相应的输出。例如:

4 -1
#include <iostream>
#include <cstdio>
using namespace std;

int main()
{
    int flag,score = 0,cnt = 0;
    char a,b,x;
    cin>>flag;
    while(cin>>a>>x>>b)
    {
        if(flag == 1)
        {
            if(a > b)
            {
                score += 3;
                cnt=cnt+(a-'0')-(b-'0');
            }
            else if(a == b)
                score++;
            else if(a < b)
                cnt=cnt+(a-'0')-(b-'0');
        }
        if(flag == 2)
        {
            if(a < b)
            {
                score += 3;
                cnt=cnt+(b-'0')-(a-'0');
            }
            else if(a == b)
                score++;
            else if(a > b)
                cnt=cnt+(b-'0')-(a-'0');
        }
    }
    cout<<score<<' '<<cnt<<endl;
    return 0;
}

7-9 队列操作

请实现一个MyQueue类,实现出队,入队,求队列长度.

实现入队函数 void push(int x);
实现出队函数 int pop();
实现求队列长度函数 int size();

输入格式:

每个输入包含1个测试用例。每个测试用例第一行给出一个正整数 n (n <= 10^6) ,接下去n行每行一个数字,表示一种操作:
1 x : 表示从队尾插入x,0<=x<=2^31-1。
2 : 表示队首元素出队。
3 : 表示求队列长度。

输出格式:

对于操作2,若队列为空,则输出 “Invalid”,否则请输出队首元素。 对于操作3,请输出队列长度。
每个输出项最后换行。

输入样例:

5
3
2
1 100
3
2

输出样例:

0
Invalid
1
100
#include <iostream>
using namespace std;

class MyQueue
{
public:
    int cnt;
    int a[100000];
    MyQueue()
    {
        cnt = 0;
        a[100000] = 0;
    }
    void push(int x)
    {
        a[cnt++] = x;
    }
    int pop()
    {
        return a[--cnt];
    }
    int size()
    {
        return cnt;
    }
};

int main()
{
    MyQueue k;
    int n,i;
    cin>>n;
    for(i = 0;i < n;i++)
    {
        int op;
        cin>>op;
        switch(op)
        {
            case 1:
                int x;
                cin>>x;
                k.push(x);
                break;
            case 2:
                if(k.size())
                    cout<<k.pop()<<endl;
                else
                    cout<<"Invalid"<<endl;
                break;
            case 3:
                cout<<k.size()<<endl;
        }
    }
    
    return 0;
}

7-10 计算全班学生C++课程的总成绩和平均成绩

定义一个类Student,记录学生C++课程的成绩。要求使用静态数据成员或静态成员函数计算全班学生C++课程的总成绩和平均成绩。

输入格式:

输入5个不超过100的正整数,作为C++成绩。

输出格式:

在第一行中输出成绩的和,第二行输出平均成绩。

输入样例:

90 80 70 60 50

输出样例:

350
70
#include<iostream>
using namespace std;

class Student
{
public:
    int grade;
    static int sum;
public:
    Student(int a)
    {
        sum=sum+a;
    }
    static void print()
    {
        cout<<sum<<endl<<sum/5;
    }
};
int Student::sum = 0;

int main()
{
    int score,i;
    for(i = 0;i < 5;i++)
    {
        cin>>score;
        Student s(score);
    }
    Student s(0);
    s.print();
    return 0;
}

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

102101222_张凯权

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值