C++上机题目复习及答案2

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1第十周上机题目题目:1.建立一个矩阵类Array,存储一个n×n矩阵并能完成矩阵转置运算。要求如下:(1)私有成员数据int*x:指向存储一个n×n矩阵值的内存区域(二维数组作为一维数组存储)intn:存储矩阵行数(2)公有成员函数构造函数:用参数指定的值或缺省值3初始化n,并用n的值为矩阵动态申请内存空间;析构函数:释放对象存储矩阵时占用的内存空间;viodinput(int*a):将一个矩阵赋值给对象中的数组。voidprint():按行输出矩阵的值。voidchange():转置矩阵。编写一个程序测试该类。定义对象A,将一个矩阵存入A中,并输出矩阵的值,转置对象A中的矩阵并输出,使用以下测试数据:A=1197642531A转置后的矩阵=1165943721#includeiostream.h#defineN3classArray{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请输入N'*'N的矩阵endl;2for(i=0;iN;i++){for(j=0;jN;j++)cina[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;iN*N;i++)x[i]=*a++;}voidArray::print(){for(inti=0;iN*N;i++)((i+1)%3)?coutx[i]'\t':coutx[i]endl;}voidArray::change(){inttemp;for(inti=0;iN;i++)for(intj=0;ji;j++){temp=x[i*N+j];x[i*N+j]=x[j*N+i];x[j*N+i]=temp;}}2.编程题模拟人脑神经网络的神经元结构模型如下图所示:其中,xi表示输入信号,wi表示输入信号的加权系数,y表示神经元的输出,它们的之间的关系为:212211exp,,,2niiniyfxxwxxxx3这里,∑表示各项的和,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}对该类进行测试。#includeiostream.h#includemath.hclassNN{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;i5;i++)w[i]=t[i];dt=d;}voidNN::fun(floatt[]){for(inti=0;i5;i++)x[i]=t[i];doublen=0.0;for(i=0;i5;i++)n+=(x[i]-w[i])*(x[i]-w[i]);4y=exp(-n/(2*dt*dt));}voidNN::print(){coutx[i]=;for(inti=0;i5;i++)coutx[i]'';coutendl;couty=yendl;}附加题: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对象上。以上成员函数的参数名如有未给出的则自已命名。头文件包含语句为:#includeiostream.h#includestring.h主函数要求:(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}。5(3)调用函数display及相关函数输出对象A、B和C的全部数据,计算输出B和C的体积。每个对象的信息占一行。(4)调用add函数,计算D=B+C。输出D的全部数据,计算并输出D的体积。#includeiostream.h#includestring.hclassRectangle{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();}6voidRectangle::display(){cout矩形:;cout左下角的坐标:x1','y1,右上角的坐标:x2','y2',';cout长:(x2-x1),宽:(y2-y1)endl;}voidCube::set(char*s,doubleh1){h=h1;strcpy(name,s);}voidCube::display(){doublemj=getwidth()*getlength();cout长方体:;cout底面积为:mj',';cout体积为:mj*hendl;}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之间的所有素数。#includeiostream.h#includemath.h7classNUM{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;}8}voidNUM::print(){for(inti=0;inum;){coutdata[i]'\t';if(++i%6==0)coutendl;}coutendl;}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存

1 / 30
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功