山东科技大学2020年5月11日实验题解

山东科技大学2020年5月11日实验题解

**题目一:**给我一台计算机吧!

Description

CPU主频和主存容量是衡量一台计算机性能主要指标。请定义:

  1. CPU类:只有一个int类型的数据成员以表示其主频,并请根据输出和给定的main()函数编写必要的成员函数(包括构造函数)。

  2. Memory类:只有一个int类型的数据成员以表示其容量,并请根据输出和给定的main()函数编写必要的成员函数(包括构造函数)。

  3. Computer类:

(1)三个数据成员分别为CPU的对象、Memory的对象和一个字符串(表示该计算机属于谁的)。

(2)根据输出和给定的main()函数编写必要的成员函数(包括构造函数)。

(3)void show()方法,用于按照样例输出格式输出该计算机的信息。

Input

输入有2行。每行包括2个整数和1个字符串,分别表示CPU的主频、内存容量和计算机主人姓名。

Output

见样例。

Sample Input

2 1000 Zhang
4 2000 Li

Sample Output

This is Zhang’ computer with CPU = 2GHz, memory = 1000MB.
This is Li’ computer with CPU = 4GHz, memory = 2000MB.

题目给定代码

int main()
{
    int c, m;
    string n;
    cin>>c>>m>>n;
    CPU cpu(c);
    Memory mem(m);
    Computer com1(cpu, mem, n);
    cin>>c>>m>>n;
    Computer com2(c, m, n);
    com1.show();
    com2.show();
    return 0;
}

标程

#include<map>
#include<list>
#include<cmath>
#include<queue>
#include<stack>
#include<cstdio>
#include<vector>
#include<iomanip>
#include<cstring>
#include<iterator>
#include<iostream>
#include<algorithm>
#define R register
#define LL long long
#define pi 3.141
#define INF 1400000000
using namespace std;

class CPU{
	public:
		int my_CPU;
	public:
		CPU(int number){
			my_CPU = number;
		}
};
class Memory{
	public:
		int my_Memory;
	public:
		Memory(int number){
			my_Memory = number;
		}
};
class Computer{
	private:
		Memory my_computer_Memory;
		CPU my_computer_CPU;
		string name;
	public:
		Computer(CPU c, Memory m, string s) : my_computer_CPU(c), my_computer_Memory(m), name(s){
			
		}
		void show(){
			cout << "This is " << name << "\' computer with CPU = " << my_computer_CPU.my_CPU << "GHz, memory = " << my_computer_Memory.my_Memory << "MB.\n";
		}
};
int main()
{
    int c, m;
    string n;
    cin>>c>>m>>n;
    CPU cpu(c);
    Memory mem(m);
    Computer com1(cpu, mem, n);
    cin>>c>>m>>n;
    Computer com2(c, m, n);
    com1.show();
    com2.show();
    return 0;
}

**题目二:**闹钟

Description

定义Time类,包括

  1. hour、minute、second三个int类型的属性,分别是时间的时、分、秒。
  2. 构造函数、析构函数,并在其中输出相应的信息,格式见样例。
  3. 其他必要的函数,使程序能正确运行。
    定义Alarm类,包括:
  4. 1个Time类的对象和1个字符串属性,分别是闹钟的时间和闹钟的名字。
  5. 构造函数、析构函数,并在其中输出相应的信息,格式见样例。
  6. int remainSeconds(Time& now)方法,用于计算当前时间now距离闹钟事件还有多少秒。假定now一定小于闹钟设定时间。
  7. getThing()方法,用于返回闹钟的名字。

Input

第1行是一个不含空白符的字符串,是闹钟的名字。
第2行和第3行是2个时间,分别是闹钟的时间,和当前时间。

Output

见样例。

Sample Input

GetUp

10 10 10
9 9 9

Sample Output

Time 10:10:10 is created.
Alarm GetUp is created.
Time 9:9:9 is created.
Alarm GetUp will start after 3661 seconds.
Time 9:9:9 is erased.
Alarm GetUp is erased.
Time 10:10:10 is erased.

题目给定代码

int main()
{
    int h, m, s;
    string th;
    cin>>th;
    cin>>h>>m>>s;
    Alarm alarm(h,m,s,th);
    cin>>h>>m>>s;
    Time now(h,m,s);
    cout<<"Alarm "<<alarm.getThing()<<" will start after "<<alarm.remainSeconds(now)<<" seconds."<<endl;
    return 0;
}

标程

#include<map>
#include<list>
#include<cmath>
#include<queue>
#include<stack>
#include<cstdio>
#include<vector>
#include<iomanip>
#include<cstring>
#include<iterator>
#include<iostream>
#include<algorithm>
#define R register
#define LL long long
#define pi 3.141
#define INF 1400000000
using namespace std;

