还剩39页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
VC++程序设计课程实践指导第1章课程实践概述
1.1VC++课程实践的性质与目的“VC++课程实践”是在学习了“VC++程序设计”课程后进行的实践教学环节,该环节为学生提供一个既动手又动脑,独立实践的机会,使学生将课本上的理论知识和实践有机的结合起来,有利于巩固、提高和融合所学的课程知识,提高学生运用所学知识解决实际问题的能力主要目的如下1.进一步培养学生程序设计的思想,加深对VC++语言要素和控制结构的理解2.针对VC++中的重点和难点内容进行训练,强调好的程序设计风格3.进一步熟悉VC++的编程技巧和上机调试程序的方法4.掌握程序设计的常用算法
1.2VC++课程实践的要求学生必须仔细阅读本程序设计实践指导书,认真主动完成程序设计实践的要求要发挥自主学习的能力,充分利用时间,制订好程序设计实践的时间计划,并在程序设计实践过程中不断检测自己的计划完成情况根据系统的功能要求,学生必须在教师的指导下认真完成应用程序的设计具体要求如下1.系统功能模块分析、控制模块分析正确;2.系统设计要实用;3.编程简练、功能全面;4.说明书、流程图要清楚
1.3VC++课程实践的选题原则题目可从第4章中选择,创新性题目可只选择1题,仅选提高题应不少于3题,仅选基础题应不少于6题,也可组合选题,还可自行选择感兴趣的题目(须经指导老师审定)对于提高题、创新题及游戏题可组成团队开发,但应制定详细的项目分工说明
1.4VC++课程实践的基本步骤课程实践是一个从分析到设计,再到总结的过程,具体工作可按如下步骤依次进行1.确定问题要求,充分分析和理解问题本身,给出解决方案框架2.在确定解决方案框架过程中,考虑怎样使程序结构清晰、合理、简单和易于调试,并确定每个函数的简单功能,以及函数之间的调用关系3.详细设计和编码确定算法的主要流程,在此基础上进行代码设计4.上机前编写程序与检查可用2种方法检查程序,来有效提高调试效率,减少上机调试程序时的无谓错误方法一,用一组测试数据手工执行程序;方法二,通过阅读或给别人讲解自己的程序而深入全面地理解程序逻辑,将程序中的明显错误事先排除5.上机调试程序6.完成课程实践报告
1.5时间及地点安排本课程实践按照教学要求在1周(按5天计算)内完成,每天至少上机3-4小时进行程序调试,总上机调试时间不少于15个小时题目布置后,所有同学应提前开始查找资料,作好准备具体时间安排如下1.分析设计准备阶段(前一周周
六、周日);2.编程调试阶段(周一~周四);3.总结及书写课程实践报告阶段(周五);4.检查验收阶段(时间由指导老师确定)验收地点机房
1.6组织管理良好的组织是课程实践质量的重要保证,在课程实践期间的主要组织工作安排如下1.每人独立完成所选任务,创新性题目可2~3人组成小组,自由组合,小组应指定一名组长2.由班长负责考勤3.指导教师负责指导学生
1.7考核评价根据学生完成情况,结合所选题目的难度及分析解决问题的能力和创新精神,确定成绩等级考核标准包括1.所设计程序的正确性、通用性,全面完成题目的要求(60%);2.课程实践报告(20%)包括系统设计要求,设计思路,系统功能模块图,系统流程图,类的层次图(包括类成员列表),调试过程,关键程序代码,程序设计实践总结,参考书目等最后附源程序代码不符合以上要求者,则本次实践以不及格记;3.平时考勤(20%)提交材料包括1.源程序按照程序设计课程实践的具体要求所开发的所有源程序;2.程序的说明文件(保存在.txt中)在说明文档中应该写明上交程序所在的目录,上交程序的主程序文件名,如果需要安装,要有程序的安装使用说明;3.课程实践报告保存在word文档中,文件名要求按照“姓名-学号-实践报告”起名,如文件名为“张三-0840308112-实践报告.doc”注
(1)程序及报告提交电子稿,发送至指导老师的邮箱(由教师提供)中;
(2)报告除需提交电子稿外,必须每人另提交一份打印件第4章课程实践示例
4.1基础题示例1.任务建立一个类Integer_String,把一个正整数转换为字符串具体要求如下
(1)私有数据成员intnum要转换的正整数char*s用动态空间存储转换得到的字符串
(2)公有成员函数Integer_Stringintn用参数n初始化数据成员numintf求数据成员num的位数voidfun把正整数num转换为字符串svoidshow输出数据成员num和s;~Integer_String释放动态空间
(3)在主函数中对定义的类进行测试用正整数12345初始化类Integer_String的对象test,调用相关成员函数后输出转换结果2.系统设计
(1)任务分析通过类Integer_String的成员函数f求出数据成员num的位数,并以此为依据给数据成员s分配大小适当的动态空间,在成员函数fun()中依次取出num的各位数字并转换成对应字符后存入数据成员s,程序结束前释放为s分配的动态空间类的定义如下classInteger_String{intnum;char*s;public:Integer_Stringint;intf;voidfun;voidshow;~Integer_String;};
(2)算法设计求整数num(设num为正整数)的位数定义变量d(初值为1)表示num(n)的位数,以n10作为循环条件,每循环一次d的值增加一位,n去掉一位(n/=10),循环结束后d的值就是n的位数为保持num的值不变,把其赋给变量n,通过n求num的位数把整数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输出测试结果(整数num和字符串s)主函数定义如下voidmain{Integer_Stringtest=12345;test.fun;test.show;}用以测试的整数为12345预期的输出结果为整数为12345字符串为123454.源程序清单#includeiostream.hclassInteger_String{intnum;char*s;public:Integer_Stringintn{num=n;}intf{intd=1n=num;whilen10{d++;n/=10;}returnd;}voidfun{intn=numlen=f;s=newchar[len+1];forchar*p=s*p1=s;n;p++{*p=n%10+0;n/=10;}*p--=\0;whilep1p{n=*p1*p1=*p*p=n;p1++p--;}}voidshow{cout整数为numendl;cout字符串为sendl;}~Integer_String{delete[]s;}};voidmain{Integer_Stringtest=12345;test.fun;test.show;}第5章课程实践题选
5.1基础题1.试建立一个类PP,求出下列多项式的前n项的值具体要求如下
(1)私有数据成员intn前若干项的项数doublex存放x的值double*p根据n的大小动态申请存放Pnx前n项的数组空间
(2)公有成员函数PPintnumdoublex1构造函数,初始化数据成员n和x,使p指向动态申请的数组空间~PP()析构函数,释放p指向的动态内存空间doublefunintn1doublex递归函数,用于求多项式的第n1项注意将递归公式中的n用作函数参数本函数供process函数调用voidprocess完成求前n项的工作,并将它们存放到p指向的动态数组中voidshow输出n和x,并将前n项以每行4个数的形式输出到屏幕上
(3)在主函数中完成对该类的测试先输入num和x1,并定义一个PP类的对象items,用num和x1初始化items的成员n和x,调用items的成员函数,求出并输出多项式前num项的值2.试建立一个类SP,求,另有辅助函数powermn用于求具体要求如下
(1)私有成员数据intn,k存放公式中n和k的值;
(2)公有成员函数SPintn1intk1构造函数,初始化成员数据n和kintpowerintmintn求mnintfun求公式的累加和voidshow输出求得的结果
(3)在主程序中定义对象s,对该类进行测试3.建立一个类MOVE,不进行排序,将数组中小于平均值的元素放到数组的左边,大于平均值的元素放到数组的右边具体要求如下
(1)私有数据成员floatarray
[20]一维整型数组intn数组中元素的个数
(2)公有成员函数MOVEfloatb[]intm构造函数,初始化成员数据voidaverage输出平均值,并将数组中的元素按要求重新放置voidprint输出一维数组
(3)在主程序中用数据{
1.
36.
239.
14.
87.
45.
69.
22.3}对该类进行测试4.建立一个类MOVE,将数组中最大元素的值与最小元素的值互换具体要求如下
(1)私有数据成员int*array一维整型数组intn数组中元素的个数
(2)公有成员函数MOVEintb[]intm构造函数,初始化成员数据voidexchange输出平均值,并将数组中的元素按要求重新放置voidprint输出一维数组~MOVE析构函数
(3)在主程序中用数据{21654387128444973255}对该类进行测试5.定义一个类Palindrome,实现绝对回文数设计一个算法实现对任意整型数字判断是否为绝对回文数所谓绝对回文数,是指十进制数和二进制数均对称的数具体要求如下
(1)私有数据成员intn整型数字inty标记是否为回文数
(2)公有成员函数Palindromeintx构造函数,根据x参数初始化数据成员n,y初始化为0voidhuiwen判断数n是否为绝对回文数voidshow若该数为回文数,则在屏幕显示
(3)在主程序中定义inta,由键盘输入数字定义一个Palindrome类对象p,用a初始化p,完成对该类的测试6.定义一个字符串类String,实现判断该字符串是否为回文字符串所谓回文字符串,是指该字符串左右对称例如字符串“123321”是回文字符串具体要求如下
(1)私有数据成员char*str;inty标记是否为回文字符串
(2)公有成员函数Stringchar*s构造函数,用给定的参数s初始化数据成员stry初始化为0voidhuiwen判断str所指向的字符串是否为回文字符串voidshow在屏幕上显示字符串
(3)在主程序中定义字符串chars[]=”ababcedbaba”作为原始字符串定义一个String类对象test,用s初始化test,完成对该类的测试7.建立一个类PHALANX,生成并显示一个折叠方阵折叠方阵如下图所示折叠方阵的生成过程为起始数置于方阵的左上角,然后从起始数开始递增,依次折叠构成方阵具体要求如下
(1)私有数据成员int*p
[20]指向按照折叠规律存放方阵的二维整型数组intstartnum折叠方阵的起始数intn存放方针的层数
(2)公有成员函数PHALANXintsintm构造函数,初始化成员数据voidprocess生成起始数为startnum的n行方阵voidprint输出折叠方阵~PHALANX析构函数
(3)在主程序中对该类进行测试8.建立一个MATRIX,生成并显示一个螺旋方阵螺旋方阵如下图所示,起始数置于方阵的左上角,然后从起始数开始依次递增,按顺时针方向从外向里旋转填数而成具体要求如下
(1)私有数据成员inta
[20]
[20]二维整型数组存放螺旋方阵intstartnum螺旋方阵的起始数intn存放方针的层数
(2)公有成员函数MATRIXintsintm构造函数,初始化成员数据startnum和nvoidprocess生成起始数为startnum的n行螺旋方阵voidprint输出螺旋方阵
(3)在主程序中定义MATRIX类的对象t对该类进行测试9.定义一个字符串类CString,并设计一个算法对该串中各个不同字符出现的频率进行统计具体要求如下
(1)私有数据成员char*str指向要统计的字符串char*p
[2]动态分配二维空间,用以存放str所指字符串中出现的字符及其出现的次数(次数在存放时,用该数字对应的ASCII值存放;在输出次数时,输出该ASCII字符对应的ASCII值即可)intsize存放字符串中出现的所有不同的字符的个数
(2)公有成员函数CStringchar*s根据s参数初始化数据成员str;p和size初始值为0voidCount p根据s所指字符串长度分配空间然后把str所指字符串中的每个字符放入p数组中,设置每个字符的出现次数为1根据p数组统计不同字符出现的频率,并求得size的实际大小最后根据size的实际大小,重新分配p所指空间,并把不同字符及其出现次数重新放回p数组(提示可以借助临时数组或指针来实现)voidShow屏幕显示字符串、字符串的每个字符和与之对应的次数~CString释放动态分配的空间
(3)在主程序中定义字符串chars[]=”abdabcdesffffd”定义一个CString类对象test,用s以初始化test,完成对该类的测试10.定义一个字符串类CString,并设计一个算法实现,给定关键字str1在字符串str中出现时用关键字str2进行替换的功能具体要求如下
(1)私有数据成员char*str;原始字符串char*str1;目标关键字char*str2;替换关键字intflag;标记替换是否完成替换
(2)公有成员函数CStringchar*schars1[]char*s2用给定的参数s、s1和s2相对应的初始化数据成员str、str1和str2flag设置缺省0voidReplace判断str字符串中是否出现str1,若出现就用str2替换,否则什么都不做若替换成功了标记flag为1,若替换不成功则标记flag为0voidShow若替换成功,则在屏幕上显示目标关键字、替换关键字和替换后的原始字符串;若不成功则显示原始字符串~CString释放动态分配的空间
(3)在主程序中定义字符串chars[]=”Iamstudentyouarestudenttooweareallstudent.”作为原始字符串,定义chars1[]=”student”作为目标关键字,定义chars2[]=”teacher”作为替换关键字定义一个CString类对象test,用s,s1和s2初始化test,完成对该类的测试11.建立一个STRING,将一个字符串交叉插入到另一个字符串中(假定两字符串等长)例如将字符串“abcde”交叉插入字符串“ABCDE”的结果为“aAbBcCdDeE”或“AaBbCcDdEe”具体要求如下
(1)私有数据成员charstr1
[80]存放被插入的字符串charstr2
[40]存放待插入的字符串
(2)公有成员函数STRINGchar*s1char*s2构造函数,用s1和s2初始化str1和str2voidprocess将str2中的字符串插入到str1中voidprint输出插入后的字符串
(3)在主程序中定义STRING类的对象test对该类进行测试12.建立一个STRING,将一个字符串交叉插入到另一个字符串中(假定两字符串不等长)例如将字符串“abcde”交叉插入字符串“ABCDEFG”的结果为“aAbBcCdDeEFG”或“AaBbCcDdEeFG”具体要求如下
(1)私有数据成员charstr1
[60]存放被插入的字符串charstr2
[40]存放待插入的字符串charstr3
[100]存放插入后的字符串
(2)公有成员函数STRINGchar*s1char*s2构造函数,用s1和s2初始化str1和str2voidprocess将str2中的字符串插入到str1中,存放到str3中voidprint输出插入后的字符串
(3)在主程序中定义STRING类的对象test对该类进行测试13.建立一个类MOVE,对数组中元素进行循环换位,即每个元素后移三位,最后三个元素移到最前面具体要求如下
(1)私有数据成员intarray
[20]一维整型数组intn数组中元素的个数
(2)公有成员函数MOVEintb[]intm构造函数,初始化成员数据voidchange进行循环换位voidprint输出一维数组
(3)在主程序中用数据{21654387128444973255}对该类进行测试14.建立一个类MOVE,实现将数组中大字字母元素放在小写字母元素的左边具体要求如下
(1)私有数据成员char*array一维字符数组intn数组中元素的个数
(2)公有成员函数MOVEcharb[]intm构造函数,初始化成员数据voidchange进行排序换位voidprint输出一维数组~MOVE析构函数
(3)在主程序中用数据fdsUFfsTjfsKFEkWC对该类进行测试15.定义一个一维数组类Carray,并根据给定算法实现对原始一维数组进行线性变换这里给定的线性变换算法为Tbx=bTx+i;其中,b为变换常量,x为变量,i为当前类中成员数组的下标值根据该算法,原始数组在变化后,当前数组元素的值是由常量b和i下标来决定的具体要求如下
(1)私有数据成员int*a指针a指向一个动态分配的原始数组intn n表示该数组的大小intb线性变换的常量
(2)公有成员函数Carrayinta[]intnintx用给定的参数a、n和x初始化数据成员a、n和b缺省都设置为0voidTransform根据上述变化算法,求解数组变换voidShow在屏幕上显示数组元素~Carray释放动态分配的空间
(3)在主程序中定义数组intarr[]={12345678910}作为原始数组,intb;由键盘输入,作为线性变换的常量定义一个Carray类对象test,用arr初始化test,完成对该类的测试16.定义一个方阵类CMatrix,并根据给定算法实现方阵的线性变换方阵的变换形式为F=W*fTf为原始矩阵,fT为原始矩阵的转置,w为变换矩阵,这里设定为1001011001101001具体要求如下
(1)私有数据成员int*a
[4]a指向方阵数组intw
[4]
[4]w为变换矩阵intm m表示方阵的行和列数
(2)公有成员函数CMatrixinta[]
[4]intm用给定的参数a和m初始化数据成员a和m;对变换矩阵w进行初始化,要求必须用循环实现voidTransform根据上述变换算法,求出变换后的数组形式,存放在原始数组内voidshow在屏幕上显示数组元素~CMatrix释放动态分配的空间
(3)在主程序中定义数组intarr[]
[4]={12345678910111213141516}作为原始数组定义一个CMatrix类对象test,用arr初始化test,完成对该类的测试17.定义一个类SIN,求具体要求如下
(1)私有成员数据intx输入公式中x的值,求sinxintn输入公式中n的值
(2)公有成员函数SINintxintn构造函数,用于初始化x和n的值intpowerintq求q!的值intmiintmintn求的值intfun用于求SINX的值voidshow输出求得的结果
(3)在主程序中定义对象test,对该类进行测试18.试建立一个类VAR,用于求n()个数的均方差均方差的计算公式为,其中平均值为具体要求如下
(1)私有成员数据doublea
[100]用于存放输入的n个数intn实际输入数的个数n
(2)公有成员函数VARdoublex[]intn1构造函数,初始化成员数据a和个数ndoubleaveragedoublex[]intn求平均值,数组x具有n个元素voidvariancedoublex[]intn求均方差,数组x具有n个元素voidshow输出求得的均方差
(3)在主程序中定义一个对象test,对该类进行测试19.定义一个方阵类Array,实现对方阵进行顺时针90度旋转如图所示具体要求如下
(1)私有数据成员inta
[4]
[4]用于存放方阵
(2)公有成员函数Arrayinta1[]
[4]intn构造函数,用给定的参数a1初始化数据成员avoidxuanzhuan实现对方阵a进行顺时针90度的旋转voidshow在屏幕上显示数组元素
(3)在主程序中定义数组intb[]
[4]={12345678910111213141516}作为原始数组定义一个Array类对象test,用b初始化test,完成对该类的测试20.定义一个方阵类Array,实现对方阵进行逆时针90度旋转如图所示1234481216567837111591011122610141314151615913具体要求如下
(1)私有数据成员inta
[4]
[4]用于存放方阵
(2)公有成员函数Arrayinta1[]
[4]intn构造函数,用给定的参数a1初始化数据成员avoidxuanzhuan实现对方阵a进行逆时针90度的旋转voidshow在屏幕上显示数组元素
(3)在主程序中定义数组intb[]
[4]={12345678910111213141516}作为原始数组定义一个Array类对象test,用b初始化test,完成对该类的测试21.建立一个类NUM,求指定数据范围内的所有合数(非质数)提示合数定义是“一个数,除了1和它本身,还有其它约数,这样的数叫合数”具体要求如下
(1)私有数据成员int*data动态存放在指定范围内求出的所有合数intspan1span2存放指定范围的下限和上限intnum存放span1与span2之间的合数个数
(2)公有成员函数NUMintn1intn2构造函数,用参数n1和n2初始化span1和span2,同时初始化numintisCompositeintx判断x是否为合数若是合数,返回1,否则,返回0voidprocess求指定范围内的所有合数,把它们依次存放在数组data中,并将求出的合数个数赋给numvoidprint输出求出的素数个数及所有合数,每行输出8个合数~NUM释放动态分配的存储空间
(3)在主函数中完成对该类的测试定义一个NUM类对象test,指定查找范围为100~200,即求100至200之间的所有合数通过test调用成员函数完成求合数及输出合数的工作22.建立一个类Saddle_point,求一个数组中的所有鞍点提示鞍点是这样的数组元素,其值在它所在行中为最大,在它所在列中为最小具体要求如下
(1)私有数据成员inta
[4]
[4]存放二维数组元素intb
[4]
[4]存放二维数组中的鞍点值intnum存放鞍点个数
(2)公有成员函数Saddle_pointintdata[]
[4]构造函数,用参数intdata[]
[4]初始化数组a,同时初始化数组b与num的值均为0voidprocess求数组a所有鞍点(如果有鞍点),把它们行、列、及值相应存放在数组b中,并将求出的鞍点个数赋给numvoidprint输出数组a、鞍点个数,与鞍点坐标及相应值
(3)在主程序中定义数组intb[]
[4]={2634565557671927}作为原始数组定义一个Saddle_point类对象fun通过fun调用成员函数完成求鞍点及输出工作23.分数相加,两个分数分别是1/5和7/20,它们相加后得11/20方法是先求出两个分数分母的最小公倍数,通分后,再求两个分子的和,最后约简结果分数的分子和分母(如果两个分数相加的结果是4/8,则必须将其约简成最简分数的形式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)私有数据成员intnum,den num为分子,den为分母
(2)公有成员函数Fract(inta=0intb=1)构造函数,用a和b分别初始化分子num、分母denintged(intm,intn)求m、n的最大公约数此函数供成员add函数调用Fractadd(Fractf)将参数分数f与对象自身相加,返回约简后的分数对象voidshow按照num/den的形式在屏幕上显示分数
(3)在主程序中定义两个分数对象f1和f2,其初值分别是1/5和7/20,通过f1调用成员函数add完成f1和f2的相加,将得到的分数赋给对象f3,显示分数对象f324.建立一个类NUM,并统计特定序列中相同的数字的个数具体要求如下
(1)私有数据成员intdata
[25]随机生成25个在0-9之间的数字intnum
[10]储存每个数字出现的个数
(2)公有数据成员NUMintdata构造函数,初始化数组datavoidprocess统计数组data中每个数字出现的个数,并保存到数组num中voidprint输出每个数字出现的个数,每行输出5个
(3)在主程序中定义一个对象,对该类进行测试25.建立一个类NUM,并统计特定序列中相同的字符的个数具体要求如下
(1)私有数据成员chardata
[25]随机生成25个字符intnum
[128]储存每个字符出现的个数
(2)公有数据成员NUMintdata构造函数,同时初始化数组datavoidprocess统计数组data中每个字符出现的个数,并保存到数组num中voidprint输出每个出现过的字符及其出现的个数,每行输出5个,没有出现过的字符不显示
(3)在主程序中定义一个对象,对该类进行测试26.建立一个类NUM,随机生成25个字符序列,并为特定序列进行排序具体要求如下
(1)私有数据成员intdata
[25]随机生成25个字符
(2)公有数据成员NUMintdata构造函数,初始化数组datavoidprocess为数组data进行排序,要求按照ASCII码进行升序排列voidprint输出数组data,每行输出5个字符
(3)在主程序中定义一个对象,对该类进行测试27.建立一个类NUM,求指定数据范围内的所有素数(质数)提示素数定义是“只能被1和它本身整除的整数”,即质数具体要求如下
(1)私有数据成员intdata
[10]依次存放原始数据intprime
[10]存放指定数据内所求出的所有素数intnum存放素数个数
(2)公有数据成员NUMintn[]构造函数,用参数n初始化data,同时初始化num为0intisprimeintx判断x是否为素数若是素数,返回1,否则,返回0voidprocess求指定data数组中的所有素数,把它们依次存放在数组prime中,并将求出的素数个数赋给numvoidprint输出求出的素数个数及所有素数,每行输出4个素数
(3)在主函数中完成对该类的测试定义NUM类对象test,通过test调用成员函数完成求素数及输出素数的工作原始数据为{4591136293110156199}28.编程实现对大于1的整数进行质因数分解,并求出其和所谓整数的质因子分解是指将整数分解为其所有质数(素数)因数的积,例如,60=2*2*3*5,则整数60的质因数之和为12定义一个类Decompose实现上述功能具体要求如下
(1)私有数据成员int*a指向存放对应整数的质因数之和的动态存储空间int*num指向待分解质因数整数的动态存储空间intn整数的个数
(2)公有数据成员Decomposeintm,intb[]用m初始化n,并用n初始化为动态申请空间的指针a与num用参数b给数组a赋值voidprint输出数组a以及num所指向的存储空间中的内容voidprimenum求整数a[i]的所有质因数(保留重复部分,例如60的质因数为2235,之和为12),并将这些质因数之和存放到指针num所指向的存储空间中~Decompose释放动态分配的存储空间
(3)在主函数中完成对该类的测试从键盘输入一组大于1的整数,存放在number数组中,定义类Decompose的对象d,并用number初始化d,调用函数primenum求number的所有质因数,最后输出测试结果29.建立一个类SUM,输入5×5的二维数组,编写程序实现求出两对角线上各元素的和,求出对角线上行、列下标均为偶数的各元素的积,找出对角线上其值最大的元素以及它在数组中的位置具体要求如下
(1)私有数据成员intarray
[5]
[5]二维整型数组ints数组array两对角线元素的和inta数组array对角线上行、列下标均为偶数的各元素的积intbmn数组array对角线上其值最大的元素以及它在数组中的位置
(2)公有成员函数SUMintd
[5]
[5]构造函数,初始化成员数据voidprocess1求二维数组两对角线元素的和voidprocess2求二维数组两对角线上行、列下标均为偶数的各元素的积voidprocess3求二维数组两对角线上其值最大的元素和它在数组中的位置voidprint输出二维数组(每行输出5个元素)及其它所求的值
(3)在主程序中对该类进行测试30.建立一个矩阵类Array,对二维数组中左下三角的全部元素(包括对角线上的元素)作如下变换
(1)若该数不是素数则保持不变;
(2)若该数是素数,则用大于它的最小素数替换该数并统计二维数组中左下三角的全部元素(包括对角线上的元素)中的素数个数具体要求如下
(1)私有数据成员intx
[4]
[4]存储需要处理的二维数组的各元素值intcount存储左下三角元素中素数的个数
(2)公有成员函数构造函数进行初始化x数组和count的值intfunint;判断一个数是否为素数的函数intencode对x数组中左下三角的全部元素(包括对角线上的元素)逐一进行判断,若该数不是素数则保持不变,若该数是素数,则用大于它的最小素数替换该数voidprint按行输出矩阵的值
(3)编写一个程序测试该类,说明(声明)Array对象A,将一个矩阵存入对象A中,并输出矩阵的值,使用以下测试数据364175641785910变换后的矩阵为879101219720122311204142123414212931.建立一个类SUM,实现m行k列矩阵与k行n列矩阵的乘积设A为m行k列的矩阵,B为k行n列的矩阵,则C=A×B具体要求如下constintm=3;constintk=4;constintn=3;
(1)私有数据成员intA[m][k]存放m行k列矩阵intB[k][n]存放k行n列矩阵int*C[n]指向乘积矩阵
(2)公有成员函数构造函数初始化成员数据析构函数收回行指针voidprocess求矩阵的乘积voidprint输出各二维数组(按行列形式)
(3)在主程序中对该类进行测试32.建立一个类SUM,使用二维数组输入“Followme”,“BASIC”,“Greatwall”,“Fortran”,“Pascal”,将它们按从小到大的顺序排列后输出具体要求如下
(1)私有数据成员int*p
[5]存放二维数组每行的字符串的地址
(2)公有成员函数SUMintd
[5]
[5]构造函数,初始化成员数据voidprocess1对二维数组中存放的字符串进行排序voidprint输出二维数组中排好序的字符串
(3)在主程序中对该类进行测试33.建立一个类Integer_String,把一个正整数转换为字符串具体要求如下
(1)私有数据成员intnum要转换的正整数char*s用动态空间存储转换得到的字符串
(2)公有成员函数Integer_Stringintn用参数n初始化数据成员numintf求数据成员num的位数voidfun把正整数num转换为字符串svoidshow输出数据成员num和s;~Integer_String释放动态空间
(3)在主函数中对定义的类进行测试用正整数12345初始化类Integer_String的对象test,调用相关成员函数后输出转换结果34.建立一个类String_Integer,把一个字符串中的数字字符转换为正整数具体要求如下
(1)私有数据成员char*s用动态空间存放字符串
(2)公有成员函数String_Integerchar*str用参数str初始化数据成员soperatorint转换函数,数据成员s转换整数并返回该数voidshow输出数据成员s~String_Integer释放动态空间
(3)在主函数中对定义的类进行测试定义字符数组,把由键盘输入的字符串“ab123c00d45ef”存入数组,并用该数组初始化类String_Integer的对象test,调用show函数输出test的数据成员s,然后把对象test赋值给整型变量n并输出,转换结果如下所示(下划线部分是从键盘输入的内容)请输入字符串ab123c00d45ef ab123c00d45ef字符串为ab123c00d45ef转换得到的整数为123004535.建立一个类Union求两个整数集合的并集具体要求如下
(1)私有数据成员int*set1len1用动态空间set1存储集合1,len1表示其元素的个数int*set2len2用动态空间set2存储集合2,len2表示其元素的个数intset
[20]len用数组空间set存储并集,len表示其元素的个数
(2)公有成员函数Unionint*s1intl1int*s2intl2用变量s1和l1初始化集合1及其长度,用变量s2和l2初始化集合2及其长度,并把并集的长度置为0;intfintnum判断整数num是否属于集合1,是返回1,否则返回0;voidfun求集合1和集合2的并集,方法是先把集合1中的所有元素复制给并集,然后调用f函数把集合2中不属于集合1的元素复制给并集;voidshow输出集合
1、集合2和并集;~Union释放动态空间
(3)在主函数中对定义的类进行测试定义数组s1{12345678}、s2{1357911},并用它们初始化类Union的对象obj,然后调用相关的成员函数,求并集,输出集合
1、集合2和并集36.建立一个类Intersection求两个整数集合的交集具体要求如下
(1)私有数据成员intset
[20]用数组空间set存储集合intlen表示该集合中元素的个数
(2)公有成员函数Intersectionint*sintl用s初始化集合,用变量l初始化其长度Intersection把set中各元素和长度初始化为0intfintnum判断整数num是否属于集合,是返回1,否则返回0;IntersectionoperatorIntersectiont重载,求当前对象的集合和参数对象t的集合的交集,方法是用对象t的集合中的每个元素作为参数调用f函数,若该元素属于当前对象的集合,则把它复制给交集voidshow输出集合
(3)在主函数中对定义的类进行测试定义数组s1{134578}、s2{12357911},并用它们初始化类Intersection的对象obj1和obj2,然后调用相关的成员函数输出集合;定义对象obj3,并用obj1和obj2的与运算符结果(交集)初始化该对象,并输出交集37.建立一个类NUM,为特定序列进行排序,并多次重复以统计每个数字出现的概率具体要求如下
(1)私有数据成员intdata
[25]随机生成25个10000以内的整数,不能出现重复的数字
(2)公有数据成员NUM构造函数,初始化数组datavoidprocess为数组data进行排序,要求升序排列,使用排序算法不限voidtimes充分多(自行输入,大于100)次调用构造函数,统计每个数字出现的概率,每行输出一个数字的出现概率与它出现的数学期望,并验证大数定理voidprint输出数组data,每行输出5个数字
(3)在主程序中定义一个对象,对该类进行测试提示
①可能需要的库函数及其用法n*rand/RAND_MAX+
1.0生成一个0-n之间的伪随机数,需要头文件stdlib.h支持srandinttime0;不断重置某些函数(例如rand),需要头文件time.h支持)
②大数定理的验证只要所有数字的出现概率除以数学期望的商在
0.95-
1.05之间,便可以认为在5%误差范围内验证了大数定理的正确性38.建立一个类Sample,对数组中元素用选择法进行升序排序排序函数定义到Sample类的友元类Process中具体要求如下类Sample#defineMax100;
(1)私有数据成员intA[MAX]一维整型数组,存放需要排序的数intn需要排序的数的个数
(2)公有成员函数Sample构造函数,初始化成员数据n,初始值为0友元类Process公有成员函数voidgetdataSamples从键盘输入数据,对数组A进行赋值voidselectsortSamples对数组A中的元素进行升序排序voiddispSamples输出数组中的元素
(3)在主程序中定义对象对该类进行测试
5.2提高题1.为某高校的学籍和成绩管理设计一系统要求建立的数据有
(1)学生类,包含班级号、学号、姓名、专业等成员;
(2)学生成绩类,包含班级号、学号,课程名,成绩等成员完成下列功能首先输入学生数据及成绩数据,再根据提示分别实现查找功能其中函数Xslr负责学生数据录入;函数Cjlr负责成绩数据录入;函数Look1负责根据姓名查找学生的基本信息和成绩信息;函数Look2负责根据班级列出学生的基本信息;函数Dayin1负责依据班级输出满足条件的学生的基本情况;函数Dayin2负责输出某一同学的成绩单创新要求自设计界面,要求美观、方便,还可自增加功能,如依据不同的条件排序后输出等程序执行情况如下所示*****************请输入学生数据班级号为-1结束******************请输入班级号1请输入学号1请输入姓名王平请输入专业计算机科学请输入班级号2请输入学号1请输入姓名李丽请输入专业通信工程请输入班级号1请输入学号2请输入姓名刘红请输入专业计算机科学请输入班级号-12.设计一个电子通信录其中包括如下类
(1)通信地址类addr包含公有数据成员charpost
[10];//邮编成员charad
[40];//家庭地址构造函数addrcharp
[10]=chara
[40]=;成员函数voidsetaddaddra;//用a为当前对象赋值
(2)出生年月类birth包含公有数据成员intyear;//年份成员intmonth;//月份成员intday;//日期构造函数birthinty=0intm=0intd=0;成员函数voidsetbirbirthb;//用b为当前对象赋值
(3)类friends包含数据私有成员intnumber;//序号私有成员charname
[20];//姓名私有成员charsex;//性别私有成员chartelephone
[13];//联系电话公有成员birthbir;//出生年月公有成员addradd;//通信地址公有构造函数friendsintnu=0charn
[20]=chars=inty=0intm=0intd=0charp
[10]=chara
[40]=chart
[13]=;公有成员函数voidsetfriintnucharn
[20]charsbirthbaddrachart
[13];//为当前对象赋值公有成员函数friendsinputfriendsbb;//为对象bb输出数据公有成员函数intsearchfriendsaa
[100]charn
[20];//在aa中查找姓名为n的对象公有成员函数voidshowfriendsaa;//输出对象aa公有成员函数voiddeletfriendsaa
[100]intk;//在aa中删除下标为k的元素
(4)在主函数中完成主菜单的设计,并根据输入值完成所需操作创新要求自设计界面,要求美观、方便,还可自增加功能,如依据不同的条件排序后输出等程序执行后主菜单如下1.输入数据2.输出数据3.查找数据4.删除数据5.退出请选择(1~5)3.设计一个停车场管理系统具体要求如下
(1)停车场有若干停车位(为说明问题,假定为3个),每个位置可以存放不同种类的的汽车,包括卡车Truck,客车Carriage和小轿车Car,但同一时刻一个位置只能存放0或1辆汽车
(2)管理系统模拟实际车辆停车的情况新来车辆时如果有空位,按顺序为该车分配停车位;车辆开走时,交纳相应停车费;统计各类车辆的数量
(3)定义描述停车场的类Park,其中有3个位置用于存放各类车辆
(4)定义基类Automobile,至少包括纯虚函数Pay用于显示车辆信息并交纳相应停车费
(5)定义派生类TruckCarriage和Car,这些车辆除了拥有车牌号(字符串)、车辆已使用年数(整数)之外,Truck还拥有载重量(浮点数,单位吨)属性,Carriage还拥有乘坐人数(整数,单位人)属性,Car还拥有排气量(浮点数,单位L)属性具体实现上述纯虚函数Pay,显示每类车辆的相应信息,并给出计价提示,其中Truck收费2元/小时,Carriage收费
1.5元/小时,Car收费1元/小时
(6)重载输入“”操作符,使得可以通过cin直接读入每类车辆的相应信息
(7)编写main函数,测试上述所要求的各种功能,即根据菜单命令为新来车辆分配停车位、开走车辆(输入车位编号)时付费、显示停车场中各类车辆的数量程序执行情况如下所示欢迎使用本系统本系统包含的功能如下1为新来车辆分配停车位2开走车辆3统计各类车辆的数量0退出系统请选择1a为卡车分配停车位b为客车分配停车位c为小轿车分配停车位请选择a请输入车牌号1111请输入使用年份2001请输入载重量5请输入放车时间10该车辆已加入4.设计一个一元稀疏多项式简单计算器要求
(1)输入并建立多项式;
(2)输出多项式,输出形式为整数序列c1*x^e1+c2*x^e2+…+cn*en,其中ci和ei分别是第i项的系数和指数,序列按指数降序排列;
(3)两个多项式相加,建立并输出和多项式;
(4)两个多项式相减,建立并输出差多项式;
(5)删除多项式;
(6)用带表头结点的单链表存储多项式,多项式的项数n存放在头结点中程序执行结果如下所示1.建立多项式2.输出多项式3.求两个多项式之和(必须先创建),建立和式并输出4.求两个多项式之差(必须先创建),建立差式并输出5.删除多项式6.退出请选择指令1请输入要创建的多项式的名称(单个小写字母表示)a请输入项数2请按照指数递减序输入最简形式的多项式请输入第1项的系数和指数(系数,指数)23请输入第2项的系数和指数(系数,指数)-11多项式a创建完毕!5.设计一个求二个大整数四则运算的类要求
(1)类中分别含放二个运算数及位数、运算结果的私有成员;
(2)公有成员函数包括构造函数和析构函数;接受数据的函数;和函数;差函数;积函数;余函数;显示函数;清零函数等运行结果如下Pleaseenterone1234567Pleaseentertwo2345678one+two=3580245one-two=-1111111one*two=28958966514266.设计一个大学师生类,包括学生类(Student),教师类(Professor),职员类(Staff)教师类是职员类的派生类另有一类既作为学生又兼做助教的,可作为学生类和职员类的派生类(StudentStaff)另外定义一个所有类的父类DataRec具体要求如下
(1)DataRec类中数据成员有姓名、家庭住址,定义为指针变量成员函数有构造函数、析构函数,输出函数和strsave函数输出函数定义为虚函数strsave函数用来动态申请内存空间,拷贝参数中的字符串,返回内存空间的首地址因为所有的派生类都要用到,设置为保护权限
(2)Student类数据成员有专业、学号,专业定义为指针变量Staff类数据成员有部门、计时薪酬,部门定义为指针变量Professor类数据成员有工资,这三个类都有输出函数,用来输出自己的数据成员
(3)StudentStaff类多重继承学生类和职员类成员函数有输出函数
(4)DataRec类可以定义为虚基类
(5)每个类中数据成员定义为私有的
(6)编写main函数,测试上述所要求的各种功能测试结果如下所示WangVi运河路Major ComputerscienceIdnumber8401031LiXin北京路Department ElectricalEngineerhourlywage
16.5zhangXi南京路Department Computersciencehourlywage0Salary3000WangXi乌鲁木齐路Major ComputerscienceIdnumber8401032Department ElectricalEngineerhourlywage
5.87.设计一个员工管理系统具体要求如下
(1)分三个部门培训处、行政处、品管处,员工分为正式员工和准员工
(2)定义部门类Department,其中包含增加员工的函数Add(intnum)(可以增加新的正式员工或准员工,这里num为需要增加的员工数);按照在职员工姓名实现离职的函数Quitchar*name;(这里name表示要离职的员工的名字,查找部门所有员工,若找到就删除该员工信息);按照在职员工姓名查询员工情况的函数Searchchar*name;(根据name查找部门中是否有这个员工,有就显示该员工的所有信息在职员工的姓名、性别、年龄、职位、部门等等);Show函数显示当前部门所有员工信息,员工数量等情况每个部门的信息有部门名称char*officename,部门中的正式员工数emp_num,部门中的准员工数stu_num,正式员工链表的头指针h_emp,非正式员工链表的头指针h_stu
(3)定义员工类Worker,包含属性姓名、性别、年龄等;获取这些属性的成员函数char*GetName;char*GetSex;intGetAge;char*GetPosition;等
(4)从基类Worker中派生正式员工类Employee、准员工类Student,其中准员工有在职期限属性,正式员工有工资属性;ShowMe函数显示员工姓名、性别、年龄、职位、部分,以及正式员工的工资,准员工的在职期限;正式员工新增floatGetSalary;函数获取薪水;准员工新增char*GetTime;函数获取试用期
(5)编写main函数,测试上述所要求的各种功能,即可以根据菜单命令增加、离职和查询各类员工,其中的员工可以是正式员工和准员工提示每个部门的员工可采用链表形式存放,如下图所示程序执行界面如下图所示请为培训处增加二名员工!请部是否要增加正式员工还是非正式员工?提示输入Y表示正式员工,输入N表示非正式员工y请设置正式员工的属性姓名张三性别男年龄21薪水1234职位助理8.设计一个程序对电文中的英文字母进行加密和解密,加密算法是大写英文字母循环后移10位,小写英文字母循环前移10位,其他字符保持不变,如A变为K,a娈为q,循环后移是指Z的下一个字母为A,循环前移是指a的下一个字母为z程序具体要求如下
(1)定义类Message,表示原电文保护的数据成员char*s://表示电文;公有成员函数构造函数Messagechar*p用p初始化s;析构函数~Message释放s的动态空间;
(2)定义类Message的公有派生类Encrypt,对原电文进行加密新增私有的数据成员char*str;//表示加密后的电文;公有成员函数构造函数Encryptchar*p用p初始化原电文s,并为密文str分配动态空间;voidfun对原文加密得到密文,即根据s求str;voidshow输出原文和密文;operatorchar*把Encrypt的对象转换成密文字符串;析构函数~Encrypt释放str的动态空间;
(3)定义类Message的公有派生类Decrypt,对加密后的电文进行解密新增私有的数据成员char*str;//表示解密后的电文;公有成员函数构造函数Decryptchar*p用p(Encrypt类对象的数据成员str)初始化密文s,并为解密后的电文str分配动态空间;voidfun对密文进行解密,即根据s求str;voidshow输出密文和原文;析构函数~Decrypt释放str的动态空间;
(4)在主函数测试定义的类从键盘输入一个字符初始化Encrypt类的对象e,并调用其成员函数输出原文和密文,然后用e初始化Decrypt类的对象d,并调用其成员函数输出密文和原文本程序运行结果如下所示请输入一个字符串IamTom8:00tonightatthegatetosee.原文为IamTom8:00tonightatthegatetosee.密文为SqcDec8:00jedywxjqjjxuwqjujeiuu.密文为SqcDec8:00jedywxjqjjxuwqjujeiuu.解密后为IamTom8:00tonightatthegatetosee.9.设计一组图形类,包括球体类(Globe),圆柱体类(Circular_Column),长方体类(Rectangular)其中长方体类(Rectangular)继承自圆柱体类(Circular_Column),而圆柱体类(Circular_Column)继承自球体类(Globe)另外定义一个所有类的父类图形类(Sharp)具体要求如下
(1)长方体类(Rectangular)中数据成员有长、宽、高,最终使用一个函数fun输出该图形为长方体,以及此长方体的长、宽、高、体积、表面积
(2)圆柱体类(Circular_Column)中数据成员有半径和高最终使用一个函数fun输出该图形为圆柱体,以及此圆柱体的半径、高、体积、表面积
(3)球体类(Globe)中数据成员有半径最终使用一个函数fun输出该图形为球体,以及此球体的半径、体积、表面积
(4)图形类(Sharp)有两个函数,一个为输出的fun,另一个为图形变化函数Change一旦图形变化函数Change的返回值为0,则变成球体;一旦为1,则变成圆柱体;一旦为2,则变成长方体
(5)每个类中数据成员按需求定义为私有(Private)或者的受保护(protected)
(6)编写一个函数Shape_Change,生成若干个球体、圆柱体或者长方体,随机生成该图形所需要的参数(都为1-10之间的整数),并输出其对应类中函数fun应当输出的内容直到连续生成3个同种图形为止
(7)编写main函数,调用函数Shape_Change,以实现整个程序说明
(1)本程序中的圆周率π需要被宏定义,且至少精确到小数点后5位
(2)本程序中可能需要的几个公式V球体=4*π/3*r*r*rS球体=4*π*r*rV圆柱体=π*r*r*hS圆柱体=2*π*r*r+hV长方体=a*b*cS长方体=2*a*b+b*c+c*a执行结果如下该图形为长方体它的长为7它的宽度为1它的高为8它的体积为56它的表面积为142该图形为长方体它的长为1它的宽度为6它的高为7该图形为圆柱体它的半径为10它的高为4它的体积为
1256.64它的表面积为
879.645该图形为球体,它的半径为4它的体积为
268.082它的表面积为
201.06210.设计一个程序通过虚函数求长方形的面积和长方体的表面积,具体要求如下
(1)定义长方形类Rectangle保护的数据成员intlw;//表示长方形的长和宽ints;//表示长方形的面积公有的构造函数Rectangleintxinty:初始化长方形的长和宽;公有的虚函数virtualvoidfun:求长方形的面积;virtualvoidshow:输出长方形的长、宽和面积
(2)定义长方形类A的公有派生类Cuboid,表示长方体类私有的数据成员inth;//表示长方体的高公有的构造函数Cuboidintxintyintz:初始化长方体的长、宽和高公有函数voidfun:求长方体的表面积;voidshow:输出长方体的长、宽、高和表面积
(3)在主函数中对定义的类进行测试,要求定义长方形对象a1(长为2,宽为3),长方体对象b1(长、宽、高分别为2,3,4),通过基类的指针p分别求长方形的面积和长方体的表面积,输出数据成员,并体现运行的多态性程序运行结果如下长方形的长为2,宽为3,面积为6长方体的长为2,宽为3,高为4,表面积为5211.设计一个程序,查询2000年1月1日(星期六)后的某天是星期几,具体要求如下
(1)定义函数intleapintyear判断某年year是否为润年能够被400整除,或者能够被4整除但不能衩100整除的年份是润年
(2)定义函数intfintyintmintdint*m1int*m2判断输入的日期是否合法,其中y、m、d分别表示年、月、日,m1表示非润年每月的天数,m2表示润年每月的天数
(3)定义类date,表示日期私有数据成员intyearmonthday;//分别表示某年某月某日公有成员函数dateintyintmintd构造函数,用形参分别初始化数据成员;intget_year访问私有成员year;intget_month访问私有成员month;intget_day访问私有成员day;voidshow以指定格式输出数据成员
(4)定义类week,判断某天是星期几私有数据成员dated1;//日期类的对象,表示某日intm1
[12];//存储非润年每月的天数312831303130313130313031intm2
[12];//存储润年每月的天数312931303130313130313031intw;//表示用0表示星期天,1表示星期一,以此类推6表示星期六公有成员函数weekintyintmintdint*p1int*p2构造函数,用ymd初始化日期,用p1p2分别初始化m1,m2;intdays计算d1距2000年1月1日的时间间隔(天数);voidfun根据days的计算结果判断d1是星期几(求以0~6表示w的值);voidprint输出判断结果
(5)在主函数中对定义的类进行测试从键盘输入一个日期,并检查输入数据的合法性,然后用输入的数据和表示每月天数的数组初始化week类的对象w,调用相关成员函数,输出判断结果程序运行结果如下请输入要查询的日期(年月日)20099152009/9/15,是星期二12.设计一个程序通过虚函数实现不同进制整数之间的转换十进制整数转换成R进制整数的方法是除R取余如
(12345)10=
(30071)812345÷8=
1543...11543÷8=
192......7192÷8=
(12345)8=(1×84+2×83+3×82+4×81+5×80)10R进制整数之间的相互转换可通过二进制数为媒介八进制整数转换为二进制数的方法是1位变3位,十六进制整数转换为二进制数的方法是1位变4位如
(12345)8=
(001010011100101)2
(1)8=
(001)2
(2)8=
(010)2
(3)8=
(011)2
(4)8=
(100)2
(5)8=
(101)2二进制数转换为八进制整数的方法是3位变1位(不足以0补齐),转换为十六进制整数的方法是4位变1位(不足以0补齐)如
(001010011100101)2=
(0001010011100101)2=(14E5)16
(0001)2=
(1)16
(0100)2=
(4)16
(1110)2=(E)16
(0101)2=
(5)16程序的具体要求如下
(1)定义十进制整数转换成的R进制数的类DEC_R保护的数据成员intnum;//表示十进制整数intm;//表示要转换的数的进制charr
[20];//保存转换结果(m进制数)公有的成员函数DEC_Rintm1intn=0:用m1初始化进制m,用n初始化十进制整数num;virtualvoidfun:把十进制整数转换成m进制数(求数组r);virtualvoidshow:输出十进制整数和转换成的m进制数
(2)定义类DEC_R的公有派生类R_DEC,把R进制整数转换成十进制数,派生数据成员的含义不变公有的成员函数R_DECchar*pintm1:用p初始化m进制数,用m1初始化进制m,十进制数num初始化为0;intfintnintk求位权(n的k次方);voidfun把m进制数(数组r)转换成十进制数(求num);voidshow:输出m进制数和转换成的十进制整数
(3)定义类DEC_R的公有派生类R_R,实现R1进制整数和R2进制数之间的互换,派生成员num表示已知数的进制R1,m表示未知数的进制R2,r表示媒介二进制数新增私有的数据成员charr1
[10];//存放已知的R1进制整数charr2
[10];//存放未知的R2进制整数(要求的数)公有函数R_Rintm2intm1char*p用m2初始化进制m,用m1初始化进制num,用p初始化r1;intf1intk求基数2的位权(2的k次方);char*f2charsintj把1位R进制数(字符s)转换为j位二进制数(动态字符数组),并返回该二进制数;voidf3char*binchar*R2intk把二进制数(字符数组bin)转换为R2进制数(字符数组R2),k位转1位;voidfun把num进制数(数组r1)转换成m进制数(求数组r2);voidshow:输出num进制整数和转换成的m进制数
(4)在主函数中对定义的类进行测试定义类DEC_R的对象d
1、d2和d3,分别把十进制数23456转换成二进制、八进制和十六进制数;定义类R_DEC的对象r
1、r2和r3,分别把二进制数
101101110100000、八进制数55640和十六进制数5BA0转换成十进制数;定义类R_R的对象rr1,把八进制数12345转换为十六进制数,类R_R的对象rr2,把十六进制数14E5转换为八进制数用类DEC_R的指针p实现上述操作,体现运行的多态性程序运行结果如下所示十进制数为23456,其对应的2进制数为101101110100000十进制数为23456,其对应的8进制数为55640十进制数为23456,其对应的16进制数为5BA02进制数为101101110100000,其对应的十进制数为234568进制数为55640,其对应的十进制数为2345616进制数为5BA0,其对应的十进制数为234568进制数为12345,其对应的16进制数为14E516进制数为14E5,其对应的8进制数为1234513.定义如下类
(1)类Fruit,含有一个公有虚函数char*identify,返回字符串“水果”;
(2)类Tree,含有一个公有虚函数char*identify,返回字符串“树”;
(3)类Apple,由类Fruit及类Tree公有继承,含有一个公有成员函数char*identify,返回字符串“苹果树是水果树”;一个公有虚函数voidshow,调用成员函数char*identify;
(4)定义类Pear,由类Fruit及类Tree公有继承,含有一个公有成员函数char*identify,返回字符串“梨树是水果树”;一个公有虚函数voidshow,调用成员函数char*identify;
(5)定义类Apple_Pear,由类Apple及类Pear公有继承,含有一个公有成员函数voidshow,分别调用类Apple和类Pear的成员函数char*identify;定义一个函数voiddisplayApple*p,用指针p调用函数show;在主函数中,定义类Apple_Pear的对象applePear,用对象调用成员函数show,并作为函数display的参数调用该函数程序执行结果如下所示Apple_Pear苹果树是水果树,梨树是水果树Apple_Pear苹果树是水果树,梨树是水果树14.编写电话薄管理程序该程序是一个电话薄管理小程序,具有加入、删除、显示和查询联系人电话号码等功能具体要求如下
(1)电话薄记录按姓名排序存放,显示时每屏不超过20个记录,超过时分屏显示;
(2)增加记录修改功能,能选择个性用户的姓名、电话,在个性或删除之前需要用户进一步确认,确认无误后再进行操作;
(3)增加录入时间的显示及存储;
(4)增加默认的查询方式,即查询时只输入姓名的首字母,所有符合这一条件的电话资料均在屏幕上显示程序执行结果如下所示欢迎进入电话薄数据系统1.添加电话薄记录2.显示电话薄内容3.根据姓名查找电话薄数据4.根据姓名删除电话薄数据0.退出系统请输入你的选择15.设计一个程序可查询出版物销售的情况具体要求如下
(1)定义类publication,表示出版物私有数据成员chartitle
[50];//表示出版物名称floatprice;//表示出版物价格公有成员函数voidgetData;用来输入出版物名称及价格voidputData用来显示数据
(2)定义类sales,表示销售情况私有数据成员floatsalesArray
[20];//表示若干个月的销售公有成员函数voidgetDataintn;用来输入过去n个月的销售情况voidputDataintn用来显示数据,包括销售总数
(3)定义类book,由类publication公有派生,表示图书私有数据成员intpages;//表示页数公有成员函数voidgetData;用来输入页数voidputData用来显示数据
(4)定义类cd,由类publication公有派生,表示音像制品私有数据成员floattime;//表示播放时间公有成员函数voidgetData;用来输入播放时间voidputData用来显示数据
(5)在主函数中对定义的类进行测试程序执行结果如下所示请输入出版物的标题计算机基础请输入出版物的价格20请输入页数150请输入过去6个月的销售第1个月100第2个月200第3个月120第4个月320第5个月431第6个月224标题计算机基础价格20页数为150第1个月销售100第2个月销售200第3个月销售120第4个月销售320第5个月销售431第6个月销售224共销售
13955.3拓展题1.用类模板来完成下列工作
(1)定义一个数组类模板,能对数组进行排序及求最大元素值,并重载“[]”运算符(要求同时处理“整型数组、实型数组、字符数组”);
(2)定义一个栈类模板,实现其入栈和出栈操作2.对磁盘文件作如下操作
(1)在磁盘上建立一个文本文件,该文件中存放若干个实数;
(2)在磁盘上已有文本文件中,读出若干个实数,并求出其中的最大数、最小数和平均值;
(3)向文件追加记录、浏览文本文件、将一个文件复制到另一个文件中(定义类来完成)3.编写一个程序,从对话框输入两点,在客户区画出由这两个点构成的线段4.设计一个简单的画图工具,如下图基本要求要求所编写的画图工具能够完成圆、矩形、三角形的基本图形的绘制创新要求在基本要求达到后,可进行创新设计,如增加椭圆、多边形等图形的绘制功能5.设计一个可视化闹钟如下图所示基本要求可查看时间创新要求界面尽可能美观6.编程实现在客户区画矩形或椭圆,按C键显示椭圆,按R键显示矩形;当按“←”、“↑”、“→”、“↓”键时,屏幕上的图形相应移动,并可鼠标拖动图形创新要求在此基础上增加定时器的功能当按B键时,启动定时器,屏幕上的图形自动移动;当按S键时,撤销定时器,停止自动移动程序运行结果如下所示7.设计一个计算平均成绩的程序要求带有一个“计算”菜单,选择菜单中“平均值”时,弹出计算对话框,在对话框中输入数学、英语、物理、计算机四门成绩后,选择“计算”按钮,计算出平均成绩创新要求增加先计算总成绩,再计算平均成绩程序运行结果如下所示8.设计一个求三解形边长及面积的计算器要求若输入的三条边不能构成三角形显示出错程序执行结果如下所示9.设计一个数制转换的计算器,含退格按钮及清除按钮,可进行十进制数转换为二进制数以及十进制数转换成十六进制数运算,用菜单来进行选择创新要求增加十进制数与二进制数及十六进制数的相互转换程序执行结果如下所示10.上题是用表单实现数制转换,本题用对话框实现数制转换,并为对话框设计一个菜单,供选择程序执行结果如下所示11.设计一个能实现四则运算、开平方和求倒数运算的计算器程序执行结果如下所示12.设计一个能实现四则运算、三角运算、指数运算及对数运算的计算器程序执行结果如下所示准员工赵钱男22职员1年next=0李四男21职员1年next王五男45技师10000next=0张三男32经理20000next培训处h_emph_stuemp_numstu_num正式员工123451617181961524252071423222181312111091…1243125104361198712161514131395114106215117316128412345678910111213141516PAGE40。