A.机器人变身(类与对象)
题目描述
编写一个机器人类,包含属性有机器名、血量、伤害值、防御值、类型和等级。其中血量、伤害和防御和等级、类型相关:
普通型机器人,类型为N,血量、伤害、防御是等级的5倍
攻击型机器人,类型为A,攻击是等级的10倍,其他属性和普通的一样
防御型机器人,类型为D,防御是等级的10倍,其他属性和普通的一样
生命型机器人,类型为H,生命是等级的50倍,其他属性和普通的一样。
机器人 操作包括:打印、各个属性的获取和设置方法,构造函数可有可无,根据需要自行编写 ,
编写一个全局函数用于机器人变身,使得各种类型机器人能够相互转变。参数包括机器人对象指针和变身后的机器人类型,功能是修改机器人类型,并更改相关的属性。如果变身类型和机器人原来的类型不同,则执行变身功能,并返回true;如果变身类型和原来类型相同,则不执行变身,并返回false.
要求所有数据成员都是私有属性,用C++语言和面向对象设计思想来编程实现上述要求
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 #include <iostream> #include <cstring> using namespace std;class robot { private : string name; int level,HP,damage,defense; char type; public : robot (string n, char t, int l); void print () ; void set (char t) ; char get () { return type; } }; robot::robot (string n,char t,int l) { name = n; type = t; level = l; } void robot::set (char t) { HP = 5 * level; damage = 5 * level; defense = 5 * level; if (t == 'A' ) { damage = 10 * level; } else if (t == 'D' ) { defense = 10 * level; } else if (t == 'H' ) { HP = 50 * level; } this ->type = t; } void robot::print () { cout << name << "--" << type << "--" << level << "--" << HP << "--" << damage << "--" << defense<<endl; } bool turn (robot& r, char change) { if (r.get () == change) { return false ; } else { r.set (change); return true ; } } int main () { int t, ll, sum=0 ; char tt, cc; string nn; cin >> t; while (t--) { cin >> nn >> tt >> ll; cin>>cc; robot r (nn, tt, ll) ; r.set (tt); sum += turn (r, cc); r.print (); } cout << "The number of robot transform is " << sum << endl; return 0 ; }
B.虚拟电话(构造与析构)
题目描述
虚拟电话包含属性:电话号、状态、机主姓名。
1、电话号是一个类,它包含号码和类型,其中号码是整数类型,类型用单个字母表示用户类别,A表示政府,B表示企业、C表示个人。类操作包括构造、属性的获取和设置等方法,根据需要自行编写。
2、状态用一个数字表示,1表示在用,0表示未用,
3、机主姓名是一个字符串
电话操作包括:构造、析构、打印和查询。
1、构造函数需要考虑复合类成员的构造,并且输出提示信息。假设电话号码为12345678,则构造函数输出"12345678 constructed."
2、打印是输出电话的相关信息,其中如果电话状态是在用则输出use;状态是未用则输出unuse,输出格式看示例。
3、析构函数是输出提示信息。假设电话号为12345678,则析构函数输出"12345678 destructed. "
4、查询操作是根据给定的号码查询电话,如果电话自身号码和给定号码不相同,则返回0;如果电话自身号码和给定号码相同,则返回1
用C++和面向对象思想实现以下要求:
1、输入相关数据,创建三个电话对象,并通过构造方法初始化。
2、输入若干个电话号码,通过查询操作查询这些号码是否在三个电话对象中,如果不存在输出"wrong number.",存在则调用打印操作输出电话信息,具体看输出样例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 #include <iostream> #include <cstring> using namespace std;class phone { private : string p_name; int state, p_number; char p_type; public : phone (string na, int st, int num, char tp) { p_name = na; state = st; p_number = num; p_type = tp; cout << p_number << " constructed." << endl; } void print () ; ~phone () { cout << p_number << " destructed." << endl; } int check (int s) ; }; void phone::print () { cout << "Phone=" << p_number << "--Type=" << p_type << "--State=" ; if (state == 1 ) { cout << "use" ; } else if (state==0 ) { cout << "unuse" ; } cout << "--Owner=" << p_name << endl; } int phone::check (int p_num) { if (p_number == p_num) { return 1 ; } else { return 0 ; } } int main () { int number, state; char type; string name; int t; cin >> number >> type >> state >> name; phone one (name, state, number, type) ; cin >> number >> type >> state >> name; phone two (name, state, number, type) ; cin >> number >> type >> state >> name; phone three (name, state, number, type) ; cin >> t; while (t--) { cin >> number; int tmp = 0 ; tmp += one.check (number); if (one.check (number)) one.print (); tmp += two.check (number); if (two.check (number)) two.print (); tmp += three.check (number); if (three.check (number)) three.print (); if (tmp == 0 ) { cout << "wrong number." << endl; } } return 0 ; }
C.银行账户(拷贝构造)
题目描述
银行账户包括余额、利率、号码、类型等属性,其中号是固定8位整数,类型表示个人还是企业账户,如果是个人用P标识,企业用E标识。
账户又分为活期账户和定期账户,活期利率为0.5%,定期利率为1.5%。
账户操作有计息、查询操作。计息操作是根据利率计算利息,并把利息增加到余额中,并做相关信息输出。查询操作是输出账户的全部信息。
创建一个活期账户,并通过构造函数初始化各个属性。然后通过拷贝构造来创建一个定期账户,信息与活期账户基本相同,不同之处包括:定期账户号码是活期账户号码加50000000(7个0);利率是定期利率。
要求所有数据成员都是私有属性
用C++语言的类与对象思想来编写程序实现上述要求
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 #include <iostream> using namespace std;class BankAccount { private : double balance, irate; int num; char type; public : BankAccount (int n, char t, double b) { num = n; type = t; balance = b; irate = 0.005 ; } BankAccount (BankAccount& ba) { num = 50000000 + ba.num; type = ba.type; balance = ba.balance; irate = 0.015 ; } void rate () ; void check () ; void operate (char tt) ; }; void BankAccount::rate () { balance = balance * irate + balance; cout << "Account=" << num << "--sum=" << balance << endl; } void BankAccount::check () { cout << "Account=" << num << "--" ; if (type == 'P' ) { cout << "Person" ; } else { cout << "Enterprise" ; } cout << "--sum=" << balance << "--rate=" << irate << endl; } void BankAccount::operate (char tt) { if (tt == 'C' ) { rate (); } if (tt == 'P' ) { check (); } } int main () { int t, n; double b; char tp, op1, op2; cin >> t; while (t--) { cin >> n >> tp >> b >> op1 >> op2; BankAccount p (n, tp, b) ; BankAccount q (p) ; p.operate (op1); q.operate (op2); } return 0 ; }
D.电视遥控(静态+友元)
题目描述
电视机包含音量、模式、频道号等属性,其中模式分为TV 和DVD 两种。电视机在TV模式下,将播放相应频道的内容;在DVD模式下,电视机使用统一的频道号播放DVD的内容,频道号统一为99。另外,电视机采用静态成员的方法共享两个数据:播放电视的电视机数量和播放DVD的电视机数量,初始都为0。
电视机操作包括打印、相关静态函数、属性的获取和设置等,根据需要自行编写。
现编写一个遥控器函数,通过友元方法对电视机进行控制,它的参数包括电视机对象、模式、变化音量、频道号,无返回值。函数操作包括:
1、对电视机对象进行模式设置,如果设置为DVD模式,则频道号参数一定是99;如果设置TV模式,则要把频道号设置相应的值。
2、根据变化音量进行调整,例如原有音量为50,现输入变化音量为-30,则50-30=20,音量最终为20。音量值最低为0,最高为100,超过范围则音量不再变化。
3、更新当前播放电视和播放DVD的电视机数量
4、调用电视机对象的打印方法输出电视相关信息
提示:如果电视机原来模式和参数传递的模式是相同的,那么实际操作就是调整音量、切换频道和输出信息。
注意:函数第一个参数必须是一个电视机对象,不可以是整数类型,可以是对象、或对象指针、或对象引用,根据需要自行编写。
用动态数组方法创建n台电视机,从1开始编号,频道号为编号,音量初始为50,模式为TV,然后通过遥控器函数对电视机进行控制。
所有类的数据成员都是私有属性。请使用C++语言和面向对象思想来实现上述要求
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 #include <iostream> #include <cstring> using namespace std;class TV { private : int number; int volume; int channel; string mode; static int t_num; static int d_num; public : TV (int n, int c, string m, int v) { number = n; channel = c; mode = m; volume = v; t_num++; } void set (string m, int c) ; void adjust (int v) ; void print () ; friend void control (TV& t, string m, int v, int c) ; static int getTV () { return t_num; } static int getDVD () { return d_num; } }; int TV::t_num = 0 ;int TV::d_num = 0 ;void TV::set (string m, int c = 0 ) { if (mode == "TV" && m == "DVD" ) { channel = 99 ; d_num++; t_num--; } else if (mode == "DVD" && m == "TV" ) { channel = c; t_num++; d_num--; } else if (m == "TV" ) { channel = c; } mode = m; } void TV::adjust (int v) { volume += v; if (volume > 100 ) { volume = 100 ; } else if (volume < 0 ) { volume = 0 ; } } void TV::print () { cout << "第" << number << "号电视机--" << mode << "模式--频道" << channel << "--音量" << volume << endl; } void control (TV& t, string m, int c, int v) { t.set (m, c); t.adjust (v); t.print (); } int main () { int n, t; cin >> n >> t; TV** tele = new TV * [n]; for (int j = 0 ; j < n; j++) { tele[j] = new TV (j + 1 , j + 1 , "TV" , 50 ); } while (t--) { int i, k, cv, x; string m; cin >> i >> k >> x >> cv; if (k == 1 ) { m = "TV" ; } else if (k == 2 ) { m = "DVD" ; } control (*tele[i - 1 ], m, x, cv); } cout << "播放电视的电视机数量为" << TV::getTV () << endl; cout << "播放DVD的电视机数量为" << TV::getDVD () << endl; for (int i = 0 ; i < n; i++) { delete tele[i]; } delete []tele; return 0 ; }