《C程序设计》谭浩强版实验指导书_第1页
《C程序设计》谭浩强版实验指导书_第2页
《C程序设计》谭浩强版实验指导书_第3页
《C程序设计》谭浩强版实验指导书_第4页
《C程序设计》谭浩强版实验指导书_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C+程序设计实验教学指导书课程编号: ?撰写人:朱世华审核人:、八前言程序设计是一门实践性很强的课程, 通过实验可以巩固和加强课堂教学内容,提高学生实际工作能力和动手能力,并为后续课程和从事实践技术工作奠定重要 的基础。因此,学生在进行理论知识学习的同时,必须十分重视实践环节 上机。上机实验时应该一人一组,独立上机。在上机过程中出现的问题,一般应自己独立处理,学生应在实验前将教师指定的题目编好程序,然后上机输入和调试。 上机前应事先作好准备工作,以提高上机实验的效率,准备工作至少应包括: ( 1)复习和掌握与本实验有关的教学内容。(2)准备好上机所需的程序。(3)对运行中可能出现的问题应事先做

2、出估计;对程序中有疑问的地方,应做上记号,以便上机时给予注意。(4)准备好调试和运行时所需的数据。实验设备与环境:1、硬件配置Pentium n以上PC兼容机或品牌机,配有彩色显示器、鼠标、键盘,内存不小于32MB硬盘自由空间不少于 60MB推荐配置为内存256MB(或以上),硬盘自由空 间1GB以上。2、软件配置操作系统:Windows XP, Windows 2000 以上版本开发环境:Microsoft Visual C+ 2010以上版本。目录实验一Visual C+ 2010 的基本用法 1实验二数据类型、运算符和表达式 4实验三三种基本结构的实现1 7实验四三种基本结构的实现2 9

3、实验六指针 13实验七函数 14实验八结构和联合 17实验九类与对象 20实验一 Visual C+ 2010 的基本用法一、实验目的1熟悉 Visual C+2010 集成开发环境的基本命令和功能键。 2学习完整的 C+ 程序开发过程。3理解简单的 C+ 程序结构。二、实验内容与步骤本次实验将学习有关 Visual C+ 开发环境的一些知识,并尝试实现 一个简单的DOSS序和 Windows程序。通过本次实验,可以了解用Visual C+ 开发应用程序的全过程。1、熟悉 Visual C+ 开发环境我们选择Visual C+那一项就可以了。下图是 VS2010打幵后的画面,当 然可能你的界面

4、跟我的不一样,没关系,那只是设置问题。菜单栏我们常用的是 File,View和Debug菜单下的菜单项。工具栏各项 其实在菜单栏都有与它们对应的菜单项,功能是一样的。左侧面板可以放 多个视图,我这里放了解决方案浏览器、类视图和资源视图,解决方案浏 览器中我们可以看到所有头文件和源文件构成的树, 头文件就是 .h 后缀的 文件,源文件就是 .cpp 后缀的文件,类视图中显示了每个工程的每个类, 也是树状结构,在解决方案浏览器或类视图中双击每一项,中间区域都会 打开相应的文件或者到类的位置。 资源视图中显示了界面工程中使用的一侧面板上双击某项时,中间区域会出现相应的界面。右侧面板上有个Toolbo

5、x ,是在界面工程中用来往界面资源模板上添加控件的,里面包含 了各种控件,直接拖到模板上就行了。底侧还有几个标签,其中一个是 output ,这是输出视图,用来输出程序运行信息和我们程序中写的一些调 试信息,还有一个 Find Result 视图,用来显示我们搜索任何字母或单词 的结果。File-New-Project 项可以创建一个工程, 也可以在 start page 中点击 NewProject.,然后出现的 NewProject 窗口中有多个工程类型可以选择, Win32 Console Application 是 Win32 控制台程序, MFC Application是MFC应用程

6、序,可以建立以幵发界面程序,Win32 Project是 Win32程序,Empty Project 是空程序,MFC DLL用来建立生成动态链 接库的工程,其它的不常用就不介绍了。我们要建立一个没有应用程序界 面的只有 Dos 命令行界面的工程就选 Win32 Console Application 项,我 们学习C+基础知识用这个就可以了。它跟Win32 Project的区别是,它的入口是 main 函数,而 Win32 Project 的入口是 WinMain 函数。File-Open-Project/Solution可以打开以前建立的工程或者解决方案,一个解决方案中可以包含多个工程,你

