C++上机题目复习及答案2 联系客服

发布时间 : 星期六 文章C++上机题目复习及答案2更新完毕开始阅读1aa95284b307e87100f6964f

第十周上机题目

题目:

1. 建立一个矩阵类Array,存储一个n×n矩阵并能完成矩阵转置运算。要求如下:

(1) 私有成员数据

int *x:指向存储一个n×n矩阵值的内存区域(二维数组作为一维数组存储) int n:存储矩阵行数 (2) 公有成员函数

构造函数:用参数指定的值或缺省值3初始化n,并用n的值为矩阵动态申请内存空间; 析构函数:释放对象存储矩阵时占用的内存空间; viod input(int *a):将一个矩阵赋值给对象中的数组。 void print():按行输出矩阵的值。 void change():转置矩阵。

编写一个程序测试该类。定义对象A,将一个矩阵存入A中,并输出矩阵的值,转置对象A中的矩阵并输出,使用以下测试数据:

?135??127?????A=246 A转置后的矩阵=349 ???????7911???5611??#include #define N 3

class Array{

int *x; //指向存储一个n×n矩阵值的内存区域(二维数组作为一维数组存储) int n; //存储矩阵行数 public:

Array(int s=3){ n=s; x=new int[N*N]; }

void input(int *a);//将一个矩阵赋值给对象中的数组。 void print();//按行输出矩阵的值。 void change();//转置矩阵。 ~Array(){ if(x) delete []x; } };

void main(){ int a[N][3]; int i,j;

cout<<\请输入\的矩阵\

1

for(i=0;i>a[i][j]; }

Array d(N); d.input(a[0]);

cout<<\原始数组为:\\n\ d.print(); d.change();

cout<<\转置后的数组为:\\n\ d.print(); }

void Array::input(int *a){ for(int i=0;i

void Array::print(){

for(int i=0;i

void Array::change(){ int temp;

for(int i=0;i

2. 编程题

模拟人脑神经网络的神经元结构模型如下图所示:

其中,xi表示输入信号,wi表示输入信号的加权系数,y表示神经元的输出,它们的之间的关系为:

?1n2?y?f?x??exp??2??xi?wi??,x??x1,x2,?xn?

?2?i?1?

2

这里,∑表示各项的和,exp(z)为求z的自然指数值ex的函数,包含在头文件math.h中,其函数原型为double exp(double z)。

试定义一个NN类实现上述模型。具体要求如下: 1) 私有成员

? float x[5],dt:数组x和数组w分别存放输入信号xi及其加权系数wi;dt存

放非零参数σ。

? double y:神经元的突出。 2) 公有成员:

? NN(float t[ ] , float d)用数组t初始化加权系统wi,用d初始化dt。 ? void fun(float t[ ]):用数组t初始化xi,并根据上述公式计算y的值。 ? void print( ):输出输入信号和输出信号的值

在主函数中,用输入信号{1.2,3.5 , 2.3 , 3.2 , 2.8 } 以及加权系数{ o.5 , 0.8 , 1.2 , 1.8 , 1.1 }对该类进行测试。 #include

#include

class NN{

float x[5],w[5],dt; double y; public:

NN(float t[],float d);//用数组t初始化加权系统wi,用d初始化dt。 void fun(float t[]); //用数组t初始化xi,并根据上述公式计算y的值。 void print( ); //输出输入信号和输出信号的值

};

void main(){

float a[5]={1.2,3.5,2.3,3.2,2.8}; float b[5]={0.5,0.8,1.2,1.8,1.1}; NN t(b,0.2); t.fun(a); t.print(); }

NN::NN(float t[],float d){ for(int i=0;i<5;i++) w[i]=t[i]; dt=d; }

void NN::fun(float t[]){ for(int i=0;i<5;i++) x[i]=t[i]; double n=0.0; for(i=0;i<5;i++) n+=(x[i]-w[i])*(x[i]-w[i]);

3

y=exp(-n/(2*dt*dt)); }

void NN::print(){ cout<<\ for(int i=0;i<5;i++) cout<

cout<<\}

附加题:

3. 面向对象编程:几何图形类

【要求】按以下描述和要求建立两个类:基类Rectangle和派生类Cube:

Rectangle 私有成员:

double x1, y1 ; //左下角的坐标 double x2, y2 ; //右上角的坐标 公有成员

Rectangle(double a=0, double b=0, double c=0, double d=0);

//带缺省值的构造函数

double getwidth(); //计算并返回矩形的宽 double getlength() ; //计算并返回矩形的长

virtual void display() ; //输出矩形的各坐标及长宽

注:正立方体Cube的底面矩形从基类继承 Cube:

私有成员:

string name; //立方体名称(字符串对象) double h; //立方体高度 公有成员:

Cube (string=\……); //带缺省值的构造函数 void set (string, double) ; //修改立方体标识符和高度值 void display(); // 输出立方体全部信息,并计算输出体积 Cube add ( Cube &S ); //将参数对象S的高度加到this对象上。 以上成员函数的参数名如有未给出的则自已命名。 头文件包含语句为:

#include #include 主函数要求:

(1) 定义Rectangle类对象A{坐标:10, 10, 30, 40};

定义Cube类对象B{坐标:20, 10, 30, 40;名称和高度: Box, 60}、C(C数据由B拷贝生成)和D(D数据暂无)。

(2) 调用函数set修改对象C的名称和高度值。数据为{ Trunk, 95}。

4