142 lines
7.6 KiB
Markdown
142 lines
7.6 KiB
Markdown
|
|
练习21.1-结构体-文件
|
|||
|
|
从键盘输入两个学生数据,写入一个文件中,再读出这两个学生的数据显示在屏幕上。
|
|||
|
|
|
|||
|
|
练习21.2-结构体-文件
|
|||
|
|
建立一个文件,向其中写入一组学生的姓名和成绩,然后从该文件中读出成绩大于80分的学生信息,并显示在屏幕上
|
|||
|
|
|
|||
|
|
练习22.1-编写软件-猜数字游戏-链表
|
|||
|
|
猜数字游戏是令游戏机随机产生一个100以内的正整数,用户输入一个数对其进行猜测,需要你编写程序自动对其与随机产生的被猜数进行比较,并提示大了(“Too big”),还是小了(“Too small”),相等表示猜到了。如果猜到,则结束程序。程序还要求统计猜的次数,如果1次猜出该数,提示“Bingo!”;如果3次以内猜到该数,则提示“Lucky You!”;如果超过3次但是在N(>3)次以内(包括第N次)猜到该数,则提示“Good Guess!”;如果超过N次都没有猜到,则提示“Game Over”,并结束程序。如果在到达N次之前,用户输入了一个负数,也输出“Game Over”,并结束程序。
|
|||
|
|
要求:游戏结束时(无论是否猜到)显示玩家猜数字的过程(用链表)。
|
|||
|
|
|
|||
|
|
练习22.2
|
|||
|
|
单链表逆序输出
|
|||
|
|
|
|||
|
|
练习22.3
|
|||
|
|
单链表排序
|
|||
|
|
|
|||
|
|
位运算练习
|
|||
|
|
1.位运算-二进制输出
|
|||
|
|
按二进制位输出一个整数。例如,1000=0000 0011 1110 1000B
|
|||
|
|
|
|||
|
|
2.位运算-值交换(自己画一画过程)
|
|||
|
|
交换两个变量的值,不使用中间变量。
|
|||
|
|
|
|||
|
|
3.位运算-求绝对值
|
|||
|
|
使用位运算求一个数的绝对值。
|
|||
|
|
|
|||
|
|
练习1:
|
|||
|
|
下面是一个类的测试程序,设计出能使用如下测试程序的类。
|
|||
|
|
![[1003e54f07f1f747ac8c0cfdf1516da.png]]![[c9b0899e65d2d97e1ba4a70bb4fe2df.png]]
|
|||
|
|
|
|||
|
|
练习2:
|
|||
|
|
设计一个立方体类Box,它能计算并输出立方体的体积和表面积。要求:
|
|||
|
|
·(1) 包含成员变量m_a(立方体边长)。
|
|||
|
|
·(2) 包含函数SetA(doublea)(设置立方体边长)、GetVolume()(计算体积)、GetArea()(计算表面积)。
|
|||
|
|
·(3) 包含函数Display(),用来输出计算的结果。
|
|||
|
|
·(4)设计测试用主函数main(),用来测试Box类。
|
|||
|
|
|
|||
|
|
练习3:
|
|||
|
|
设计一个Rectangle类。要求:
|
|||
|
|
·(1) 包含两个成员变量m_length和m_width,其默认值为1。
|
|||
|
|
·(2) 包含成员函数Perimeter()计算长方形的周长,Area()计算长方形面积。
|
|||
|
|
·(3) 包含成员函数SetWidth()和GetWidth()用来设置和得到m_width的值,SetLength()和GetLength()用来设置和得到m_length的
|
|||
|
|
值。Set...()函数应验证m_length和m_width均为0.0到20.0之间的浮点数。
|
|||
|
|
·(4)编写主函数,测试Rectangle类。
|
|||
|
|
|
|||
|
|
练习5:
|
|||
|
|
编写一个Person类,包括:
|
|||
|
|
·1、普通数据成员:姓名,性别,年龄。
|
|||
|
|
·2、三个构造函数:无参数构造函数,有参数构造函数(参数:姓名的指针,年龄,性别),拷贝构造函数。
|
|||
|
|
·3、析构函数,
|
|||
|
|
输出人员信息函数print()。
|
|||
|
|
编写main ()函数,分别调用三种构造函数,创建三个对象P1、P2、P3,其中P3的创建是用P2通过深拷贝复制得到的
|
|||
|
|
|
|||
|
|
练习6:
|
|||
|
|
编写一个程序,输入N个学生数据,包括学号、姓名、成绩,输出这些学生数据并计算平均分。要求:
|
|||
|
|
·(1) 设计一个学生类Stud,除了包括学号、姓名和成绩数据成员外,有两个静态变量分别存放总分和人数。
|
|||
|
|
·(2)有两个普通成员函数SetData()和Disp(),分别用于给数据成员赋值和输出数据成员的值。另有一个静态成员函数Avg(),它用于
|
|||
|
|
计算平均分。
|
|||
|
|
·(3) 在main()函数中定义一个对象数组用于存储输入的学生数据。
|
|||
|
|
|
|||
|
|
|
|||
|
|
练习7:
|
|||
|
|
有一个学生类Student,包括学生姓名、成绩,要求:
|
|||
|
|
·(1)设计一个友元函数Compare(),比较两个学生成绩的高低。
|
|||
|
|
·(2) 在main()函数中定义一个对象数组用于存储输入学生的数据,并求出最高分和最低分的学生。
|
|||
|
|
|
|||
|
|
练习2-1:
|
|||
|
|
请编写程序完成如下设计
|
|||
|
|
·学生类,数据成员包括学号(公有)、姓名(保护)、年龄(私有)、学生数(静态)。学生数用来统计构造出来的学生对象数量
|
|||
|
|
·课代表类,继承自学生类,数据包括负责课程编号(公有)、课程评分(公有)
|
|||
|
|
·要求使用构造初始化符表“:”的形式进行构造,每个类有相关数据的输出显示函数
|
|||
|
|
·在主函数中构造对象并输出显示相关数据
|
|||
|
|
|
|||
|
|
|
|||
|
|
练习2-2:
|
|||
|
|
·定义一个点Point类,数据成员是浮点型横纵坐标;
|
|||
|
|
·定义一个颜色类Color数据成员只有颜色(字符数组#000000~#FFFFFF);
|
|||
|
|
●一个直线类Line,数据成员是两个Point对象,表示起点和终点(即Point两个对象为Line的内嵌对象);
|
|||
|
|
·一个三角形类Triangle,继承自Line和Color,数据成员有三角形的高height,三角形理解成以基类Color为颜色,以基类直线为底,以
|
|||
|
|
height为高的直角三角形,(即直线和高分别为两条直角边)请实现相关函数,计算三角形的颜色、周长和面积并给出相关输出
|
|||
|
|
|
|||
|
|
```cpp
|
|||
|
|
#include <iostream>
|
|||
|
|
|
|||
|
|
int main(){
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
练习2-3:
|
|||
|
|
设计日期类和时间类,并以此两类为基类派生日期时间类
|
|||
|
|
要求:
|
|||
|
|
日期类包括年、月、日等成员
|
|||
|
|
·时间类包括时、分、秒等成员
|
|||
|
|
·日期时间类能够实现日期时间的求差、比较大小的功能
|
|||
|
|
1、使用运算符重载实现该功能,以时间日期类的对象描述日期时间之差
|
|||
|
|
2、假设每个月都是30天,不考虑闰年
|
|||
|
|
3、不考虑公元前
|
|||
|
|
|
|||
|
|
练习2-4:
|
|||
|
|
设计圆类,并以圆类为基类,派生圆柱类、圆锥类和圆球类(分别求出其面积和体积)
|
|||
|
|
要求:
|
|||
|
|
·自行确定各类具有的数据成员、函数成员,如果需要对象成员,再自行设计相关类;
|
|||
|
|
·在设计程序过程中,尽量多地涉及类继承与多态性的重要概念,如虚函数、纯虚函数、抽象基类等等。
|
|||
|
|
注:应当用圆类继承一个区域类(或形状类)
|
|||
|
|
|
|||
|
|
练习8:
|
|||
|
|
设计一个Rational类,进行带分数的运算。要求:
|
|||
|
|
·(1) 包含两个整数成员变量表示分子和分母。
|
|||
|
|
·(2) 包含一个对所声明对象初始化的构造函数。不提供参数时,构造函数应提供默认值。分数存放成简化形式,例如分数“2/4”应在
|
|||
|
|
对象中存放成分子1和分母2的形式。
|
|||
|
|
·(3)对下列情况提供public成员函数:
|
|||
|
|
a)两个Rational值相加,结果保存成简化形式。
|
|||
|
|
b) 两个Rational值相减,结果保存成简化形式。
|
|||
|
|
c) 两个Rational值相乘,结果保存成简化形式。
|
|||
|
|
d)两个Rational值相除,结果保存成简化形式。
|
|||
|
|
e)按a/b形式打印Rational值,其中a为分子,b为分母。
|
|||
|
|
·(4)编写主函数,测试Rational类。
|
|||
|
|
·(5)将上述成员函数改为运算符重载的形式,分别作为成员函数和友元函数实现上述功能。
|
|||
|
|
|
|||
|
|
练习3-4:
|
|||
|
|
编写一个类模板,完成对不同数据类型的数组的排序(小到大)操作。
|
|||
|
|
如:
|
|||
|
|
●int array[5]={3,6,2,1,4};
|
|||
|
|
●double array[5]={3.1,1.2,4.5,1.1,0.2};
|
|||
|
|
|
|||
|
|
练习3-5:
|
|||
|
|
定义一个堆栈类模板,实现不同数据类型数据的入栈和出栈操作,堆栈的大小用非类型参数指定。
|
|||
|
|
|
|||
|
|
练习3-6:
|
|||
|
|
用类模板创建单链表,并实现在链表里增加一个节点和删除一个节点的操作。
|
|||
|
|
|
|||
|
|
练习:文本文件-九九乘法表![[72d1094207daa7f6c6a98a4f10275fd.png]]
|
|||
|
|
|
|||
|
|
练习5-7:文件读写、二进制文件
|
|||
|
|
编写一个程序,将5种商品的商品号、商品名、单价和数量写入二进制文件f.bin中,然后将该文件中的数据读到数组中,并将其输出到屏幕上。![[c34b2009414956177d593a62b4f2cc4.png]]
|
|||
|
|
|
|||
|
|
练习5-8:文件读写、二进制文件
|
|||
|
|
编写一个程序从文件f.bin(第1题已建立的文件)中读出任意一种商品的数据并输出到屏幕上。比如输入整数2,则输出第二种商品的信息
|
|||
|
|
![[1746003581975944b10199ea7232702.png]]
|
|||
|
|
|