《C语言程序设计》上机实验指导手册(共12页).doc

上传人:飞****2 文档编号:13703345 上传时间:2022-04-30 格式:DOC 页数:12 大小:93.50KB
返回 下载 相关 举报
《C语言程序设计》上机实验指导手册(共12页).doc_第1页
第1页 / 共12页
《C语言程序设计》上机实验指导手册(共12页).doc_第2页
第2页 / 共12页
点击查看更多>>
资源描述

《《C语言程序设计》上机实验指导手册(共12页).doc》由会员分享,可在线阅读,更多相关《《C语言程序设计》上机实验指导手册(共12页).doc(12页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、精选优质文档-倾情为你奉上C语言程序设计上机实验指导手册电子与信息工程学院计算机科学系专心-专注-专业第一部分 上机实验的指导思想和要求一、上机实验的目的学习C语言程序设计课程不能满足于“懂得了”,满足于了解了语法和能看懂书上的程序,而应当掌握程序设计的全过程,即能独立编写出源程序,独立上机调试程序,独立运行程序和分析结果。“程序设计”是一门实践性很强的课程,必须十分重视实践环节。许多实际的知识不是靠听课和看书学到手的,而是通过长时间的实践积累的。要提倡通过实践去掌握知识的方法。必须保证有足够的上机实验时间,学习本课程应该至少有30 小时的上机时间,最好能做到与授课时间之比为1:1 。除了学校

2、规定的上机实验以外,应当提倡学生自己课余抽时间多上机实践。上机实验的目的,绝不仅是为了验证教材和讲课的内容,或者验证自己所编的程序正确与否。学习程序设计,上机实验的目的是:(1)加深对讲授内容的理解,尤其是一些语法规定,光靠课堂讲授,既枯燥无味又难以记住,但它们是很重要的,初学者的程序出错往往错在语法上。通过多次上机,就能自然地、熟练地掌握。通过上机来掌握语法规则是行之有效的方法。(2)熟悉所用的计算机系统的操作方法,也就是了解和熟悉C语言程序开发的环境。一个程序必须在一定的外部环境下才能运行,所谓“环境”,就是指所用的计算机系统的硬件和软件条件,或者说是工作平台。使用者应该了解为了运行一个C

3、程序需要哪些必要的外部条件(例如硬件配置、软件配置),可以利用哪些系统的功能来帮助自己开发程序。每一种计算机系统的功能和操作方法不完全相同,但只要熟练掌握一两种计算机系统的使用,再遇到其他系统时便会触类旁通,很快就能学会。(3)学会上机调试程序。也就是善于发现程序中的错误,并且能很快地排除这些错误,使程序能正确运行。经验丰富的人,在编译连接过程中出现“出错信息”时,一般能很快地判断出错误所在,并改正之。而缺乏经验的人即使在明确的“出错提示”下也往往找不出错误而求助于别人。要真正掌握计算机应用技术,就不仅应当了解和熟悉有关理论和方法,还要求自己动手实现。对程序设计来说,则要求会编程序并上机调试通

4、过。因此调试程序不仅是得到正确程序的一种手段,而且它本身就是程序设计课程的一个重要的内容和基本要求,应给予充分的重视。调试程序固然可以借鉴他人的现成经验,但更重要的是通过自己的直接实践来累积经验,而且有些经验是只能“会意”难以“言传”。别人的经验不能代替自己的经验。调试程序的能力是每个程序设计人员应当掌握的一项基本功。因此,在做实验时千万不要在程序通过后就认为万事大吉、完成任务了,而应当在己通过的程序基础上作一些改动(例如修改一些参数、增加程序的一些功能、改变某些语句、改变输入数据的方法等),再进行编译、连接和运行。甚至于“自设障碍”,即把正确的程序改为有错的(例如语句漏写分号;用scanf函

5、数输入变量时,漏写“&”符号;比较符“= =”错写为赋值号“=”;使数组下标出界;使整数溢出等),观察和分析所出现的情况。这样的学习才会有真正的收获,是灵活主动的学习而不是呆板被动的学习。二、上机实验前的准备工作在上机实验前应事先做好准备工作,以提高上机实验的效率,准备工作至少应包括:(1)了解所用的计算机系统(包括C编译系统和工作平台)的性能和使用方法;(2)复习和掌握与本实验有关的教学内容;(3)准备好上机所需的程序。由于计算机实验室给每个学生安排的时间是有限的,要珍惜时间,充分利用。应当在上机前按指定的题目编写好程序。手编程序应书写整齐,并经人工检查无误后才能上机,以提高上机效率。初学者

6、切忌不编程序或抄别人程序去上机,应从一开始就养成严谨的科学作风;(4)对运行中可能出现的问题事先作出估计,对程序中自己有疑问的地方,应作出记号,以便在上机时给予注意;(5)准备好调试和运行时所需的数据。三、上机实验的步骤上机实验时一人一组,独立上机,复杂分组进行,相互讨论完成任务。上机过程中出现的问题,除了是系统的问题以外,一般应自己独立处理,不要轻易举手问教师。尤其对“出错信息”,应善于自己分析判断。这是学习调试程序的良好机会。上机实验一般应包括以下几个步骤:(1)进入C工作环境(Dev-C+ 5.8.3)。(2)输入自己所编好的程序。(3)检查一遍已输入的程序是否有错(包括输入时打错的和编

7、程中的错误),如发现有错,及时改正。(4)进行编译和连接。如果在编译和连接过程中发现错误,屏幕上会出现“出错信息”,根据提示找到出错位置和原因,加以改正。再进行编译,如此反复直到顺利通过编译和连接为止。(5)运行程序并分析运行结果是否合理和正确。在运行时要注意当输入不同数据时所得到的结果是否正确。(6)输出程序清单和运行结果。四、实验验收(1)现场验收,学生讲解、提问、答辩的方式,通过三方面的表现给出实验成绩;(2)提交程序清单(电子版)。第二部分 关于程序的调试和测试一、程序错误的类型为了帮助各位同学调试程序和分析程序,下面简单介绍程序出错的种类。(1)语法错误即不符合C语言的语法规定,例如

8、将main 错写为naim ,括号不匹配,语句最后漏了分号等,这些都会在编译时被发现并指出。这些都属于“致命错误”, 不改正是不能通过编译的。对一些在语法上有轻微毛病但不影响程序运行的错误(如定义了变量但始终未使用),编译时会发出“警告”,虽然程序能通过编译,但不应当使程序“带病工作”,应该将程序中所有导致“错误(error)”和“警告(warning)”的因素都消除,再使程序投入运行。(2)逻辑错误这是指程序无语法错误,也能正常运行,但是结果不对。例如求s=l+2+3+100,有人写出以下语句:for(s=0, i=1; i100; i+) s=s + i;语法没有错,但求出的结果是l+2+

9、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为非零值时,运行无问题。当

10、输入的b为零时,运行时出现“溢出(overflow)”的错误。如果在执行上面的scanf语句时输入456.78 34.56,则输出c的值为2,显然是不对的。这是由一于输入的数据类型与输入格式符%d不匹配而引起的。二、程序的测试程序调试的任务是排除程序中的错误,使程序能顺利地运行并得到预期的效果。程序的调试阶段不仅要发现和消除语法上的错误,还要发现和消除逻辑错误和运行错误。除了可以利用编译时提示的“出错信息”来发现和改正语法错误外,还可以通过程序的测试来发现逻辑错误和运行错误。程序的测试的任务是尽力寻找程序中可能存在的错误。在测试时要设想到程序运行时的各种情况,测试在各种情况下的运行结果是否正确

11、。程序测试是程序调试的一个组成部分。有时程序在某些情况下能正常运行,而在另外一些情况下不能正常运行或得不到正确的结果,因此,一个程序即使通过编译并正常运行而且结果正确,还不能认为程序没有问题了。要考虑是否在任何情况下都能正常运行并且得到正确的结果。测试的任务就是要找出那些不能正常运行的情况和原因。下而通过一个典型的和容易理解的例子来说明测试的概念。求一元二次方程ax2+bx+c=0的根。有人根据求根公式x1, 2=(-bsqrt(b2-4ac)/2a编写出以下程序:# include # includevoid main( ) float a, b, c, disc, x1, x2; scan

12、f(“%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的情况。我们不能说上面的程序是错的,而只能说程序对可

13、能出现的情况“考虑不周” ,所以不能保证在任何情况下都是正确的。使用这个程序必须满足一定的前提(b2-4ac0),这样,就给使用程序的人带来不便。人们在输入数据前,必须先算一下,看b2-4ac是否大于或等于0。一个程序应能适应各种不同的情况,并且都能正常运行并得到相应的结果。下面分析一下求方程ax2+bx+c=0的根,有几种情况:(1)a0时 b2-4ac0有两个不等的实根:x1, 2=(-bsqrt(b2-4ac)/2a b2-4ac=0有两个相等的实根:x1= x 2=-b/2a b2-4ac0 a0,b2-4ac=0 a0,b2-4ac0 a=0,b0 a=0,b= 0,c = 0 a=

14、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

15、= =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) printf(It has two real solutions:n); x1=(-b+sqrt(disc)/(2*a); x2=(-b-sqrt(disc)/(2*a); printf(”x1=%6.2f, x2=%6.2fn”, x1, x2)

16、; else printf(It has two same real solutions:n); printf(x1=x2=%6.2fn,-b/(2*a); else pritnf(It has two complex solutions:n); p=-b/(2*a); q=sqrt(-disc)/(2*a); printf(x1=%6.2f+%6.2fi, x2=%6.2f - %6.2fin, p, q, p, q); 为了测试程序的“健壮性”,我们准备了6组数据: 3,4,1 1,2,1 4,2,1 0,3,4 0,0,0 0,0,5分别用这6组数据作为输入的a,b,c的值,得到以下的运

17、行结果: input a, b, c: 3 4 1 It has two real solutions: x1=-0.33, x2= -1.00 input a, b, c: 1 2 1 It has two same real solutions: x1=x2= -1.00 input a, b, c: 4 2 1 It has two complex solutions: x1=-0.25+0.43i, x2=-0.25-0.43i input a, b, c: 0 3 4 It has one solutions: x1=-1.33 input a, b, c: 0 0 0 It is

18、trivial. input a, b, c: 0 0 5 It is impossible.经过测试,可以看到程序对任何输入的数据都能正常运行并得到正确的结果。以上是根据数学知识知道输入数据有6种方案。但在有些情况下,并没有现成的数学公式作为依据,例如一个商品管理程序,要求对各种不同的检索作出相应的反应。如果程序包含多条路径(如由if语句形成的分支),则应当设计多组测试数据,使程序中每一条路径都有机会执行,观察其运行是否正常。以上就是程序测试的初步知识。测试的关键是正确地准备测试数据。如果只准备4 组测试数据,程序都能正常运行,仍然不能认为此程序己无问题。只有将程序运行时所有的可能情况都作过

19、测试,才能作出判断。测试的目的是检查程序有无“漏洞”。对于一个简单的程序,要找出其运行时全部可能执行到的路径,并正确地准备数据并不困难。但是如果需要测试一个复杂的大程序,要找到全部可能的路径并准备出所需的测试数据并非易事。例如:有两个非嵌套的if语句,每个if语句有两个分支,它们所形成的路径数目为224。如果一个程序包含100 个if语句,则可能的路径数目为21001.1030,要测试每一条路径儿乎是不可能的。实际上进行测试的只是其中一部分(执行几率最高的部分)。因此,经过测试的程序一般还不能轻易宣布为“没有问题”,只能说“经过测试的部分无问题”。正如检查身体一样,经过内科、外科、眼科、五官科

20、各科例行检查后,不能宣布被检查者“没有任何病症”,他有可能有隐蔽的、不易查出的病症。所以医院的诊断书一般写为“未发现异常”,而不能写“此人身体无任何问题”。我们应当了解测试的目的,学会组织测试数据,并根据测试的结果修改完善程序。第三部分 实验内容与安排实验一 简单的C程序实验1实验目的(1)了解Dev-C+集成环境的窗口界面,熟练掌握如何编辑、编译、连接、运行一个C程序以及如何保存和修改C语言的源程序。(2)通过运行简单的C程序,初步了解C源程序的结构和特点。(3)学会简单的读程序和调试程序。2实验内容(1)输出图形。(2)求下图所示田径场的周长和面积。(3)已知圆的周长与面积公式为: Cir

21、=2*3.14*rad Area=3.14*rad*rad 从键盘输入一个半径值,求该圆的周长和面积。要求:用主函数实现半径的输入,圆周长和面积的输出,周长和面积用不同的函数来实现。3预习内容C程序设计(第四版)第1章、第3章实验二 顺序程序设计1实验目的(1)掌握C语言中使用最多的一种语句赋值语句的使用方法。(2)掌握C语言数据类型,熟悉如何定义一个整型、字符型和实型的变量,以及对它们赋值的方法,了解字符型数据和整型数据的内在关系。(3)掌握不同的类型数据之间赋值的规律。(4)掌握对各种类型数据的正确输入方法。(5)学会使用C的有关算术运算符,以及包含这此运算符的表达式。(6)掌握各种类型数

22、据的输入输出的方法,能正确使用各种格式转换符。(7)进一步掌握编写程序和调试程序的方法。2实验内容和步骤(1)用下面的scanf函数输入数据,使a=3, b=7, x=8.5, y=71.82, c1=A, C2=a。 问在键盘上如何输入? #include int main( ) int a, b; float x, y; char c1, c2; scanf( “a=%db=%d”, &a, &b); scanf(“%f%f”, &x, &y); scanf(“%c%c”,&c1, &c2); return 0;(2)设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积

23、、圆柱体积。用scanf输入数据,输出计算结果,输出时要求有文字说明,取小数点后2为数字。请编程序。(3)求ax2+bx+c=0方程的根。a, b, c由键盘输入,假设b2- 4ac0。3预习内容C程序设计(第四版)第3章。实验三 选择结构程序设计1实验目的(1)了解C语言表示逻辑量的方法(以0代表“假”,以非0代表“真”)。(2)学会正确使用逻辑运算符和逻辑表达式。(3)熟练掌握if 语句和switch 语句。(4)结合程序掌握一些简单的算法。(5)进一步学习调试程序的方法。2实验内容本实验要求事先编好解决下面问题的程序,然后上机输入程序并调试运行程序。(1)有3个整数a, b, c,由键盘

24、输入,输出其中最大的数。(2)有一函数: x (x1)y= 2x1 (1x10)3x11 (x10) 写程序,用scanf函数输入x的值,输出y相应的值。运行程序输入x 的值(分别为x1、110、x10这3种情况),检查输出的y 值是否正确。(3)给出一个百分制成绩,要求输出成绩等级A、B、C、D、E。90分以上为A,8189 分为B,7079分为C,6069分为D,60分以下为E。 事先编好程序,要求分别用if语句和switch语句来实现。运行程序,并检查结果是否正确。 再运行一次程序,输入分数为负值(如-70),这显然是输入时出错,不应给出等级,修改程序,使之能正确处理任何数据,当输入数据

25、大于100和小于0时,通知用户“输入数据错”,程序结束。(4)给一个不多于5 位的正整数,要求: 求出它是几位数; 分别输出每一位数字; 按逆序输出各位数字,例如原数为321,应输出123。应准备以下测试数据: 要处理的数为1位正整数; 要处理的数为2 位正整数; 要处理的数为3 位正整数; 要处理的数为4 位正整数; 要处理的数为5 位正整数。除此之外,程序还应当对不合法的输入做必要的处理,例如: 输入负数; 输入的数超过5位(如 )。3预习内容C程序设计(第四版)第4章。实验四 循环结构程序设计(一)1实验目的(1)熟悉掌握用while语句、do-while语句实现循环的方法。(2)掌握在

26、程序设计中用循环的方法实现一些常用算法。(3)进一步学习调试程序。2实验内容编程序并上机调试运行。(1)输入两个正整数m和n,求它们的最大公约数和最小公倍数。在运行时,输入的值mn,观察结果是否正确。再输入时,使ms2,输出一个正数;若s1=s2,输出0;若s1=1)3预习内容C程序设计(第四版)第7章。实验九 函 数(二)1实验目的(1)掌握函数的嵌套调用和数组作为函数参数的方法。(2)掌握全局变量和局部变量、动态变量、静态变量的概念和使用方法。2实验内容编程序并上机调试运行。(1)输入10个学生5门课的成绩,分别用函数实现下列功能: 计算每个学生平均分。 计算每门课的平均分。 找出所有50

27、个分数中最高的分数所对应的学生和课程。 计算平均分方差。(2)给出年、月、日,计算该日是该年的第几天。3预习内容C程序设计(第四版)第7章。实验十 指 针1实验目的(1)通过实验进一步掌握指针的概念,会定义和使用指针变量。(2)能正确使用数组的指针和指向数组的指针变量。(3)能正确使用字符串的指针和指向字符串的指针变量。(4)了解指向指针的指针的概念及其使用方法。2实验内容编程序并上机调试运行程序(都要求用指针处理)。(1)输入3个整数,按由小到大的顺序输出。(2)输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个对换。写3个函数: 输入10个数; 数据处理; 输出10个数。(

28、3)写一个函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度。(4)编一个程序,输入月份号,输出该月的英文月名。例如,输入“3”,则输出“Match”,要求用指针数组处理。3预习内容C程序设计(第四版)第8章。实验十一 结构体与共用体1实验目的(1)掌握结构体类型变量的定义和使用。(2)掌握结构体类型数组的概念和应用。(3)了解链表的概念,初步学会对链表进行操作。2实验内容编程序,然后上机调试运行。(1)有5个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入5个学生数据,要求输出3门课总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课的成绩、平均分数)。要求

29、用一个input函数输入5个学生数据;用一个average函数求总平均分;用max函数找出最高分学生数据;总平均分和最高分的学生的数据都在主函数中输出。(2)建立一个链表,每个结点包括:学号、姓名、性别、年龄。输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去。3预习内容C程序设计(第四版)第9章。实验十二 文 件1实验目的(1)掌握文件以及缓冲文件系统、文件指针的概念。(2)学会使用文件打开、关闭、读、写等文件操作函数。(3)学会对数据文件进行简单的操作。2实验内容编写程序并上机调试运行。(1)有5个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号、姓名、3门课

30、成绩),计算出平均成绩,将原有数据和计算出的平均分数存放在磁盘文件stud 中。设5名学生的学号、姓名和3门课成绩如下:10101Wang89,98,67.510103Li60,80,9010106Fun75.5,91.5,9910110Ling100,50,62.510113Yuan58,68,71在向文件stud写入数据后,应检查验证stud文件中的内容是否正确。(2)将上题stud文件中的学生数据按平均分进行排序处理,将已排序的学生数据存入一个新文件stu_sort中。在向文件stu_sort写入数据后,应检查验证stu_sort文件中的内容是否正确。(3)将上题已排序的学生成绩文件进行插入处理。插入一个学生的3门课成绩。程序先计算新插入学生的平均成绩,然后将它按成绩高低顺序插入,插入后建立一个新文件。要插入的学生数据为:10108Xin90,95,60在向新文件stu_new写入数据后,应检查验证stu_new文件中的内容是否正确。3预习内容C程序设计(第四版)第10章。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

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

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com