实验报告.doc

上传人:文库蛋蛋多 文档编号:3088671 上传时间:2023-03-10 格式:DOC 页数:30 大小:956.50KB
返回 下载 相关 举报
实验报告.doc_第1页
第1页 / 共30页
实验报告.doc_第2页
第2页 / 共30页
实验报告.doc_第3页
第3页 / 共30页
实验报告.doc_第4页
第4页 / 共30页
实验报告.doc_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《实验报告.doc》由会员分享,可在线阅读,更多相关《实验报告.doc(30页珍藏版)》请在三一办公上搜索。

1、目 录实验1 实验名称11.1 实验目的和要求11.2 所占学时数11.3 实验任务(实验指导书中涂红色的部分)11.3.1 任务一11.3.1 任务二1实验2 实验名称32.1 实验目的和要求32.2 所占学时数32.3 实验任务(实验指导书中涂红色的部分)32.3.1 任务一32.3.1 任务二3实验3 实验名称53.1 实验目的和要求53.2 所占学时数53.3 实验任务(实验指导书中涂红色的部分)53.3.1 任务一53.3.1 任务二5实验4 实验名称74.1 实验目的和要求74.2 所占学时数74.3 实验任务(实验指导书中涂红色的部分)74.3.1 任务一74.3.1 任务二7实

2、验5 实验名称95.1 实验目的和要求95.2 所占学时数95.3 实验任务(实验指导书中涂红色的部分)95.3.1 任务一95.3.1 任务二9实验6 实验名称116.1 实验目的和要求116.2 所占学时数116.3 实验任务(实验指导书中涂红色的部分)116.3.1 任务一116.3.1 任务二11实验1 实验名称 编程环境的熟悉及简单 C+程序的编制 1.1 实验目的和要求:1 熟悉 VC+2010 编程环境,编制简单 C+程序并运行,熟悉 C+的编辑、 编译、 连接、运行、断点调试等过程 2掌握 C+数据类型,熟悉如何定义和使用常量和变量,以及对它们赋值的方法3 学会使用 C+的有关

3、算术运算符及表达式,特别是自加(+)和自减(-)运算符 的使用。 4分支和循环结构的使用 1.2 所占学时数: 2个实验课时1.3 实验任务注:实验任务中涂红色的部分1.3.1 任务一 (1)题目名称:功能需求:运行时显示Menu: A(dd) D(elete) S(ort) Q(uit), Select one:提示 用户输入,A 表示增加,D 表示删除,S 表示排序,Q 表示退出,输入为 A、 D、S 时分别提示 数据已经增加、删除、排序。输入为 Q 时程序结束。 按照上述功能需求写两个程序,分别使用if分支语句和switch分支语句实现: 程序1要求:使用 if else 语句进行判断,

4、用 break、continue 控制程序流程。 程序2要求:使用 Switch 语句实现。(2)构思过程(可用文字、流程图、UML图等方式表达)提示用户输入相应的文字,用ifelse或switch语句进行判断并输出结果。(3)程序源码#includeusing namespace std;int main()char a; coutMenu:A(dd) D(elete) S(ort) Q(uit),Select one:; couta; if(a=A) cout数据已经增加endl; if(a=D) cout数据已经删除endl; if(a=S) cout数据已经排序endl; if(a=Q

5、) return 0; return 0;#includeusing namespace std;int main()char a; coutMenu:A(dd) D(elete) S(ort) Q(uit),Select one:; couta; switch(a) case A: cout数据已经增加endl; case D: cout数据已经删除endl; case S: cout数据已经排序endl; case Q: return 0; return 0;(4) 运行结果(截图)(5) 心得体会: 用不同的方式可能会实现相同的结果,要选取适合的方式去实现。1.3.1 任务二 (1)题目

6、名称: 找出210000之内的所有完全数。所谓完全数,即其各因子之和正好 等于本身的数。如 6=1+2+3,28=1+2+4+7+14,所以6,28都是完全数。(2)构思过程(可用文字、流程图、UML图等方式表达)可用两个嵌套的for语句来实现(3)程序源码#includeusing namespace std;int main()for(int i=1;i=10000;i+)int sum=0; for(int j=1;ji;j+) if(i%j=0) sum+=j; if(sum=i)couti=iendl; return 0;(4)运行结果(截图)(5)心得体会灵活运用for语句会使问题

