C++上机题目复习及答案2.docx
- 文档编号:4082701
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:32
- 大小:39KB
C++上机题目复习及答案2.docx
《C++上机题目复习及答案2.docx》由会员分享,可在线阅读,更多相关《C++上机题目复习及答案2.docx(32页珍藏版)》请在冰豆网上搜索。
C++上机题目复习及答案2
第十周上机题目
题目:
1.建立一个矩阵类Array,存储一个n×n矩阵并能完成矩阵转置运算。
要求如下:
(1)私有成员数据
int*x:
指向存储一个n×n矩阵值的内存区域(二维数组作为一维数组存储)
intn:
存储矩阵行数
(2)公有成员函数
构造函数:
用参数指定的值或缺省值3初始化n,并用n的值为矩阵动态申请内存空间;
析构函数:
释放对象存储矩阵时占用的内存空间;
viodinput(int*a):
将一个矩阵赋值给对象中的数组。
voidprint():
按行输出矩阵的值。
voidchange():
转置矩阵。
编写一个程序测试该类。
定义对象A,将一个矩阵存入A中,并输出矩阵的值,转置对象A中的矩阵并输出,使用以下测试数据:
A=
A转置后的矩阵=
#include
#defineN3
classArray{
int*x;//指向存储一个n×n矩阵值的内存区域(二维数组作为一维数组存储)
intn;//存储矩阵行数
public:
Array(ints=3){
n=s;
x=newint[N*N];
}
voidinput(int*a);//将一个矩阵赋值给对象中的数组。
voidprint();//按行输出矩阵的值。
voidchange();//转置矩阵。
~Array(){
if(x)delete[]x;
}
};
voidmain(){
inta[N][3];
inti,j;
cout<<"请输入"< for(i=0;i for(j=0;j cin>>a[i][j]; } Arrayd(N); d.input(a[0]); cout<<"原始数组为: \n"; d.print(); d.change(); cout<<"转置后的数组为: \n"; d.print(); } voidArray: : input(int*a){ for(inti=0;i x[i]=*a++; } voidArray: : print(){ for(inti=0;i ((i+1)%3)? cout< cout< } voidArray: : change(){ inttemp; for(inti=0;i for(intj=0;j temp=x[i*N+j]; x[i*N+j]=x[j*N+i]; x[j*N+i]=temp; } } 2.编程题 模拟人脑神经网络的神经元结构模型如下图所示: 其中,xi表示输入信号,wi表示输入信号的加权系数,y表示神经元的输出,它们的之间的关系为: 这里,∑表示各项的和,exp(z)为求z的自然指数值ex的函数,包含在头文件math.h中,其函数原型为doubleexp(doublez)。 试定义一个NN类实现上述模型。 具体要求如下: 1)私有成员 ●floatx[5],dt: 数组x和数组w分别存放输入信号xi及其加权系数wi;dt存放非零参数σ。 ●doubley: 神经元的突出。 2)公有成员: ●NN(floatt[],floatd)用数组t初始化加权系统wi,用d初始化dt。 ●voidfun(floatt[]): 用数组t初始化xi,并根据上述公式计算y的值。 ●voidprint(): 输出输入信号和输出信号的值 在主函数中,用输入信号{1.2,3.5,2.3,3.2,2.8}以及加权系数{o.5,0.8,1.2,1.8,1.1}对该类进行测试。 #include #include classNN{ floatx[5],w[5],dt; doubley; public: NN(floatt[],floatd);//用数组t初始化加权系统wi,用d初始化dt。 voidfun(floatt[]);//用数组t初始化xi,并根据上述公式计算y的值。 voidprint();//输出输入信号和输出信号的值 }; voidmain(){ floata[5]={1.2,3.5,2.3,3.2,2.8}; floatb[5]={0.5,0.8,1.2,1.8,1.1}; NNt(b,0.2); t.fun(a); t.print(); } NN: : NN(floatt[],floatd){ for(inti=0;i<5;i++) w[i]=t[i]; dt=d; } voidNN: : fun(floatt[]){ for(inti=0;i<5;i++) x[i]=t[i]; doublen=0.0; for(i=0;i<5;i++) n+=(x[i]-w[i])*(x[i]-w[i]); y=exp(-n/(2*dt*dt)); } voidNN: : print(){ cout<<"x[i]="; for(inti=0;i<5;i++) cout< cout< cout<<"y="< } 附加题: 3.面向对象编程: 几何图形类 【要求】按以下描述和要求建立两个类: 基类Rectangle和派生类Cube: Rectangle 私有成员: doublex1,y1;//左下角的坐标 doublex2,y2;//右上角的坐标 公有成员 Rectangle(doublea=0,doubleb=0,doublec=0,doubled=0); //带缺省值的构造函数 doublegetwidth();//计算并返回矩形的宽 doublegetlength();//计算并返回矩形的长 virtualvoiddisplay();//输出矩形的各坐标及长宽 注: 正立方体Cube的底面矩形从基类继承 Cube: 私有成员: stringname;//立方体名称(字符串对象) doubleh;//立方体高度 公有成员: Cube(string="",double=0,……);//带缺省值的构造函数 voidset(string,double);//修改立方体标识符和高度值 voiddisplay();//输出立方体全部信息,并计算输出体积 Cubeadd(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}。 (3)调用函数display及相关函数输出对象A、B和C的全部数据,计算输出B和C的体积。 每个对象的信息占一行。 (4)调用add函数,计算D=B+C。 输出D的全部数据,计算并输出D的体积。 #include #include classRectangle{ doublex1,y1;//左下角的坐标 doublex2,y2;//右上角的坐标 public: Rectangle(doublea=0,doubleb=0,doublec=0,doubled=0){ x1=a,y1=b;x2=c,y2=d; } doublegetwidth(){return(x2-x1);}//计算并返回矩形的宽 doublegetlength(){return(y2-y1);}//计算并返回矩形的长 voiddisplay();//输出矩形的各坐标及长宽 }; classCube: publicRectangle{ charname[10];//立方体名称(字符串对象) doubleh;//立方体高度 public: Cube(doublea=0,doubleb=0,doublec=0,doubled=0, char*s=0,doubleh1=0): Rectangle(a,b,c,d){//带缺省值的构造函数 if(s)strcpy(name,s); h=h1; } voidset(char*,double);//修改立方体标识符和高度值 voiddisplay();//输出立方体全部信息,并计算输出体积 Cubeadd(Cube&S);//将参数对象S的高度加到this对象上。 }; voidmain(){ RectangleA(10,10,30,40); CubeB(20,10,30,40,"Box",60),C(B),D; B.set("Trunk",95); A.display(); B.display(); C.display(); D=B.add(C); D.display(); } voidRectangle: : display(){ cout<<"矩形: "; cout<<"左下角的坐标: "< "< cout<<"长: "<<(x2-x1)<<",宽: "<<(y2-y1)< } voidCube: : set(char*s,doubleh1){ h=h1; strcpy(name,s); } voidCube: : display(){ doublemj=getwidth()*getlength(); cout<<"长方体: "; cout<<"底面积为: "< cout<<"体积为: "< } CubeCube: : add(Cube&S){ h+=S.h; return*this; } 第十一周上机题目 题目: 1.建立一个类NUM,求指定范围内的所有素数(质数)。 具体要求如下: 1)私有数据成员。 ●intdata[25];依次存放指定范围内的所有素数。 ●intspanl,span2;存放要求计算的素数的范围。 ●intnum;存放span1与span2之间的素数个数。 2)公有成员函数。 ●构造函数NUM(inta,intb);初始化所要求的素数的范围span1、span2及num(值为0)。 ●voidprocess(): 求出指定范围内的所有素数,把它们依次存放在数组data中,并将求出的素数的个数赋给num。 ●voidprint(): 输出求出的所有素数。 3)在主程序中对该类进行测试。 使用测试数据span1=100,span2=200。 即求100~200之间的所有素数。 #include #include classNUM{ intdata[25];//依次存放指定范围内的所有素数。 intspan1,span2;//存放要求计算的素数的范围。 intnum;//存放span1与span2之间的素数个数。 public: NUM(inta,intb); voidprocess(); voidprint(); }; voidmain(){ NUMa(100,200); a.process(); a.print(); } NUM: : NUM(inta,intb){ span1=a; span2=b; num=0; } voidNUM: : process(){ inti,n,f=0; for(i=span1;i<=span2;i++){ for(n=2,f=0;n<=sqrt(i);n++) if(i%n==0){f=1;break;} if(f==1)continue; data[num++]=i; } } voidNUM: : print(){ for(inti=0;i cout< if(++i%6==0)cout< } cout< } 2.编程题 已知由一个数组派生出另一个数组的派生规则如下: 假定原始数组为a[10],新数组为b[10],则b[i]的值为数组a中大于a[i]的元素的个数。 例如,对于说明“inta[]={1,2,3,4,5};intb[5];”,其中a[1]=2,数组a中有3个元素比a[1]大,则b[1]=3。 试建立一个实现此功能的类ARRAY。 具体要求如下: 1)私有数据成员。 ●inta[10],b[10];a存放原始数组,b存放派生数组。 2)公有成员函数。 ●构造函数ARRAY(intdata[10]);初始化成员数组a。 ●voidprocess();由数组a根据上述派生类规则,用循环语句计算数组b的各元素。 ●voidprint();屏幕显示数组a和b。 #include classARRAY{ inta[10],b[10]; public: ARRAY(intdata[10]);//初始化成员数组a。 voidprocess();//由数组a根据上述派生类规则,用循环语句计算数组b的各元素。 voidprint();//屏幕显示数组a和b。 }; voidmain(){ inta[]={7,4,9,23,56,44,18,33,21,17}; ARRAYarray(a); array.process(); array.print(); } ARRAY: : ARRAY(intdata[10]){ for(inti=0;i<10;i++){ a[i]=data[i]; b[i]=0; } } voidARRAY: : process(){ for(inti=0;i<10;i++){ for(intk=0;k<10;k++) if(a[k]>a[i])b[i]++; } } voidARRAY: : print(){ cout<<"a[10]="; for(inti=0;i<10;i++)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 上机 题目 复习 答案