江苏科技大学c++实验报告

江苏科技大学c++实验报告
江苏科技大学c++实验报告

江科技大学

课程实践报告

设计题目:计算机程序设计实验(C++)

设计时间: 2016年10月3日至2016年10月4日学院:计算机科学与工程学院

专业班级:通信工程 1522107041

学生:周祯楠学号:152210704110

指导老师:於跃成

一、第三题

(一)题目:

3.建立一个类MOVE,不进行排序,将数组中小于平均值的元素放到数组的左边,大于平均值的元素放到数组的右边。具体要求如下:

(1)私有数据成员。

○1float array[20]:一维整型数组。

○2int n:数组中元素的个数。

(2)公有成员函数

○1MOVE(float b[],int m):构造函数,初始化成员数据。

○2void average():输出平均值,并将数组中的元素按要求重新放置。

○3void print():输出一维数组。

(3)在主程序中用数据{1.3,6.2,3,9.1,4.8,7.4,5.6,9.2,2.3}对该类进行测试。

(二)源程序:

#include

class MOVE

{

float array[20];

int n;

public:

MOVE(float b[],int m);

void average();

void print();

};

MOVE::MOVE(float b[],int m)

{

int i;

n=m;

for(i=0;i

array[i]=b[i];

}

void MOVE::average()

{

int i,x;

float a = 0;

for(i=0;i

a+=array[i];

a/=n;

cout<<"平均值为:"<

float f[20];

for(i=0,x=0;i

if(array[i]

{

f[x] = array[i];

x++;

}

for(i=0;i

if(array[i]>a)

{

f[x] = array[i];

x++;

} //○2 for(i=0;i

array[i] = f[i]; //○3

}

void MOVE::print()

{

int i;

for(i=0;i

{

cout<

if((i+1)%5==0) cout<

cout<

}

void main()

{

float b[]={1.3,6.2,3,9.1,4.8,7.4,5.6,9.2,2.3};

int m = 9;

MOVE ff(b,m);

ff.average();

ff.print();

}

(三)运行结果:

(四)基本分析:

1.就结构而言,定义类以及成员函数按照题目要求写即可,注意类作用域符::不可缺失。

2.就算法而言:

○1求数组中的数的平均值,就是先求和,再除总个数。

○2“小于平均值的放左边,大于平均值的放右边。”先新建一个数组f[20]用于存放排列后的数组,通过if条件判断语句进行排序,这里大于平均值和小于平均值是有先后顺序的,因为是依次放入f[20]中,所以要等小于平均值的放完,

再放大于平均值的。

○3再把f[20]赋值给array[20],这样array[20]就是排序后的符合题目要求的新数组。

○4每行5个输出,i的初始值是0,所以if条件判断中应该是if((i+1)%5 == 0),直接用i,无需定义其他变量。

二、第四题

(一)题目:

4.建立一个类MOVE,将数组中最大元素的值与最小元素的值互换。具体要求如下:

(1)私有数据成员

○1int *array:一维整型数组。

○2int n:数组中元素的个数。

(2)公有成员函数

○1MOVE(int b[],int m):构造函数,初始化成员数据。

○2void exchange():输出平均值,并将数组中的元素按要求重新放置。

○3void print():输出一维数组。

○4~MOVE():析构函数。

(3)在主程序中用数据{21,65,43,87,12,84,44,97,32,55}对该类进行测试。(二)源程序

#include

class MOVE

{

int *array;

int n;

public:

MOVE(int b[],int m);

void exchange();

void print();

~MOVE();

};

MOVE::MOVE(int b[],int m)

{

n = m;

array = new int[n]; //○1

for(int i=0;i

array[i] = b[i];

}

void MOVE::exchange()

{

float a = 0;

int i,*p1,*p2;

for(i=0;i

a+=array[i];

a/=n;

cout<<"The average of the number is:"<

p1 = p2 = array; //○3

for(i=0;i

{

if(array[i] < *p1) p1 = &array[i];

if(array[i] > *p2) p2 = &array[i];

} //○4

i = *p1;

*p1 = *p2;

*p2 = i; //○5

}

void MOVE::print()

{

for(int i=0;i

{

cout<

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;i

for(int j=0;j

a[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);判断一个数是否为素数的函数。

相关主题
相关文档
最新文档