目录
一、 实验目的和要求
1. 掌握如何编写基类,如何通过继承基类的属性和函数编写派生类;
2. 掌握如何在派生类成员函数中调用基类的成员函数;
3. 了解虚函数和多态的应用;
4. 了解随机整数的获得方式:伪随机和真随机数。
二、 实验环境(实验设备)
软件:Windows7或Windows 10,Code Blocks
硬件:个人计算机
三、 实验内容与结果
实验一:获得一个任意的随机整数
1. 程序功能:
1.1 获得一个任意的随机整数。注意区分伪随机和真随机。
1.2 获得多个符合要求区间的随机整数。要求区间为[25,75]。
2. 关键程序代码:
1.#include <iostream>
2.#include <ctime>
3.
4.using namespace std;
5.
6.int main()
7.{
8. srand(time(0));
9. int i=5;
10. while(i--)
11. {
12. cout<<rand()%26+25<<endl;
13. }
14. return 0;
15.}
3. 程序运行结果:
实验二:创业贷款破产
1. 程序功能:
小游戏:现在你家里给你了10000元的创业基金,你通过买卖商品,再赚到10000元则为成功。现在每次进货100个单价为50的商品,当手中持有的金额小于等于0时则停止进货。每个周期,销售商品的数量为手中持有的商品数的随机值(>0),价格为±50%波动,即为[25~75]之间随机值。当手中持有的商品数为0,且手中持有的金额小于0时,你便破产了。请在最终输出你是否成功的结果,并输出使用的周期数。该方案需要使用继承来实现。
2. 关键程序代码:
1.#include <iostream>
2.#include <ctime>
3.using namespace std;
4.
5.
6.class goods
7.{
8. int price;
9. int number;
10.
11.public:
12. int total_price1;
13. static int payment1;
14. static int total_number1;
15. goods (int price,int number):price(price),number(number)
16. {
17. total_price1=number*price;
18. }
19.
20.
21.};
22.//static float ::goods payment;
23.//static float ::goodstotal_number;
24.int goods::payment1=10000;
25.int goods::total_number1=0;
26.
27.class buy:public goods
28.{
29.public:
30. buy(int price,int number):goods(price,number)
31. {
32. payment1=payment1-total_price1;
33. total_number1=total_number1+number;
34. cout<<"进货后,贷款为 "<<payment1<<"\t商品数量"<<total_number1<<endl;
35. }
36.};
37.
38.class sell:public goods
39.{
40.public:
41. sell(int price,int number):goods(price,number)
42. {
43. payment1=payment1+total_price1;
44. total_number1=total_number1-number;
45. cout<<"售出后,当前贷款 "<<payment1<<"\t货物数量 "<<total_number1<<endl;
46. }
47.};
48.
49.
50.int main()
51.{
52. buy b1(50,100);
53. sell s1(50,100);
54. srand(time(0));
55. int n=0;
56.
57. while(1)
58. {
59. if(b1.payment1>0)
60. {
61. b1=buy(50,100); //每次进价不变,买的商品数不变
62. }
63.
64. int rate1=rand()%51+25; //卖出时商品价格在(25,75)
65. int rate2=rand()%b1.total_number1+1; //每次随机卖出商品数量(1,total_number1)
66.
67. s1=sell(rate1,rate2);
68.
69. if(b1.payment1<0 && b1.total_number1<=0) //亏本了
70. {
71. cout<<"您破产了,周期为"<<n<<"次"<<endl;
72. break;
73. }
74.
75. if(b1.payment1>20000) //赚钱了
76. {
77. cout<<"您成功了,周期为"<<n<<"次"<<endl;
78. break;
79. }
80. n++;
81. }
82.
83. return 0;
84.}
3. 程序运行结果:
实验三:小游戏怪物的血量归零,玩家获胜
1. 程序功能:
请将在关于多态和虚函数课堂上讲解的小游戏,使用自己的电脑进行尝试,并指出在第几次攻击时,怪物的血量归零,玩家获胜。
请将代码和运行结果放入以下表格中正确的位置。
2. 关键程序代码:
1.#include <iostream>
2.#include <ctime>
3.using namespace std;
4.
5.
6.class monster
7.{
8.public:
9. static int HP;
10.};
11.class player
12.{
13.public:
14. static int att;
15.};
16.
17.int monster::HP=10000;
18.int player::att=100;
19.class attack:public player,public monster
20.{
21.public:
22. int n=0;
23.
24. attack (){}
25.
26.
27.};
28.
29.int main()
30.{
31. srand(time(0));
32. attack a(); //不是指针类型报错
33. monster *m;
34. player *p;
35. int n=0;
36. while(1)
37. {
38. cout<<"野怪血量 "<<m->HP<<"\t物攻为 "<<p->att<<"\t进攻次数 "<<n<<endl;
39. m->HP=m->HP-p->att;
40. p->att=rand()%100+150;
41. if(m->HP<=0)
42. {
43. cout<<"winning!!!"<<endl;
44. break;
45. }
46. n++;
47. }
48. return 0;
49.}