class Time{
	private:
		int hour, minute, second;
	public:
		Time(int a, int b, int c) : hour(a), minute(b), second(c){
			cout << "Time " << hour << ":" << minute << ":" << second << " is created.\n";
		}
		~Time(){
			cout << "Time " << hour << ":" << minute << ":" << second << " is erased.\n";
		}
		int time_now(){
			return second + 60 * minute + 3600 * hour;
		}
};
class Alarm{
	private:
		Time alarm_time;
		string alarm_name;
	public:
		Alarm(int a, int b, int c, string s) : alarm_time(a, b, c){
			alarm_name = s;
			cout << "Alarm " << alarm_name << " is created.\n";
		}
		~Alarm(){
			cout << "Alarm " << alarm_name << " is erased.\n";
		}
		string getThing(){
			return alarm_name;
		}
		int remainSeconds(Time &now){
			return alarm_time.time_now() - now.time_now();
		}
};
int main()
{
    int h, m, s;
    string th;
    cin>>th;
    cin>>h>>m>>s;
    Alarm alarm(h,m,s,th);
    cin>>h>>m>>s;
    Time now(h,m,s);
    cout<<"Alarm "<<alarm.getThing()<<" will start after "<<alarm.remainSeconds(now)<<" seconds."<<endl;
    return 0;
}

**题目三:**一个人的生日

Description

定义Date类,表示由年、月、日构成的日期,定义其构造函数和析构函数,产生如样例所示的输出。
定义Person类,包括一个Date类的对象成员表示其生日,一个string的数据成员表示其名字。定义其构造函数和析构函数,产生如样例所示的输出。

Input

第一行是一个合法的日期;第二行是一个无空白符的字符串和一个合法的日期。

Output

见样例。

Sample Input

1997 10 1
tom 1997 11 12

Sample Output

Date 1997-10-1 is created.
Date 1997-11-12 is created.
Person tom was born at 1997-11-12 is created.
Person tom was born at 1997-11-12 is erased.
Date 1997-11-12 is erased.
Date 1997-10-1 is erased.

题目给定代码

int main()
{
    string name;
    int year, month, day;
    cin>>year>>month>>day;
    Date date(year, month, day);
    cin>>name>>year>>month>>day;
    Person person(year, month, day, name);
    return 0;
}

标程

#include<map>
#include<list>
#include<cmath>
#include<queue>
#include<stack>
#include<cstdio>
#include<vector>
#include<iomanip>
#include<cstring>
#include<iterator>
#include<iostream>
#include<algorithm>
#define R register
#define LL long long
#define pi 3.141
#define INF 1400000000
using namespace std;

class Date{
	private:
		int year, mounth, day;
	public:
		Date(int y, int m, int d){
			year = y, mounth = m, day = d;
			cout << "Date " << year << "-" << mounth << "-" << day << " is created.\n";
		}
		~Date(){
			cout << "Date " << year << "-" << mounth << "-" << day << " is erased.\n";
		}
		void get_time(){
			cout << year << "-" << mounth << "-" << day;
		}
};
class Person{
	private:
		Date my_date;
		string name;
	public:
		Person(int a, int b, int c, string s) : my_date(a, b, c), name(s){
			cout << "Person " << name << " was born at ";
			my_date.get_time();
			cout << " is created.\n";
		}
		~Person(){
			cout << "Person " << name << " was born at ";
			my_date.get_time();
			cout << " is erased.\n";
		}
};
int main()
{
    string name;
    int year, month, day;
    cin>>year>>month>>day;
    Date date(year, month, day);
    cin>>name>>year>>month>>day;
    Person person(year, month, day, name);
    return 0;
}

**题目四:**类型可变的类

Description

定义一个Data类,至少包含1个int类型的数据成员、1个double类型的数据成员,定义其构造函数和析构函数,使得程序执行时,能产生样例所示的结果。

Input

输入2行,第1行是1个int类型的数据,第2行是1个double类型的数据。

Output

见样例。

Sample Input

120
3.14

Sample Output

A default object is created.
An integer object 120 is created.
A double object 3.14 is created.
The double object 3.14 is erased.
The integer object 120 is erased.
The default object is erased.

题目给定代码

int main()
{
    Data d1;
    int i;
    cin>>i;
    Data d2(i);
    double d;
    cin>>d;
    Data d3(d);
    return 0;
}

标程

#include<map>
#include<list>
#include<cmath>
#include<queue>
#include<stack>
#include<cstdio>
#include<vector>
#include<iomanip>
#include<cstring>
#include<iterator>
#include<iostream>
#include<algorithm>
#define R register
#define LL long long
#define pi 3.141
#define INF 1400000000
using namespace std;