7、可以把它理解为多个有 关系或者没关系的工程的集合, 有时把多个工程放到一个解决方案里调试 起来很方便。在 View 下的菜单项我们就可以控制它。 View-Solution Explorer 可以打 开或关闭解决方案浏览器视图, View-Class View 用来控制类视图的显示, View-Resource View 控制资源视图的显示,当然只有界面工程的资 源视图中才会有内容。 View-Output 和 View-FindResults 等项大家应该 也知道它们的含义了吧。Debug-Start Debugging ( 快 捷 键 是 F5 ) 用 来 开 始 调 试 , Debug-

8、Toggle Breadpoint (快捷键是F9)用来设置断点,设置断点后然 后开始调试,程序运行到断点时会停下来,我们用鼠标放到断点处的各个 变量上时可以看到当时这些变量的值。 Debug-Start Without Debugging 表示不调试直接运行, 也就是到断点处也不会停止运行。 Debug-Step Into (快捷键是F11)用来单步执行,遇到子函数就进入并且继续单步执行; Debug-Step Over (快捷键是F10)也是单步执行,但在单步执行时,在 函数内遇到子函数时不会进入子函数内单步执行, 而是将子函数整个执行 完而跳到下一步,也就是把子函数整个作为一步。工 具

9、栏 上 有 个 下 拉 列 表 框 , 它 包 含 有 Debug、 Release 和 Configuration Manager ,选择 Debug 时为调试模式,生成的可执行程序 中包含调试信息,我们可以调试并清楚的看到变量值,选择 Release 时生 成的可执行程序中不含调试信息,在设置断点后看到的变量值可能不准 确。msdn帮助可以点Help-View Help (快捷键是F1),也可以点幵始-Microsoft Visual Studio 2010-Microsoft Visual Studio 2010 Documentation 打开。2、控制台应用程序的建立用 Appwiz

10、ard 建立一个控制台应用程序,在显示器上输出“ Hello , World!”。( 1)创建项目( project )首先创建一个项目,用来管理用户的应用程序。创建项目的步骤为: 启动 visual Studio 2010 。 从主菜单中选择菜单项“ File ” t“ New,打幵“ NeW对话框。 选择 “Projects ”标签, 从项 目列 表中 单击 “Win32 Console Application ”选项。在“ project name ”编辑框中键入项目的名字,如“ hello ”,系 统将自动为用户的项目分配一个默认的目录。也可以在“Location ”编辑框中重新输入项

11、目存放路径。单击“ 0K按钮继续。(2)编辑源程序 在项目中添加一个文件: 从主菜单中选择菜单项“ File ”t“ New,打幵“ Nev”对话框。 在“ New对话框中选择“ File ”标签,单击“C + Source File ”选项,建立源文件(扩展名为 .cpp )。选中“ Add to Project ”复 选框。在右边的“ FilenamW编辑框中为文件指定一个名字,如“Hello ”,系统将自动加上后缀“ .cpp ”。这时在编辑窗口将自动打开一个新的空白文件, 在文件中输入源程序。 本例中输入以下内容:include void main()cout hello,world!

12、endl;仔细检查输入的内容,确保内容正确。(3)保存源文件单击工具栏中的“ save ”图标,或选择菜单项“File ”宀“ Save”保存源文件。(4)编译源文件选择菜单项“ Build ”t“ Compile Hello.cpp ”来编译源文件,如果输入的内容没有错误,那么,在屏幕下方的输出窗口将会显示:hello.obj-0 error(s),0 warning(s)如果在编译时得到错误或警告, 则表明源文件出现错误, 检查源文件, 改正错误后再编译,直至无误。(5)链接程序选择菜单项“ Build ”t“ Build Hello.exe”链接程序,如果链接过程中没有错误,则在输出窗口