7、简单。实验2 实验名称 函数的应用2.1 实验目的和要求1. 掌握函数声明、定义和调用的方法;2.掌握函数递归调用的方法; 3.掌握重载函数的声明、定义和使用方法; 4.理解函数参数传递中传值与引用的区别。 2.2 所占学时数2个实验课时。2.3 实验任务(实验指导书中涂红色的部分)2.3.1 任务一 (1)题目名称用递归方法编写函数 Fibonnacci(斐波那契)级数: Fn=Fn-1+Fn-2,F1=F2=1, 并求出第 26 项的值。 (2)构思过程(可用文字、流程图、UML图等方式表达)用递归函数编写程序。在主程序中调用递归函数,让用户输入所求的级数。(3) 程序源码 #includ

8、eusing namespace std;int Fib(int n);int main()int n;coutn;cout第n”项斐波那契的值为:”Fib(n)endl;return 0;int Fib(int n)int F; if(n=1|n=2)F=1;elseF=Fib(n-1)+Fib(n-2);return F;(4) 运行结果(截图) (5)心得体会恰当的使用递归函数会让程序简单易懂易写。2.3.1 任务二 (1)题目名称设计一函数,判断一整数是否为素数。并完成下列程序设计: 编写求素数的函数,并用这个函数求 3-200 之间的所有素数 在 4-200 之间,验证歌德巴赫猜想:

9、任何一个充分大的偶数都可以表示为两个素数之 和。输出 4=2+2 6=3+3 200=3+197 注:素数又称质数,指在一个大于 1 的自然数中,除了 1 和此整数自身外,不能被其 他自然数(不包括 0)整除的数。 (2)构思过程(可用文字、流程图、UML图等方式表达)编写两个函数,一个判断整数是否是素数,另一个调用上述函数验证歌德巴赫猜想。(3)程序源码#includeusing namespace std;bool prime(int a);int func(int n);int main()cout3到200之间所有的素数为:;for(int i=3;i=200;i+) if(prime

