《第2部分实验指导.docx》由会员分享,可在线阅读,更多相关《第2部分实验指导.docx(92页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第2部分实验指导实验1VC+6.0开发环境应用入门(2学时)一、实验目的1 . 了解 Visual C+ 6.0 的特点。2 .熟悉Visual C+ 6.0的开发环境。3 .学习用Visual C+ 6.0编写标准的C+控制台程序。二、实验任务使用Visual C+建立一个非图形化的标准C+程序,编译、运行教材例2.1,即以下 程序:#include void main(void)(cout,Hello!nn;coutMWelcome to c+!n”;)三、实验步骤1 .启动Visual C+ 6.0开发环境 从开始”菜单中选择程序I Microsoft Visual Studio 6.0
2、 I Microsoft Visual C+6.0,显示Visual C+6.0开发环境主窗口。2 .创建一个项目 单击File菜单中的New选项显示New (新建)对话框(如图1-1嘛), 单击 Projects 标签,在 Projects(项目)选项卡中,选择 Win32 Console Application (Win32控制台应用程序)。在Location (位置)文本框中指定一个路径 d:c+lab,在Preject Name (项R名称)文本框中为项目输入一个名字“lab 1_1”, 单击0K (确定)按钮。 在弹出的 Win32 Console Application-Step
3、1 of 1 对话框中选择 An Empty Project 单选项,然后单击Finish (完成)按钮(如图1-2所示)。 最后在New Project Information对话框中单击OK按钮,完成项目的建立。图1-1 New对话框图1-2创建控制台应用程序第一步3 .建立C+源程序文件 选择菜单命令Project I Add to Project I New,弹出New时话框。 如图1-3所示,在new对话框的Files选项卡中选择C+ Source File,并填入 文件名称“labl”,单 击OK按钮,完成新建C+源程序文件。levmu图1-3添加新的源程序文件4 .编辑C+源程序
4、文件内容 在文件编辑窗口中输入代码(如图1-4哧)。labl_l - licrosoft Visual C+ - labl_l. cpp ,因 File Edit View Insert Project Build Jools Window Help,|g| x|S Q d 能 I 厄因百聃(string |(Globals)(All global membersd|main:山S Iab1_1 classes-KlassView 恒 FileViewReadyinclude uoid main(uoid) 选择菜单命令File I Save保存这个文件。5 .建立并运行可执行程序 选择菜单命
5、令Build-Build labl_l.exe建立可执行程序。如果你正确输入了源程序,此时便成功地生成了可执行程序labl_l.exe。如果 程序有语法错误,则屏幕下方的状态窗口中会显示错误信息。根据这些错误信 息对源程序进行修改后,重新选择菜单命令Build I Build labl.exe ,建立可 执行程序。 选择菜单命令Build I Execute labl_l.exe运行程序,观察屏幕的显示内容。6.关闭工作空间 选择菜单命令File I Close Workspace关闭工作空间。实验2C+简单程序设计(4学时)一、实验目的1 .学会编写简单的C+程序。2 .复习基本数据类型变量
6、和常量的应用。3 .复习运算符与表达式的应用。4 .复习结构化程序设计基本控制结构的运用。5 .复习自定义数据类型的应用。6 .练习使用简单的输入输出。7 .观察头文件的作用。8 .学会使用VC+6.0开发环境中的debug调试功能:单步执行、设置断点、观察变 量值。二、实验任务1 .输入并运行教材上的例题2.7,即:用do-while语句编程,求自然数110之和。 程序正确运行之后,去掉源程序中#include语句,重新编译,观察会有什么问题。2 .将do-while语句用for语句代替,完成相同的功能。3 .编程计算图形的面积。程序可计算圆形、长方形、正方形的面积,运行时先提示 用户选择图
7、形的类型,然后,对圆形要求用户输入半径值,对长方形要求用户输 入长和宽的值,对正方形要求用户输入边长的值,计算出面积的值后将其显示出 来。4 .使用debug调试功能观察任务3程序运行中变量值的变化情况。5 .定义一个表示时间的结构体,可以精确表示年、月、日、小时、分、秒;提示用 户输入年、月、日、小时、分、秒的值,然后完整地显示出来。三、实验步骤1 .建立一个控制台应用程序项目lab2_l,向其中添加一个C+源文件lab2.cpp (方 法见实验一),输入教材中例2.7的代码,检查一下确认没有输入错误,选择菜单 命令Build I Build lab2_l.exe编译源程序,再选择Build
8、 I Execute运行程序,观察 输出是否与教材上的答案一致。2 .程序正确运行之后,在源程序第一行“#includeviostgam.h前面加注释标记 使之成为注释行,重新编译,此时,编译器会输出类似于下面内容的提示: d:c+lablab2_ llab2_ 1 .cpp(9): error C2065: cout*: undeclared identifier d:c+lablab2_llab2_ 1 .q)p(9): error C2297: ,: illegal, right operand has type char (5 d:c+lablab2 llab2 l.cpp(9): e
9、rror C2065: endf : undeclared identifierError executing cl.exe.Iab2_l.exe - 3 error(s),0 waming(s)这是因为C+ +语言本身没有输入/输出语句,只是C+ +编译系统带有一个面向 对象的0软件包,BP1/O流类库。coat和cin都是这个类库预定义的流对象, include 指示编译器在对程序进行预处理时,将头文件iostream.h中 的代码嵌入到该程序中该指令所在的地方。文件iostream.h中声明了程序所需要的 输入和输出操作的有关信息,在C+ +程序中如果使用了系统中提供的一些功能, 就必须
10、嵌入相关的头文件,否贝山系统无法找到实现这些功能的代码。现在,删除注释标记,将程序恢复正确。3 .另建立一个项目lab2_2,包含一个C+源程序lab2_2.cpp将do-while语句用for 语句代替,完成与实验任务1相同的功能。4 .建立项目Iab2_3,计算图形的面积。圆形的面积计算公式为5=巴*产,长方形的面 积计算公式为S=a*b,正方形的面积计算公式为S=a*a;程序中定义一个整型变量 iType表示图形的类型,用cout语句输出提示信息让用户选择图形的类型,用cin 读入iType的值,然后,使用switch语句判断图形的类型,分别提示用户输入需 要的参数值,计算出面积的值后用
11、cout语句显示出来;最后,编译运行程序。5 .学习简单的debug调试功能,参考程序如下:/lab2_3.cpp#include const float PI = 3.1416;void main()(int iType;float radius, a, b, area;cout vv ”图形的类型为?(1 圆形2长方形3正方形):“;cin iType;switch( iType)case 1:cout ”圆的半径为:”;cin radius;area = PI * radius * radius;coutvv”面积为:nareaendl;break;case 2:cout ”矩形的长为:
12、”;cin a;cout 矩形的宽为:cin b;area = a * b;coutc面积为:areaendl;break;case 3:cout 正方形的边长为:;cin a;area = a * a;cout面积为:areaendl;break;default:cout 不是合法的输入值! 首先在第10行处设置调试断点。用鼠标右健单击源程序第10行左边的空白处, 出现一个菜单,如图2-1所示;图2-1添加断点 选择Insert/Remove Breakpoint一项,可看到左边的边框上出现了 一个褐色的圆 点,这代表已经在这里设置了一个断点;所谓断点就是程序运行时的暂停点,程序运行到断点处
13、便暂停,这样我们 就可以观察程序的执行流程,以及执行到断点处时有关变量的值。 然后选择菜单命令Build I Start Debug I Go,或按下快捷键F5,系统进入Debug (调试)状态,程序开始运行,一个DOS窗口出现,此时,Visual Studio的外 观如图2-2所示,程序暂停在断点处。图2-2调试状态下的Visual Studio 单步执行:从Debug菜单或Debug _E具栏中单击Step Over选项或按钮两次。 在程序运行的DOS窗口中输入选择的图形类型,例如,输入3,代表正方形, 这时,回到Visual Studio中,把鼠标放在变量名iType上片刻,可看到出现了
14、 一个提示:iType = 3;此时,在Variables窗口中也可看到iType以及其他变量 的值。单步执行时每次执行一行语句,便于跟踪程序的执行流程。因此为了调试 方便,需要单步执行的语句不要与其它语句写在一行中。 在Watch窗口中,在Name栏中输入iType,按回车键,可看到Value栏中出现 3,这是变量iType现在的值(如果没看到Variables窗口或Watch窗口,可通 过 View 菜单的 Debug Windows I Variables 或 Debug Windows I Watch 选项打开 它们)。图2-3是此时Variables窗口和Watch窗口的状态。 继续
15、执行程序,参照上述的方法,再试试Debug菜单栏中别的菜单项,熟悉 Debug的各种方法。6.建立一个项目lab2_4,包含一个C+源程序lab2_4.cpp。定义一个表示时间的结构 体,有表示年、月、日、小时、分、秒的成员,可以使用short类型;在主程序中 实现输入输出。! C0Ut ”图形的类型为“1-圆形2张方形3-正方形):“;cin iType; switch(iType) 2; flb( 1) = fib(2) = 1;使用 if 语句判断函数 的出口,在程序中用cout语句输出提示信息。程序名:lab3_5.cpp。6 .使用debug中的Step Into追踪到函数内部,观察
16、函数的调用过程,参考程序如下: /lab3_5#include int fib(int n);int main()int n, answer;cout TEnter number:cin n;cout nn;answer = fib(n);cout answer ” is the n Mth Fibonacci numbertn;return 0;int fib (int n)cout Processing fib( n if(n 选择菜单命令Build I Start Debug I Step in,或按下快捷键Fl 1,系统进入单步执 行状态,程序开始运行,并出现一个DOS窗口,此时Vis
17、ual Studio中光标停 在main。函数的入口处; 把光标移到语句answer = fib(n)”前,从Debug菜单或Debug工具栏中单击 Run to Cursor,在程序运行的DOS窗口中按提示输入数字10,这时回到Visual Studio中,光标停在第11行,观察一下n的值(观察方法见实验二); 从Debug菜单或Debug工具栏中单击Step Into,程序进入fib函数,观察一下 n的值,把光标移到语句return( fib(n-2) +行b(n-l)”前 从Debug菜单或Debug 工具栏中单击Run to Cursor,再单击Step Into,程序递归调用fib函
18、数,又进 入fib函数,观察一下n的值; 继续执行程序,参照上述的方法,观察程序的执行顺序,加深对函数调用和递 归调用的理解; 再试试Debug菜单栏中别的菜单项,熟悉Debug的各种方法。实验4类与对象(4学时)一、实验目的1 .掌握类的定义和使用。2 .掌握类的定义和对象的声明。3 .复习具有不同访问属性的成员的访问方式。4 .观察构造函数和析构函数的执行过程。5 .学习类的聚集使用方法。6 .使用VC+的debug调试功能观察程序流程,跟踪观察类的构造函数、析构函数、 成员函数的执行顺序。二、实验任务1 .定义一个CPU类,包含等级(rank)、频率(frequency)、电压(volt
19、age)等属性, 有两个公有成员函数run、stop。其中,rank为枚举类型CPU_Rank,定义为enum CPU_Rank P1=1 ,P2,P3,P4,P5,P6,P7, frequency 为单位是 MHz 的整型数,voltage 为浮点型的电压值。观察构造函数和析构函数的调用顺序。2 .定义一个简单的Computer类,有数据成员芯片(cpu)、格 (ram)、驱(cdrom) 等等,有两个公有成员函数run、stop cpu为CPU类的一个对象,ram为RAM 类的一个对象,cdrom为CDROM类的一个对象,定义并实现这个类。3 .(选做)设计一个用于人事管理的People
20、(人员)类。考虑到通用性,这里只抽 象出所有类型人员都具有的属性:number (编号)、sex (性别)、birthday (出生日 期、id (身份证号)等等.其中“出生日期”定义为一个“日期”类内嵌子对象。 用成员函数实现对人员信息的录入和显示。要求包括:构造函数和析构函数、拷 贝构造函数、内联成员函数、聚集。三、实验步骤1 .首先定义枚举类型 CPU_Rank,例如 enum CPU.Rank P1=1,P2,P3,P4,P5,P6,P7, 再定义CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等私有数 据成员,定义成员函数run、stop,用来输出提
21、示信息,在构造函数和析构函数中 也可以输出提示信息。在主程序中定义一个CPU的对象,调用其成员函数,观察 类对象的构造与析构顺序,以及成员函数的调用。程序名:lab4.cpp。2 .使用debug调试功能观察程序ab4.cpp的运行流程,跟踪观察类的构造函数、析 构函数、成员函数的执行顺序。参考程序如下:/lab4_l.cpp#include enum CPU_Rank P1 = 1,P2,P3,P4,P5,P6,P7;class CPU(private:CPU_Rank rank;int frequency;float voltage;public:CPU (CPU_Rank r, int
22、f, float v)rank = r;frequency = f;voltage = v;coutvv”构造了 个 CPU!”vvendl;-CPU () cout ”析构了一个 CPU!” endl; CPU_Rank GetRank() const return rank; int GetFrequencyO const return frequency; float GetVoltage() const return voltage; void SetRank(CPU_Rank r) rank = r; void SetFrequency(int f) frequency = f; v
23、oid SetVoltage(float v) voltage = v; void Run() cout CPU 开始运行!” endl; void Stop() cout CPU 停止运行!” endl; ;void main()CPU a(P6,300,2.8);a.Run();a.StopO;)3 .调试操作步骤如下: 单击Build I Start Debug I Step Into命令,或按下快捷键Fl 1,系统进入单步执 行状态,程序开始运行,一个DOS窗口出现,此时Visual Studio中光标停在 main。函数的入口处; 从Debug菜单或Debug工具栏中单击Step O
24、ver,此时,光标下移,程序准备 执行CPU对象的初始化; 单击Step Into,程序准备执行CPU类的构造函数; 连续单击Step Over,观察构造函数的执行情况,宜到执行完构造函数,程序回 到主函数; 此时程序准备执行CPU对象的run()方法,单击Step Into,程序进入run。成员 函数,连续单击Step Over,直到回到main。函数; 继续执行程序,参照上述的方法,观察程序的执行顺序,加深对类的构造函数、 析构函数、成员函数的执行顺序的认识; 再试试Debug菜单栏中别的菜单项,熟悉Debug的各种方法。4 .首先定义CPU类(可使用第二题中的CPU类)、RAM类、CDR
25、OM类。再定义 Computer类:定义私有数据成员cpu、ram、cdrom,定义公有成员函数run、stop, 可在其中输出提示信息。在主程序中定义一个Computer的对象,调用其成员函数, 观察类对象及其成员变量的构造与析构顺序,以及成员函数的调用。程序名: lab4_2.cppo5 .使用debug调试功能观察lab4_2.cpp程序的运行流程,跟踪观察类的构造函数、析 构函数、成员函数的执行顺序,特别注意观察成员变量的构造与析构顺序。实验5C+程序的结构(2学时)一、实验目的1 .观察程序运行中变量的作用域、生存期和可见性;2 .学习类的静态成员的使用;3 .学习多文件结构在C+程
26、序中的使用;二、实验任务1.运行下面的程序,观察变量x、y的值。/lab5_l.cpp#include void fn 1();int x = 1, y = 2;int main()(cout Begin.* endl;cout x = H x endl;cout ”y = H y endl;cout Evaluate x and y in main。“ endl;int x = 10, y = 20;cout *x = H x endl;cout y = y endl;cout Step into fnl(). endl;cout Back in main* endl;cout Hx = H
27、 x endl;cout y = y endl;return 0;)void fn 1()int y = 200;cout nx = n x endl;cout *y = H y endl;2.实现客户机(CLIENT)类。定义字符型静态数据成员ServerName,保存其服务器 名称;整型静态数据成员ClientNum,记录已定义的客户数量;定义静态函数 ChangeServerName()改变服务器名称。在头文件client.h中定义类,在文件client.cpp 中实现,在文件test.cpp中测试这个类,观察相应的成员变量取值的变化情况。三、实验步骤1 .运行lab5_l程序,观察程序
28、输出。全局变量的作用域为文件作用域,在整个程序运行期间有效,但如果在局部模块 中定义了同名的变量,则在局部模块中,可见的是局部变量,此时,全局变量不 可见;而局部变量的生存期只限于相应的程序模块中,离开相应的程序模块,局 部变量x、y就不再存在,此时同名的全局变量重新可见。2 .新建一个空的项目lab5_2,添加头文件client.%在其中定义类CLIENT,注意使 用编译预处理命令;再添加源程序文件client.cpp,在其中实现CLIENT类,注意 静态成员变量的使用方法;再添加文件lab5_2.cpp,在其中定义main。函数,测试 CLIENT类,观察相应的成员变量取值的变化情况。实验
29、6 数组、指针与字符串(4学时)一、实验目的1 .学习使用数组数据对象;2 .学习字符串数据的组织和处理;3 .学习标准C+库的使用;4 .掌握指针的使用方法;5 .练习通过debug观察指针的内容及其所指的对象的内容:6 .练习通过动态内存分配实现动态数组,并体会指针在其中的作用;7 .分别使用字符数组和标准C+库练习处理字符串的方法。二、实验任务1 .编写并测试3X3矩阵转置函数,使用数组保存3X3矩阵。2 .使用动态内存分配生成动态数组来重新完成上题,使用指针实现函数的功能。3 .编程实现两字符串的连接。要求使用字符数组保存字符串,不要使用系统函数。4 .使用string类定义字符串对象
30、,重新实现上一小题。5 .定义一个Employee类,其中包括姓名、街道地址、城市和邮编等属性,以及 change_name()和display。等函数。display。显示姓名、街道地址、城市和邮编等属 性,change_name()改变对象的姓名属性,实现并测试这个类。6 .定义包含5个元素的对象数组,每个元素都是Employee类型的对象。7 .(选做)修改实验四中的选做实验中的people (人员)类。具有的属性如下:姓 名 char name 1、编号 char number。、性别 char sex3、生日 birthday、身份证号 char id16o其中“出生日期”定义为一个
31、“日期”类内嵌子对象。用成员函数实 现对人员信息的录入和显示。要求包括:构造函数和析构函数、拷贝构造函数、 内联成员函数、聚集。在测试程序中定义people类的时象数组,录入数据并显示。三、实验步骤1 .编写矩阵转置函数,输入参数为3X3整型数组,使用循环语句实现矩阵元素的行 列对调,注意在循环语句中究竟需要对哪些元素进行操作,编写main。函数实现 输入、输出。程序名:lab6_l.cpp。2 .改写矩阵转置函数,参数为整型指针,使用指针对数组元素进行操作,在main() 函数中使用new操作符分配内存生成动态数组。通过debug观察指针的内容及其 所指的对象中的内容。程序名:lab6_2.
32、cpp。3 .编程实现两字符串的连接。定义字符数组保存字符串,在程序中提示用户输入两 个字符串,实现两个字符串的连接,最后用cout语句显示输出。程序名:lab6_3.cpp。 用cin实现输入,注意,字符串的结束标志是ASCII码0,使用循环语句进行字符 串间的字符拷贝。4 .使用string类定义字符串对象,编程实现两字符串的连接。在string类中已重载了 运算符“+=”实现字符串的连接,可以使用这个功能。程序名:lab6_4.cpp。5 .在employee.h文件中定义Employee类。Employee类具有姓名、街道地址、城市 和邮编等私有数据成员,都可以用字符型数组来表示,在成
33、员函数中,构造函数 用来初始化所有成员数组,对字符数组的赋值可以使用字符串拷贝函数strcpy(char *, char *name); display。中使用cout显示姓名、街道地址、城市和邮编等属性, change_name()改变类中表示姓名属性的字符数组类型的数据成员。在主程序中定 义这个类的对象并对其进行操作。程序名:lab6_5.cpp。6 .使用上一小题中定义的Employee类定义对象数组emp5,使用循环语句把数据显 示出来。程序名:lab6_6.cpp。实验7继承与派生(4学时)一、实验目的1 .学习定义和使用类的继承关系,定义派生类;2 .熟悉不同继承方式下对基类成员的
34、访问控制;3 .学习利用虚基类解决二义性问题。二、实验任务1 .定义一个基类Animal,有私有整型成员变量age,构造其派生类dog,在其成员函 数SetAge(int n)中直接给age赋值,看看会有什么问题,把age改为公有成员变量, 还会有问题吗?编程试试看。2 .定义一个基类BaseClass,有整型成员变量Number,构造其派生类DerivedClass, 观察构造函数和析构函数的执行情况。3 .定义一个车(vehicle)基类,具有MaxSpeed、Weight等成员变量,Run、Stop等 成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类 自行车(b
35、icycle) 类有高度(Height)等属性,汽车(motorcar)类有座位数(SeatNum)等属性。 从bicycle和motorcar派生出摩托车(motorcycle)类,在继承过程中,注意把vehicle 设置为虚基类。如果不把vehicle设置为虚基类,会有什么问题?编程试试看。4 .(选做)从实验6中的people (人员)类派生出student (学生)类,添加属性: 班号char classNO7;从people类派生出teacher (教师)类,添加属性:职务char principalshipl 1 部J char departmental。从 student 类中派
36、生出 graduate (研究 生)类,添加属性:专业 char subject。、导师 teacher adviser;从 graduate 类和 teacher类派生出TA (助教生)类,注意虚基类的使用。甫载相应的成员函数,测 试这些类。类之间的关系如下图所示:图7-1类图三、实验步骤1 .编写程序定义基类Animal,成员变量age定义为私有的。构造派生类dog,在其成员函数SetAge(int n)中直接对age赋值时,会出现类似以下的错误提示: error C2248: age*: cannot access private member declared in class Ani
37、mal* error C2248: age: cannot access private member declared in class Animal 把age改为公有成员变量后重新编译就可以了。程序名:lab7.cpp。2 .编写程序定义一个基类BaseClass,构造其派生类DerivedClass,在构造函数和析 构函数中用cout输出提示信息,观察构造函数和析构函数的执行情况。程序名: lab7_2.cpp3 .用debug功能跟踪程序lab7_2的执行过程,观察基类和派生类的构造函数和析构 函数的执行情况。4 .编写程序定义一个车(vehicle)基类,由此派生出自行车(bicyc
38、le)类/车(motorcar) 类,注意把vehicle派生为虚基类。再从bicycle和motorcar派生出摩托车 (motorcycle)类,在main()函数中测试这个类。程序名:lab7_3.cpp。编译成功后,把vehicle设置为非虚基类,再编译一次,此时系统报错,无法编译 成功。这是因为若不把vehicle设置为虚基类,会出现二义性错误,程序不能成功 编译。实验8多态性(2学时)一、实验目的1 .掌握运算符重载的方法;2 .学习使用虚函数实现动态多态性。二、实验任务1 .定义Point类,有坐标_x, _y两个成员变量:对Point类重载“+”蹄 )、“一” (自减)运算符,
39、实现对坐标值的改变。2 .定义一个车(vehicle)基类,有Run、Stop等成员函数,由此派生出自行车(bicycle) 类、汽车(motorcar)类,从 bicycle 和 motorcar 派生出摩托车(motorcycle)类, 它们都有Run、Stop等成员函数。观察虚函数的作用。3 .(选做)对实验六中的pe叩le类重载“=”运算符和“=”运算符,“=”运算符 判断两个people类对象的id属性的大小;“=”运算符实现people类对象的赋值操 作。三、实验步骤1 .编写程序定义Point类,在类中定义整型的私有成员变量一x、_y,定义成员函数 Point& operator
40、+();Point operator-H-(int);以实现对 Point 类重载+”(自增)运 算符,定义成员函数Point& operator-();Point operator-(int);以实现对Point类重载 “-(自减)运算符,实现对坐标值的改变。程序名:lab8.cpp。2 .编写程序定义一个车(vehicle)基类,有Run、Stop等成员函数,由此派生出自行 车(bicycle)类 汽车(motorcar)类,从 bicycle 和 motorcar派生出摩托车(motorcycle) 类,它们都有Run,Stop等成员函数。在main。函数中定义vehicle,bicycle,motorcar motorcycle的对象,调用其Run()、Stop。函数,观察其执行情况。再分别用vehicle 类型的指针来调用这几个对象的成员函数,看看能否成功;把Run、Stop定义为 虚函数,再试试看。程序名:lab8_2.cpp。实验9群体类(4学时)实验目的1 .了解链表类的定义与实现,学习其使用方法;2 .了解栈类的定义与实现,学习其使用方法;3 .了解队列类的定义与实现,学习其使用方法;4 .了解C+标准模板库STL的使用方法。二、实验任务1 .编写程序link.h实现教材中例9.6的链表类。在测试程序lab9_l.cpp中定义两个整 型链表A和B,