C--案例分析解析

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

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

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

资源描述

《C++程序设计及实验》上机操作题:1、设计一个三角形类Triangle,包含三角形三条边长的私有数据成员,另有重载运算符“+”与“-”,以实现求两个三角形对象的面积之和与之差。提示:在Triangle类中设计两个友元函数,重载运算符+与-。#includeiostream.h#includemath.hclassTriangle{intx,y,z;doublearea;public:Triangle(inti,intj,intk){doubles;x=i;y=j;z=k;s=(x+y+z)/2.0;area=sqrt(s*(s-x)*(s-y)*(s-z));}voiddisparea(){coutArea=areaendl;}frienddoubleoperator+(Trianglet1,Trianglet2){returnt1.area+t2.area;}frienddoubleoperator-(Trianglet1,Trianglet2){returnt1.area-t2.area;}};voidmain(){Trianglet1(3,4,5),t2(4,5,6);doubles;coutt1:;t1.disparea();coutt2:;t2.disparea();s=t1+t2;cout总面积=sendl;s=t1-t2;cout总面积=sendl;}2、试建立一个类Student用于描述学生信息,具体要求如下:私有数据成员intid:学生学号。charyuwen:语文成绩(五级分制:A、B、C、D和E,其它无效)。floatshuxue:数学成绩(百分制)。公有成员函数1)缺省构造函数:初始化数据成员为0或NULL值。2)带参构造函数:用参数初始化数据成员。3)voidPrint():输出本对象的学号、语文成绩和数学成绩。4)修改函数voidChange():从键盘输入新的学号、语文成绩和数学成绩,修改相应数据成员的值。5)比较函数voidComp(Student&a,Student&b):比较a学生和b学生的数学成绩,找出数学成绩最高和最低的学生,输出他们的信息。主程序:定义三个以上的对象,并且每个成员函数至少被调用一次。#includeiostream.hclassStudent{intid;//学生学号。charyuwen;//语文成绩(五级分制:A、B、C、D和E,其它无效)。floatshuxue;//数学成绩(百分制)。public:Student(){id=0,yuwen=NULL;shuxue=0;}Student(int,char,float);voidPrint();voidChange();voidComp(Student&a,Student&b);};voidmain(){StudentA(78,'E',86),B(84,'D',82),C;C.Change();A.Comp(B,C);}Student::Student(inta,charb,floatc){id=a,yuwen=b;shuxue=c;}voidStudent::Print(){cout学号:id,语文成绩:yuwen,数学成绩:shuxueendl;}voidStudent::Change(){cout请输入学生的学号、语文成绩(五级分制:A/B/C/D/E,其它无效)和数学成绩:\n;cinidyuwenshuxue;}voidStudent::Comp(Student&a,Student&b){Studentmax,min;max=shuxuea.shuxue?(shuxueb.shuxue?*this:b):(a.shuxueb.shuxue?a:b);min=shuxuea.shuxue?(shuxueb.shuxue?*this:b):(a.shuxueb.shuxue?a:b);cout数学成绩最高和最低的学生分别是:\n;max.Print();min.Print();}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}。(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();}voidRectangle::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、模拟人脑神经网络的神经元结构模型如下图所示:其中,xi表示输入信号,wi表示输入信号的加权系数,y表示神经元的输出,它们的之间的关系为:212211exp,,,2niiniyfxxwxxxx这里,∑表示各项的和,exp(z)为求z的自然指数值ex的函数,包含在头文件math.h中,其函数原型为doubleexp(doublez)。试定义一个NN类实现上述模型。具体要求如下:1)私有成员floatx[5],w[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(inti=0;i5;i++)n+=(x[i]-w[i])*(x[i]-w[i]);y=exp(-n/(2*dt*dt));}voidNN::print(){coutx[i]=;for(inti=0;i5;i++)coutx[i]'';coutendl;couty=yendl;}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。#includeiostream.hclassARRAY{inta[10],b[10];publi

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

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

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

×
保存成功