if((i+1)%5==0) cout<<'\\n'; } }MOVE::~MOVE() {
2 delete []array; //○
}
void main() {
int b[] = {21,65,43,87,12,84,44,97,32,55},n = 10; MOVE f(b,n); f.exchange(); f.print(); }
(三)运行结果
5
(四)基本分析 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++)
6
…2 q *= m; //○
return q; }
double SIN::mi(int m,int n) {
for(int i = 1;i < n;i++)
3 m *= m; //○
return m; }
double SIN::fun() {
double sinx = 0;
for(int i = 1;i <= n;i++)
4 sinx += mi(-1,i+1)*mi(x,2*i-1)/power(2*i-1); //○
return sinx; }
void SIN::show() {
cout<<\"请输入x:\"<cout<<\"sin(\"<void main() {double x,n;
cout<<\"请输入x和n的值:\"<>x>>n;SIN test(x,n); test.show(); }
(三)运行结果:
(四)基本分析: 1.需要注意:
1this指针指向本身对象的数据成员,避免因数据名相同而造成的混乱。按题○
目要求,这一题只能用this指针加以区分。 2.相关算法:
7
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;
8
}
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) {
1 double d = 0; //○
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<<\"平均值为:\"<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.此题不难,按照题目要求“堆”程序即可,没有复杂的算法,也没有特殊的结构。
五、第二十题
9
(一)题目:
20.定义一个方阵类Array,实现对方阵进行逆时针90度旋转。如图所示。 1 2 3 4 4 8 12 16 5 6 7 8 3 7 11 15 9 10 11 12 13 14 15 16 2 6 10 14 1 5 9 13
具体要求如下:
(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 {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;ivoid Array::xuanzhuan() {int i;
int a2[4][4]; for(i=0;i<4;i++) {
for(int j=0;j<4;j++)
1 a2[i][j] = a[j][3-i]; //○
}
10
for(i=0;i<4;i++)
for(int j=0;j<4;j++)
2 a[i][j] = a2[i][j]; //○
}
void Array::show() {
cout<<\"输出的数组为:\"<for(int j=0;j<4;j++) 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)私有数据成员
11
1int x[4][4]:存储需要处理的二维数组的各元素值。 ○
2int count:存储左下三角元素中素数的个数。 ○
(2)公有成员函数
1构造函数:进行初始化x数组和count的值。 ○ 2int fun(int);判断一个数是否为素数的函数。 ○
3void encode( ○):对x数组中左下三角的全部元素(包括对角线上的元素) 逐一进行判断,若该数不是素数则保持不变,若该数是素数,则用大于它的最小 素数替换该数。
4void print( ):按行输出矩阵的值。 ○
(3)编写一个程序测试该类,说明(声明)Array对象A,将一个矩阵存入对象A中,并输出矩阵的值,使用以下测试数据。
5 6 4 17 3 6 4 17 8 12 4 5 19 14 9 7 21 10 20 23 8 12 4 7 23 14 9 11 21 10 20 29 (二)源程序:
#include class array {int x[4][4]; int count; public:
array(int a[4][4]); int fun(int); void encode(); void print(); };
array::array(int a[4][4]) {
for(int i=0;i<4;i++) for(int j=0;j<4;j++) x[i][j] = a[i][j]; count = 0; }
int array::fun(int num) {
int flag;
for(int i=2;iif(num%i==0) return 0;else return 1;
1 //○
12
}
void array::encode() {
int i,j,n;
for(i=0;i<4;i++) {
2 for(j=0;j<=i;j++) //○
{
3 if(fun (x[i][j])) //○
{
for(int m = x[i][j]+1;;m++)
4 if(fun(m)) //○
{
x[i][j] = m;
5 break; //○
}
6 count +=1; //○
} } } }
void array::print() {
int i,j;
cout<<\"变换后的矩阵为:\"<for(j=0;j<4;j++)cout<cout<<\"左下角素数个数为:\"<void main() {int a[4][4]={3,6,4,17,8,5,9,10,12,19,7,20,4,14,21,23}; array test(a); test.encode(); test.print(); }
(三)运行结果:
13
(四)基本分析:
1判断是否为素数,运用条件语句,是就return1,否就return0,是很巧妙地○
方法。
2如何表示一个方阵的左下角(包括对角线上)的数?通过双循环,列不大于行○
数即可表示。 3逐个判断左下角○(包括对角线上)的数是否为素数,利用了上面定义的fun()函数实现,是就进入下面的循环。
4如果是素数,就寻找下一个用来代替它的素数。 ○
5一旦找到就跳出循环,count计数 ○
6count加一计数 ○
14