10、(i) couti ; coutendl;cout4到200之间的歌德巴赫猜想为:endl;for(int n=4;n=200;n=n+2) func(n);return 0;bool prime(int a)bool prime=true;for(int i=2;ia;i+) if(a%i=0) prime=false; break; return prime;int func(int n)for(int i=2;i=(n/2);i+) if(prime(i)if(prime(n-i) coutn=i+n-i ; return 0;(4)运行结果(截图)(5)心得体会要恰当地使用函数,比如此

11、程序用了bool类型的函数,让程序比较简单。遇到错误时要耐心改正。实验3 实验名称 类与对象、构造与析构函数3.1 实验目的和要求1 掌握类的定义和使用。2 掌握类的定义和对象的声明。 3 掌握具有不同访问属性的成员的访问方式。 4 深入体会构造函数、复制构造函数、析构函数的执行机制。 5 使用的 VC+的 debug 调试功能观察程序流程,跟踪观察类的构造函数、析构函数、 成员函数的执行顺序。 3.2 所占学时数4个实验课时3.3 实验任务(实验指导书中涂红色的部分)3.3.1任务一 (1)题目名称设计一个用于人事管理的 People(人员)类。考虑到通用性,这里只抽象出所有类型 人员都具有

12、的属性:number(编号)、sex(性别)、birthday(出生日期)、id(身份证号)等。 其中出生日期定义为一个日期类内嵌子对象。 用成员函数实现对人员信息 的录入和显示。 要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、带缺省形参值的成员函数 、聚集。(2) 构思过程(可用文字、流程图、UML图等方式表达)定义一个date类和一个people类,根据要求编写相应的各种函数。(3)程序源码#includeusing namespace std;#includeclass dateprivate:int year;int month;int day;public:date(in

13、t Year,int Month,int Day):year(Year),month(Month),day(Day);void show()cout出生年月为:year年month月day日;class peopleprivate:int number,id;string sex;date birthday;public:people(int Number,string Sex,int Id,date Birthday):number(Number),sex(Sex),id(Id),birthday(Birthday);void show();void people:show() cout编括

14、号为a:numberendl; cout性别为:sexendl; cout身份证号为:idendl; birthday.show();void main()int n;coutn;coutendl; for(int i=1;i=n;i+) int nnum,iid,yyear,mmonth,dday; string ssex; cout请输入人员信息:endl; coutendl; coutnnum; coutendl; coutssex; coutendl; coutiid; coutendl; coutyyearmmonthdday; coutendl; cout人员信息为:; coute

15、ndl; date d(yyear,mmonth,dday); people p(nnum,ssex,iid,d); p.show(); coutendl; coutendl; (4) 运行结果(截图)(5)心得体会编写时要注意类的数据成员的访问方法和接口。代码重用可以提高工作效率。3.3.1任务二 (1)题目名称使用 VS2010 或 StarUML 工具的画出书中例 4-9 中 SavingsAccount 的 UML 图。 (2)构思过程(可用文字、流程图、UML图等方式表达)(3)程序源码(4)运行结果(截图)实验4 实验名称 数据共享与保护4.1 实验目的和要求1 观察程序运行中变量

16、的作用域、生存期。 2 学习类的静态成员的使用。 3 理解类的友元函数、友元类。 4. 学习多文件结构在 C+程序中的使用。 4.2 所占学时数 2 个实验课时。 4.3 实验任务(实验指导书中涂红色的部分)4.3.1任务一 (1)题目名称定义一个 Girl 类和一个 Boy 类,这两个类中都有表示姓名、年龄的私有成员变量, 都要定义构造函数、析构函数、输出成员变量信息的公有成员函数。 1. 根据要求定义相应的类; 2. 将 Girl 类作为 Boy 类的友元类,在 Girl 类的成员函数 visitboy(boy &)中访问 boy 类 的私有成员,观察程序运行结果; 3. 在 boy 类的

17、某成员函数 visitgirl(girl &)中试图访问 girl 类的私有成员,观察编译器给 出的错误信息,理解友元的不可逆性; 4. 主函数中正确定义两个类的对象,调用各自的成员函数实现相应的功能; 5. 再将 boy 类作为 girl 类的友元类,在 boy 类的某成员函数 visistgirl(girl &)中访问 girl 类的私有成员,观察编译器给出的信息; 6. 删除两个类中的函数 visitgirl(girl &),visitboy(boy &) ,定义一个顶层函数 visitboygirl(boy &,girl &),作为以上两个类的友元,通过调用该函数输出男孩和女孩的信息。

18、 (2)构思过程(可用文字、流程图、UML图等方式表达)应题目要求,定义一个girl类和一个boy类,每个类中都有name(string型)和age(int型)两个私有成员变量,在编写友元类与友元函数时,要注意前向引用声明。用构造函数初始化对象,并用show函数显示信息。(3)程序源码#include#includeusing namespace std;class Boy;class Girlpublic:Girl(string Na,int Ag)set(Na,Ag);/构造函数Girl(); /析构函数 friend void visitboygirl(Boy &b,Girl &g);/

19、friend class Boy;/*void visitboy(Boy &b)cout Boys name: b.nameendl; 第二个*/void set(string Name,int Age)name=Name;age=Age;void show();private:string name;int age;void Girl:show ()cout女生的姓名为:nameendl;cout女生的年龄为:ageendl;class Boypublic:Boy(string Na,int Ag)set(Na,Ag);Boy();friend void visitboygirl(Boy &

20、b,Girl &g);/friend class Girl;/void visitgirl(Girl &g)coutgirls name:g.nameendl; 第三个与第五个void set(string Name,int Age)name=Name;age=Age;void show();private:string name;int age;void Boy:show ()cout男生的姓名为:nameendl;cout男生的年龄为a:ageendl;void visitboygirl(Boy &b,Girl &g) coutboys name:b.name boys age:b.age

21、 endl; coutgirls name:g.name girls age:g.age endl;int main()Girl g(小兰,17);Boy b(柯南,17);g.show();b.show();/g.visitboy(b); 第二个/b.visitgirl(g); 第三个与第五个coutendl;visitboygirl(b,g);return 0;(4) 运行结果(截图)(5) 心得体会这个实验不太复杂。明示了友元类是不可逆的。若A是B的友元类,那B不一定是A的友元类,。还有,要注意前向引用声明。实验5 实验名称 数组、指针与字符串5.1 实验目的和要求1 学习使用数。 2

22、指的使用方法,体会运符&、*的不同作用。 3. 学习字符数据的和理。 4. 习通过态分内存实现态数,并体会指在其中的作用。 5分使用字符数和标 C+习理字符的方法。 5.2 所占学时数4 个实验课时。 5.3 实验任务(实验指导书中涂红色的部分)5.3.1任务一 (1)题目名称(1)题目名称 用类来实现矩阵,定义一个矩阵的类,属性包括:矩阵大小,用 lines, rows(行、列来表示);存贮矩阵的数组指针,根据矩阵大小动态申请(new)。矩阵类的方法包括:构造函数:参数是矩阵大小,需要动态申请存贮矩阵的数组;析构函数:需要释放矩阵的数组指针;拷贝构造函数:需要申请和复制数组(深复制);输入函

23、数:可以从cin 中输入矩阵元素;输出函数:将矩阵格式化输出到cout;矩阵相加函数:实现两个矩阵相加的功能,结果保存在另一个矩阵里,但必须矩阵大小相同;矩阵相减的函数:实现两个矩阵相减的功能,结果保存在另一个矩阵里,但必须矩阵大小相同。主函数功能:定义三个矩阵:A1、A2、A3;初始化 A1、A2;计算并输出 A3 = A1+A2,A3=A1+A2;用 new 动态创建三个矩阵类的对象:pA1、pA1、pA3;初始化 pA1、pA2;计算并输出 pA3=pA1+pA2,pA3=pA1+pA2;释放 pA1、pA1、pA3。(2) 构思过程(可用文字、流程图、UML图等方式表达)定义矩阵Mat

24、rix类,包含lines和rows私有数据,并应题目要求,定义各种函数。(3) 程序源码#include #include #include #include using namespace std;class Matrixpublic:Matrix();Matrix(int Lines,int Rows);Matrix(const Matrix &m);void setMatrix();void setLaR();void showMatrix();Matrix();friend void plusMatrix(const Matrix &a,const Matrix &b,Matrix &

25、m);friend void subMatrix(const Matrix &a,const Matrix &b,Matrix &m);private:int lines;int rows;int *p;void Matrix:setMatrix()cout请输入这个矩阵的元素:endl;for(int i=0;ilines;i+)for(int j=0;jrows;j+)cout请输入第i+1行,第j+1pij;void Matrix:setLaR()cout请输入矩阵的行数和列数:LR;lines=L;rows=R;Matrix:Matrix(int Lines,int Rows):lin

