您好,欢迎来到年旅网。
搜索
您的当前位置:首页江苏科技大学 c++实验报告

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

来源:年旅网


江 苏 科 技 大 学

课程实践报告

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

设计时间: 2016年10月3日至2016年10月4日 学 院: 计算机科学与工程学院 专业班级: 通信工程 1522107041 学生姓名: 周祯楠 学号:************ ****: ***

1

一、第三题 (一)题目:

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;ivoid MOVE::average() {

int i,x; float a = 0;

for(i=0;i1 cout<<\"平均值为:\"<float f[20];

for(i=0,x=0;i2

{

f[x] = array[i]; x++; }

for(i=0;ia) {

f[x] = array[i]; x++;

} //○

2 for(i=0;iarray[i] = f[i]; //○

3 }

void MOVE::print() {

int i;

for(i=0;icout<if((i+1)%5==0) cout<4 }

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

3

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;

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

for(int i=0;ivoid MOVE::exchange()

4

{

float a = 0; int i,*p1,*p2; for(i=0;icout<<\"The average of the number is:\"<3 p1 = p2 = array; //○

for(i=0;iif(array[i] < *p1) p1 = &array[i]; if(array[i] > *p2) p2 = &array[i];

4 } //○

i = *p1; *p1 = *p2;

5 *p2 = i; //○

}

void MOVE::print() {

for(int i=0;icout<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

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- oldu.cn 版权所有 浙ICP备2024123271号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务