C++实 验 指 导目 录1.绪言 21.1上机实验的指导思想和要求 21.2、关于程序的调试和测试 32.实验内容与安排 82.1 C++实验环境 8A: Linux操作系统下编译运行C++程序的方法步骤: 8B: Windows操作系统下编译运行C++程序的方法和步骤 132.2 实验项目1 C++运行环境及基础语法 212.2.1 实验内容:最简单的C++程序运行调试 212.2.2 实验内容. 结构化程序设计基础 212.2.3实验内容 引用和函数 222.2.4实验内容 函数的重载和默认参数 222.3 实验项目2 运用类和对象进行程序设计 232.3.1 实验内容 类基本语法练习 232.3.2 实验内容 运算符重载 252.3.3 实验内容 构造和析构函数 262.3.4 实验内容 I/O流和文件操作 272.4 实验项目3 面向对象程序设计综合应用 272.4.1 实验内容 多态与虚函数基本概念 272.4.2实验内容 多态的综合应用 302. 5实验项目4 小型综合程序设计(选做) 31附录: 32编辑器vi的使用: 32使用g++编译c++程序 35使用gdb调试程序 36一个调试示例 36Makefile介绍及简单Makefile文件的编写 39关于程序的编译和链接 39什么是Makefile 39makefile的“语法”规则 401.绪言1.1上机实验的指导思想和要求1.1.1上机实验的目的 学习C++程序设计不能满足于"懂得了”,满足于了解了语法和能看懂书上的程序,而应当掌握程序设计的全过程,即能独立编写出源程序,独立上机调试程序,独立运行程序和分析结果。
设计c++的初衷是为方便开发大型程序,虽然在学校中初学c++时还没有机会接触到大型程序,更不可能编写出能供实际应用的大型程序,而只能接触到比较简单的程序但是应当通过学习C++课程,对C++有比较全面的、然而是初步的认识,为今后进一步学习和应用C++打下良好的基础 程序设计是一门实践性很强的课程,必须十分重视实践环节许多实际的知识不是靠听课和看书学到手的,而是通过长时间的实践积累的要提倡通过实践去掌握知识的方法必须保证有足够的上机实验时间 上机实验的目的,绝不仅是为了验证教材和讲课的内容,或者验证自己所编的程序正确与否学习程序设计,上机实验的目的是: 1加深对讲授内容的理解,尤其是一些语法规定,光靠课堂讲授,既枯燥无味又难以记住,但它们是很重要的,初学者的程序出错往往错在语法上通过多次上机,就能自然地、熟练地掌握通过上机来掌握语法规则是行之有效的方法 2熟悉所用的计算机系统的操作方法,也就是了解和熟悉C++程序开发的环境一个程序必须在一定的外部环境下才能运行,所谓“环境”,就是指所用的计算机系统的硬件和软件条件,或者说是工作平台使用者应该了解为了运行一个C++程序需要哪些必要的外部条件(例如硬件配置、软件配置),可以利用哪些系统的功能来帮助自己开发程序。
每一种计算机系统的功能和操作方法不完全相同,但只要熟练掌握一两种计算机系统的使用,再遇到其他系统时便会触类旁通,很快地学会3学会上机调试程序也就是善于发现程序中的错误,并且能很快地排除这些错误,使程序能正确运行经验丰富的人,在编译连接过程中出现“出错信息”时,一般能很快地判断出错误所在,并改正之而缺乏经验的人即使在明确的“出错提示”下也往往找不出错误而求助于别人要真正掌握计算机应用技术,就不仅应当了解和熟悉有关理论和方法,还要求自己动手实现对程序设计来说,则要求会编程序并上机调试通过因此调试程序不仅是得到正确程序的一种手段,而且它本身就是程序设计课程的一个重要的内容和基本要求,应给予充分的重视调试程序固然可以借鉴他人的现成经验,但更重要的是通过自己的直接实践来累积经验,而且有些经验是只能“会意”难以“言传”别人的经验不能代替自己的经验调试程序的能力是每个程序设计人员应当掌握的一项基本功 因此,在做实验时千万不要在程序通过后就认为万事大吉、完成任务了,而应当在已通过的程序基础上作一些改动(例如修改一些参数、增加程序一些功能、改变某些语句等),再进行编译、连接和运行甚至于“自设障碍”,即把正确的程序改为有错的(例如语句漏写分号;比较符“==”错写为赋值号“=”;使数组下标出界;使整数溢出等),观察和分析所出现的情况。
这样的学习才会有真正的收获,是灵活主动的学习而不是呆板被动的学习1.1.2上机实验前的准备工作 在上机实验前应事先做好准备工作,以提高上机实验的效率,准备工作至少应包括: 1.了解所用的计算机系统(包括C++编译系统和工作平台)的性能和使用方法; 2.复习和掌握与本实验有关的教学内容; 3.准备好上机所需的程序手编程序应书写整齐,并经人工检查无误后才能上机,以提高上机效率初学者切忌不编程序或抄别人程序去上机,应从一开始就养成严谨的科学作风; 4.对运行中可能出现的问题事先作出估计,对程序中自己有疑问的地方,应作出记号,以便在上机时给予注意;5.准备好调试和运行时所需的数据1.1.3上机实验的步骤 上机实验时应该一人一组,独立上机上机过程中出现的问题,除了是系统的问题以外,一般应自己独立处理,不要轻易举手问教师尤其对“出错信息”,应善于自己分析判断这是学习调试程序的良好机会 上机实验一般应包括以下几个步骤: 1.进入C++工作环境(如Linux的终端) 2.输入自己所编好的程序 3.检查一遍已输入的程序是否有错(包括输入时打错的和编程中的错误),如发现有错,及时改正。
4.进行编译和连接如果在编译和连接过程中发现错误,屏幕上会出现“出错信息”,根据提示找到出错位置和原因,加以改正再进行编译……,如此反复直到顺利通过编译和连接为止 5.运行程序并分析运行结果是否合理和正确在运行时要注意当输入不同数据时所得到的结果是否正确6.输出程序清单和运行结果1.1.4.实验报告 实验后,应整理出实验报告,实验报告应包括以下内容: (1)题目: (2)程序清单(计算机打印出的程序清单); (3)运行结果(必须是上面程序清单所对应打印输出的结果); (4)对运行情况所作的分析以及本次调试程序所取得的经验如果程序未能通过,应分析其原因1.1.5 实验内容的安排 每个实验包括若干个题目,上机时间每次为2学时各单位在组织上机实验时可以根据条件做必要的调整,增加或减少某些部分在实验内容中有“*”的部分是选做的题目,如有时间可以选做这些部分 学生应在实验前将教师指定的题目编好程序,然后上机输入和调试1.2、关于程序的调试和测试1.2.1程序错误的类型 为了帮助读者调试程序和分析程序,下面简单介绍程序出错的种类 1.语法错误即不符合C++语言的语法规定,例如将main错写为naim,括号不匹配,语句最后漏了分号等,这些都会在编译时被发现并指出。
这些都属于“致命错误”,不改正是不能通过编译的对一些在语法上有轻微毛病但不影响程序运行的错误(如定义了变量但始终未使用),编译时会发出“警告”,虽然程序能通过编译,但不应当使程序“带病工作”,应该将程序中所有导致“错误(error)”和“警告(warning)”的因素都消除,再使程序投入运行2.逻辑错误这是指程序无语法错误,也能正常运行,但是结果不对例如 求s=l+2+3+…+100,有人写出以下语句: for(s=0,i=l;i<100;i++) sum=sum+i:语法没有错,但求出的结果是1+2+3+…+99之和,而不是l+2+3+…+100之和,原因是少执行了一次循环这类错误可能是设计算法时的错误,也可能是算法正确而在编写程序时出现疏忽所致这种错误计算机是无法检查出来的如果是算法有错,则应先修改算法,再改程序如果是算法正确而程序写得不对,则直接修改程序 3.运行错误有时程序既无语法错误,又无逻辑错误,但程序不能正常运行或结果不对多数情况是数据不对,包括数据本身不合适以及数据类型不匹配如有以下程序: int main(){int a,b,c: cin>>a>>b: c=a/b; cout<
当输入的b为零时,运行时出现“溢出(overflow)”的错误如果在执行上面的cin语句时输入则输出C的值为2,显然是不对的这是由于输入的数据类型与输入格式符不匹配而弓起的1.2.2程序的测试 程序调试的任务是排除程序中的错误,使程序能顺利地运行并得到预期的效果程序的调试阶段不仅要发现和消除语法上的错误,还要发现和消除逻辑错误和运行错误除了可以利用编译时提示的“出错信息”来发现和改正语法错误外,还可以通过程序的测试来发现逻辑错误和运行错误 程序的测试的任务是尽力寻找程序中可能存在的错误在测试时要设想到程序运行时的各种情况,测试在各种情况下的运行结果是否正确程序测试是程序调试的一个组成部分 有时程序在某些情况下能正确运行,而在另外一些情况下不能正常运行或得不到正确的结果,因此,一个程序即使通过编译并正常运行而且结果正确,还不能认为程序没有问题了要考虑是否在任何情况下都能正常运行并且得到正确的结果测试的任务就是要找出那些不能正常运行的情况和原因下面通过一个典型的和容易理解的例子来说明测试的概念 求一元二次方程ax2+bx+c=0的根 有人根据求根公式x1、2=,编写出以下程序:#include#includeusing namespace std;int main(){float a,b,c,disc,xl,x2;cin>>a>>b>>c;disc=b*b-4*a*c;xl=(-b+sqrt(disc))/(2*a);x2=(-b-sqrt(disc))/(2*a);cout<<”xl=”<
结果是正确无误的但是若输入a,b,C的值为3,2,4时,屏幕上出现了出错信息,程序停止运行,原因是此时b-4ac=4-24=-20,小于0,出现了对负数求平方根的运算,故出错 因此,此程序只适用于b-4ac≥0的情况我们不能说上面的程序是错的,而只能说程序对可能出现的情况“考虑不周”,所以不能保证在任何情况下都是正确的使用这个程序必须满足一定的前提(b-4ac≥0),这样,就给使用程序的人带来不便人们在输入数据前,必须先算一下,看b-4ac是否大于或等于0 一个程序应能适应各种不同的情况,并且都能正常运行并得到相应的结果 下面分析一下求方程ax+bx+c=0的根,有几种情况: (1)a≠0时①b-4ac>0 有两个不等的实根: x1,2=②b-4ac=0 有两个相等的实根: x1=x2=-③b-4ac<0 有两个不等的共轭复根: x1,2=(2)a=O时,方程就变成一元一次的线性方程:bx+c=O。