26、es(Lines),rows(Rows)lines=Lines;rows=Rows;p=new int*lines;for(int i=0;ilines;i+)pi=new introws;setMatrix();Matrix:Matrix(const Matrix &m)lines=m.lines;rows=m.rows;p=new int*lines;for(int i=0;ilines;i+)pi=new introws;for(int i=0;ilines;i+)for(int j=0;jrows;j+)pij=m.pij;Matrix:Matrix()for(int i=0;ilin

27、es;i+)delete pi;delete p;void Matrix:showMatrix()for(int i=0;ilines;i+)for(int j=0;jrows;j+)coutpij;coutendl;void plusMatrix(const Matrix &a,const Matrix &b,Matrix &m)if(a.rows=b.rows)&(a.lines=b.lines)for(int i=0;ia.lines;i+)for(int j=0;ja.rows;j+)m.pij=a.pij+b.pij;elsecout矩阵不相容!endl;void subMatrix

28、(const Matrix &a,const Matrix &b,Matrix &m)if(a.rows=b.rows)&(a.lines=b.lines)for(int i=0;ia.lines;i+)for(int j=0;ja.rows;j+)m.pij=a.pij-b.pij;elsecout矩阵不相容!showMatrix();pA2-showMatrix();pA3-showMatrix();plusMatrix(*pA1,*pA2,*pA3);coutshowMatrix();delete pA1;delete pA2;delete pA3;return 0;(4) 运行结果(截

29、图)(5)心得体会这个实验用了很长时间,比较复杂,让我更加了解了指针和数组的用法以及动态创建对象的一些情况,虽然过程中出现了很多错误,但还是一一克服了。实验6 实验名称 类的继承与派生6.1 实验目的和要求1、 从深层次上理解继承与派生的关系 2、 掌握不同继承方式下,从派生类/对象内部和外部对基类成员的访问控制权限。 3、 掌握单继承和多继承的使用方法,尤其是派生类构造函数的声明方式。 4、 掌握继承与派生下构造函数与析构函数的调用顺序。 5、 理解“类型兼容”原则 6、学习利用虚基类解决二义性问题。6.2 所占学时数 4 个实验课时。 6.3 实验任务(实验指导书中涂红色的部分)6.3.1

