为保持num的值不变,把其赋给变量n,通过n求num的位数。
? 把整数num转换为字符串s ①取出num(n)的个位并转换为字符,然后赋给s的首字符(char *p=s):*p=n+'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相遇(循环条件为:p1
在主函数中以整数初始化Integer_String的对象,并调用其成员函数show()输出测试结果(整数num和字符串s)。主函数定义如下:
void main(){
Integer_String test=12345; test.fun(); test.show(); }
用以测试的整数为: 12345
预期的输出结果为: 整数为:12345 字符串为:12345
4.源程序清单
#include
5
} void fun(){ int n=num,len=f(); s=new char[len+1]; for(char *p=s,*p1=s;n;p++){ *p=n+'0'; n/=10; } *p--='\\0'; while(p1
void main(){ Integer_String test=12345; test.fun(); test.show(); }
6
第5章 课程实践题选
5.1基础题
1.试建立一个类PP,求出下列多项式的前n项的值。
n?0?1?Pn(x)??x n?1
?((2n?1)xP(x)?(n?1)P(x))/nn?1n?1n-2?具体要求如下:
(1)私有数据成员
? int n:前若干项的项数。 ? double x:存放x的值。
? double *p:根据n的大小动态申请存放Pn(x) 前n项的数组空间。 (2)公有成员函数
? PP(int num,double x1):构造函数,初始化数据成员n和x,使p指向
动态申请的数组空间。 ? ~PP():析构函数,释放p指向的动态内存空间。
? double fun(int n1,double x):递归函数,用于求多项式Pn(x)的第n1项。注意:将递归公式中的n用作函数参数。本函数供process函数
调用。
? void process( ):完成求前n项的工作,并将它们存放到p指向的动态数组中。
? void show( ):输出n和x,并将前n项以每行4个数的形式输出到屏幕上。
(3) 在主函数中完成对该类的测试。先输入num和x1,并定义一个PP类的
对象items,用num和x1初始化items的成员n和x,调用items的成员函数,求出并输出多项式前num项的值。 2.试建立一个类SP,求f(n,k)?1?2?3?....?n,另有辅助函数power(m,n)用于求m。 具体要求如下:
(1)私有成员数据。
? int n,k:存放公式中n和k的值; (2)公有成员函数。
? SP(int n1,int k1):构造函数,初始化成员数据n和k。 ? int power(int m, int n):求mn。
7
nkkkk? int fun( ):求公式的累加和。 ? void show( ):输出求得的结果。
(3)在主程序中定义对象s,对该类进行测试。
3.建立一个类MOVE,不进行排序,将数组中小于平均值的元素放到数组的左边,大于平均值的元素放到数组的右边。 具体要求如下:
(1)私有数据成员
? float array[20]:一维整型数组。 ? int n:数组中元素的个数。 (2)公有成员函数
? MOVE(float b[],int m):构造函数,初始化成员数据。
? void average():输出平均值,并将数组中的元素按要求重新放置。 ? void print():输出一维数组。
(3)在主程序中用数据{1.3,6.2,3,9.1,4.8,7.4,5.6,9.2,2.3}对该类进行测试。 4.建立一个类MOVE,将数组中最大元素的值与最小元素的值互换。 具体要求如下:
(1)私有数据成员
? int *array:一维整型数组。 ? int n:数组中元素的个数。 (2)公有成员函数
? MOVE(int b[],int m):构造函数,初始化成员数据。
? void exchange():输出平均值,并将数组中的元素按要求重新放置。 ? void print():输出一维数组。 ? ~MOVE():析构函数。
(3)在主程序中用数据{21,65,43,87,12,84,44,97,32,55}对该类进行测试。
5.定义一个类Palindrome,实现绝对回文数。设计一个算法实现对任意整型数字判断是否为绝对回文数。所谓绝对回文数,是指十进制数和二进制数均对称的数。 具体要求如下:
(1)私有数据成员
? int n:整型数字。
? int y: 标记是否为回文数。 (2)公有成员函数
? Palindrome (int x) :构造函数,根据x参数初始化数据成员n,y初
始化为0。
? void huiwen () :判断数n是否为绝对回文数。 ? void show( ) :若该数为回文数,则在屏幕显示。
(3)在主程序中定义int a,由键盘输入数字。定义一个Palindrome类对象p,
用a初始化p,完成对该类的测试。
6.定义一个字符串类String,实现判断该字符串是否为回文字符串。所谓回文字符串,是指该字符串左右对称。例如字符串“123321”是回文字符串。
8
具体要求如下:
(1)私有数据成员
? char *str;
? int y:标记是否为回文字符串。
(2)公有成员函数
? String (char *s) :构造函数,用给定的参数s初始化数据成员str。y
初始化为0。
? void huiwen () :判断str所指向的字符串是否为回文字符串。 ? void show( ) :在屏幕上显示字符串。
(3)在主程序中定义字符串char s[]=”ababcedbaba”作为原始字符串。定义一个
String类对象test,用s初始化test,完成对该类的测试。
7.建立一个类PHALANX,生成并显示一个折叠方阵。折叠方阵如下图所示。折叠方阵的生成过程为:起始数置于方阵的左上角,然后从起始数开始递增,依次折叠构成方阵。
1 1 2 4 3 1 2 5 10 4 3 6 11 9 8 7 12 16 15 14 13
具体要求如下: (1)私有数据成员
? int (*p)[20]:指向按照折叠规律存放方阵的二维整型数组。 ? int startnum:折叠方阵的起始数。 ? int n:存放方针的层数。 (2)公有成员函数
? PHALANX (int s, int m ):构造函数,初始化成员数据。 ? void process():生成起始数为startnum的n行方阵。 ? void print():输出折叠方阵。 ? ~ PHALANX( ):析构函数。 (3)在主程序中对该类进行测试。
8.建立一个MATRIX,生成并显示一个螺旋方阵。螺旋方阵如下图所示,起始数置于方阵的左上角,然后从起始数开始依次递增,按顺时针方向从外向里旋转填数而成。
…
9