}
int b[][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; int n=4;
array test(b,n); test.xuanzhuan(); test.show();
21.建立一个类NUM,求指定数据范围内的所有合数(非质数)。提示:合数定义是“一个数,除了1和它本身,还有其它约数,这样的数叫合数”。 具体要求如下: (1)私有数据成员
? int *data:动态存放在指定范围内求出的所有合数。 ? int span1,span2:存放指定范围的下限和上限。 ? int num:存放span1与span2之间的合数个数。 (2)公有成员函数
? NUM(int n1, int n2) :构造函数,用参数n1和n2初始化span1和span2,同时初始化num。
? int isComposite (int x ):判断x是否为合数。若是合数,返回1,否则,返回0。
? void process( ) :求指定范围内的所有合数,把它们依次存放在数组data中,并将求出的合数个数赋给num。
? void print( ):输出求出的素数个数及所有合数,每行输出8个合数。 ? ~NUM( ):释放动态分配的存储空间。 (3) 在主函数中完成对该类的测试。定义一个NUM类对象test,指定查找范围为100~200,即求100至200之间的所有合数。通过test调用成员函数完成求合数及输出合数的工作。
#include
int span1,span2; int num; public:
Num(int n1,int n2); int iscomposite(int x); void process(); void print(); ~Num(); };
Num::Num(int n1,int n2) {
span1=n1; span2=n2; num=0;
data=new int[n2-n1]; }
int Num::iscomposite(int x) {
for(int i=2;i void Num::process() { for(int i=span1;i<=span2;i++) if(iscomposite(i)) data[num++]=i; } void Num::print() { cout<<\在\和\之间的合数个数为:这些合数为:\ for(int i=0;i cout< Num::~Num() { delete []data; } void main() { int n1,n2; cout<<\输入下限和上限:\ cin>>n1>>n2; Num test(n1,n2); test.process(); test.print(); } \ 22.建立一个类Saddle_point,求一个数组中的所有鞍点。提示:鞍点是这样的数组元素,其值在它所在行中为最大,在它所在列中为最小。 具体要求如下: (1)私有数据成员 ? int a[4][4]:存放二维数组元素。 ? int b[4][4]:存放二维数组中的鞍点值。 ? int num:存放鞍点个数。 (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调用成员函数完成求鞍点及输出工作。 (4)#include (6) double a[100]; (7) int n; (8)public: (9) var(double x[],int n1); (10) double average(double x[],int n); (11) void variance(double x[],int n); (12) void show(); (13)}; (14)var::var(double x[],int n1) (15){ (16) for(int i=0;i (20)double var::average(double x[],int n) (21){ (22) double ave=0; (23) for(int i=0;i (28)void var::variance(double x[],int n) (29){ (30) double ff=0; (31) for(int i=0;i (34) cout<<\均方差为:\ (35)} (36)void var::show() (37){ (38) cout<<\平均值为:\(39) variance(a,n); (40)} (41)void main() (42){ (43) double x[100]={23,56,77,568,34,54,9.5,31,78}; (44) int n1=9; (45) var test(x,n1); (46) test.show(); (47)} 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。 #include int num,den; public: fract(int a=0,int b=1); int ged(int m,int n); fract add(fract f); void show(); }; fract::fract(int a,int b) { num=a; den=b; } int fract::ged(int m,int n) { for(int i=m;i>=1;i--) if(m%i==0&&n%i==0)return i; } fract fract::add(fract f) { int n,d,p,q; p=ged(den,f.den); d=den*f.den/p; n=num*f.den/p+f.num*den/p; q=ged(n,d); Return fract(n/q,d/q); }