13、会显示:hello.exe-0 error(s),0 warning(s)如果有错误,应改正,然后重复(4)、(5),直至无误。(6)运行程序选择菜单项“ Build ”t“ Execute Hello.exe”运行程序,将显示一个类似于DOS勺窗口,在窗口中第一行输出“hello,world! ”,第二行输出“ Press any key to continue ”,提示用户按任意键回到开发环境。3、编写一个简单的 C+ 程序要求:输入圆的半径,计算圆的周长和面积。步骤:1)按照上面的步骤创建一个项目,名字为“ Circle ”。2)在项目中增加一个文件,命名为“Circle.cpp ”。3

14、)在文件中输入源程序如下:#includeconst double PI = 3.14159; /定义符号常量void main( )double radius;/定义半径double perimeter, area ; /定义周长和面积coutradius;perimeter=2*PI*radius; /计算周长area=PI*radius*radius; /计算面积cout 圆的周长为 :perimeter;coutn 圆的面积为 :areaendl;4) 编译、链接程序,直到没有错误。5) 运行程序,输入测试数据,测试程序的功能测试数据:输入: 5圆的周长为 : 31.4159圆的面积为

15、 : 78.5397输入: 7输出:圆的周长为 : 43.9823圆的面积为 : 153.938思考问题:1) 程序中为什么要包含头文件 iostream.h ?2)建立控制台应用程序的一般步骤是怎样的?实验二 数据类型、运算符和表达式一、实验目的1掌握 Visual C+ 基本数据类型的字节宽度和范围表示, 熟悉如何定义 一个整型、字符型和实型变量,以及对它们赋值的方法。2 掌握不同类型数据之间赋值的规律。3. 学会使用C+勺有关算术运算符,以及包含这些运算符的表达式,特别 是自增(+)和自减(一一)运算符的使用。4. 进一步熟悉C+程序的编辑、编译、连接和运行的过程。二、实验内容与步骤1、

16、基本数据类型的长度编写一个程序,输出基本数据类型 char 、 short 、 int 、 long 、 float 、 double 和指针类型 void* 、 char* 、 short* 、 int* 、 long* 、 float* 、 double* 的数据类型的长度。要求:弄清所使用的系统上运行的C+编译器中每个基本数据类型的长度。提示:利用运算符 sizeof( 数据类型名 )来得到各个数据类型的长度。思考问题:为什么所有的指针长度都一样?2、整型、字符型变量的定义及赋值1) 输入并调试运行下面的程序#includevoid main( )char c1, c2;c1= a ;c

17、2= b ;coutc1setw(5)c2endl; 运行此程序,写出执行结果。 在此基础上增加一个语句:cout(int)c1setw(5)(int)c2endl; 再运行,并观察结果。 将第 1 行改为; int c1, c2; 再运行,并观察结果。 将第 2、 3 行改为:c1= a; / 不用单撇号c2= b; 再使之运行,分析其运行结果。 将第 2、 3 行改为:c1=” a”; / 用双撇号再使之运行,分析其运行结果。 将第 2、 3 行改为:c1=300; / 用大于 127 的整数c2=400; 再使之运行,分析其运行结果。( 2) 输入并调试运行下面的程序#includevo

18、id main( )charc1= a ,c2=b, c3=c, c4=101 c5= 116 ;cout c1c2 ”t ”c3” t ” c1c2c3endl; cout ” tb ” c4c5endl; 要求:在实验前先分析程序,写出应得结果,实验时将二者对照。( 3) 输入并调试运行下面的程序includevoid main( )int x, y, m, n;x = 8;m = +x;n = y+; coutxsetw(5)ysetw(5)msetw(5)nendl; 运行程序,注意 x、 y、m、n 各变量的值。 将第 4、 5 行改为:m = x+;n = +y;再运行。 将程序改

19、为:#includevoid main( )int x , y;x = 8;y = 10;coutx+setw(5)+yendl; 在的基础上,将cout语句改为:cout+xsetw(5)+yendl; 再将 cout 语句改为: 将程序改为:#includevoid main ( )int x, y, m=0, n=0;x = 8;y = 10;m += x+:n -= -y; coutxsetw(5)ysetw(5)msetw(5)nendl;写出程序的执行结果实验三 三种基本结构的实现 1一、实验目的1、学会正确使用逻辑运算符和逻辑表达式。2、熟练掌握 if 语句和 switch 语句

