当前位置:文档之家› 江苏科技大学c++实验报告

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

江科技大学课程实践报告设计题目:计算机程序设计实验(C++)设计时间: 2016年10月3日至2016年10月4日学院:计算机科学与工程学院专业班级:通信工程 1522107041学生:周祯楠学号:****************:***一、第三题(一)题目: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<iostream.h>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<m;i++)array[i]=b[i];}void MOVE::average(){int i,x;float a = 0;for(i=0;i<n;i++)a+=array[i];a/=n;cout<<"平均值为:"<<a<<endl; //○1float f[20];for(i=0,x=0;i<n;i++)if(array[i]<a){f[x] = array[i];x++;}for(i=0;i<n;i++)if(array[i]>a){f[x] = array[i];x++;} //○2 for(i=0;i<n;i++)array[i] = f[i]; //○3}void MOVE::print(){int i;for(i=0;i<n;i++){cout<<array[i]<<'\t';if((i+1)%5==0) cout<<endl; //○4 }cout<<endl;}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<iostream.h>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]; //○1for(int i=0;i<n;i++)array[i] = b[i];}void MOVE::exchange(){float a = 0;int i,*p1,*p2;for(i=0;i<n;i++)a+=array[i];a/=n;cout<<"The average of the number is:"<<a<<endl;p1 = p2 = array; //○3for(i=0;i<n;i++){if(array[i] < *p1) p1 = &array[i];if(array[i] > *p2) p2 = &array[i];} //○4i = *p1;*p1 = *p2;*p2 = i; //○5}void MOVE::print(){for(int i=0;i<n;i++){cout<<array[i]<<'\t';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<iostream.h>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; //○3return 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:"<<endl;cout<<"sin("<<x<<")="<<fun()<<endl;}void main(){double x,n;cout<<"请输入x和n的值:"<<endl;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<iostream.h>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; //○1for(int i = 0;i < n;i++)d = (x[i] - average(x,n))*(x[i] - average(x,n));d /= n;cout<<"方差为:"<<d<<'\n';}void VAR::show(){cout<<"平均值为:"<<average(a,n)<<'\n'<<endl;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.此题不难,按照题目要求“堆”程序即可,没有复杂的算法,也没有特殊的结构。

相关主题