江苏科技大学课程实践报告设计题目:计算机程序设计实验(C++)设计时间: 2016年10月3日至2016年10月4日学院:计算机科学与工程学院专业班级:通信工程 41学生姓名:周祯楠学号:****:***一、第三题(一)题目:3.建立一个类MOVE,不进行排序,将数组中小于平均值的元素放到数组的左边,大于平均值的元素放到数组的右边。
具体要求如下:(1)私有数据成员。
○1float array[20]:一维整型数组。
○2int n:数组中元素的个数。
(2)公有成员函数○1MOVE(float b[],int m):构造函数,初始化成员数据。
○2void average():输出平均值,并将数组中的元素按要求重新放置。
○3void print():输出一维数组。
(3)在主程序中用数据{,,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<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; 要注意:○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<<"方差为:"<<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); (); }(三)运行结果:(四)基本分析: 1.需要注意:○1方差d 最好定义成double 型 2.此题不难,按照题目要求“堆”程序即可,没有复杂的算法,也没有特殊的结构。
五、第二十题 (一)题目:,实现对方阵进行逆时针90度旋转。
如图所示。
1 2 3 45 6 7 89 10 11 1213 14 15 16具体要求如下:(1)私有数据成员○1int a[4][4]:用于存放方阵。
(2)公有成员函数○1Array (int a1[][4],int n) :构造函数,用给定的参数a1初始化数据成员a 。
○2void xuanzhuan ( ) :实现对方阵a 进行逆时针90度的旋转。
○3void show( ) :在屏幕上显示数组元素。
4 8 12 16 3 7 11 15 2 6 10 14 1 5 9 13(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;i<n;i++)for(int j=0;j<n;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<<"输出的数组为:"<<endl;for(int i=0;i<4;i++){for(int j=0;j<4;j++)cout<<a[i][j]<<'\t';cout<<endl;}}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);();();}(三)运行结果:(四)基本分析:○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);判断一个数是否为素数的函数。
○3void encode( ):对x数组中左下三角的全部元素(包括对角线上的元素)逐一进行判断,若该数不是素数则保持不变,若该数是素数,则用大于它的最小素数替换该数。
○4void print( ):按行输出矩阵的值。
(3)编写一个程序测试该类,说明(声明)Array对象A,将一个矩阵存入对象36417 85910 1219720 4142123(二)源程序:#include<>class array{int x[4][4];int count;56417 87910 12231120 4142129public: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;i<num;i++)if(num%i==0) return 0;else return 1; //○1}void array::encode(){int i,j,n;for(i=0;i<4;i++){for(j=0;j<=i;j++) //○2{if(fun (x[i][j])) //○3{for(int m = x[i][j]+1;;m++)if(fun(m)) //○4{x[i][j] = m;break; //○5}count +=1; //○6 }}}}void array::print(){int i,j;cout<<"变换后的矩阵为:"<<endl;for(i=0;i<4;i++){for(j=0;j<4;j++)cout<<x[i][j]<<'\t';cout<<endl;}cout<<"左下角素数个数为:"<<count<<endl;}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);();();}(三)运行结果:(四)基本分析:○1判断是否为素数,运用条件语句,是就return1,否就return0,是很巧妙地方法。