资源预览内容
第1页 / 共12页
第2页 / 共12页
第3页 / 共12页
第4页 / 共12页
第5页 / 共12页
第6页 / 共12页
第7页 / 共12页
第8页 / 共12页
第9页 / 共12页
第10页 / 共12页
亲,该文档总共12页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
wordC语言程序设计上机实验指导手册电子与信息工程学院计算机科学系 / 第一局部 上机实验的指导思想和要求一、上机实验的目的学习C语言程序设计课程不能满足于“懂得了,满足于了解了语法和能看懂书上的程序,而应当掌握程序设计的全过程,即能独立编写出源程序,独立上机调试程序,独立运行程序和分析结果。“程序设计是一门实践性很强的课程,必须十分重视实践环节。许多实际的知识不是靠听课和看书学到手的,而是通过长时间的实践积累的。要提倡通过实践去掌握知识的方法。必须保证有足够的上机实验时间,学习本课程应该至少有30 小时的上机时间,最好能做到与授课时间之比为1:1 。除了学校规定的上机实验以外,应当提倡学生自己课余抽时间多上机实践。上机实验的目的,绝不仅是为了验证教材和讲课的内容,或者验证自己所编的程序正确与否。学习程序设计,上机实验的目的是:1加深对讲授内容的理解,尤其是一些语法规定,光靠课堂讲授,既枯燥无味又难以记住,但它们是很重要的,初学者的程序出错往往错在语法上。通过屡次上机,就能自然地、熟练地掌握。通过上机来掌握语法规如此是行之有效的方法。2熟悉所用的计算机系统的操作方法,也就是了解和熟悉C语言程序开发的环境。一个程序必须在一定的外部环境下才能运行,所谓“环境,就是指所用的计算机系统的硬件和软件条件,或者说是工作平台。使用者应该了解为了运行一个C程序需要哪些必要的外部条件例如硬件配置、软件配置,可以利用哪些系统的功能来帮助自己开发程序。每一种计算机系统的功能和操作方法不完全一样,但只要熟练掌握一两种计算机系统的使用,再遇到其他系统时便会触类旁通,很快就能学会。3学会上机调试程序。也就是善于发现程序中的错误,并且能很快地排除这些错误,使程序能正确运行。经验丰富的人,在编译连接过程中出现“出错信息时,一般能很快地判断出错误所在,并改正之。而缺乏经验的人即使在明确的“出错提示下也往往找不出错误而求助于别人。要真正掌握计算机应用技术,就不仅应当了解和熟悉有关理论和方法,还要求自己动手实现。对程序设计来说,如此要求会编程序并上机调试通过。因此调试程序不仅是得到正确程序的一种手段,而且它本身就是程序设计课程的一个重要的内容和根本要求,应给予充分的重视。调试程序固然可以借鉴他人的现成经验,但更重要的是通过自己的直接实践来累积经验,而且有些经验是只能“会意难以“言传。别人的经验不能代替自己的经验。调试程序的能力是每个程序设计人员应当掌握的一项根本功。因此,在做实验时千万不要在程序通过后就认为万事大吉、完成任务了,而应当在己通过的程序根底上作一些改动例如修改一些参数、增加程序的一些功能、改变某些语句、改变输入数据的方法等,再进展编译、连接和运行。甚至于“自设障碍,即把正确的程序改为有错的例如语句漏写分号;用scanf函数输入变量时,漏写“&符号;比拟符“= =错写为赋值号“=;使数组下标出界;使整数溢出等,观察和分析所出现的情况。这样的学习才会有真正的收获,是灵活主动的学习而不是呆板被动的学习。二、上机实验前的准备工作在上机实验前应事先做好准备工作,以提高上机实验的效率,准备工作至少应包括:1了解所用的计算机系统包括C编译系统和工作平台的性能和使用方法;2复习和掌握与本实验有关的教学内容;3准备好上机所需的程序。由于计算机实验室给每个学生安排的时间是有限的,要珍惜时间,充分利用。应当在上机前按指定的题目编写好程序。手编程序应书写整齐,并经人工检查无误后才能上机,以提高上机效率。初学者切忌不编程序或抄别人程序去上机,应从一开始就养成严谨的科学作风;4对运行中可能出现的问题事先作出估计,对程序中自己有疑问的地方,应作出记号,以便在上机时给予注意;5准备好调试和运行时所需的数据。三、上机实验的步骤上机实验时一人一组,独立上机,复杂分组进展,相互讨论完成任务。上机过程中出现的问题,除了是系统的问题以外,一般应自己独立处理,不要轻易举手问教师。尤其对“出错信息,应善于自己分析判断。这是学习调试程序的良好机会。上机实验一般应包括以下几个步骤:1进入C工作环境。2输入自己所编好的程序。3检查一遍已输入的程序是否有错包括输入时打错的和编程中的错误,如发现有错,与时改正。4进展编译和连接。如果在编译和连接过程中发现错误,屏幕上会出现“出错信息,根据提示找到出错位置和原因,加以改正。再进展编译,如此反复直到顺利通过编译和连接为止。5运行程序并分析运行结果是否合理和正确。在运行时要注意当输入不同数据时所得到的结果是否正确。6输出程序清单和运行结果。四、实验验收1现场验收,学生讲解、提问、辩论的方式,通过三方面的表现给出实验成绩;2提交程序清单电子版。第二局部 关于程序的调试和测试一、程序错误的类型为了帮助各位同学调试程序和分析程序,下面简单介绍程序出错的种类。1语法错误即不符合C语言的语法规定,例如将main 错写为naim ,括号不匹配,语句最后漏了分号等,这些都会在编译时被发现并指出。这些都属于“致命错误,不改正是不能通过编译的。对一些在语法上有轻微毛病但不影响程序运行的错误如定义了变量但始终未使用,编译时会发出“警告,虽然程序能通过编译,但不应当使程序“带病工作,应该将程序中所有导致“错误error和“警告warning的因素都消除,再使程序投入运行。2逻辑错误这是指程序无语法错误,也能正常运行,但是结果不对。例如求s=l+2+3+100,有人写出以下语句:fors=0, i=1; i100; i+ s=s + i;语法没有错,但求出的结果是l+2+3+99之和,而不是l+2+3+100之和,原因是少执行了一次循环。这类错误可能是设计算法时的错误,也可能是算法正确而在编写程序时出现疏忽所致。这种错误计算机是无法检查出来的。如果是算法有错,如此应先修改算法,再改程序。如果是算法正确而程序写得不对,如此直接修改程序。3运行错误有时程序既无语法错误,又无逻辑错误,但程序不能正常运行或结果不对。多数情况是数据不对,包括数据木身不适宜以与数据类型不匹配。如有以下程序:void main ( ) int a, b, c ; scanf(“%d, %d, &a, &b);c=a/b;printf(“%dn,c);当输入的b为非零值时,运行无问题。当输入的b为零时,运行时出现“溢出overflow的错误。如果在执行上面的scanf语句时输入456.78,如此输出c的值为2,显然是不对的。这是由一于输入的数据类型与输入格式符%d不匹配而引起的。二、程序的测试程序调试的任务是排除程序中的错误,使程序能顺利地运行并得到预期的效果。程序的调试阶段不仅要发现和消除语法上的错误,还要发现和消除逻辑错误和运行错误。除了可以利用编译时提示的“出错信息来发现和改正语法错误外,还可以通过程序的测试来发现逻辑错误和运行错误。程序的测试的任务是尽力寻找程序中可能存在的错误。在测试时要设想到程序运行时的各种情况,测试在各种情况下的运行结果是否正确。程序测试是程序调试的一个组成局部。有时程序在某些情况下能正常运行,而在另外一些情况下不能正常运行或得不到正确的结果,因此,一个程序即使通过编译并正常运行而且结果正确,还不能认为程序没有问题了。要考虑是否在任何情况下都能正常运行并且得到正确的结果。测试的任务就是要找出那些不能正常运行的情况和原因。下而通过一个典型的和容易理解的例子来说明测试的概念。求一元二次方程ax2+bx+c=0的根。有人根据求根公式x1, 2=(-bsqrt(b2-4ac)/2a编写出以下程序:# include # includevoid main( ) float a, b, c, disc, x1, x2; scanf(“%f, %f, %f, &a, &b, &c); disc=b*b-4*a*c; x1=(-b + sqrt(disc)/(2*a); x2=(-b - sqrt(disc)/(2*a);printf(x1=%6.2f, x2=%6.2fn, x1, x2);当输入a,b,c的值为1,-2,-15 时,输出xl 的值为5,x2的值为-3。结果是正确无误的。但是假如输入a,b,c的值为3,2,4 时,屏幕上出现了出错信息,程序停止运行,原因是此时b2-4ac小于0,出现了对负数求平方根的运算,故出错。因此,此程序只适用b2-4ac0的情况。我们不能说上面的程序是错的,而只能说程序对可能出现的情况“考虑不周,所以不能保证在任何情况下都是正确的。使用这个程序必须满足一定的前提b2-4ac0,这样,就给使用程序的人带来不便。人们在输入数据前,必须先算一下,看b2-4ac是否大于或等于0。一个程序应能适应各种不同的情况,并且都能正常运行并得到相应的结果。下面分析一下求方程ax2+bx+c=0的根,有几种情况:1a0时b2-4ac0有两个不等的实根:x1, 2=(-bsqrt(b2-4ac)/2ab2-4ac=0有两个相等的实根:x1= x 2=-b/2ab2-4ac0a0,b2-4ac=0a0,b2-4ac0a=0,b0a=0,b= 0,c = 0a=0,b= 0,c0应当分别测试程序在以上6 种情况下的运行情况,观察它们是否符合要求。为此,应准备6 组数据。用这6 组数据去测试程序的“健壮性。在使用上面这个程序时,显然只有满足情况的数据才能使程序正确运行,而输入满足情况的数据时,程序出错。这说明程序不“健壮。为此,应当修改程序,使之能适应以上6 种情况。可将程序改为:#include#includevoid main( ) float a, b, c, disc, x1, x2, p, q;printf(input a, b, c:);scanf(“%f, %f, %f, &a, &b, &c); if(a= =0) if(b= =0) if(c= =0) printf(It is trivial.n); else printf(It is impossible.n); else printf(It has one solution:n);pirntf(x=%6.2fn,-c/b); else disc= b*b-4*a*c; if(disc=0) if(disc0) print
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号