20、。3、学习调试程序。二、实验内容与步骤1、已知三个数 a、b、c,找出最大值放于 max中。(1) 输入并调试运行下面的程序:#includevoid main()int a,b,c,max; /定义四个整型变量cinabc;if(a= b)max = a; /a=belsemax = b;/amax)max = c;/c是最大值coutmax=maxendl;( 2) 若输入下列数据,分析程序的执行顺序并写出运行结果。 1 2 3 2 1 3 3 2 1 3 1 2 3 3 2 2 1 22、输入某学生的成绩,经处理后给出学生的等级,等级分类如下:90 分以上(包括 90):A80 至 90

21、(包括 80):B70 至 80(包括 70):C60 至 70(包括 60)D60 分以下: E 输入以下程序并调试运行。#includevoid main()float score;char grade;cout score;if ( score 100 )couti nput error!e ndl;elseswitch ( int (score ) /10 )case 10:case 9: grade = A;break;case 8: grade = B;break;case 7: grade = C;break;case 6: grade = D;break;default: gr

22、ade = E;coutthe stude nt scort: grade e ndl;输入测试数据,调试程序并写出结果。测试数据要覆盖所有路径,注意临界值,例如此题中的100分、60分、0分以及小于0和大于100的数 据。3、有一函数:x ( x 10 )用 cin 语句输入 x 的值,求 y 值。运行程序,输入x的值(分别为XVI、1 10三种情况), 检查输出的 y 值是否正确。思考问题:( 1 ) if 语句和 switch 语句适合于什么情况?( 2) 能否用 switch 语句完成对输入值的判断?实验四 三种基本结构的实现 2一、实验目的1 、学会正确使用逻辑运算符和逻辑表达式。2

23、、理解并掌握程序的循环结构。3、熟练掌握用 while 语句、 do while 语句和 for 语句实现循环的方法。4、掌握在程序设计中用循环的方法实现一些常用算法(如穷举、迭代、 递推等)。5、进一步学习调试程序。二、实验内容与步骤1、打印 500 以内的“水仙花数” 。“水仙花数”是一个 3 位数,其各位数立方和等于该数本身输入以下程序并调试运行#include void main()int i, j, k, n;for ( n = 100; n=500; n+ )i = n/100;j = n/10-i*10;k = n%10;if ( n=i*i*i+j*j*j+k*k*k)cout

24、nendl;2、一个数如果恰好等于它的因子之和,这个数就称为完数。求500 之内的所有完数。输入以下程序并调试程序。#include void main()int n, s, j;for ( n=1; n=500; n+ )s=0;for ( j=1; jn; j+)if ( n%j=0 )s=s+j;if ( s=n )coutsendl;3、任给一个的正整数,要求:( 1) 求出它是几位数。( 2) 按逆序打印出各位数字。例如原数为 321,应输出 123。( 3) 除此之外,程序还应当对不合法的输入作必要的处理。例如:输入 负数。提示:利用 %、 / 运算符,循环迭代。4、编写一个程序,

25、循环从标准输入读入某雇员的工作时间(以小时计)和每小时的工资数, 计算并输出他的工资。 若雇员月工作小时超过 40 小时,则超过部分按原工资的 1.5 倍的加班工资来计算。若雇员月工 作小时超过 50小时,则超过 50的部分按原工资的 3 倍的加班工资来 计算。而 40 到 50 小时的工资仍按照原工资的 1.5 倍的加班工资来计 算。要求:2)要求有输入提示和输出提示,如要输入雇员的工作时间和每小 时的工资值时,可以提示: “请输入雇员的工作时间和小时 工资:”输出时,提示: “雇员工资为:”3)循环在用户输入的工作时间为 0 时结束。测试数据:输入:30 4输出:120输入:45 4.5输

26、出:213.75输入:60 5输出:425输入:0 0程序结束思考问题:1) 三种循环语句都适合于什么情况?如果已经知道要计算的雇员的数目(如 10 个),用哪种循环更方便?2) while 、 do while 的区别?实验五 数 组一、实验目的1、掌握一维数组和二维数组的定义、赋值和输入输出的方法。2、掌握字符数组和字符串函数的使用。3、掌握与数组有关的算法(特别是排序算法和查找算法)二、实验内容与步骤1、输入一串字符,计算其中 * 字符的个数。 输入以下程序并调试运行。#include void main( )char c30;int i , sum=0;cinsetw(30)c;for

