C++案例分析电子教案.docx
- 文档编号:26782829
- 上传时间:2023-06-22
- 格式:DOCX
- 页数:18
- 大小:31.08KB
C++案例分析电子教案.docx
《C++案例分析电子教案.docx》由会员分享,可在线阅读,更多相关《C++案例分析电子教案.docx(18页珍藏版)》请在冰豆网上搜索。
C++案例分析电子教案
《C++程序设计及实验》上机操作题:
1、设计一个三角形类Triangle,包含三角形三条边长的私有数据成员,另有重载运算符“+”与“-”,以实现求两个三角形对象的面积之和与之差。
提示:
在Triangle类中设计两个友元函数,重载运算符"+"与"-"。
#include
#include
classTriangle
{
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()
{
cout<<"Area="<
}
frienddoubleoperator+(Trianglet1,Trianglet2)
{
returnt1.area+t2.area;
}
frienddoubleoperator-(Trianglet1,Trianglet2)
{
returnt1.area-t2.area;
}
};
voidmain()
{
Trianglet1(3,4,5),t2(4,5,6);
doubles;
cout<<"t1:
";t1.disparea();
cout<<"t2:
";t2.disparea();
s=t1+t2;
cout<<"总面积="<
s=t1-t2;
cout<<"总面积="<
}
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学生的数学成绩,找出数学成绩最高和最低的学生,输出他们的信息。
主程序:
定义三个以上的对象,并且每个成员函数至少被调用一次。
#include
classStudent{
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<<"学号:
"< " < "< } voidStudent: : Change(){ cout<<"请输入学生的学号、语文成绩(五级分制: A/B/C/D/E,其它无效)和数学成绩: \n"; cin>>id>>yuwen>>shuxue; } voidStudent: : Comp(Student&a,Student&b){ Studentmax,min; max=shuxue>a.shuxue? (shuxue>b.shuxue? *this: b): (a.shuxue>b.shuxue? a: b); min=shuxue (shuxue *this: b): (a.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对象上。 以上成员函数的参数名如有未给出的则自已命名。 头文件包含语句为: #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、模拟人脑神经网络的神经元结构模型如下图所示: 其中,xi表示输入信号,wi表示输入信号的加权系数,y表示神经元的输出,它们的之间的关系为: 这里,∑表示各项的和,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}对该类进行测试。 #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(inti=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="< } 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+ 案例 分析 电子 教案