




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C+程序设计实验指导书东北大学软件学院2013年9月17实验要求C+程序设计课程实验的目的是为了使学生在课堂学习的同时,通过一系列的实验,使学生加深了解和更好地掌握C+程序设计课程教学大纲要求的内容。在C+程序设计的课程实验过程中,要求学生做到:(1)预习实验指导书有关部分,认真做好实验内容的准备,就实验可能出现的情况提前作出思考和分析。(2)仔细观察程序调试过程中出现的各种问题,记录主要问题,作出必要说明和分析。(3)认真书写实验报告。(4)遵守机房纪律,服从辅导教师指挥,爱护实验设备。(5)实验课程不迟到。如有事不能出席,所缺实验一般不补。(6)本实验采用的开发环境为Microsoft Visual C+ 6.0,同学在做实验之前要求熟悉该集成开发环境。实验的验收将分为两个部分。第一部分是上机操作,包括检查程序运行和即时提问。第二部分是提交书面的实验报告。实验1 C+程序设计基础(4学时)1.实验目的1) 学习编写简单的C+程序,并掌握C+程序的基本格式与规范。2) 理解C程序结构的特点。3) 掌握函数的定义和调用方法。4) 练习重载函数的使用。5) 掌握指针的使用方法。6) 练习通过动态内存分配实现动态数组,并体会指针在其中的作用。7) 熟悉流类库中常用的类及其成员函数的用法。8) 学习标准输人输出及格式控制。9) 学习对文件的应用方法(二进制文件、文本文件)。10) 学习使用VC +的debug调试功能,使用step into追踪到函数内部。2.实验类型验证型和设计型。3.实验基本要求1) 输人并运行所给的参考程序1,并将程序中的注释部分也输人计算机,体会和理解程序的基本格式规范。2) 编写重载函数Maxl可分别求取两个整数,三个整数,两个双精度数,三个双精度数的最大值。3) 编写并测试3X3矩阵转置函数,使用数组保存3X3矩阵。4) 使用动态内存分配生成动态数组来重新完成上题,使用指针实现函数的功能。5) 编写程序,用二进制方式读写指定的文件a.bin,在每一行前加行号,写入另一个二进制文件b.bin中,从b.bin中读取数据输出到屏幕。4.实验基本步骤1) 建立一个控制台应用程序项目baseforml,向其中添加一个源程序文件sum.cpp。按照所给的程序代码输人到计算机中,检查和调试程序,在确认没有发现错误之后,选择Build-Build sum.exe编译源程序,再选择Build-Execute sum.exe运行程序,并观察输出结果。若有问题,则需要重新检查程序。 说明:在C+程序中如果使用了系统提供的一些功能(如cin和cout),就必须在程序的首部首先声明相关的包含这些功能的头文件(如iostream.h),否则,系统无法找到实现这些功能的代码。/参考程序1 /sum. cpp include int add(int a,int b); int main() int x,y,sum; coutx; ciny; sumadd(x,y); coutThe sum is:sum”运算符使得像cin等输入流对象能够写CPoint类对象,再重载“”操作符的原型为:istream& operator(istream&, CPoint&);重载的“(ostream&, CPoint);思考一下,重载的“”操作符和“”操作符能否作为CPoint类的成员函数来实现。5.实验思考题1) 类和结构体的区别是什么?2) 类的成员函数与普通的函数有何区别?3) 构造函数和析构函数的作用是什么?4) 类的访问控制权限有何意义?5) 什么是封装?类是如何进行封装的?6)类的静态成员函数和普通成员函数有什么不同?7)根据自己的理解叙述运算符重载的作用?实验3 继承与多态(4学时)1.实验目的1) 学习定义和使用类的继承关系,定义派生类。2) 熟悉不同继承方式下对基类成员的访问控制。3) 学习使用虚函数实现动态多态性。4) 学习利用虚基类解决二义性问题。2.实验类型设计型。3.实验基本要求1) 使用实验2中的CPoint类,定义 “空间中点”类如下:class CThreePoint:public CPointprivate:int z;public:CThreePoint();CThreePoint(int, int, int);int GetZ();void SetZ(int pz);virtual void ShowPoint();请完成该类中各成员函数的定义。并利用VC调试工具观察含有继承关系类的构造函数和析构函数的执行情况。分析为什么要把ShowPoint()函数设置为虚函数?有什么作用?请在main()函数中做测试。2) 下面是一个“Shape”基类的定义:enum ColorTypeWhite, Black, Red, Green, Blue, Yellow, Magenta, Cyan;/为图形形状定义Shape基类class Shapeprotected:ColorType color;public:Shape(ColorType c);virtual void draw();使用Shape类和CPoint类设计一个可在屏幕上作图的简单实例,要求是不必真正在屏幕上实现作图,只是有一个示意即可。例如:画一个矩形,不必真正画出矩形,只需输出一句话:“This is a rectangle!”即可。要求可画线段、矩形和圆形。要用到继承,虚函数,多态,数据的封装,构造函数的实现等等各种面向对象程序设计的特性。3) 定义一个车(vehicle)基类,具有MaxSpeed、Weight等成员变量,Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类。自行车(bicycle)类有高度(Height)等属性,汽车(motorcar)类有座位数(SeatNum)等属性。从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run、Stop等成员函数。观察虚函数的作用。在继承过程中,注意把vehicle设置为虚基类。如果不把vehicle设置为虚基类,会有什么问题?编程试试看。4.实验基本步骤1) 编程时重点分析CThreePoint类的构造函数如何编写,并通过调试运行查看在继承关系中构造函数的执行顺序。2) 可以使用CPoint类,指明屏幕上特定点的位置,其他的各个类都可以使用它。再使用基类Shape类,然后在Shpae类的基础上派生出各种类,如直线类Cline(可简单修改一下实验2中的Cline类),矩形类CRectangle,圆类CCircle。注意要把每个类的特征用最简单的方式表示出来。3) 编写程序定义一个车(vehicle)基类,有Run、Stop等成员函数,由此派生出自行车(bicycle),汽车(motorcar),从bicycle和motorcar派生出摩托车(motorcycle),它们都有Run、Stop等成员函数。在main ( )函数中定义vehicle,bicycle,motorcar,motorcycle的对象,调用其Run()、Stop()函数,观察其执行情况。再分别用vehicle类型的指针来调用这几个对象的成员函数,看看能否成功;把Run、Stop定义为虚函数,再试试看。5.实验思考题1) C+中有哪几种派生方式?每种方式的派生类对基类成员的继承和访问控制属性是什么样的?2) 派生类对象和基类对象是什么样的关系?派生类对象的构造函数和析构函数的执行顺序是怎样的?3) 什么是多态?在C+语言中,是如何实现多态的?4) 虚析构函数的作用是什么?如何发挥作用?5) 引入虚基类后,基类和派生类的构造函数和析构函数的执行顺序要如何变化?实验4 模板与STL(4学时)1.实验目的1) 理解什么是通用编程技术。2) 加强对模板相关概念的理解,熟悉模板编程的语法。3) 学习编写简单的函数模板和类模板。4) 理解STL中容器、算法、迭代器的等概念,明确它们之间的关系。5) 掌握STL中Vector容器的使用方法。6) 练习使用STL进行编程,加强是通用编程技术的理解。2.实验类型设计型3.实验基本要求1) 编写一个函数模板,要求它返回两个值中的最小者。但同时要确保正确处理字符串。2) 以下是一个整数栈类的定义:const int SIZE = 100;class Stackpublic: Stack(); Stack(); void Push(int n);int Pop();private:int stackSIZE;int tos;编写一个栈的类模板(包括其成员函数定义),以便为任何类型的对象提供栈结构数据操作。并在应用程序中创建整数栈、字符栈和浮点数栈,提供一些数据进行进栈、退栈和打印操作的测试。3) 编写一程序,让用户自由地从键盘上输入整数,直到输入数字0时结束。把用户输入的数据保存在模板类Vector定义的对象中,并对用户输入的所有数进行排序输出。在向显示器进行输出时,要求用一下3种方式实现:a) 仅使用Vector的相关成员函数,不使用迭代器进行输出;b) 使用迭代器自己编程输出;c) 使用STL提供的通用算法for_each进行输出。4) 以下是一个List类模板的定义:template class Listpublic: List(); /构造函数 void Add(T&); /在Link表头添加新结点 void Remove(T&); /在Link中删除含有特定值的元素 T* Find(T&); /查找含有特定值的结点 void PrintList(); / 打印输出整个链表 List();protected: struct Node Node* pNext; T* pT; ; Node *pFirst; /链首结点指针;完成对上述List类模板含有的各成员函数的定义。然后定义一个简单的Student类,并利用编写的List类模板对一个班级的学生进行动态管理。(根据自己的能力选做)。4.实验基本步骤1) 函数模板的原型可定义为:template T min(T&, T&),为了同时要确保正确处理字符串,而字符串不能用“”来比较,所以还需要特别定义函数:char* min(char* a, char* b)。另外,要在main函数中对自己编写的模板进行测试。2) 根据整数栈的定义,可抽象出的栈类模板为:templateclass Stackpublic: Stack(); Stack(); void Push(T& n); T Pop();private: static const int SIZE; T* stack; int tos;这里需要将该模板中的各成员函数进行定义即可。tos是栈顶位置,Push()为压栈操作,Pop()为弹栈操作,要在这两个操作中分别考虑栈的长度和栈是否为空。最后,要在main函数中对编写的栈类模板进行测试。3) 实现该题目时,首先定义模板类Vector的一个对象,利用该对象进行对用户输入数据的操作。在进行数据输出时,第一种方式考虑采用类似于数组的随机访问方法,第二种方式利用Vector的迭代器进行输出,第二种方式则利用STL通用算法for_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工程电梯销售合同范本
- 大型合同范本
- 房屋转卖装修合同范本
- 多人承包鱼塘合同范本
- 校外配餐机构合同范本
- 铲车司机雇佣 合同范本
- 购车定金电子合同范本
- 街区商业招商合同范本
- 特殊空调租赁合同范本
- 养老机构常用合同范本
- 厨房消防安全培训
- 小陈 税务风险应对常见指标与答复思路
- 2025年《中华人民共和国档案法》知识培训试题及答案
- 2026年高考政治一轮复习:必修2《经济与社会》知识点背诵提纲
- 2025至2030年中国建筑膜行业市场调查研究及发展趋势预测报告
- 2025年急诊急救试题(附答案)
- 变电站新员工培训课件
- 会所会议室管理制度
- 2025年北京市中考语文试卷(含答案与解析)
- 中科海光:2025年深算智能:海光DCU行业实战手册
- 信息服务费 合同
评论
0/150
提交评论