27、 ( i=0; ci!=0 ; i+ )if (ci =* )sum=sum + 1;cout c endl;cout “ * 字符的个数为 : ” sum high 时,返回查找失败信息/表空,查找失败3)low=high , mid=(low+high )/2;/取中间 若 kxelemmid , low=mid+1 ;转( 2) / 查找在右半区 进行 若 kx=elemmid ,返回数据元素在表中位置 / 查找成功 测试数据:例如,有序表 20 ,25,30,36,42,48,55,61,69,72,83,97 程序先输出: 请输入一个整数:用户输入: 72程序则应输出: 数据 72

28、在有序表中的位置下标是 10。 用户输入: 35程序则应输出: 在有序表中无此数!5、将两个字符串链接起来。要求:不使用 strcat 函数。提示:定义两个字符型数组,找到第一个串的最后一个字符位置,将 第二个串的字符依次放入。注意串的结束标志“ 0 ”。6、找出一个二维数组的“鞍点” ,即该位置上的元素在该行上最大,在该 列上最小。也可能没有鞍点。提示:用 cin 语句从键盘输入数组各个元素的值,检查结果是否正确。题目并未指定二维数组的行数和列数,程序应能处理任意行数和列数的数组。因此,从理论上来说,应当准备许多种不同行数和列数的数组数据,但这样的工作量太大,一般来说不需要这样做,只需要准备

29、 典型的数据即可。如果已指定了数组的行数和列数,可以在程序中对数组元素赋初 值,而不必用 cin 语句。请同学们修改程序以实现之。测试数据:(至少应当准备两组测试数据)(1)二维数组有鞍点9 80 205 4090 -60 96 1210 -3 101 892)二维数组没有鞍点9 80 105 4090 -60 196 1210 -3 10189实验六 指 针一、实验目的1、掌握指针的概念,会定义和使用指针变量。2、能正确使用数组的指针和指向数组的指针变量。3、能正确使用字符串的指针和指向字符串的指针变量4、了解二级指针的概念及其使用方法。、实验内容与步骤1、输入两个整数,按由大到小的顺序输出

30、。输入以下程序并调试运行。#includevoid main()int a, b;int * p=&a, *q=&b, *t;coutab;if ( ab ) t=p; p=q; q=t; coutasetw(5)bendl;cout*psetw(5)*qendl;输入测试数据,分析运行结果。2、将若干字符串按英文字典由小到大排序。 提示:利用字符指针数组存放若干字符串,字符串的比较和交换。3、有n个人围成一圈,从第一个人幵始报数(从 1到3),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。4、编写程序,当输入整数 112 (月份号)时,输出该月的英文名称,输入其他整数时结束程序。例如

31、,输入“ 4”,则应输出“ April ”。输入“ 0”,则退出程序,要求使 用指针数组处理。5、使用动态内存分配技术设计一个计算学生平均成绩的程序,学生个数和课程门数是任意的,使用二维数组,程序按平均成绩从大到小输出每个学生的成绩实验七 函数一、实验目的1、掌握函数的定义和调用方法。2、掌握函数实参与形参的对应关系以及 C+勺三种函数参数传递机制3、掌握函数嵌套调用和递归调用的方法。4、掌握全局变量和局部变量、动态变量和静态变量的概念和使用方法。二、实验内容与步骤1、写一个判断素数的函数,在主函数中输入一个整数,输出是否是素数的信息。输入以下程序并调试运行。#include#include#

