C程序设计谭浩强版实验指导书

上传人:痛*** 文档编号:101165712 上传时间:2022-06-04 格式:DOC 页数:26 大小:124.50KB
返回 下载 相关 举报
C程序设计谭浩强版实验指导书_第1页
第1页 / 共26页
C程序设计谭浩强版实验指导书_第2页
第2页 / 共26页
C程序设计谭浩强版实验指导书_第3页
第3页 / 共26页
点击查看更多>>
资源描述
-?C+程序设计?实 验 教 学 指 导 书课程.撰写人:朱世华审核人:前言程序设计是一门实践性很强的课程,通过实验可以稳固和加强课堂教学容,提高学生实际工作能力和动手能力,并为后续课程和从事实践技术工作奠定重要的根底。因此,学生在进展理论知识学习的同时,必须十分重视实践环节-上机。上机实验时应该一人一组,独立上机。在上机过程中出现的问题,一般应自己独立处理,学生应在实验前将教师指定的题目编好程序,然后上机输入和调试。上机前应事先作好准备工作,以提高上机实验的效率,准备工作至少应包括:(1) 复习和掌握与本实验有关的教学容。(2) 准备好上机所需的程序。(3) 对运行中可能出现的问题应事先做出估计;对程序中有疑问的地方,应做上记号,以便上机时给予注意。(4) 准备好调试和运行时所需的数据。实验设备与环境:1、硬件配置Pentium以上PC兼容机或品牌机,配有彩色显示器、鼠标、键盘,存不小于32MB,硬盘自由空间不少于60MB。推荐配置为存256MB或以上,硬盘自由空间1GB以上。2、软件配置操作系统:Windows *P,Windows 2000以上版本开发环境:Microsoft Visual C+ 2021以上版本。目录实验一 Visual C+ 2021的根本用法1实验二数据类型、运算符和表达式4实验三三种根本构造的实现17实验四三种根本构造的实现29实验六指针13实验七函数14实验八构造和联合17实验九类与对象20实验十综合实验23. z-实验一 Visual C+ 2021的根本用法一、实验目的 1 熟悉Visual C+2021集成开发环境的根本命令和功能键。2 学习完整的C+ 程序开发过程。3 理解简单的C+ 程序构造。 二、实验容与步骤本次实验将学习有关Visual C+ 开发环境的一些知识,并尝试实现一个简单的DOS程序和Windows程序。通过本次实验,可以了解用Visual C+ 开发应用程序的全过程。1、熟悉Visual C+ 开发环境我们选择Visual C+那一项就可以了。以下列图是VS2021翻开后的画面,当然可能你的界面跟我的不一样,没关系,那只是设置问题。菜单栏我们常用的是File,View和Debug菜单下的菜单项。工具栏各项其实在菜单栏都有与它们对应的菜单项,功能是一样的。左侧面板可以放多个视图,我这里放了解决方案浏览器、类视图和资源视图,解决方案浏览器中我们可以看到所有头文件和源文件构成的树,头文件就是.h后缀的文件,源文件就是.cpp后缀的文件,类视图中显示了每个工程的每个类,也是树状构造,在解决方案浏览器或类视图中双击每一项,中间区域都会翻开相应的文件或者到类的位置。资源视图中显示了界面工程中使用的一些界面资源。中间区域默认是翻开start page,翻开一个工程后我们在左侧面板上双击*项时,中间区域会出现相应的界面。右侧面板上有个Toolbo*,是在界面工程中用来往界面资源模板上添加控件的,里面包含了各种控件,直接拖到模板上就行了。底侧还有几个标签,其中一个是output,这是输出视图,用来输出程序运行信息和我们程序中写的一些调试信息,还有一个Find Result视图,用来显示我们搜索任何字母或单词的结果。 File-New-Project项可以创立一个工程,也可以在start page中点击New Project.,然后出现的New Project窗口中有多个工程类型可以选择, Win32 Console Application是Win32控制台程序,MFC Application是MFC应用程序,可以建立以开发界面程序,Win32 Project是Win32程序,Empty Project是空程序,MFC DLL用来建立生成动态库的工程,其它的不常用就不介绍了。我们要建立一个没有应用程序界面的只有Dos命令行界面的工程就选Win32 Console Application项,我们学习C+根底知识用这个就可以了。它跟Win32 Project的区别是,它的入口是main函数,而Win32 Project的入口是WinMain函数。 File-Open-Project/Solution可以翻开以前建立的工程或者解决方案,一个解决方案中可以包含多个工程,你可以把它理解为多个有关系或者没关系的工程的集合,有时把多个工程放到一个解决方案里调试起来很方便。在View下的菜单项我们就可以控制它。View-Solution E*plorer可以翻开或关闭解决方案浏览器视图,View-Class View用来控制类视图的显示,View-Resource View控制资源视图的显示,当然只有界面工程的资源视图中才会有容。View-Output和View-FindResults等项大家应该也知道它们的含义了吧。 Debug-Start Debugging快捷键是F5用来开场调试,Debug-Toggle Breadpoint快捷键是F9用来设置断点,设置断点后然后开场调试,程序运行到断点时会停下来,我们用鼠标放到断点处的各个变量上时可以看到当时这些变量的值。Debug-Start Without Debugging表示不调试直接运行,也就是到断点处也不会停顿运行。Debug-Step Into快捷键是F11用来单步执行,遇到子函数就进入并且继续单步执行;Debug-Step Over快捷键是F10也是单步执行,但在单步执行时,在函数遇到子函数时不会进入子函数单步执行,而是将子函数整个执行完而跳到下一步,也就是把子函数整个作为一步。 工具栏上有个下拉列表框,它包含有Debug、Release和Configuration Manager,选择Debug时为调试模式,生成的可执行程序中包含调试信息,我们可以调试并清楚的看到变量值,选择Release时生成的可执行程序中不含调试信息,在设置断点后看到的变量值可能不准确。 msdn帮助可以点Help-View Help快捷键是F1,也可以点开场-Microsoft Visual Studio 2021-Microsoft Visual Studio 2021 Documentation翻开。2、控制台应用程序的建立用Appwizard建立一个控制台应用程序,在显示器上输出“Hello,World!。1创立工程project首先创立一个工程,用来管理用户的应用程序。创立工程的步骤为: 启动visual Studio 2021。 从主菜单中选择菜单项“File“New,翻开“New对话框。 选择“Projects标签,从工程列表中单击“Win32 Console Application选项。在“project name编辑框中键入工程的名字,如“hello,系统将自动为用户的工程分配一个默认的目录。也可以在“Location编辑框中重新输入工程存放路径。单击“OK按钮继续。2编辑源程序在工程中添加一个文件: 从主菜单中选择菜单项“File“New,翻开“New对话框。 在“New对话框中选择“File标签,单击“+ Source File选项,建立源文件扩展名为.cpp。选中“Add to Project复选框。在右边的“Filename编辑框中为文件指定一个名字,如“Hello,系统将自动加上后缀“.cpp。这时在编辑窗口将自动翻开一个新的空白文件,在文件中输入源程序。本例中输入以下容:include void main()couthello,world!endl;仔细检查输入的容,确保容正确。3保存源文件单击工具栏中的“save图标,或选择菜单项“File“Save保存源文件。4编译源文件选择菜单项“Build“pile Hello.cpp来编译源文件,如果输入的容没有错误,则,在屏幕下方的输出窗口将会显示:hello.obj-0 error(s),0 warning(s)如果在编译时得到错误或警告,则说明源文件出现错误,检查源文件,改正错误后再编译,直至无误。5程序选择菜单项“Build“Build Hello.e*e程序,如果过程中没有错误,则在输出窗口会显示:hello.e*e-0 error(s),0 warning(s)如果有错误,应改正,然后重复4、5,直至无误。6运行程序选择菜单项“Build“E*ecute Hello.e*e运行程序,将显示一个类似于DOS的窗口,在窗口中第一行输出 “hello,world!,第二行输出“Press any key to continue,提示用户按任意键回到开发环境。3、编写一个简单的C+ 程序要求:输入圆的半径,计算圆的周长和面积。步骤:(1) 按照上面的步骤创立一个工程,名字为“Circle。(2) 在工程中增加一个文件,命名为“Circle.cpp。(3) 在文件中输入源程序如下:*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圆的面积为: 78.5397输入:7输出:圆的周长为: 43.9823圆的面积为: 153.938思考问题:(1) 程序中为什么要包含头文件iostream.h.(2) 建立控制台应用程序的一般步骤是怎样的.实验二 数据类型、运算符和表达式一、实验目的1 掌握Visual C+ 根本数据类型的字节宽度和围表示,熟悉如何定义一个整型、字符型和实型变量,以及对它们赋值的方法。2 掌握不同类型数据之间赋值的规律。3 学会使用C+的有关算术运算符,以及包含这些运算符的表达式,特别是自增+和自减运算符的使用。4 进一步熟悉C+程序的编辑、编译、连接和运行的过程。二、实验容与步骤1、根本数据类型的长度编写一个程序,输出根本数据类型char、short、int、long、float、double和指针类型void*、char*、short*、int*、long*、float*、double*的数据类型的长度。要求:弄清所使用的系统上运行的C+编译器中每个根本数据类型的长度。提示:利用运算符sizeof(数据类型名)来得到各个数据类型的长度。思考问题:为什么所有的指针长度都一样.2、整型、字符型变量的定义及赋值(1) 输入并调试运行下面的程序*include void main( ) char c1, c2; c1=a; c2=b; coutc1setw(5)c2endl; 运行此程序,写出执行结果。 在此根底上增加一个语句: cout(int)c1setw(5)(int)c2endl;再运行,并观察结果。 将第1行改为; int c1, c2;再运行,并观察结果。 将第2、3行改为:c1= a; /不用单撇号c2= b; 再使之运行,分析其运行结果。 将第2、3行改为:c1=a; / 用双撇号c2=b;再使之运行,分析其运行结果。 将第2、3行改为:c1=300; /用大于127的整数c2=400;再使之运行,分析其运行结果。(2) 输入并调试运行下面的程序*includevoid main( ) char c1=a, c2=b, c3=c, c4=101, c5= 116; cout c1c2tc3tc1c2c3endl; couttbc4c5endl;要求:在实验前先分析程序,写出应得结果,实验时将二者对照。3 输入并调试运行下面的程序includevoid main( ) int *, y, m, n; * = 8; y = 10; m = +*; n = y+; cout*setw(5)ysetw(5)msetw(5)nendl; 运行程序,注意*、y、m、n各变量的值。 将第4、5行改为: m = *+; n = +y;再运行。 将程序改为:*includevoid main( ) int *,y; * = 8; y = 10; cout*+setw(5)+yendl; 在的根底上,将cout语句改为:cout+*setw(5)+yendl; 再将cout语句改为:cout*setw(5)ysetw(5)*+setwy+endl; 将程序改为:*includevoid main ( ) int *, y, m=0, n=0; * = 8; y = 10; m += *+: n -= -y; cout*setw(5)ysetw(5)msetw(5)nendl;写出程序的执行结果。实验三 三种根本构造的实现1一、实验目的1、 学会正确使用逻辑运算符和逻辑表达式。2、 熟练掌握if语句和switch语句。3、 学习调试程序。二、实验容与步骤 1、三个数a、b、c,找出最大值放于ma*中。(1) 输入并调试运行下面的程序:*includevoid main()int a,b,c,ma*; /定义四个整型变量cinabc;if(a= b)ma* = a; /a=belsema* = b; /ama*)ma* = c; /c是最大值coutma*=ma*endl;2 假设输入以下数据,分析程序的执行顺序并写出运行结果。 1 2 3 2 1 3 3 2 1 3 1 2 3 3 2 2 1 22、输入*学生的成绩,经处理后给出学生的等级,等级分类如下:90分以上包括90:A80至90包括80:B70至80包括70:C60至70包括60D60分以下:E输入以下程序并调试运行。*includevoid main()float score;char grade;cout score;if(score 100)coutinput error!endl;elseswitch( intscore/10 )case10:case9: grade = A;break;case8: grade = B;break;case7: grade = C;break;case6: grade = D;break;default: grade = E;coutthe student scort: grade endl;输入测试数据,调试程序并写出结果。测试数据要覆盖所有路径,注意临界值,例如此题中的100分、60分、0分以及小于0和大于100的数据。3、有一函数: * ( *1 ) y = 2*-1 ( 1*10 ) 3*-11 ( *10 )用cin语句输入*的值,求y值。运行程序,输入*的值分别为*1、1*10、*10三种情况,检查输出的y值是否正确。思考问题:(1) if语句和switch语句适合于什么情况.(2) 能否用switch语句完成对输入值的判断.实验四 三种根本构造的实现2一、实验目的1、学会正确使用逻辑运算符和逻辑表达式。2、理解并掌握程序的循环构造。3、熟练掌握用while语句、dowhile语句和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) coutnendl; 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、编写一个程序,循环从标准输入读入*雇员的工作时间以小时计和每小时的工资数,计算并输出他的工资。假设雇员月工作小时超过40小时,则超过局部按原工资的1.5倍的加班工资来计算。假设雇员月工作小时超过50小时,则超过50的局部按原工资的3倍的加班工资来计算。而40到50小时的工资仍按照原工资的1.5倍的加班工资来计算。要求:1分别用三种循环for、while、do-while完成程序要求。2要求有输入提示和输出提示,如要输入雇员的工作时间和每小时的工资值时,可以提示: “请输入雇员的工作时间和小时工资:输出时,提示: “雇员工资为:3循环在用户输入的工作时间为0时完毕。测试数据:输入:30 4输出:120输入:45 4.5输出:213.75输入:60 5输出:425输入:0 0程序完毕思考问题:(1) 三种循环语句都适合于什么情况.如果已经知道要计算的雇员的数目如10个,用哪种循环更方便.(2) while、dowhile的区别.实验五 数 组一、实验目的1、 掌握一维数组和二维数组的定义、赋值和输入输出的方法。2、 掌握字符数组和字符串函数的使用。3、 掌握与数组有关的算法特别是排序算法和查找算法。二、实验容与步骤1、输入一串字符,计算其中*字符的个数。输入以下程序并调试运行。 *include void main( ) char c30; int i , sum=0; cinsetw(30)c; for ( i=0; ci!=0; i+ ) if (ci = *) sum=sum + 1; cout c endl; cout “*字符的个数为: sum high时,返回查找失败信息 /表空,查找失败3low=high,mid=low+high/2; /取中间 假设k*elemmid,low=mid+1;转2 /查找在右半区进展 假设k*=elemmid,返回数据元素在表中位置 /查找成功测试数据:例如,有序表20,25,30,36,42,48,55,61,69,72,83,97程序先输出: 请输入一个整数:用户输入: 72程序则应输出: 数据72在有序表中的位置下标是10。用户输入: 35程序则应输出: 在有序表中无此数!5、将两个字符串起来。要求:不使用strcat函数。提示:定义两个字符型数组,找到第一个串的最后一个字符位置,将第二个串的字符依次放入。注意串的完毕标志“0。6、找出一个二维数组的“鞍点,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点。提示:用cin语句从键盘输入数组各个元素的值,检查结果是否正确。题目并未指定二维数组的行数和列数,程序应能处理任意行数和列数的数组。因此,从理论上来说,应当准备许多种不同行数和列数的数组数据,但这样的工作量太大,一般来说不需要这样做,只需要准备典型的数据即可。如果已指定了数组的行数和列数,可以在程序中对数组元素赋初值,而不必用cin语句。请同学们修改程序以实现之。测试数据:至少应当准备两组测试数据1二维数组有鞍点 9 80 205 40 90 -60 96 1 210 -3 101 892二维数组没有鞍点 9 80 105 40 90 -60 196 1 210 -3 101 89实验六 指 针一、实验目的1、 掌握指针的概念,会定义和使用指针变量。2、 能正确使用数组的指针和指向数组的指针变量。3、 能正确使用字符串的指针和指向字符串的指针变量。4、 了解二级指针的概念及其使用方法。二、实验容与步骤1、输入两个整数,按由大到小的顺序输出。输入以下程序并调试运行。*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月份号时,输出该月的英文名称,输入其他整数时完毕程序。例如,输入“4,则应输出“April。输入“0,则退出程序,要求使用指针数组处理。5、使用动态存分配技术设计一个计算学生平均成绩的程序,学生个数和课程门数是任意的,使用二维数组,程序按平均成绩从大到小输出每个学生的成绩。实验七 函数一、实验目的1、掌握函数的定义和调用方法。2、掌握函数实参与形参的对应关系以及C+的三种函数参数传递机制。3、掌握函数嵌套调用和递归调用的方法。4、掌握全局变量和局部变量、动态变量和静态变量的概念和使用方法。二、实验容与步骤1、写一个判断素数的函数,在主函数中输入一个整数,输出是否是素数的信息。输入以下程序并调试运行。*include*include*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; else coutnumber不是素数.endl;判断素数的算法,在以前学习循环的时候已经学过了,在这里只是把这个算法用函数的形式表示出来 。这里要注意函数的定义 声明的方法和格式。 2、分析程序的运行结果输入以下程序,运行它,分析得到的结果。*includeint n=0;int func( int *=10 );void main()int a, b;a=5;b=func(a);coutnlocal a=aendllocal b=bendlglobal n=nendl;a+;b=func(a);coutnlocal a=aendllocal b=bendlglobal n=nendl;func();int func( int * )int a=1;static int b=10;a+;b+;*+;n+;coutnlocal a=aendllocal b=bendlparameter *=*=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 Invalid1输入:50 3输出:1.*IND输入:0 0Iput Invalid1程序完毕思考问题:(1) 对各种数据类型的字长是否有了新的认识.(2) 递归函数的书写要点是什么.(3) 递归和非递归函数各有哪些好处.5、 求两个整数的最大公约数和最小公倍数,用一个函数求最大公约数,用另一个函数求最小公倍数。提示:可以用下面的方法求:一、利用辗除法或其它方法求得最大公约数; 二、 最小公倍数等于两数之积除以最大公约数。) 要求: 两个整数在主函数中输入,并传送给函数1,求出的最大公约数返回主函数,然后再和两个整数一起作为实参传递给函数2,以求出最小公倍数,再返回到主函数输出最大公约数和最小公倍数。实验八 构造和联合一、实验目的1、 掌握构造体类型变量的定义和使用。2、 掌握构造数组的概念和使用。3、 掌握链表的概念,初步学会对链表进展操作。4、 掌握联合体的概念与应用。二、试验容与步骤1、输入和运行以下程序。*includeunion data short int s2;float a;int b;char c4;u;void main()cinu.s0u.s1;couts0=u.s0 s1=u.s1endla=u.a b=u.bendlc0=u.c0 c1=u.c1endlc2=u.c2 c3=u.c3u.b;输入60000给b,分析运行结果。2、打印学生成绩单,容包括*、三门课数学MT、英语EN、计算机PU的成绩。计算每个学生三门课程的总分SUM和平均分AVER。假设三门课成绩都在90分以上者,输出“Y;否则输出“N,并打印学生成绩单,格式如下:NUM NAME MTENP SUMAVER=909501 Liufan 95 9896.5289.596.5Y9502 Zhanghua 95 82 86.5263.587.8333N9503 Liming 68 89 8524280.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 stui.name;for ( j=0; j stui.scorej; 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)stui.name setw(8)stui.score0setw(8)stui.score1setw(8)stui.score2setw(8)stui.sumsetw(8)stui.aver setw(5)stui.chendl;3、设计一个单向链表。从标准输入读取假设干整数,建立链表,每次读入的数放入链表结尾。当用户输入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门课的平均成绩,以及最高分学生的数据包括*、3门课的成绩、平均分数。要求:用input函数输入10个学生的数据;用average函数求平均分;用ma*函数找出最高分的学生数据;平均分和最高分学生的数据都在主函数中输出。5、建立一个链表,每个结点包括:*、性别、年龄、。输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去。实验九 类与对象一、实验目的1、 掌握类和对象的定义和使用。2、 理解构造函数和析构函数的作用。3、 学习使用静态成员和联成员函数。4、 掌握从现有类派生出新类的方式。 5、 了解基类成员在派生类中的控制。6、 了解虚函数对多态性的支持。二、实验容与步骤1、构造函数和析构函数的调用。输入和运行以下程序。*includeclass A int *a;public: A(int *) a=new int(*); cout Constructor: *aendl;A() coutDestructor: *a endl; delete a; ;void main()A *(3),*p;p=new A(5);delete p;2、派生类构造函数和析构函数的调用。输入以下程序并调试运行。*includeclass A int a;public: A(int aa=0):a(aa) coutConstructor A: aendl; A() coutDestructor A: aendl; ;class B:public A int b;public: B(int aa,int bb):A(aa),b(bb) coutConstructor B: bendl; B() coutDestructor B: bendl; ;void main() B *(2,3),y(4,5);3、多态性的实现。1输入以下程序并调试运行,分析其执行结果。*include/ 类Point的定义class Pointpublic: Point( double i=0, double j=0 ) *=i, y=j; double area() / 返回点的面积 (0.0) return 0.0; private: double *,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: 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、静态成员的使用。*商店经销一种货物,货物成箱购进,成箱卖出,购进和卖出时均以重量为单位,各箱的重量不一样,因此,商店需要记录下目前库存的货物的总重量,现要求用C+语言把商店货物购进和卖出的情况模拟出来。提示:(1) 应将这类货物用一个类Goods来描述,而每箱货物作为这个类的对象。每箱货物有重量,因此应有一个数据成员来表示这箱货物的重量,而总重量用一个静态数据成员来记录。(2) 在货物类的构造函数和析构函数中分别修改总重量。要求:(1) 提供静态成员函数GetTotalWeight,用来返回当前货物的总重量。(2) 下面是测试所设计类的主程序:*include*includegoods.h / 货物类的定义文件void main()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,把它作为抽象类,在该类定义求外表积和体积的纯虚函数抽象类本身是没有外表积和体积可言的。由这个抽象类派生出描述球、正方体和圆柱的3个具体类,在这3个类中都有计算外表积和体积的函数的自己版本。实验十 综合实验一、实验目的综合运用前面所学的各种知识,编写两个较复杂的程序。二、实验容与步骤1、设计一个学生信息管理系统,用于实现学生信息的录入、查询、排序、输出等功能。学生信息包括:*整型、字符串、性别布尔型、出生日期构造体、各科成绩10门、平均成绩等,用函数实现各功能模块。2、利用面向对象编程方法为*公司设计一个人员信息管理系统。要求:(1) 首先定义一个公司职员类,用来描述公司所有人员的共同信息、个人编号、级别、月薪总额;(2) 然后通过继承定义兼职技术人员类、兼职推销员类、经理类和销售经理类,分别为每个类定义计算月薪函数和显示人员信息函数。月薪计算方法为:兼职技术人员类:月薪=每小时酬金*本月的工作时数兼职推销员类:月薪=销售提成经理类:月薪=固定月薪销售经理类:月薪固定月薪+销售提成提示: 将公司职员类定义为抽象基类,将计算月薪函数和显示人员信息函数定义为虚函数。参考程序:class employee protected: char*name; /int individualEmpNo; /个人编号int grade; /级别double accumPay; /月薪总额static int employeeNo; /本公司职员编号目前最大值public:employee(); /构造函数employee(); /析构函数virtual void pay()=0; /计算月薪函数void promote(int); /升级函数virtual void displayStatus()=0; /显示人员信息;class technician:public employee /兼职技术人员类private: float hourlyRate; /每小时酬金int workHours; /当月工作时数 public: technician(); /构造函数void pay(); /计算月薪函数void displayStatus(); /显示人员信息;class salesman: virtual public employee /兼职推销员类 protected:double mRate; /按销售额提取酬金的百分比double sales; /当月销售额public:salesman(); /构造函数void pay(); /计算月薪函数void displayStatus(); /显示人员信息
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 成人自考


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!