if((i+1)%5==0) cout<<'\n';
}
}
MOVE::~MOVE()
{
delete []array; //○2
}
void main()
{
int b[] = {21,65,43,87,12,84,44,97,32,55},n = 10;
MOVE f(b,n);
f.exchange();
f.print();
}
(三)运行结果
(四)基本分析
1.要注意的函数:
○1构造函数中:当要用到指针来操作数组时,要通过new运算符动态申请空间。格式:指针变量 = new 数据类型[数组大小],指针变量保存该空间的首地址
○2析构函数:释放new分配的而动态存,格式:delete []指针变量
2.相关算法:
○3定义指针变量p1、p2指向数组的首地址,这句话等价于 p1 = p2 =&array[0]; ○4遍历数组,p1指向最小值,p2指向最大值
○5交换*p1、*p2的值
三、第17题
(一)题目:
定义一个类SIN。求sin(x)=x/1-x^3/3!+x^5/5!-x^7/7!+……+(-1)^(n+1)x^(2n+1)/(2n+1)!具体要求如下:
(1)私有成员数据。
①double x:输入公式中x的值,求sin(x)。
②int n:输入公式中n的值。
(2)公有成员函数。
①SIN(int x,int n):构造函数,用于初始化x和n的值。
②double power(int q):求q!的值。
③int mi(int m,int n):求m^n的值。
○4fun( ):用于求sin(x)的值。
○5void show( ):输出求得的结果。
(3)在主程序中定义对象test,对该类进行测试。
(二)源程序:
#include
class SIN
{
double x;
int n;
public:
SIN(double x,int n);
double power(int q);
double mi(int m,int n);
double fun();
void show();
};
SIN::SIN(double x,int n)
{
this->x = x;
this->n = n; //○1 }
double SIN::power(int q)
{
for(int m = 1;m < q;m++)
q *= m; //○2 return q;
}
double SIN::mi(int m,int n)
{
for(int i = 1;i < n;i++)
m *= m; //○3
return m;
}
double SIN::fun()
{
double sinx = 0;
for(int i = 1;i <= n;i++)
sinx += mi(-1,i+1)*mi(x,2*i-1)/power(2*i-1); //○4 return sinx;
}
void SIN::show()
{
cout<<"请输入x:"<cout<<"sin("<}
void main()
{
double x,n;
cout<<"请输入x和n的值:"<cin>>x>>n;
SIN test(x,n);
test.show();
}
(三)运行结果:
(四)基本分析:
1.需要注意:
○1this指针指向本身对象的数据成员,避免因数据名相同而造成的混乱。按题目要求,这一题只能用this指针加以区分。
2.相关算法:
○2求阶乘
○3求m^n。i < n即可,因为i = 1时,m=m*m,依此类推,i=n-1 时,算的就是m^n
○4这个公式看起来比较繁琐,对应着公式调用相关函数写,不要弄错
四、第18题
(一)题目:
18.试建立一个类VAR,用于求n(n<=100)个数的均方差。均方差的计算公式为,其中平均值为
具体要求如下:
(1)私有成员数据。
○1double a[100]:用于存放输入的n个数。
○2int n:实际输入数的个数n。
(2)公有成员函数。
○1VAR(double x[], int n1):构造函数,初始化成员数据a和个数n。
○2double average(double x[], int n):求平均值,数组x具有n个元素。○3void variance(double x[],int n):求均方差,数组x具有n个元素。○4void show():输出求得的均方差。
(3)在主程序中定义一个对象test,对该类进行测试。
(二)源程序:
#include
class VAR
{
double a[100];
int n;
public:
VAR(double x[],int n1);
double average(double x[],int n);
void variance(double x[],int n);
void show();
};
VAR::VAR(double x[],int n1)
{
for(int i = 0;i < n1;i++)
a[i] = x[i];
n = n1;
}
double VAR::average(double x[],int n)
{
double a = 0;
for(int i = 0;i < n;i++)
a += x[i];
a /=n;
return a;
}
void VAR::variance(double x[],int n)
{
double d = 0; //○1
for(int i = 0;i < n;i++)
d = (x[i] - average(x,n))*(x[i] - average(x,n));
d /= n;
cout<<"方差为:"<}
void VAR::show()
{
cout<<"平均值为:"<variance(a,n);
}
void main()
{
double x[100] = {16,18,25,23,56,14};
int n1 = 6;
VAR test(x,n1);
test.show();
}
(三)运行结果:
(四)基本分析:
1.需要注意:
○1方差d最好定义成double型
2.此题不难,按照题目要求“堆”程序即可,没有复杂的算法,也没有特殊的结构。
五、第二十题
(一)题目:
20.定义一个方阵类Array ,实现对方阵进行
逆时针90度旋转。如图所示。 1 2 3 4 5 6 7 8 9
10
11 12 13 14 15
16
具体要求如下: (1)私有数据成员
○
1int a[4][4]:用于存放方阵。 (2)公有成员函数
○
1Array (int a1[][4],int n) :构造函数,用给定的参数a1初始化数据成员a 。
○
2void xuanzhuan ( ) :实现对方阵a 进行逆时针90度的旋转。
○
3void show( ) :在屏幕上显示数组元素。 (3) 在主程序中定义数组
int b[ ][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}作为原始数组。定义一个Array 类对象test ,用b 初始化test ,完成对该类的测试。 (二)源程序:
#include class Array
4 8 12 16 3 7 11 1
5 2
6 10 14 1
5
9
13
{
int a[4][4];
public:
Array(int a1[][4],int n);
void xuanzhuan();
void show();
};
Array::Array(int a1[][4],int n)
{
for(int i=0;ifor(int j=0;ja[i][j] = a1[i][j];
}
void Array::xuanzhuan()
{
int i;
int a2[4][4];
for(i=0;i<4;i++)
{
for(int j=0;j<4;j++)
a2[i][j] = a[j][3-i]; //○1 }
for(i=0;i<4;i++)
for(int j=0;j<4;j++)
a[i][j] = a2[i][j]; //○2
}
void Array::show()
{
cout<<"输出的数组为:"<for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
cout<cout<}
}
void main()
{
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();
}
(三)运行结果:
(四)基本分析:
○1新建一个数组a2[4][4],用来存放旋转后的a1[4][4],逆时针旋转90度,其实就是列变成行,行变成列的同时左移三个。
○2把a2[4][4]赋值给a1[4][4],这样a1[4][4]就是旋转后的矩阵。
六、第三十题
(一)题目:
30.建立一个矩阵类Array,对二维数组中左下三角的全部元素(包括对角线上的元素)作如下变换。(1)若该数不是素数则保持不变;(2)若该数是素数,则用大于它的最小素数替换该数。并统计二维数组中左下三角的全部元素(包括对角线上的元素)中的素数个数。具体要求如下:
(1)私有数据成员
○1int x[4][4]:存储需要处理的二维数组的各元素值。
○2int count:存储左下三角元素中素数的个数。
(2)公有成员函数
○1构造函数:进行初始化x数组和count的值。
○2int fun(int);判断一个数是否为素数的函数。