(2)公有成员函数
? Saddle_point(int data[][4]):构造函数,用参数int data[][4]初始化数组a,,
同时初始化数组b与num 的值均为0。
? void process( ):求数组a所有鞍点(如果有鞍点),把它们行、列、及
值相应存放在数组b中,并将求出的鞍点个数赋给num。 ? 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,则必须将其约简成最简分数的形式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)私有数据成员
? int num,den :num为分子,den为分母。 (2)公有成员函数
? Fract(int a=0,int b=1):构造函数,用a和b分别初始化分子num、分母den。
? int ged(int m,int n):求m、n的最大公约数。此函数供成员add()函数调用。
? Fract add(Fract f):将参数分数f与对象自身相加,返回约简后的分数对象。
? void show( ):按照num/den的形式在屏幕上显示分数。
(3)在主程序中定义两个分数对象f1和f2,其初值分别是1/5和7/20,通
过f1调用成员函数add完成f1和f2的相加,将得到的分数赋给对象f3,显示分数对象f3。
24.建立一个类NUM,并统计特定序列中相同的数字的个数。 具体要求如下:
(1)私有数据成员
? int data[25]:随机生成25个在0-9之间的数字。 ? int num[10]:储存每个数字出现的个数。 (2)公有数据成员
? NUM(int data):构造函数,初始化数组data。
? void process( ):统计数组data中每个数字出现的个数,并保存到数
组num中。
16
? void print( ):输出每个数字出现的个数,每行输出5个
(3)在主程序中定义一个对象,对该类进行测试。
25.建立一个类NUM,并统计特定序列中相同的字符的个数。
具体要求如下: (1)私有数据成员
? char data[25]:随机生成25个字符。
? int num[128]:储存每个字符出现的个数。 (2)公有数据成员
? NUM(int data):构造函数,同时初始化数组data。
? void process( ):统计数组data中每个字符出现的个数,并保存到数
组num中。
? void print( ):输出每个出现过的字符及其出现的个数,每行输出5
个,没有出现过的字符不显示。
(3)在主程序中定义一个对象,对该类进行测试。
26.建立一个类NUM,随机生成25个字符序列,并为特定序列进行排序。
具体要求如下: (1)私有数据成员
? int data[25]:随机生成25个字符。
(2)公有数据成员
? NUM(int data):构造函数,初始化数组data。 ? void process( ):为数组data进行排序,要求按照ASCII码进行升序
排列。
? void print( ):输出数组data,每行输出5个字符。
(3)在主程序中定义一个对象,对该类进行测试。
27.建立一个类NUM,求指定数据范围内的所有素数(质数)。提示:素数定义是“只能被1和它本身整除的整数”,即质数。 具体要求如下: (1)私有数据成员
? int data[10]:依次存放原始数据。
? int prime[10]:存放指定数据内所求出的所有素数。 ? int num:存放素数个数。
(2)公有数据成员
? NUM(int n[ ]):构造函数,用参数n初始化data,同时初始化num
为0。
? int isprime (int x ):判断x是否为素数。若是素数,返回1,否则,
返回0。
? void process( ):求指定data数组中的所有素数,把它们依次存放在
数组prime中,并将求出的素数个数赋给num。 ? void print( ):输出求出的素数个数及所有素数,每行输出4个素数。 (3)在主函数中完成对该类的测试。定义NUM类对象test,通过test调用成
17
员函数完成求素数及输出素数的工作。原始数据为{4, 5, 9, 11, 36, 29, 31, 101, 56, 199}。
28.编程实现对大于1的整数进行质因数分解,并求出其和。所谓整数的质因子分
解是指将整数分解为其所有质数(素数)因数的积,例如,60=2*2*3*5,则整数60的质因数之和为12。定义一个类Decompose实现上述功能。 具体要求如下: (1)私有数据成员
? int *a:指向存放对应整数的质因数之和的动态存储空间。 ? int *num:指向待分解质因数整数的动态存储空间。 ? int n:整数的个数。
(2)公有数据成员
? Decompose(int m,int b[ ]): 用m初始化n,并用n初始化为动态
申请空间的指针a与num。用参数b给数组a赋值。
? void print( ):输出数组a以及num所指向的存储空间中的内容。 ? void primenum( ):求整数a[i]的所有质因数(保留重复部分,例如
60的质因数为 2,2,3,5,之和为12),并将这些质因数之和存放到指针num所指向的存储空间中。
? ~Decompose( ):释放动态分配的存储空间。
(3)在主函数中完成对该类的测试。从键盘输入一组大于1的整数,存放在
number数组中,定义类Decompose的对象d ,并用 number初始化d ,调用函数primenum( ) 求number 的所有质因数,最后输出测试结果。
29.建立一个类SUM,输入5×5的二维数组,编写程序实现:求出两对角线上各元
素的和,求出对角线上行、列下标均为偶数的各元素的积,找出对角线上其值最大的元素以及它在数组中的位置。 具体要求如下: (1)私有数据成员
? int array[5][5]:二维整型数组。
? int s:数组array两对角线元素的和。
? int a:数组array对角线上行、列下标均为偶数的各元素的积 ? int b,m,n:数组array对角线上其值最大的元素以及它在数组中的位置。 (2)公有成员函数
? SUM(int d[5][5]):构造函数,初始化成员数据。 ? void process1():求二维数组两对角线元素的和。
? void process2():求二维数组两对角线上行、列下标均为偶数的各元素的积。
? void process3():求二维数组两对角线上其值最大的元素和它在数组中的位置。
? void print():输出二维数组(每行输出5个元素)及其它所求的值。 (3)在主程序中对该类进行测试。
30.建立一个矩阵类Array,对二维数组中左下三角的全部元素(包括对角线上的
18
元素)作如下变换:(1)若该数不是素数则保持不变;(2)若该数是素数,则用大于它的最小素数替换该数。并统计二维数组中左下三角的全部元素(包括对角线上的元素)中的素数个数。 具体要求如下: (1)私有数据成员
? int x[4][4]:存储需要处理的二维数组的各元素值。 ? int count:存储左下三角元素中素数的个数。 (2)公有成员函数
? 构造函数:进行初始化x数组和count的值。 ? int fun(int);判断一个数是否为素数的函数。 ? int encode( ):对x数组中左下三角的全部元素(包括对角线上的元素)
逐一进行判断,若该数不是素数则保持不变,若该数是素数,则用大于它的最小素数替换该数。
? void print():按行输出矩阵的值。
(3)编写一个程序测试该类,说明(声明)Array对象A,将一个矩阵存入对
象A中,并输出矩阵的值,使用以下测试数据:
3 6 4 17 5 6 4 17 8 5 9 10 变换后的矩阵为 8 7 9 10 12 19 7 20 12 23 11 20
4 14 21 23 4 14 21 29
31.建立一个类SUM,实现m行k列矩阵与k行n列矩阵的乘积。设A为m行k列的矩阵,B为k行n列的矩阵,则C=A×B。 具体要求如下: const int m=3; const int k=4; const int n=3;
(1)私有数据成员
? int A[m][k]:存放m行k列矩阵。 ? int B[k][n]:存放k行n列矩阵 ? int (*C)[n]:指向乘积矩阵 (2)公有成员函数
? 构造函数:初始化成员数据。 ? 析构函数:收回行指针。
? void process():求矩阵的乘积。
? void print():输出各二维数组(按行列形式)。 (3)在主程序中对该类进行测试。
32.建立一个类SUM,使用二维数组输入“Follow me”,“BASIC”,“Great wall”,“Fortran”,“Pascal”,将它们按从小到大的顺序排列后输出。 具体要求如下:
19