cout<<"字符串为:
"<
}
~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的大小动态申请存放Pn(x)前n项的数组空间。
(2)公有成员函数
●PP(intnum,doublex1):
构造函数,初始化数据成员n和x,使p指向动态申请的数组空间。
●~PP():
析构函数,释放p指向的动态内存空间。
●doublefun(intn1,doublex):
递归函数,用于求多项式
的第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,求
,另有辅助函数power(m,n)用于求
。
具体要求如下:
(1)私有成员数据。
●intn,k:
存放公式中n和k的值;
(2)公有成员函数。
●SP(intn1,intk1):
构造函数,初始化成员数据n和k。
●intpower(intm,intn):
求mn。
●intfun():
求公式的累加和。
●voidshow():
输出求得的结果。
(3)在主程序中定义对象s,对该类进行测试。
3.建立一个类MOVE,不进行排序,将数组中小于平均值的元素放到数组的左边,大于平均值的元素放到数组的右边。
具体要求如下:
(1)私有数据成员
●floatarray[20]:
一维整型数组。
●intn:
数组中元素的个数。
(2)公有成员函数
●MOVE(floatb[],intm):
构造函数,初始化成员数据。
●voidaverage():
输出平均值,并将数组中的元素按要求重新放置。
●voidprint():
输出一维数组。
(3)在主程序中用数据{1.3,6.2,3,9.1,4.8,7.4,5.6,9.2,2.3}对该类进行测试。
4.建立一个类MOVE,将数组中最大元素的值与最小元素的值互换。
具体要求如下:
(1)私有数据成员
●int*array:
一维整型数组。
●intn:
数组中元素的个数。
(2)公有成员函数
●MOVE(intb[],intm):
构造函数,初始化成员数据。
●voidexchange():
输出平均值,并将数组中的元素按要求重新放置。
●voidprint():
输出一维数组。
●~MOVE():
析构函数。
(3)在主程序中用数据{21,65,43,87,12,84,44,97,32,55}对该类进行测试。
5.定义一个类Palindrome,实现绝对回文数。
设计一个算法实现对任意整型数字判断是否为绝对回文数。
所谓绝对回文数,是指十进制数和二进制数均对称的数。
具体要求如下:
(1)私有数据成员
●intn:
整型数字。
●inty:
标记是否为回文数。
(2)公有成员函数
●Palindrome(intx):
构造函数,根据x参数初始化数据成员n,y初始化为0。
●voidhuiwen():
判断数n是否为绝对回文数。
●voidshow():
若该数为回文数,则在屏幕显示。
(3)在主程序中定义inta,由键盘输入数字。
定义一个Palindrome类对象p,用a初始化p,完成对该类的测试。
6.定义一个字符串类String,实现判断该字符串是否为回文字符串。
所谓回文字符串,是指该字符串左右对称。
例如字符串“123321”是回文字符串。
具体要求如下:
(1)私有数据成员
●char*str;
●inty:
标记是否为回文字符串。
(2)公有成员函数
●String(char*s):
构造函数,用给定的参数s初始化数据成员str。
y初始化为0。
●voidhuiwen():
判断str所指向的字符串是否为回文字符串。
●voidshow():
在屏幕上显示字符串。
(3)在主程序中定义字符串chars[]=”ababcedbaba”作为原始字符串。
定义一个String类对象test,用s初始化test,完成对该类的测试。
7.建立一个类PHALANX,生成并显示一个折叠方阵。
折叠方阵如下图所示。
折叠方阵的生成过程为:
起始数置于方阵的左上角,然后从起始数开始递增,依次折叠构成方阵。
具体要求如下:
(1)私有数据成员
●int(*p)[20]:
指向按照折叠规律存放方阵的二维整型数组。
●intstartnum:
折叠方阵的起始数。
●intn:
存放方针的层数。
(2)公有成员函数
●PHALANX(ints,intm):
构造函数,初始化成员数据。
●voidprocess():
生成起始数为startnum的n行方阵。
●voidprint():
输出折叠方阵。
●~PHALANX():
析构函数。
(3)在主程序中对该类进行测试。
8.建立一个MATRIX,生成并显示一个螺旋方阵。
螺旋方阵如下图所示,起始数置于方阵的左上角,然后从起始数开始依次递增,按顺时针方向从外向里旋转填数而成。
具体要求如下:
(1)私有数据成员
●inta[20][20]:
二维整型数组存放螺旋方阵。
●intstartnum:
螺旋方阵的起始数。
●intn:
存放方针的层数。
(2)公有成员函数
●MATRIX(ints,intm):
构造函数,初始化成员数据startnum和n。
●voidprocess():
生成起始数为startnum的n行螺旋方阵。
●voidprint():
输出螺旋方阵。
(3)在主程序中定义MATRIX类的对象t对该类进行测试。
9.定义一个字符串类CString,并设计一个算法对该串中各个不同字符出现的频率进行统计。
具体要求如下:
(1)私有数据成员
●char*str:
指向要统计的字符串。
●char(*p)[2]:
动态分配二维空间,用以存放str所指字符串中出现的字符及其出现的次数(次数在存放时,用该数字对应的ASCII值存放;在输出次数时,输出该ASCII字符对应的ASCII值即可)。
●intsize:
存放字符串中出现的所有不同的字符的个数。
(2)公有成员函数
●CString(char*s):
根据s参数初始化数据成员str;p和size初始值为0。
●voidCount():
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)公有成员函数
●CString(char*s,chars1[],char*s2):
用给定的参数s、s1和s2相对应的初始化数据成员str、str1和str2。
flag设置缺省0。
●voidReplace():
判断str字符串中是否出现str1,若出现就用str2替换,否则什么都不做。
若替换成功了标记flag为1,若替换不成功则标记flag为0。
●voidShow():
若替换成功,则在屏幕上显示目标关键字、替换关键字和替换后的原始字符串;若不成功则显示原始字符串。
●~CString():
释放动态分配的空间。
(3)在主程序中定义字符串chars[]=”Iamstudent,youarestudenttoo,weareallstudent.”作为原始字符串,定义chars1[]=”student”作为目标关键字,定义chars2[]=”teacher”作为替换关键字。
定义一个CString类对象test,用s,s1和s2初始化test,完成对该类的测试。
11.建立一个STRING,将一个字符串交叉插入到另一个字符串中(假定两字符串等长)。
例如将字符串“abcde”交叉插入字符串“ABCDE”的结果为“aAbBcCdDeE”或“AaBbCcDdEe”。
具体要求如下:
(1)私有数据成员
●charstr1[80]:
存放被插入的字符串。
●charstr2[40]:
存放待插入的字符串。
(2)公有成员函数
●STRING(char*s1,char*s2):
构造函数,用s1和s2初始化str1和str2。
●voidprocess():
将str2中的字符串插入到str1中。
●voidprint():
输出插入后的字符串。
(3)在主程序中定义STRING类的对象test对该类进行测试。
12.建立一个STRING,将一个字符串交叉插入到另一个字符串中(假定两字符串不等长)。
例如将字符串“abcde”交叉插入字符串“ABCDEFG”的结果为“aAbBcCdDeEFG”或“AaBbCcDdEeFG”。
具体要求如下:
(1)私有数据成员
●charstr1[60]:
存放被插入的字符串。
●charstr2[40]:
存放待插入的字符串。
●charstr3[100]:
存放插入后的字符串。
(2)公有成员函数
●STRING(char*s1,char*s2):
构造函数,用s1和s2初始化str1和str2。
●voidprocess():
将str2中的字符串插入到str1中,存放到str3中。
●voidprint():
输出插入后的字符串。
(3)在主程序中定义STRING类的对象test对该类进行测试。
13.建立一个类MOVE,对数组中元素进行循环换位,即每个元素后移三位,最后三个元素移到最前面。
具体要求如下:
(1)私有数据成员
●intarray[20]:
一维整型数组。
●intn:
数组中元素的个数。
(2)公有成员函数
●MOVE(intb[],intm):
构造函数,初始化成员数据。
●voidchange():
进行循环换位。
●voidprint():
输出一维数组。
(3)在主程序中用数据{21,65,43,87,12,84,44,97,32,55}对该类进行测试。
14.建立一个类MOVE,实现将数组中大字字母元素放在小写字母元素的左边。
具体要求如下:
(1)私有数据成员
●char*array:
一维字符数组。
●intn:
数组中元素的个数。
(2)公有成员函数
●MOVE(charb[],intm):
构造函数,初始化成员数据。
●voidchange():
进行排序换位。
●voidprint():
输出一维数组。
●~MOVE():
析构函数。
(3)在主程序中用数据"fdsUFfsTjfsKFEkWC"对该类进行测试。
15.定义一个一维数组类Carray,并根据给定算法实现对原始一维数组进行线性变换。
这里给定的线性变换算法为:
T(bx)=bT(x)+i;其中,b为变换常量,x为变量,i为当前类中成员数组的下标值。
根据该算法,原始数组在变化后,当前数组元素的值是由常量b和i下标来决定的。
具体要求如下:
(1)私有数据成员
●int*a:
指针a指向一个动态分配的原始数组。
●intn:
n表示该数组的大小。
●intb:
线性变换的常量。
(2)公有成员函数
●Carray(inta[],intn,intx):
用给定的参数a、n和x初始化数据成员a、n和b。
缺省都设置为0。
●voidTransform():
根据上述变化算法,求解数组变换。
●voidShow():
在屏幕上显示数组元素。
●~Carray():
释放动态分配的空间。
(3)在主程序中定义数组intarr[]={1,2,3,4,5,6,7,8,9,10}作为原始数组,intb;由键盘输入,作为线性变换的常量。
定义一个Carray类对象test,用arr初始化test,完成对该类的测试。
16.定义一个方阵类CMatrix,并根据给定算法实现方阵的线性变换。
方阵的变换形式为:
F=W*fT
f为原始矩阵,fT为原始矩阵的转置,w为变换矩阵,这里设定为
1001
0110
0110
1001
具体要求如下:
(1)私有数据成员
●int(*a)[4]:
a指向方阵数组。
●intw[4][4]:
w为变换矩阵。
●intm:
m表示方阵的行和列数。
(2)公有成员函数
●CMatrix(inta[][4],intm):
用给定的参数a和m初始化数据成员a和m;对变换矩阵w进行初始化,要求必须用循环实现。
●voidTransform():
根据上述变换算法,求出变换后的数组形式,存放在原始数组内。
●voidshow():
在屏幕上显示数组元素。
●~CMatrix():
释放动态分配的空间。
(3)在主程序中定义数组intarr[][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}作为原始数组。
定义一个CMatrix类对象test,用arr初始化test,完成对该类的测试。
17.定义一个类SIN,求
具体要求如下:
(1)私有成员数据。
●intx:
输入公式中x的值,求sin(x)。
●intn:
输入公式中n的值。
(2)公有成员函数。
●SIN(intx,intn):
构造函数,用于初始化x和n的值。
●intpower(intq):
求q!
的值。
●intmi(int