《VC++程序设计课程实践基础题.doc》由会员分享,可在线阅读,更多相关《VC++程序设计课程实践基础题.doc(37页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流VC+程序设计课程实践基础题.精品文档.VC+程序设计课程实践指导第1章 课程实践概述1.1 VC+课程实践的性质与目的“VC+课程实践”是在学习了“VC+程序设计”课程后进行的实践教学环节,该环节为学生提供一个既动手又动脑,独立实践的机会,使学生将课本上的理论知识和实践有机的结合起来,有利于巩固、提高和融合所学的课程知识,提高学生运用所学知识解决实际问题的能力。主要目的如下:1进一步培养学生程序设计的思想,加深对VC+语言要素和控制结构的理解。 2针对VC+中的重点和难点内容进行训练,强调好的程序设计风格。3进一步熟悉VC+的编程技巧和上机
2、调试程序的方法。4掌握程序设计的常用算法。1.2 VC+课程实践的要求学生必须仔细阅读本程序设计实践指导书,认真主动完成程序设计实践的要求。要发挥自主学习的能力,充分利用时间,制订好程序设计实践的时间计划,并在程序设计实践过程中不断检测自己的计划完成情况。根据系统的功能要求,学生必须在教师的指导下认真完成应用程序的设计。具体要求如下:1系统功能模块分析、控制模块分析正确;2系统设计要实用;3编程简练、功能全面;4说明书、流程图要清楚。1.3 VC+课程实践的选题原则 题目可从第4章中选择,创新性题目可只选择1题,仅选提高题应不少于3题,仅选基础题应不少于6题,也可组合选题,还可自行选择感兴趣的
3、题目(须经指导老师审定)。对于提高题、创新题及游戏题可组成团队开发,但应制定详细的项目分工说明。1.4 VC+课程实践的基本步骤课程实践是一个从分析到设计,再到总结的过程,具体工作可按如下步骤依次进行:1确定问题要求,充分分析和理解问题本身,给出解决方案框架。2在确定解决方案框架过程中,考虑怎样使程序结构清晰、合理、简单和易于调试,并确定每个函数的简单功能,以及函数之间的调用关系。3详细设计和编码。确定算法的主要流程,在此基础上进行代码设计。 4上机前编写程序与检查。可用2种方法检查程序,来有效提高调试效率,减少上机调试程序时的无谓错误。方法一,用一组测试数据手工执行程序;方法二,通过阅读或给
4、别人讲解自己的程序而深入全面地理解程序逻辑,将程序中的明显错误事先排除。5上机调试程序。6完成课程实践报告。1.5 时间及地点安排 本课程实践按照教学要求在1周(按5天计算)内完成,每天至少上机3-4小时进行程序调试,总上机调试时间不少于15个小时。题目布置后,所有同学应提前开始查找资料,作好准备。具体时间安排如下:1分析设计准备阶段(前一周周六、周日);2编程调试阶段(周一周四);3总结及书写课程实践报告阶段(周五);4检查验收阶段(时间由指导老师确定)。 验收地点:机房。1.6 组织管理 良好的组织是课程实践质量的重要保证,在课程实践期间的主要组织工作安排如下:1每人独立完成所选任务,创新
5、性题目可23人组成小组,自由组合,小组应指定一名组长。2由班长负责考勤。 3指导教师负责指导学生。1.7 考核评价 根据学生完成情况,结合所选题目的难度及分析解决问题的能力和创新精神,确定成绩等级。考核标准包括:1所设计程序的正确性、通用性,全面完成题目的要求(60%);2课程实践报告(20%):包括系统设计要求,设计思路,系统功能模块图,系统流程图,类的层次图(包括类成员列表),调试过程,关键程序代码,程序设计实践总结,参考书目等。最后附源程序代码。不符合以上要求者,则本次实践以不及格记;3平时考勤(20%)。 提交材料包括:1源程序。按照程序设计课程实践的具体要求所开发的所有源程序;2程序
6、的说明文件(保存在.txt中)。在说明文档中应该写明上交程序所在的目录,上交程序的主程序文件名,如果需要安装,要有程序的安装使用说明;3课程实践报告。保存在word 文档中,文件名要求按照“姓名-学号-实践报告”起名,如文件名为“张三-0840308112-实践报告.doc” 。注:(1)程序及报告提交电子稿,发送至指导老师的邮箱(由教师提供)中;(2)报告除需提交电子稿外,必须每人另提交一份打印件。第4章 课程实践示例4.1基础题示例1任务建立一个类Integer_String,把一个正整数转换为字符串。具体要求如下:(1)私有数据成员l int num:要转换的正整数。l char *s:
7、用动态空间存储转换得到的字符串。(2)公有成员函数l Integer_String(int n):用参数n初始化数据成员num。l int f():求数据成员num的位数。l void fun():把正整数num转换为字符串s。l void show():输出数据成员num和s;l Integer_String():释放动态空间。(3)在主函数中对定义的类进行测试。用正整数12345初始化类Integer_String的对象test,调用相关成员函数后输出转换结果。2系统设计(1)任务分析通过类Integer_String的成员函数f()求出数据成员num的位数,并以此为依据给数据成员s分配大
8、小适当的动态空间,在成员函数fun()中依次取出num的各位数字并转换成对应字符后存入数据成员s,程序结束前释放为s分配的动态空间。类的定义如下:class Integer_Stringint num;char *s;public:Integer_String(int);int f();void fun();void show();Integer_String();(2)算法设计l 求整数num(设num为正整数)的位数定义变量d(初值为1)表示num(n)的位数,以n10作为循环条件,每循环一次d的值增加一位,n去掉一位(n/=10),循环结束后d的值就是n的位数。为保持num的值不变,把其
9、赋给变量n,通过n求num的位数。l 把整数num转换为字符串s取出num(n)的个位并转换为字符,然后赋给s的首字符(char *p=s):*p=n%10+0;去掉n的个位:n/=10;p指向s的下一位:p+;重复步直至n=0(循环条件为:n!=0,即n); 给字符串s添加结束标记,并指向最后一个字符:*p-=0;把字符串s逆序:使p1指向s的首字符:char *p1=s,交换*p1和*p,然后p1指向后一个字符、p指向前一个字符:p1+,p-;直到p1和p相遇(循环条件为:p1p)。3系统测试在主函数中以整数初始化Integer_String的对象,并调用其成员函数show()输出测试结果
10、(整数num和字符串s)。主函数定义如下:void main()Integer_String test=12345;test.fun();test.show();用以测试的整数为: 12345 预期的输出结果为: 整数为:12345字符串为:123454源程序清单#includeclass Integer_Stringint num;char *s;public:Integer_String(int n)num=n;int f()int d=1,n=num;while(n10)d+;n/=10;return d;void fun()int n=num,len=f();s=new charlen
11、+1;for(char *p=s,*p1=s;n;p+)*p=n%10+0;n/=10;*p-=0;while(p1p)n=*p1,*p1=*p,*p=n;p1+,p-;void show()cout整数为:numendl;cout字符串为:sendl;Integer_String()delete s;void main()Integer_String test=12345;test.fun();test.show();第5章 课程实践题选5.1基础题1试建立一个类PP,求出下列多项式的前n项的值。具体要求如下:(1)私有数据成员l int n:前若干项的项数。l double x:存放x的值
12、。l double *p:根据n的大小动态申请存放Pn(x) 前n项的数组空间。(2)公有成员函数l PP(int num,double x1):构造函数,初始化数据成员n和x,使p指向动态申请的数组空间。l PP():析构函数,释放p指向的动态内存空间。l double fun(int n1,double x):递归函数,用于求多项式的第n1项。注意:将递归公式中的n用作函数参数。本函数供process函数调用。l void process( ):完成求前n项的工作,并将它们存放到p指向的动态数组中。l void show( ):输出n和x,并将前n项以每行4个数的形式输出到屏幕上。(3)
13、在主函数中完成对该类的测试。先输入num和x1,并定义一个PP类的对象items,用num和x1初始化items的成员n和x,调用items的成员函数,求出并输出多项式前num项的值。2试建立一个类SP,求,另有辅助函数power(m,n)用于求。具体要求如下:(1)私有成员数据。l int n,k:存放公式中n和k的值;(2)公有成员函数。l SP(int n1,int k1):构造函数,初始化成员数据n和k。l int power(int m, int n):求mn。l int fun( ):求公式的累加和。l void show( ):输出求得的结果。(3)在主程序中定义对象s,对该类进
14、行测试。3建立一个类MOVE,不进行排序,将数组中小于平均值的元素放到数组的左边,大于平均值的元素放到数组的右边。具体要求如下:(1)私有数据成员l float array20:一维整型数组。l int n:数组中元素的个数。(2)公有成员函数l MOVE(float b,int m):构造函数,初始化成员数据。l void average():输出平均值,并将数组中的元素按要求重新放置。l void print():输出一维数组。(3)在主程序中用数据1.3,6.2,3,9.1,4.8,7.4,5.6,9.2,2.3对该类进行测试。4建立一个类MOVE,将数组中最大元素的值与最小元素的值互换
15、。具体要求如下:(1)私有数据成员l int *array:一维整型数组。l int n:数组中元素的个数。(2)公有成员函数l MOVE(int b,int m):构造函数,初始化成员数据。l void exchange():输出平均值,并将数组中的元素按要求重新放置。l void print():输出一维数组。l MOVE():析构函数。(3)在主程序中用数据21,65,43,87,12,84,44,97,32,55对该类进行测试。5定义一个类Palindrome,实现绝对回文数。设计一个算法实现对任意整型数字判断是否为绝对回文数。所谓绝对回文数,是指十进制数和二进制数均对称的数。具体要求
16、如下:(1)私有数据成员 l int n:整型数字。l int y: 标记是否为回文数。(2)公有成员函数l Palindrome (int x) :构造函数,根据x参数初始化数据成员n,y初始化为0。l void huiwen () :判断数n是否为绝对回文数。l void show( ) :若该数为回文数,则在屏幕显示。 (3)在主程序中定义int a,由键盘输入数字。定义一个Palindrome类对象p,用a初始化p,完成对该类的测试。6定义一个字符串类String,实现判断该字符串是否为回文字符串。所谓回文字符串,是指该字符串左右对称。例如字符串“123321”是回文字符串。具体要求如
17、下: (1)私有数据成员 l char *str; l int y:标记是否为回文字符串。 (2)公有成员函数l String (char *s) :构造函数,用给定的参数s初始化数据成员str。y初始化为0。l void huiwen () :判断str所指向的字符串是否为回文字符串。l void show( ) :在屏幕上显示字符串。 (3)在主程序中定义字符串char s=”ababcedbaba”作为原始字符串。定义一个String类对象test,用s初始化test,完成对该类的测试。7建立一个类PHALANX,生成并显示一个折叠方阵。折叠方阵如下图所示。折叠方阵的生成过程为:起始数置
18、于方阵的左上角,然后从起始数开始递增,依次折叠构成方阵。1 2 5 104 3 6 119 8 7 1216 15 14 131 2 4 3 1具体要求如下:(1)私有数据成员l int (*p)20:指向按照折叠规律存放方阵的二维整型数组。l int startnum:折叠方阵的起始数。l int n:存放方针的层数。(2)公有成员函数l PHALANX (int s, int m ):构造函数,初始化成员数据。l void process():生成起始数为startnum的n行方阵。l void print():输出折叠方阵。l PHALANX( ):析构函数。(3)在主程序中对该类进行测
19、试。8建立一个MATRIX,生成并显示一个螺旋方阵。螺旋方阵如下图所示,起始数置于方阵的左上角,然后从起始数开始依次递增,按顺时针方向从外向里旋转填数而成。1 2 3 4 5 16 17 18 19 615 24 25 20 714 23 22 21 813 12 11 10 9具体要求如下:(1)私有数据成员l int a20 20:二维整型数组存放螺旋方阵。l int startnum:螺旋方阵的起始数。l int n:存放方针的层数。(2)公有成员函数l MATRIX (int s, int m ):构造函数,初始化成员数据startnum和n。l void process():生成起始
20、数为startnum的n行螺旋方阵。l void print():输出螺旋方阵。(3)在主程序中定义MATRIX类的对象t对该类进行测试。9定义一个字符串类CString,并设计一个算法对该串中各个不同字符出现的频率进行统计。具体要求如下: (1)私有数据成员 l char *str:指向要统计的字符串。l char (*p)2:动态分配二维空间,用以存放str所指字符串中出现的字符及其出现的次数(次数在存放时,用该数字对应的ASCII值存放;在输出次数时,输出该ASCII字符对应的ASCII值即可)。l int size:存放字符串中出现的所有不同的字符的个数。 (2)公有成员函数l CSt
21、ring (char *s) :根据s参数初始化数据成员str;p和size初始值为0。l void Count():p根据s所指字符串长度分配空间。然后把str所指字符串中的每个字符放入p数组中,设置每个字符的出现次数为1。根据p数组统计不同字符出现的频率,并求得size的实际大小。最后根据size的实际大小,重新分配p所指空间,并把不同字符及其出现次数重新放回p数组(提示:可以借助临时数组或指针来实现)。l void Show():屏幕显示字符串、字符串的每个字符和与之对应的次数。l CString():释放动态分配的空间。 (3)在主程序中定义字符串char s=”abdabcdesff
22、ffd”。定义一个CString类对象test,用s以初始化test,完成对该类的测试。10定义一个字符串类CString,并设计一个算法实现,给定关键字str1在字符串str中出现时用关键字str2进行替换的功能。具体要求如下: (1)私有数据成员 l char *str; 原始字符串。l char *str1; 目标关键字。l char *str2; 替换关键字。l int flag; 标记替换是否完成替换。 (2)公有成员函数l CString (char *s,char s1 ,char *s2) :用给定的参数s、s1和s2相对应的初始化数据成员str、str1和str2。flag设
23、置缺省0。l void Replace () :判断str字符串中是否出现str1,若出现就用str2替换,否则什么都不做。若替换成功了标记flag为1,若替换不成功则标记flag为0。l void Show( ) :若替换成功,则在屏幕上显示目标关键字、替换关键字和替换后的原始字符串;若不成功则显示原始字符串。l CString() :释放动态分配的空间。 (3) 在主程序中定义字符串char s=”I am student, you are student too, we are all student.”作为原始字符串,定义char s1=” student”作为目标关键字,定义char
24、 s2=”teacher”作为替换关键字。定义一个CString类对象test,用s,s1和s2初始化test,完成对该类的测试。11建立一个STRING,将一个字符串交叉插入到另一个字符串中(假定两字符串等长)。例如将字符串“abcde” 交叉插入字符串“ABCDE”的结果为“aAbBcCdDeE”或“AaBbCcDdEe”。具体要求如下:(1)私有数据成员l char str180 :存放被插入的字符串。l char str240 :存放待插入的字符串。(2)公有成员函数l STRING (char *s1, char *s2 ):构造函数,用s1和s2初始化str1和str2。l voi
25、d process():将str2中的字符串插入到str1中。l void print():输出插入后的字符串。(3)在主程序中定义STRING类的对象test对该类进行测试。12建立一个STRING,将一个字符串交叉插入到另一个字符串中(假定两字符串不等长)。例如将字符串“abcde” 交叉插入字符串“ABCDEFG”的结果为“aAbBcCdDeEFG”或“AaBbCcDdEeFG”。具体要求如下:(1)私有数据成员l char str160 :存放被插入的字符串。l char str240 :存放待插入的字符串。l char str3100 :存放插入后的字符串。(2)公有成员函数l ST
26、RING (char *s1, char *s2 ):构造函数,用s1和s2初始化str1和str2。l void process():将str2中的字符串插入到str1中,存放到str3中。l void print():输出插入后的字符串。(3)在主程序中定义STRING类的对象test对该类进行测试。13建立一个类MOVE,对数组中元素进行循环换位,即每个元素后移三位,最后三个元素移到最前面。具体要求如下:(1)私有数据成员l int array20:一维整型数组。l int n:数组中元素的个数。(2)公有成员函数l MOVE(int b,int m):构造函数,初始化成员数据。l vo
27、id change():进行循环换位。l void print():输出一维数组。(3)在主程序中用数据21,65,43,87,12,84,44,97,32,55对该类进行测试。14建立一个类MOVE,实现将数组中大字字母元素放在小写字母元素的左边。具体要求如下:(1)私有数据成员l char *array:一维字符数组。l int n:数组中元素的个数。(2)公有成员函数l MOVE(char b,int m):构造函数,初始化成员数据。l void change():进行排序换位。l void print():输出一维数组。l MOVE():析构函数。(3)在主程序中用数据fdsUFfsT
28、jfsKFEkWC对该类进行测试。15定义一个一维数组类Carray,并根据给定算法实现对原始一维数组进行线性变换。这里给定的线性变换算法为:T(bx) = bT(x) + i; 其中,b为变换常量,x为变量,i为当前类中成员数组的下标值。根据该算法,原始数组在变化后,当前数组元素的值是由常量b和i下标来决定的。具体要求如下: (1)私有数据成员 l int *a:指针a指向一个动态分配的原始数组。l int n:n表示该数组的大小。l int b:线性变换的常量。 (2)公有成员函数l Carray (int a ,int n,int x) :用给定的参数a、n和x初始化数据成员a、n和b。
29、缺省都设置为0。l void Transform () :根据上述变化算法,求解数组变换。l void Show( ) :在屏幕上显示数组元素。l Carray () :释放动态分配的空间。 (3)在主程序中定义数组int arr =1,2,3,4,5,6,7,8,9,10作为原始数组,int b;由键盘输入,作为线性变换的常量。定义一个Carray类对象test,用arr初始化test,完成对该类的测试。16定义一个方阵类CMatrix,并根据给定算法实现方阵的线性变换。方阵的变换形式为:F=W*fTf为原始矩阵,fT为原始矩阵的转置,w为变换矩阵,这里设定为1 0 0 1 0 1 1 0
30、0 1 1 0 1 0 0 1 具体要求如下: (1)私有数据成员 l int (*a)4:a指向方阵数组。l int w44:w为变换矩阵。l int m:m表示方阵的行和列数。 (2)公有成员函数l CMatrix (int a4,int m) :用给定的参数a和m 初始化数据成员a和m;对变换矩阵w进行初始化,要求必须用循环实现。l void Transform () :根据上述变换算法,求出变换后的数组形式,存放在原始数组内。l void show( ) :在屏幕上显示数组元素。l CMatrix () :释放动态分配的空间。(3)在主程序中定义数组int arr4=1,2,3,4,5
31、,6,7,8,9,10,11,12,13,14,15,16作为原始数组。定义一个CMatrix类对象test,用arr初始化test,完成对该类的测试。17定义一个类SIN,求 具体要求如下:(1)私有成员数据。l int x:输入公式中x的值,求sin(x)。l int n:输入公式中n的值。(2)公有成员函数。l SIN(int x, int n ):构造函数,用于初始化x和n的值。l int power( int q):求q!的值。l int mi( int m,int n):求的值。l int fun( ):用于求SIN(X)的值。l void show( ):输出求得的结果。(3)在
32、主程序中定义对象test,对该类进行测试。18试建立一个类VAR,用于求n()个数的均方差。均方差的计算公式为,其中平均值为。具体要求如下:(1)私有成员数据。l double a100:用于存放输入的n个数。l int n:实际输入数的个数n。(2)公有成员函数。l VAR(double x, int n1):构造函数,初始化成员数据a和个数n。l double average(double x, int n):求平均值,数组x具有n个元素。l void variance(double x,int n):求均方差,数组x具有n个元素。l void show():输出求得的均方差。(3)在主程
33、序中定义一个对象test,对该类进行测试。19定义一个方阵类Array,实现对方阵进行顺时针90度旋转。如图所示。13951141062151173161284123 45678910111213141516具体要求如下: (1)私有数据成员 l int a44:用于存放方阵。 (2)公有成员函数l Array (int a14,int n) :构造函数,用给定的参数a1初始化数据成员a。l void xuanzhuan ( ) :实现对方阵a进行顺时针90度的旋转。l void show( ) :在屏幕上显示数组元素。 (3) 在主程序中定义数组int b 4=1,2,3,4,5,6,7,8
34、,9,10,11,12,13,14,15,16作为原始数组。定义一个Array类对象test,用b初始化test,完成对该类的测试。20定义一个方阵类Array,实现对方阵进行逆时针90度旋转。如图所示。 1 2 3 4 4 8 12 16 5 6 7 8 3 7 11 15 9 10 11 12 2 6 10 14 13 14 15 16 1 5 9 13具体要求如下: (1)私有数据成员 l int a44:用于存放方阵。 (2)公有成员函数l Array (int a14,int n) :构造函数,用给定的参数a1初始化数据成员a。l void xuanzhuan ( ) :实现对方阵a
35、进行逆时针90度的旋转。l void show( ) :在屏幕上显示数组元素。(3) 在主程序中定义数组int b 4=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16作为原始数组。定义一个Array类对象test,用b初始化test,完成对该类的测试。21建立一个类NUM,求指定数据范围内的所有合数(非质数)。提示:合数定义是“一个数,除了1和它本身,还有其它约数,这样的数叫合数”。具体要求如下:(1)私有数据成员l int *data:动态存放在指定范围内求出的所有合数。l int span1,span2:存放指定范围的下限和上限。l int num:存放spa
36、n1与span2之间的合数个数。(2)公有成员函数l NUM(int n1, int n2) :构造函数,用参数n1和n2初始化span1和span2,同时初始化num。l int isComposite (int x ):判断x是否为合数。若是合数,返回1,否则,返回0。l void process( ) :求指定范围内的所有合数,把它们依次存放在数组data中,并将求出的合数个数赋给num。 l void print( ):输出求出的素数个数及所有合数,每行输出8个合数。l NUM( ):释放动态分配的存储空间。(3) 在主函数中完成对该类的测试。定义一个NUM类对象test,指定查找范围
37、为100200,即求100至200之间的所有合数。通过test调用成员函数完成求合数及输出合数的工作。22建立一个类Saddle_point,求一个数组中的所有鞍点。提示:鞍点是这样的数组元素,其值在它所在行中为最大,在它所在列中为最小。具体要求如下:(1)私有数据成员l int a44:存放二维数组元素。l int b44:存放二维数组中的鞍点值。l int num:存放鞍点个数。(2)公有成员函数l Saddle_point(int data4):构造函数,用参数int data4初始化数组a,,同时初始化数组b与num 的值均为0。l void process( ):求数组a所有鞍点(如
38、果有鞍点),把它们行、列、及值相应存放在数组b中,并将求出的鞍点个数赋给num。 l void print( ):输出数组a、鞍点个数,与鞍点坐标及相应值。(3)在主程序中定义数组int b 4=2, 6, 3, 4, 5, 6, 5, 5, 5, 7, 6, 7, 1, 9, 2, 7作为原始数组。定义一个Saddle_point类对象fun。通过fun调用成员函数完成求鞍点及输出工作。23分数相加,两个分数分别是1/5和7/20,它们相加后得11/20。方法是先求出两个分数分母的最小公倍数,通分后,再求两个分子的和,最后约简结果分数的分子和分母(如果两个分数相加的结果是4/8,则必须将其约
39、简成最简分数的形式1/2),即用分子分母的最大公约数分别除分子和分母。求m、n最大公约数的一种方法为:将m、n较小的一个数赋给变量k,然后分别用 k,k-1,k-2,1中的数(递减)去除m和n,第一个能把m和n同时除尽的数就是m和n的最大公约数。假定m、n的最大公约数是v,则它们的最小公倍数就是m*n/v。试建立一个分数类Fract,完成两个分数相加的功能。具体要求如下:(1)私有数据成员l int num,den :num为分子,den为分母。(2)公有成员函数l Fract(int a=0,int b=1):构造函数,用a和b分别初始化分子num、分母den。l int ged(int m
40、,int n):求m、n的最大公约数。此函数供成员add()函数调用。l Fract add(Fract f):将参数分数f与对象自身相加,返回约简后的分数对象。l void show( ):按照num/den的形式在屏幕上显示分数。(3)在主程序中定义两个分数对象f1和f2,其初值分别是1/5和7/20,通过f1调用成员函数add完成f1和f2的相加,将得到的分数赋给对象f3,显示分数对象f3。24建立一个类NUM,并统计特定序列中相同的数字的个数。具体要求如下:(1)私有数据成员l int data25:随机生成25个在0-9之间的数字。l int num10:储存每个数字出现的个数。(2
41、)公有数据成员l NUM(int data):构造函数,初始化数组data。l void process( ):统计数组data中每个数字出现的个数,并保存到数组num中。 l void print( ):输出每个数字出现的个数,每行输出5个 (3)在主程序中定义一个对象,对该类进行测试。25建立一个类NUM,并统计特定序列中相同的字符的个数。具体要求如下:(1)私有数据成员l char data25:随机生成25个字符。l int num128:储存每个字符出现的个数。(2)公有数据成员l NUM(int data):构造函数,同时初始化数组data。l void process( ):统计
42、数组data中每个字符出现的个数,并保存到数组num中。 l void print( ):输出每个出现过的字符及其出现的个数,每行输出5个,没有出现过的字符不显示。(3)在主程序中定义一个对象,对该类进行测试。26建立一个类NUM,随机生成25个字符序列,并为特定序列进行排序。具体要求如下:(1)私有数据成员l int data25:随机生成25个字符。(2)公有数据成员l NUM(int data):构造函数,初始化数组data。l void process( ):为数组data进行排序,要求按照ASCII码进行升序排列。l void print( ):输出数组data,每行输出5个字符。(
43、3)在主程序中定义一个对象,对该类进行测试。27建立一个类NUM,求指定数据范围内的所有素数(质数)。提示:素数定义是“只能被1和它本身整除的整数”,即质数。具体要求如下:(1)私有数据成员l int data10:依次存放原始数据。l int prime10:存放指定数据内所求出的所有素数。l int num:存放素数个数。(2)公有数据成员l NUM(int n ):构造函数,用参数n初始化data,同时初始化num为0。l int isprime (int x ):判断x是否为素数。若是素数,返回1,否则,返回0。l void process( ):求指定data数组中的所有素数,把它们
44、依次存放在数组prime中,并将求出的素数个数赋给num。 l void print( ):输出求出的素数个数及所有素数,每行输出4个素数。(3)在主函数中完成对该类的测试。定义NUM类对象test,通过test调用成员函数完成求素数及输出素数的工作。原始数据为4, 5, 9, 11, 36, 29, 31, 101, 56, 199。28编程实现对大于1的整数进行质因数分解,并求出其和。所谓整数的质因子分解是指将整数分解为其所有质数(素数)因数的积,例如,60=2*2*3*5,则整数60的质因数之和为12。定义一个类Decompose实现上述功能。具体要求如下:(1)私有数据成员l int *a:指向存放对应整数的质因数之和的动态存储空间。l int *num:指向待分解质因数整数的动态存储空间。l int n:整数的个数。(2)公有数据成员l Decompose(int m,int b ): 用m初始化n,并用n初始化为动态申请空间的指针a与num。用参数b给数组a赋