32、includeint prime(int number)int flag=1, n;for ( n=2; n= int(sqrt(number) & flag = 1; n+)if (number%n =0)flag = 0;return flag;void main ( )int number;coutnumber;if (prime(number)coutnumber 是素数 .endl;elsecoutnumber 不是素数 .endl; 判断素数的算法,在以前学习循环的时候已经学过了,在这里只是把这个算法 用函数的形式表示出来 。这里要注意函数的定义 声明的方法和格式。 2、分析程序的

33、运行结果输入下列程序,运行它,分析得到的结果。#includeint n=0;int func( int x=10 );void main()int a, b;a=5; b=func(a);cout ” nlocal a= ”aendl”local b= ”bendl ” global n= ”nendl;a+; b=func(a);cout ”nlocal a= ” aendl” local b= ”bendl ” global n= ”nendl;func();int func( int x )int a=1;static int b=10;a+;b+;x+;n+;cout ” nloca

34、l a= ” aendl” local b= ” bendl” parameter x= ” x=1 并且 n=r;(4)注意整数能存放的数据范围有限,如何解决?提示:(1)可以用double数据类型来存放函数的计算结果。(2)递归结束条件:如果 r=0,则 C(n,r)=1; 如果 r=1,则 C(n,r)=n。测试数据:输入5 3输出10输入10 20输出Iput In valid1输入50 3输出1.#IND输入0 0Iput In valid1程序结束思考问题:(1) 对各种数据类型的字长是否有了新的认识?(2) 递归函数的书写要点是什么?(3)递归和非递归函数各有哪些好处?5、 求两

35、个整数的最大公约数和最小公倍数, 用一个函数求最大公约数, 用另一个函 数求最小公倍数。(提示: 可以用下面的方法求:一、利用辗除法或其它方法求得最大公约数;二、 最小公倍数等于两数之积除以最大公约数。 )要求:两个整数在主函数中输入,并传送给函数 1,求出的最大公约数返回主函数, 然后再和两个整数一起作为实参传递给函数2,以求出最小公倍数,再返回到主函数输出最大公约数和最小公倍数。实验八 结构和联合一、实验目的1、掌握结构体类型变量的定义和使用。2、掌握结构数组的概念和使用。3、掌握链表的概念,初步学会对链表进行操作4、掌握联合体的概念与应用。二、试验内容与步骤1、输入和运行以下程序。#in

36、cludeunion datashort int s2;float a;int b;char c4;u;void main()cinu.s0u.s1;couts0=u.s0 s1=u.s1endla=u.a b=u.bendl c0=u.c0 c1=u.c1endlc2=u.c2 c3=u.c3u.b ;输入 60000 给 b, 分析运行结果。2、打印学生成绩单,内容包括学号、姓名、三门课(数学 MT英语EN 计算机COMPUJ的成绩。计算每个学生三门课程的总分SUM和平均分AVER若三门课成绩都在90分以上者,输出“ Y”;否则输出“ N, 并打印学生成绩单,格式如下:NJM NAME M

37、T EN COMP SJM AVER =909501Liufan959896.5289.5 96.5Y9502Zhanghua958286.5263.5 87.8333N9503Liming688985242 80.6667N输入以下程序并调试运行#include struct studentint num;char name15;float score3;float sum;float aver;char ch;void main()student stu3;int i,j;for ( i=0; i stui.num;cin ;for ( j=0; j stui.score

38、j;for ( i=0; i3; i+ )stui.sum=0; stui.ch=Y;for ( j=0; j3; j+ )stui.sum +=stui.scorej;if (stui.scorej90)stui.ch=N;stui.aver=stui.sum/3;cout=90endl;for (i=0;i3;i+)coutstui.numsetw(8) setw(8)stui.score0setw(8)stui.score1setw(8)stui.score2setw(8)stui.sumsetw(8)stui.aver setw(5)stui.chendl;3、设计一

39、个单向链表。从标准输入读取若干整数,建立链表,每次读入 的数放入链表结尾。当用户输入 0 时,结束链表的建立工作。然后从前往后依次输出链表结点中的内容提示:( 1) 链表结点空间动态申请。( 2) 因为每次新结点插入在表尾,所以应设一个指针总是指向当前的表尾。( 3) 处理申请不到空间的情况。测试数据:程序输出:请输入若干整数建立链表(输入 0 结束):用户输入: 1 2 3 4 5 6 7 0程序输出: 1 2 3 4 5 6 7思考问题:如果是双向链表,程序要做哪些改动?4、有 10 个学生,每个学生的数据包括学号、姓名、 3 门课的成绩,从键 盘输入 10 个学生数据,要求打印出 3 门

40、课的平均成绩,以及最高分 学生的数据(包括学号、姓名、 3 门课的成绩、平均分数) 。要求:用 input 函数输入 10 个学生的数据;用 average 函数求平均分; 用 max 函数找出最高分的学生数据;平均分和最高分学生的数据都在 主函数中输出。5、建立一个链表,每个结点包括:学号、姓名、性别、年龄、 。输入一个年龄,如果链表中的结点所包含的年龄等于此年龄, 则将此结点删去实验九 类与对象一、实验目的1、掌握类和对象的定义和使用。2、理解构造函数和析构函数的作用。3、学习使用静态成员和内联成员函数。4、掌握从现有类派生出新类的方式。5、了解基类成员在派生类中的访问控制。6、了解虚函数

41、对多态性的支持。二、实验内容与步骤1、构造函数和析构函数的调用。输入和运行以下程序。#include class Aint *a;public:A(int x)a=new int(x);cout ”Constructor: ” *aendl;A() cout ”Destructor: ” *a endl; delete a; ;void main()A x(3),*p;p=new A(5);delete p;2、派生类构造函数和析构函数的调用。 输入以下程序并调试运行。#includeclass Aint a;public:A(int aa=0):a(aa) cout ” Constructo

42、r A:A() cout ”Destructor A:;class B:public Aint b;public:B(int aa,int bb):A(aa),b(bb)aendl; ” aendl; bendl; B() coutDestructor B:bendl; cout ” Constructor B:;void main()B x(2,3),y(4,5);3、多态性的实现。( 1)输入以下程序并调试运行,分析其执行结果。 #include/ 类 Point 的定义class Point public:Point( double i=0, double j=0 ) x=i, y=j;

43、 double area() / 返回点的面积 (0.0) return 0.0; private:double x,y; / 点的坐标;/ 类 Circle 的定义const double pi=3.14159;class Circle : public Pointpublic:Circle( double i=0, double j=0, double r=1 ) : Point( i,j ) radius=r; double area() / 返回圆的面积 return pi*radius*radius; double getRadius() return radius; private

44、:double radius;void main() Point p;cout 点的面积为 : p.area()endl;Circle c( 1, 1, 10 );cout 半 径 为 c.getRadius() 的 圆 的 面 积 为 c.area()endl;Point *pp;pp=&c; / 基类指针指向派生类的对象cout 半 径 为 c.getRadius() 的 圆 的 面 积 为 area()endl;(2)改写上面的程序,将成员函数 area ()定义为虚函数,分析其执行 结果。思考:如何正确使用虚函数实现运行时的多态性?4、静态成员的使用。某商店经销一种货物,货物成箱购进,

45、成箱卖出,购进和卖出时均以 重量为单位,各箱的重量不一样,因此,商店需要记录下目前库存的货物 的总重量,现要求用 C+吾言把商店货物购进和卖出的情况模拟出来。提示:(1) 应将这类货物用一个类(Goods)来描述,而每箱货物 作为这个类的对象。 每箱货物有重量, 因此应有一个数据成员来 表示这箱货物的重量,而总重量用一个静态数据成员来记录。(2)在货物类的构造函数和析构函数中分别修改总重量。要求:(1)提供静态成员函数 GetTotalWeight ,用来返回当前货物的总重 量。(2)下面是测试所设计类的主程序:#include#includegoods.h / 货物类的定义文件void ma

46、in( )cout 开 始 时 货 物 的 总 重 量 Goods:GetTotalWeight( )endl;int w;coutw;Goods *g1=new Goods(w); / 购进一箱货物 cout 库 存 货 物 的 总 重 量 Goods:GetTotalWeight( )endl;coutw;Goods *g2=new Goods(w); / 购进一箱货物cout 库 存货物的总重量Goods:GetTotalWeight( )endl;delete g1; /卖出一箱货物cout 库存货物的总重量Goods:GetTotalWeight( )endl;输入测试数据,写出起执行结果。思考:(1) 在什么地方初始化类的静态数据成员?(2) 非静态成员函数能否访问静态数据成员?5、要求计算正方体、球和圆柱 3个几何体的表面积和体积,请用C+吾言定义类等级。提示:可以抽象出一个公共的基类 Base,把它作为抽象类,在该类内定义求表面积和体积的纯

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论