还剩10页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
《面向对象程序设计》实验教学大纲实验学时32实验个数13实验学分1课程性质专业必修课适用专业软件工程教材及参考书《C++语言程序设计习题与实验指导》,郑莉、傅仕星编著,北京清华大学出版社,2004《C++语言程序设计(第三版)》,郑莉、董渊编著,北京清华大学出版社,2005大纲执笔人李晓宁大纲审定人刘芳、苟仕蓉、左友东
1、实验课的性质与任务本课程实验大纲是面向计算机专业学生开设的《C++程序设计》实验课计划指导大纲,是依据《面向对象程序设计》课程教学计划指导大纲编制本课程主要讲述了利用C++进行程序设计的思想和方法,既有面向过程和面向对象的程序设计的理论知识,又包括极强的实践应用能力的培养本实验大纲力求结合该课程教学计划大纲的相应内容,由浅入深的指导学生了解和掌握如何利用C++程序设计语言进行程序设计,提高学生的动手能力,做到理论和实践相结合,培养学生理解,分析程序,编写,调试程序的能力,使之能把程序设计应用到今后的专业学习中
2、实验课程目的与要求
1.实验目的通过本课程的学习,使学生掌握面向过程的程序设计思想和编程思路,初步掌握面向对象的程序设计思想,学会调试程序,能__编写实用的小型程序
2.实验要求1学生应该自始至终贯彻课程中所介绍的程序设计风格养成良好的编程习惯;2应__完成所布置习题为保证尽量在统一安排的上机时间内编译运行通过程序,学生应事先设计好程序
3、实验项目及内容提要面向对象程序设计实验课程序号实验项目编号实验名称学时必做选做学分数实验类型内容提要基本操作验证综合设计1一VisualC++__环境入门2√√熟悉VC++__环境2二C++简单程序设计4√√基本算法结构3三函数的应用2√√函数设计、模板函数4四类与对象6√√类的设计与使用5五C++程序的结构2√√作用域与生存期,静态成员6六数组、指针与字符串4√√三种常见编程元素的使用7七继承与派生6√√派生类的设计与使用8八多态性2√√运算符重载、动态多态9九群体类和群体数据的组织4√√群体类的设计10十泛型程序设计与C++标准模板库2√√STL库的使用11十一流内库与输入、输出2√√常用输入输出方法12十二异常处理2√√异常处理机制的设计13十三Windows应用程序框架2√√VC__Windows程序方法
4、实验内容安排实验一VisualC++
6.0__环境应用入门(验证性实验2学时)
1.目的要求了解VisualC++
6.0的特点,熟悉了解VisualC++
6.0的__环境,学习使用VisualC++
6.0编写标准的C++控制台应用程序
2.实验内容使用VisualC++来建立一个非图形化的标准C++程序,编译、运行教材中的例3-3,用公式法求解PI的数值,并尝试利用其他方法求解并获得相同的结果π=16arctan1/5)-4arctan1/239arctanx=x-x³/3+x5/5-x7/7+…求π=?
3.主要仪器设备及软件PC+Windows2000+VC
6.0实验二C++简单程序设计实验(验证性实验4学时)
1.目的要求会编写简单的C++程序;复习基本数据类型变量和常量的应用;复习运算符与表达式的应用;复习结构化程序设计基本控制结构的应用;复习自定义数据类型的应用;练习使用简单的输入输出;观察头文件的作用;学会使用VC
6.0__环境中的debug调试功能;熟练程序设计中的技巧;
2.实验内容1给定一个字符变量输出其二进制形式例如chara=’a’;其二进制为00_____11给定一个字符变量输出其二进制反转形式例如chara=’a’;其二进制为00_____1,反转形式为_____100(提示使用位运算)1袋子里有红,黄,蓝,绿,黑五种不同颜色的球若干个,从中取出三个不同颜色的球,编程输出每种取法及统计不同取法的总数(提示使用枚举)1(选做)给定一个整型变量输出其二进制形式
3.主要仪器设备及软件PC+Windows2000+VC
6.0实验三函数的应用实验(设计性实验2学时)
1.目的要求掌握函数的定义和调用方法;练习重载函数的使用;练习使用系统函数;学习使用VC++的debug调试功能,使用stepinto追踪到函数内部
2.实验内容1用递归的方法编写函数求Fibonacci级数,观察递归调用的过程1编写重载函数__x1可分别求取两个整数,三个整数,两个双精度数,三个双精度数的最大值1写一个函数,能够接收身高、体重等数据,能够根据身高、体重检测身体状况,胖,瘦等
3.主要仪器设备及软件PC+Windows2000+VC
6.0实验四类与对象实验(设计性实验4学时)
1.目的要求掌握类的定义和使用;掌握类对象的声明;复习具有不同访问属性的成员的访问方式;观察构造函数和析构函数的执行过程;学习类组合使用方法;使用VC++的debug调试功能观察程序流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序
2.实验内容1定义一个CPU类,包含等级(Rank)、频率(frequency)、电压voltage等属性,有两个公有成员函数run、stop其中,rank为枚举类型CPU__Rank定义为enumCPU_Rank{P1=1P2P3P4P5P6P7}frequency为单位是MHz的整型数,voltage为浮点型的电压值观察构造函数和析构函数的调用顺序2定义一个简单的Computer类,有数据成员芯片cpu、内存ram、光驱cdrom等等,有两个公有成员函数run、stopcpu为CPU类的一个对象,ram为RAM类的一个对象,cdrom为CDROM类的一个对象,定义并实现这个类,观察这些类的构造函数和析构函数的调用顺序3定义一个Body类,拥有身高、体重等数据,能够根据身高、体重检测身体状况,要求设计相应的函数成员和构造函数4(选做)设计一个用于人事管理的People(人员)类考虑到通用性,这里只抽象出所有类型人员都具有的属性number(编号)、___(性别)、birthday(出生日期)、id(___号)等等其中“出生日期”定义一个“日期”类内嵌子对象用成员函数实现对人员信息录入和显示要求包括构造函数和析构函数、拷贝构造函数、内联成员函数、类组合
3.主要仪器设备及软件PC+Windows2000+VC
6.0实验五C++程序的结构实验(设计性实验2学时)
1.目的要求观察程序运行中变量的作用域、生存期和可见性;学习类的静态成员的使用;学习多文件结构在C++程序中的使用
2.实验内容1运行下面的程序,观察变量X、Y的值(删除)2实现客户机CLIENT类定义字符型静态数据成员ServerName,保存其服务器名称;整型静态数据成员ClientNum,记录已定义的客户数量;定义静态函数ChangeServerName改变服务器名称在头文件client.h中定义类,在文件client.cpp中实现,在文件test.cpp中测试这个类,观察相应的成员变量取值的变化情况(需要给出__in函数代码和运行结果)3完善Body类,将检测胖瘦的标准定义为静态数据成员并设计相应的静态成员函数(最好给出__in函数代码和运行结果)4定义Boat;和Car两个类,二者都有weight属性,定义二者的一个友元函数totalWeight(),计算二者的和5(选做)在函数fn1中定义一个静态变量n,fn1中对n的值加1,在主函数中,调用fn1十次,显示n的值6选做在一个文件中定义一个全局变量n主函数__in(),在另外一个文件中定义函数fn1(),在__in()中对n赋值,再调用fn1,在fn1中也对赋值,显示n最后的值
3.主要仪器设备及软件Windows2000+VC
6.0实验六数组、指针与字符串实验(设计性实验4学时)
1.目的要求学习使用数组;学习字符串数据的组织和处理;学习标准C++库的使用;掌握指针的使用方法;练习通过debug观察指针的内容及其所指的对象的内容;练习通过动态内存分配实现动态数组,并体会指针在其中的作用;分别使用字符数组和标准C++库练习处理字符串的方法
2.实验内容1编写一个用于3×3数组保存矩阵的类,具有矩阵显示和矩阵转置函数2使用动态内存分配生成动态数组来重新完成上题,使用指针实现函数的功能3拷贝构造2)题中的矩阵类对象,运行程序看看是否存在问题,应该如何改进(提示深浅拷贝)4编程实现两字符串的连接要求使用字符数组保存字符串,不要使用系统函数5使用string类定义字符串对象,重新实现上一小题6定义Body类的数组,评测班级每个同学的身体状况7(选做)定义电子秤类和学生类数组,用电子秤类评测班级每个同学的身体状况8(选做)定义一个Employee类,其中包括姓名、街道地址、城市和邮编等属性,以及change_name和display等函数Display显示姓名、街道地址、城市和邮编等属性,change_name改变对象的姓名属性实现并测试这个类9(选做)定义包含5个元素的对象数组,每个元素都是Employee类型的对象10(选做)修改实验4中的选做实验中的people(人员)类具有的属性如下姓名charname
[11]、编号charnumber
[7]、性别char___
[3]、生__irthday、___号charid
[16]其中“出生日期”定义为一个“日期”类内嵌对象用成员函数实现对人员信息的录入和显示要求包括构造函数和析构函数、拷贝构造函数、内嵌构造函数、内联成员函数、类组合在测试程序中定义people类的对象数组,录入数据并显示,观察构造函数和析构函数的调用顺序
3.主要仪器设备及软件Windows2000+VC
6.0实验七继承与派生实验(验证性实验4学时)
1.目的要求学习定义和使用类的继承关系,定义派生类;熟悉不同继承方式下对基类成员的访问控制;学习利用虚基类解决二义性问题
2.实验内容1定义一个基类Ani__l,有私有整型成员变量age,构造其派生类dog,在其成员函数SetAgeintn中直接给age赋值,看看会有什么问题,把age改为公有或保护成员变量,还会有问题吗?编程试试看,说明了什么原则?2定义一个基类BasClass有整型成员变量Number,构造其派生类DerivedClass观察构造函数和析构函数的执行情况和执行顺序3定义一个车(vehicle)基类,具有__xSpeed、Weight等成员变量,Run、Stop等成员函数,由此派生出自行车(bicycle)类,汽车(motorcar)类自行车(bicycle)类有高度(Height)等属性,汽车(motorcycle)类有座位数(SeatNum)等属性从bicycle和Motorcar派生出摩托车motorcycle类,在继承过程中,注意把vehicle设置为虚基类如果不把vehicle设置为虚基类,会有什么问?编程试试看4(选做)从实验6中的people(人员)类派生出student(学生)类,添加属性职务charprincipalship
[11]、部门chardepartment
[21]从student类中派生出graduate(研究生)类,添加属性专业charsu__ect
[21]、导师teacheradviser;从graduate类派生出其TA助教类,注意虚基类的使用重载相应的成员函数,测试这些类并观察构造函数和析构函数的调用顺序#0;#0;������#0;����#0;����#0;��������#0;����#0;����#0;#0;��������#0;����#0;����#0;����#0;����#0;������#0;#0;������#0;����������������������������#0;����#0;����#0;#0;图7-1实验任务4的类图
3.主要仪器设备及软件PC+Windows2000+VC
6.0实验八多态性实验(设计性实验2学时)
1.目的要求掌握运算符重载的方法;学习使用虚函数实现动态多态性
2.实验内容1定义Point类,有坐标_x_y两个成员变量;对Point类重载“++”(自增)、“--”(自减)运算符,实现对坐标的改变(提示注意前++和后++)2定义一个车vehicle基类,有Run、Stop等虚成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,从bicycle到motorcar派生出摩托车motorcycle类,它们都有Run、Stop等成员函数,利用基类指针或引用虚函数,观察虚函数的作用,说说多态的含义,如果不采用虚函数会是什么样的结果?3(选做)对实验六中的people类重载“==”运算符和“=”运算符,“==”运算符判断两个people类对象的id属性是否相等;“=”运算符实现people类对象的赋值操作
3.主要仪器设备及软件PC+Windows2000+VC
6.0实验九群体类和群体数据组织实验(选做)(设计性实验4学时)
1.目的要求1了解链表类的定义与实现,学习其使用方法;了解栈类定义与实现,学习其使用方法;2了解队列类的定义与实现,学习其使用方法;了解C++标准模板库STL的使用方法
2.实验内容1使用重载函数模板重新实现实验三中2小题中的函数__x1(必做)2编写程序link.h,实现教材中例9-6的链表类在测试lab9_
1.cpp中定义两个整型链表A和B,分别插入5个元素,然后把B中的元素加入A的尾部3编写程序queue.h,用链表实现队列(或栈)类在测试程序lab9_
1.cpp中定义一个整型队列(或栈)对象,插入5个整数,压入队列(或栈),再依次取出并显示出来4(选做)将直接插入排序、直接选择程序、冒泡排序、顺序查找函数封装到教材中第9章的数组类模板中,作为成员函数实现并测试这个类5(选做)定义一个对people类对象数组按编号排序的函数,一个按编号查找people对象的函数在测试程序中使用前面实验得到的结果定义教师数组和学生数组,分别对教师数组和学生数组进行排序和查找6(选做)定义course(课程)类,有属性课程名charname
[21]、成绩shortscore;在实验7中的student类中增加属性所修课程courses,为课程类对象在测试程序测试这个类学生类之间的关系如图9-1所示#0;����������#0;������������#0;����#0;����������������#0;����#0;��������#0;#0;#0;����#0;����#0;����#0;图9-1实验任务4的类图
3.主要仪器设备及软件PC+Windows2000+VC
6.0实验十泛型程序设计与C++标准模板库实验(选做)(设计性实验2学时)
1.目的要求掌握对数组元素排序的方法;掌握对数组元素查找的方法;应用标准C++库(STL)实现查找与排序
2.实验内容1在C++标准模板库中,队列类queue的成员函数queue::push在队列的一端添加元素,queue::pop从非空的队列中删除最后一个元素,queue::empty判断队列是否为空,queue::back返回非空队列的最后一个元素,queue::front返回非空队列的第一个元素,queue::size返回队列中元素的个数,请构造一个int类型的队列,对这个队列应用上述几个函数,体会队列这种数据结构的特点和其成员函数的用法2对于一个包含特定个数整型数据的数组A,对于从键盘输入的任意数,使用C++标准模板库中的find查找在A中的位置,使用sort来对数组进行升序或降序排列,排序前和排序后的结果使用copy输出
3.主要仪器设备及软件PC+Windows2000+VC
6.0实验十一流内库与输入、输出实验(设计性实验2学时)
1.目的要求熟悉流类库中常用的类及其成员函数的用法;学习标准输入输出及格式控制;学习对文件的应用方法(二进制文件、文本文件)
2.实验内容1观察以下程序的输出,注意对输出格式的控制方法2编写程序,用文本方式打开指定的一个文件,在每一行前加行号3使用实验10中的学生类数组,输入数据并显示出来,使用I/O流用二进制方式把此数组的内容写入磁盘文件,再显示出文件内容4(选做)如果班级同学的身高、体重信息存放在一个文本文件中,编写程序实现从该文件中读取学生信息并计算每个学生的身体状况,然后将结果写入另外一个文本文件
3.主要仪器设备及软件PC+Windows2000+VC
6.0实验十二异常处理实验(设计性实验2学时)
1.目的要求正确理解C++的异常处理机制;学习异常处理的定义和执行过程
2.实验内容定义一个异常类__x__ption有成员函数Reason用来显示异常的类型在字函数中触发异常,在主程序中处理异常,观察程序的执行过程
3.主要仪器设备及软件PC+Windows2000+VC
6.0实验十三Windows应用程序框架实验(选做)(基本操作实验2学时)
1.目的要求简单了解Windows程序设计
2.实验内容练习使用VC++的AppWizard应用程序向导生成一个最简单的Windows应用程序
3.主要仪器设备及软件PC+Windows2000+VC
6.0//lab5_
1.cpp#includeiostream.hvoidfnl;intx=1y=2;int__in{cout”Begin…”endl;cout”x=”xendl;cout”y=”yendl;cout”Evaluatexandyin__in…”endl;intx=10y=20;cout”x=”xendl;cout”y=”yendl;cout”Stepintofnl…”endl;fnl;cout”Backin__in”endl;cout”x=”xendl;cout”y=”yendl;return0;}voidfnl{inty=200;cout”x=”xendl;cout”y=”yendl;}//lab11_
1.cpp#includefstreamUsingnamespa__std;#defineDaT#aendl;aOfstreamT“output.out”;Void__in{Dinti=53;Dfloatf=
4700113.141593;Char*s=“Isthereanymore”;DT.setfios::unitbuf;DT.setfios::showbase;DT.setfios::uppercase;DT.setfios::showpos;DTiendl;DT.setfios::hexios::basefield;DTiendl;DT.unsetfios::uppercase;DT.setfios::octios::basefield;DTiendl;DT.setfios::showbase;DT.setfios::decios::basefield;DT.setfios::leftios::adjustfield;DT.fill‘0’;DT“fillchar:”T.fillendl;DT.windrh8;Tiendl;DT.setfios::rightios::adjustfield;DT.windth8;Tiendl;DT.setfios::internalios::adjustfield;DT.windth8;Tiendl;DTiendl;//Withoutwidth10DT.unsetfios::showpoint;DT.setfios::showpoint;DT.“prec=”T.precisionendl;DT.setfios::scientificios::floatfield;DTendlfendl;DT.setfios::fixedios::floatfield;DTfendl;DT.setf0ios::floatfield;//Auto__ticDTfendl;DT.precision16;DT“prec=”T.precisionendl;DTendlfendl;DT.setfios::scientificios::floatfield;DT.setf0ios::floatfield;//Auto__ticDTfendl;DT.width8;Tsendl;DTwidth36;Tsendl;DT.setfios::leftios::adjustfield;DTwidth36;Tsendl;DT.unsetfios::showpoint;DT.unsetfios::unitbuf;。