class Data{
	private:
		int a;
		double b;
		int flag;
	public:
		Data(){
			cout << "A default object is created.\n";
			flag = 0;
		}
		~Data(){
			if(flag == 0){
				cout << "The default object is erased.\n";
			}
			else if(flag == 1){
				cout << "The integer object " << a << " is erased.\n";
			}
			else{
				cout << "The double object " << b << " is erased.\n";
			}
		}
		Data(int i){
			flag = 1;
			a = i;
			cout << "An integer object " << a << " is created.\n";
		}
		Data(double i){
			flag = 2;
			b = i;
			cout << "A double object " << b << " is created.\n";
		}
};
int main()
{
    Data d1;
    int i;
    cin>>i;
    Data d2(i);
    double d;
    cin>>d;
    Data d3(d);
    return 0;
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《Java程序设计》课程实验指导书程序代码(答案)(实验四:java继承与多态),个人原创,仅供参考与交流。 希望多多交流,共同进步! 实验四 java继承与多态 一、实验目的: 掌握继承、多态的概念与实现方法; 掌握包和接口的定义和使用方法; 了解JAVA语言实现多继承的途径; 二、实验内容: 1.分别编写两个类Point2D,Point3D来表示二维空间和三维空间的点,使之满足下列要求: (1) Point2D有两个整型成员变量x, y (分别为二维空间的X,Y方向坐标),Point2D的构造方法要实现对其成员变量x, y的初始化。 (2)Point2D有一个void型成员方法offset(int a, int b),它可以实现Point2D的平移。 (3)Point3D是Point2D的直接子类,它有有三个整型成员变量x,y,z (分别为三维空间的X,Y,Z方向坐标),Point3D有两个构造方法:Point3D(int x,int y,int z)和Point3D(Point2D p,int z),两者均可实现对Point3D的成员变量x, y,z的初始化。 (4)Point3D有一个void型成员方法offset(int a, int b,int c),该方法可以实现Point3D的平移。 (5)在Point3D中的主函数main()中实例化两个Point2D的对象p2d1,p2d2,打印出它们之间的距离,再实例化两个Point2D的对象p3d1,p3d2,打印出他们之间的距离。 2.定义抽象类Shape,抽象方法为showArea(),求出面积并显示,定义矩形类Rectangle,正方形类Square,圆类 Circle,根据各自的属性,用showArea方法求出各自的面积,在main方法中构造3个对象,调用showArea方法。 定义接口DiagArea,其中包含方法double getDiagonal()求对角线长, double getArea()求面积,定义一个矩形类,实现此接口,并自行扩充成员变量和方法,定义一个正方形类继承矩形类(如矩形有长w和宽h,正方形有边x,并有相应的构造函数,有一个方法中一次直接显示边长、面积和对角线长),在另一类中的主方法里使用测试该类。 三、实验要求: 1. 能实现类的继承关系; 2. 用多种方法创建各个类的对象; 3. 程序应包括各个被调用方法的执行结果的显示。 4. 写出实验报告。要求记录编译和执行Java程序当中的系统错误信息提示,并给出解决办法。(附运行界面、源代码)。 四、实验步骤: 1.(第1题)定义Point2D,及定义它的属性和方法; 定义子类Point3D,及定义它的属性和方法;在Point3D中的主函数main()中实例化两个Point2D的对象,并通过这两个对象调用它们的属性和方法,输出方法执行结果。 2.(第2题)定义抽象类Shape,抽象方法为showArea(),再定义矩形类Rectangle,正方形类Square,圆类 Circle,和各自的属性。定义主类、主方法,在main方法中构造3个对象,调用showArea方法;定义接口DiagArea,其中包含方法double getDiagonal(),在主main方法中输出方法执行结果。 五、自做作实验 1.定义一个描述人的基本类,该类包括人的性别和出生期两个数据成员,以及设置和获取这些属性值的方法成员;再定义一个大学生类,使大学生类具有人的所有属性外,还具有姓名、学号,大学入学成绩,籍贯属性以及设置和获取这些属性值的方法成员;编写完整的程序,完成一个具有班级学生信息管理功能的程序。 2创建一个接口Shape,其中有抽象方法area,类Circle 、Rectangle实现area方法计算其面积并返回。又有Star实现Shape的area方法,其返回值是0,Star类另有一返回值boolean型方法isStar;在main方法里创建一个Vector,根据随机数的不同向其中加入Shape的不同子类对象(如是1,生成Circle对象;如是2,生成Rectangle对象;如是3,生成Star对象)。然后将Vector中元素依次取出,判断其是否为Star类。如是返回其是个Star。否则返回其面积。 3..学校中有老师和学生两类人,而在职研究生既是老师又是学生,对学生的管理和对教师的管理在他们身上都有体现。 1)设计两个信息管理接口StudentManageInterface和TeacherManageInterface。其中,StudentInterface接口包括setFee()方法和getFee()方法,分别用于设置和获取学生的学费;TeacherInterface接口包括setPay()方法和getPay()方法,分别用于设置和获取教师的工资 2) 定义一个研究生类Graduate,实现StudentInterface接口和TeacherInterface接口,它定义的成员变量有name(姓名)、sex(性别)、age(年龄)、fee(每学期学费)、pay(月工资)。 3) 创建一个姓名为“zhangsan”的研究生,统计他的年收入和学费,如果收入减去学费不足2000元,则输出“provide a loan”(需要贷款)信息。 提示: 1)定义两个接口,分别在其中申明两个方法。 2)定义主类Graduate,实现这两个接口。 3)定义主类的成员变量,和构造方法。 4)给出四个接口方法的实现。 5)给出一个计算是否需要贷款的方法,在里面统计年收入和学费,并输出是否需要贷款的信息。 6)写main方法。在其中创建一个姓名为“zhangsan”的研究生,调用计算是否需要贷款的方法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值