30、任务一 (1)题目名称编写 C+程序,以完成以下功能(具体的数据成员、函数成员,请自主定义): (1) 声明一个基类 Shape(形状),其中包含一个方法来计算面积; (2) 从 Shape 派生两个类:矩形类(Rectangle)和圆形类(Circle); (3) 从 Rectangle 类派生正方形类 Square; (4) 分别实现派生类构造函数、析构函数及其它功能的成员函数; (5) 创建各派生类的对象,观察构造函数、析构函数的调用次序; (6) 计算不同对象的面积。 将 任务一 中 Shape 基类计算面积的方法定义为虚函数,比较与【形状(一)】程序的 差异,体验其优点。 (2) 构

31、思过程(可用文字、流程图、UML图等方式表达)声明shape基类,包含成员函数area。从shape派生rectangle类和circle类,再从rectangle类派生square类,每个类都有构造函数与析构函数,在构造函数与析构函数中编写输出语句以观察它们的调用次序。(3)程序源码#includeusing namespace std;const double PI=3.14;class shapepublic:shape()coutshape构造函数.endl;shape()coutshape析构函数.endl;virtual void area()cout0endl;/rectangl

32、e子类class rectangle:public shapepublic:rectangle();rectangle(int Len,int Wid):length(Len),width(Wid)coutrectangle构造函数.endl;rectangle()coutrectangle析构函数.endl;void area() cout length*widthendl;private:int length;int width;/square子类(继承rectangle)class square:public rectanglepublic:square(int A):a(A)couts

33、quare构造函数.endl;square()coutsquare析构函数.endl;void area()couta*aendl;private:int a;/circle子类class circle:public shapepublic:circle(int R):r(R)coutcircle构造函数.endl;circle()coutcircle析构函数.endl;void area()coutr*r*PIarea();square s(3);p=&s;p-area();circle cir(2);p=○p-area();(4) 运行结果(截图)(5)心得体会更加明白基类与子类的

34、构造函数与析构函数的调用顺序:先调用基类的构造函数,再调用子类的构造函数;析构时顺序则相反。在没有将shape 基类计算面积的方法定义为虚函数时,各类面积均为0(代码:void area()cout0endl;)(这里没有现实结果截图)。将之定义为虚函数后,结果即为上面与代码相匹配的截图。所以要正确使用虚函数。实验7 实验名称 多态性7.1 实验目的和要求1、 掌握将运算符重载为成员函数与非成员函数的区别。 2、 掌握静态编联与动态联编的概念、区别及实现方式。 3、 掌握利用虚函数实现动态多态的方法。4、 掌握利用纯虚函数与抽象类实现动态多态的方法。 7.2 所占学时数两个学时7.3 实验任务

35、(实验指导书中涂红色的部分)7.3.1任务一 (1)题目名称定义一个基类为哺乳动物类 mammal,其中有数据成员年龄、重量、品种,有成员函数 move()、speak()、eat()等,以此表示动物的行为。由这个基类派生出狗、猫、马、猪等 哺乳动物,它们都有各自的行为。编程分别使各个动物表现出不同的行为。 (2) 构思过程(可用文字、流程图、UML图等方式表达)1、 为实现动态联编,首先建立 Mammal 抽象类,以此抽象类作为基类,派生 dog、cat、 horse、pig 类。其中 Mammal 类数据员有(姓名)name 、(年龄)age、(重量)weight。成员函数 move()、

36、eat()、speak(),定义为纯虚函数:另一个成员函数 display(),声明为虚函数。2、 建立各个派生类 dog、cat、horse、pig。然后建立构造函数为其初始化。再定义函数 move()、speak()、eat()等。 3、main() 函数中建立指向 Mammal 的指针数组,并为各派生类初始化。把指针数组分别指向各个 派生类。设计一个循环来显示派生类对象的信息。 (3)程序源码#include#includeusing namespace std;class mammalpublic:virtual void eat()=0;virtual void speak()=0;

37、virtual void move()=0;virtual void display();private:string name;int age;double weight;class dog:public mammalpublic:dog(string Name,int Age,double Weight):name(Name),age(Age),weight(Weight);void move()cout Dog can run.endl;void eat()cout Dog eat meat.endl;void speak()cout Dog speak.endl;void display()coutIts name: name age:age weight:weightkgendl;dog();

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教育教学 > 成人教育


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号