面向对象程序设计课程设计》指导书2 周)适用专业:苏州理工学院计算机科学与技术专业江苏科技大学苏州理工学院2018年8 月课程设计目的《面向对象程序设计课程设计》的目的是通过综合性程序设计训练,使学生进一步巩固对计算机程序设计语言 (C++) 基本语法、基本算法的理解,加深对面向对象程序设计的理解,并将课本上的理论知识的实际应用有机的结合起来,锻炼学生的分析问题、解决问题的能力,为学习后续课程和实际编程打下良好的基础。
二、课程设计要求利用所学的面向对象程序设计的编程知识和技巧,独立完成具有一定难度的程序设计题,养成良好的编程习惯,掌握基本程序设计的理念、方法,熟练运用程序调试的技巧,提高基本的程序开发能力。
1.学生必须独立完成本指导书中附录一中的所有编程题。
2.遵守机房管理制度和实验操作规则3.上机者在上机规定的时间内,不得从事与本课程设计无关的内容4.独立完成课题,严禁抄袭他人成果5.按时提交报告三、时间安排2018年9月2日~2018年9月 13日。
四、实验设备和开发工具1.计算机计算机应具有较好的性能和稳定性。
2.操作系统操作系统采用 Windows 2000 、 Windows XP 、 Windows 2003 server 等。
3.开发工具VC五、考核要求1.上机考核:在规定的时间内完成 1~2 题进行编程,占总成绩的 60% 。
2.课程设计报告:选附录中的一半题写成报告,格式要求见附录二,占总成绩的20%。
3.平时表现:占总成绩的 20。
附录一:课程设计内容【排序、数组操作】1.[题目]对一个 5 位数的任意整数,求出其降序数。
例如:整数是 82319,则其降序数是 98321。
算法提示:将整数的各位数分解到一维整型数组 a 中,再将 a 数组中的元素按降序排序,最后输出 a 数组元素值。
试建立一个类 NUM ,用于完成该功能。
具体要求如下:(1)私有数据成员 int n 。
存放 5 位数的整数。
int a[5] 。
存放其元素的降序排列值。
(2)公有成员函数NUM ( int x=0) :构造函数,用参数 x 初始化数据成员 n。
void decrease():将n的各位数值分解到 a数组中,并将a数组排成降序。
void show ( ) :屏幕显示原数及其降序数。
(3)在主程序中输入一个5位数的任意整数,然后定义一个 NUM类对象num,用上述输入的数初始化num,然后完成对该类的测试。
运行结果:输入一个五位的正整数 :82319n=823199 8 3 2 12.[题目]设有一个包含 size 个数的数列,要求能够把从指定位置 m 开始的 n 个数排成降序,并输出新的完整的数列。
可将数列存放在一维数组中。
例如,原数列有10个数,值为{ 1 , 8, 3, 0, 5, 9, 7, 6, 9, 8 } ,若要求把从第 4个数开始的 5个数排成降序,则得到的新数列为 { 1, 8, 3, 9, 7, 6, 5, 0, 9, 8 }。
试建立一个类 LIST ,完成上述功能。
具体要求如下:(1)私有数据成员int size 。
数列元素个数。
int *arr 。
数列数组的起始指针。
(2)公有成员函数LIST(int a[ ], int len):构造函数,用len初始化size,根据size动态分配数组存储空间, arr 指向该存储空间。
void sortpart (int m, int n) :将数列从第 m 个元素开始的 n 个数排成降序。
注意: 数列中数的序号与其元素的下标不一致。
void output( ) :输出新的完整的数列。
~LIST ():析构函数,释放 arr指向的存储空间。
(3)在主程序中定义数组int a[10]用于存放原始数列,其值为 { 1,8,3,0,5,9,7,6,9,8 }。
定义一个LIST类对象tt,用a数组及数组实际元素的个数初始化该对象,然后把从第 4个数开始的 5个数按逆序排列,完成该类的测试。
3.【题目】求整数x,使y=x2的各位数字为严格递增序列。
如:372=1369中,1、3、6、9是严格递增序列;又如,1、3、6、6、9就不是一个严格递增序列。
试建立一个类RISE,完成求出某范围内,满足条件的所有x及其平方数和x的个数。
具体要求如下:(1)私有数据成员int low,high : x 的取值范围的下限和上限。
int a[100][2] :每行存放满足条件的 x 及其平方数。
int count :满足条件的 x 的个数。
(2)公有成员函数RISE (int lw,int hi) :构造函数,用参数 lw 和 hi 分别初始化 low 和 high 。
缺省的取值范围为 [10,1000] 。
将 count 初始化为 0。
int isrise(int y) :判断 y 的各位数字是否严格递增,若是则返回1,否则返回 0。
void process():求出满足条件的所有x及其平方,并将结果存入数组a,同时统计满足条件的 x 的个数。
void show():输出数组 a及 count。
⑶ 在主函数中完成对该类的测试。
定义一个RISE类的对象v,使用缺省方式初始化该对象,按上述要求处理并输出结果。
程序运行结果应为13 16916 25617 28937 1369116 13456117 13689367 134689count=74.【题目】若数组a中的n个元素已按升序排列,现将一个新数 x插入到数组a中,插入后数组 a 的元素仍然保持升序。
使用的插入排序算法是:从数组 a 的最后一个元素开始,依次向前扫描数组元素,若 a[i]大于x,则将a[i]放入a[i+1](后移一个位置),并继续向前扫描,直到找到某个 a[i]小于或等于x,将x赋值到a[i+1]元素中,此时完成插入排序工作。
编写程序时要考虑初始时,数组是空数组(即数组中没有元素),插入第一个元素时,要做特殊处理。
试建立一个类InsSort,完成插入排序工作。
具体要求如下:(1)私有数据成员int a[100] :存放排好序的整数序列。
int n :数组实际元素个数。
(2)公有成员函数InsSort (int b[ ], int size):构造函数,用参数 b初始化a数组,用参数size初始化n, size 的缺省值是 0。
void insert(int x):将x插入到数组 a中。
void show( ) :输出数组元素个数及数组各元素值。
(3)在主函数中完成对该类的测试。
定义数组int b[100] ,其初值是:{ 1 , 3, 5 } 。
定义一个InsSort 类的对象arr ,用数组 b 及其元素的个数初始化该对象。
定义数组int c[100] ,其初值是: { 0 , 1, 2, 3, 5, 8, 10 } 。
然后循环将数组 c 中的所有元素依次插入到对象arr 的成员数组 a 中。
最后输出对象arr 中的全体数据成员。
程序正确运行后,应输出:number=100, 1, 1, 2, 3, 3, 5, 5, 8, 105.【题目】将两个分别从小到大排列的有序数组a和b复制合并到第3个有序数组c中。
m和n分别是数组a和b的元素个数,结果 c的元素个数为k。
例如a和b数组元素分别为 {1,2, 2, 3, 8}和{3, 4, 7, 8},则结果数组 c 的值是: {1, 2, 2, 3, 3, 4, 7, 8,8} 。
算法是:将 a、b 两个数组看成两个队列,比较队首的两个元素,将较小者放入 c 队列尾部,如果队首的两个元素相等,则先选择 a 队列首部元素加入 c 队列尾部。
循环执行以上过程,直到 a 或 b 队列之一为空,然后将另一个非空队列拷贝到 c 队列尾部。
注意:不允许使用其它算法(如排序算法)。
试建立一个类Com,完成合并工作。
具体要求如下:(1)私有数据成员int m, n, k :分别是 a, b, c 三个数组的元素个数。
int a[100], b[100], c[100]:存放 a, b, c 三个数组的值。
(2)公有成员函数Com(int aa[ ], int m1, int bb[ ], int n1) :构造函数,用参数初始化 a, b 数组及其元素个数。
将 k 初始化为 0。
void combine( ) :完成合并工作。
void show():将a, b,c三个数组输出,每行输出一个数组。
(3) 在主函数中完成对该类的测试。
定义两个数组int x[100], y[100] ,其初值如上。
定义一个Com类的对象c,用x、y数组及其元素的个数初始化该对象,然后调用成员函数进行合并及输出工作。
程序正确的运行结果如下:a: 1, 2, 2, 3, 8b: 3, 4, 7, 8c: 1, 2, 2, 3, 3, 4, 7, 8, 86.[题目]建立一个 array 类。
要求如下:( 1)私有数据成员•int n :存储数组元素个数。
•int a[100]:存放数组元素。
( 2)公有成员函数•构造函数 array(int m,int b[]) :初始化数据成员 n, a。
•void delsame():完成将数组a中相同元素删除工作。
•void print() :将数组以每行 5 个元素的形式输出到屏幕。
( 3)编写一个程序测试该类。
在主函数中定义一个数组 int b[16] , 其初值是{1,2,1,5,3,4,6,3,4,2,7,6,9,8,6,10} 。
定义一个 array 类的对象,用 b 及数组元素个数初始化该对象,则经删除后 a 数组的内容为 {1,2,5,3,4,6,7,9,8,10} 。
7.【题目】设△是集合A上的二元运算,如果对于集合A中的任意元素a和b,都有a△ b=,且c€ A,则称二元运算△对于集合 A是封闭的。
现有一数组a,假定其数组元素构成集合 A。
试建立一个类DATA,判断求余运算“ %”对集合 A是否封闭。
即判断数组中的任意两个元素 a[i]和a[j],当a[j]不等于0时,a[i]除以a[j]所得余数仍然属于集合A。
具体要求如下:( 1 )私有数据成员int *a 。
整数指针,指向动态分配的数组空间int n 。
数组中元素个数( 2)公有成员函数DATA(int t[ ], int n1)。
构造函数,用n1初始化n,并根据n动态生成数组a,用 t数组对a数组初始化。
int belong(int a[ ], int n, int x)。
判断x的值是否在数组 a中,如果在返回1,否则返回0。
void fun()。
判断求余运算%对本对象是否圭寸闭,如果圭寸闭,输出"圭寸闭”。