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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

江苏科技大学
课程实践报告
设计题目:计算机程序设计实验(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 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( ) :在屏幕上显示数组元素。

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 4142129
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;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,是很巧妙地方法。

○2如何表示一个方阵的左下角(包括对角线上)的数?通过双循环,列不大于行数即可表示。

○3逐个判断左下角(包括对角线上)的数是否为素数,利用了上面定义的fun()函数实现,是就进入下面的循环。

○4如果是素数,就寻找下一个用来代替它的素数。

○5一旦找到就跳出循环,count计数
○6count加一计数。

相关文档
最新文档