文档详情

《C语言程序设计》上机实验指导手册.doc

xin****828
实名认证
店铺
DOC
91KB
约12页
文档ID:6715713
《C语言程序设计》上机实验指导手册.doc_第1页
1/12

C语言程序设计上机实验指导手册电子与信息工程学院计算机科学系第一部分 上机实验的指导思想和要求一、上机实验的目的学习《C语言程序设计》课程不能满足于“懂得了”,满足于了解了语法和能看懂书上的程序,而应当掌握程序设计的全过程,即能独立编写出源程序,独立上机调试程序,独立运行程序和分析结果程序设计”是一门实践性很强的课程,必须十分重视实践环节许多实际的知识不是靠听课和看书学到手的,而是通过长时间的实践积累的要提倡通过实践去掌握知识的方法必须保证有足够的上机实验时间,学习本课程应该至少有30 小时的上机时间,最好能做到与授课时间之比为1:1 除了学校规定的上机实验以外,应当提倡学生自己课余抽时间多上机实践上机实验的目的,绝不仅是为了验证教材和讲课的内容,或者验证自己所编的程序正确与否学习程序设计,上机实验的目的是:(1)加深对讲授内容的理解,尤其是一些语法规定,光靠课堂讲授,既枯燥无味又难以记住,但它们是很重要的,初学者的程序出错往往错在语法上通过多次上机,就能自然地、熟练地掌握通过上机来掌握语法规则是行之有效的方法2)熟悉所用的计算机系统的操作方法,也就是了解和熟悉C语言程序开发的环境一个程序必须在一定的外部环境下才能运行,所谓“环境”,就是指所用的计算机系统的硬件和软件条件,或者说是工作平台。

使用者应该了解为了运行一个C程序需要哪些必要的外部条件(例如硬件配置、软件配置),可以利用哪些系统的功能来帮助自己开发程序每一种计算机系统的功能和操作方法不完全相同,但只要熟练掌握一两种计算机系统的使用,再遇到其他系统时便会触类旁通,很快就能学会3)学会上机调试程序也就是善于发现程序中的错误,并且能很快地排除这些错误,使程序能正确运行经验丰富的人,在编译连接过程中出现“出错信息”时,一般能很快地判断出错误所在,并改正之而缺乏经验的人即使在明确的“出错提示”下也往往找不出错误而求助于别人要真正掌握计算机应用技术,就不仅应当了解和熟悉有关理论和方法,还要求自己动手实现对程序设计来说,则要求会编程序并上机调试通过因此调试程序不仅是得到正确程序的一种手段,而且它本身就是程序设计课程的一个重要的内容和基本要求,应给予充分的重视调试程序固然可以借鉴他人的现成经验,但更重要的是通过自己的直接实践来累积经验,而且有些经验是只能“会意”难以“言传”别人的经验不能代替自己的经验调试程序的能力是每个程序设计人员应当掌握的一项基本功因此,在做实验时千万不要在程序通过后就认为万事大吉、完成任务了,而应当在己通过的程序基础上作一些改动(例如修改一些参数、增加程序的一些功能、改变某些语句、改变输入数据的方法等),再进行编译、连接和运行。

甚至于“自设障碍”,即把正确的程序改为有错的(例如语句漏写分号;用scanf函数输入变量时,漏写“&”符号;比较符“= =”错写为赋值号“=”;使数组下标出界;使整数溢出等),观察和分析所出现的情况这样的学习才会有真正的收获,是灵活主动的学习而不是呆板被动的学习二、上机实验前的准备工作在上机实验前应事先做好准备工作,以提高上机实验的效率,准备工作至少应包括:(1)了解所用的计算机系统(包括C编译系统和工作平台)的性能和使用方法;(2)复习和掌握与本实验有关的教学内容;(3)准备好上机所需的程序由于计算机实验室给每个学生安排的时间是有限的,要珍惜时间,充分利用应当在上机前按指定的题目编写好程序手编程序应书写整齐,并经人工检查无误后才能上机,以提高上机效率初学者切忌不编程序或抄别人程序去上机,应从一开始就养成严谨的科学作风;(4)对运行中可能出现的问题事先作出估计,对程序中自己有疑问的地方,应作出记号,以便在上机时给予注意;(5)准备好调试和运行时所需的数据三、上机实验的步骤上机实验时一人一组,独立上机,复杂分组进行,相互讨论完成任务上机过程中出现的问题,除了是系统的问题以外,一般应自己独立处理,不要轻易举手问教师。

尤其对“出错信息”,应善于自己分析判断这是学习调试程序的良好机会上机实验一般应包括以下几个步骤:(1)进入C工作环境(Dev-C++ 5.8.3)2)输入自己所编好的程序3)检查一遍已输入的程序是否有错(包括输入时打错的和编程中的错误),如发现有错,及时改正4)进行编译和连接如果在编译和连接过程中发现错误,屏幕上会出现“出错信息”,根据提示找到出错位置和原因,加以改正再进行编译……,如此反复直到顺利通过编译和连接为止5)运行程序并分析运行结果是否合理和正确在运行时要注意当输入不同数据时所得到的结果是否正确6)输出程序清单和运行结果四、实验验收(1)现场验收,学生讲解、提问、答辩的方式,通过三方面的表现给出实验成绩;(2)提交程序清单(电子版)第二部分 关于程序的调试和测试一、程序错误的类型为了帮助各位同学调试程序和分析程序,下面简单介绍程序出错的种类1)语法错误即不符合C语言的语法规定,例如将main 错写为naim ,括号不匹配,语句最后漏了分号等,这些都会在编译时被发现并指出这些都属于“致命错误”, 不改正是不能通过编译的对一些在语法上有轻微毛病但不影响程序运行的错误(如定义了变量但始终未使用),编译时会发出“警告”,虽然程序能通过编译,但不应当使程序“带病工作”,应该将程序中所有导致“错误(error)”和“警告(warning)”的因素都消除,再使程序投入运行。

2)逻辑错误这是指程序无语法错误,也能正常运行,但是结果不对例如求s=l+2+3+…+100,有人写出以下语句:for(s=0, i=1; i<100; 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(“%d\n”,c);}当输入的b为非零值时,运行无问题当输入的b为零时,运行时出现“溢出(overflow)”的错误如果在执行上面的scanf语句时输入456.78 34.56,则输出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.2f\n”, x1, x2);}当输入a,b,c的值为1,-2,-15 时,输出xl 的值为5,x2的值为-3。

结果是正确无误的但是若输入a,b,c的值为3,2,4 时,屏幕上出现了出错信息,程序停止运行,原因是此时b2-4ac小于0,出现了对负数求平方根的运算,故出错因此,此程序只适用b2-4ac≥0的情况我们不能说上面的程序是错的,而只能说程序对可能出现的情况“考虑不周” ,所以不能保证在任何情况下都是正确的使用这个程序必须满足一定的前提(b2-4ac≥0),这样,就给使用程序的人带来不便人们在输入数据前,必须先算一下,看b2-4ac是否大于或等于0一个程序应能适应各种不同的情况,并且都能正常运行并得到相应的结果下面分析一下求方程ax2+bx+c=0的根,有几种情况:(1)a≠0时① b2-4ac>0 有两个不等的实根:x1, 2=(-bsqrt(b2-4ac))/2a② b2-4ac=0 有两个相等的实根:x1= x 2=-b/2a③ b2-4ac<0 有两个不等的共轭复根:x1, 2=(-bsqrt(b2-4ac)i)/2a(2)a=0时,方程就变成一元一次的线性方程:bx+c=0① 当b≠0时,x =-c/b② 当b = 0时,方程变为0x+c=0当c = 0时,x可以为任何值;当c≠0时,x无解。

综合起来,共有6种情况:① a≠0,b2-4ac>0② a≠0,b2-4ac=0③ a≠0,b2-4ac<0④ a=0,b≠0⑤ a=0,b= 0,c = 0⑥ a=0,b= 0,c≠0应当分别测试程序在以上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.2f\n",-c/b); } else { disc= b*b-4*a*c; if(disc>=0) if(disc>0) {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.2f\n”, x1, x2); } else {printf("It has two same real solutions:\n"); printf("x1=x2=%6.2f\n",-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.2fi\n", 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的值,得到以下的运行结果:① 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 trivial.⑥ input a, b, c: 0 0 5 It is impossible.经过测试,可以看到程序对任何输入的数据都能正常运行并得到正确的结果。

以上是根据数学知识知道输入数据有6种方案但在有些情况下,并没有现成的数学公式作为依据,例如一个商品管理程序,要求对各种不同的检索作出相应的反应如果程序包含多条路径(如由if语句形成的分支),则应当设计多组测试数据,使程序中每一条路径都有机会执行,观察其运行是否正常以上就是程序测试的初步知识测试的关键是正确地准备测试数据如果只准备4 组测试数据,程序都能正常运行,仍然不能认为此程序己无问题只有将程序运行时所有的可能情况都作过测试,才能作出判断测试的目的是检查程序有无“漏洞”对于一个简单的程序,要找出其运行时全部可能执行到的路径,并正确地准备数据并不困难但是如果需要测试一个复杂的大程序,要找到全部可能的路径并准备出所需的测试数据并非易事例如:有两个非嵌套的if语句,每个if语句有两个分支,它们所形成的路径数目为22=4如果一个程序包含100 个if语句,则可能的路径数目为2100=1.2676511030,要测试每一条路径儿乎是不可能的实际上进行测试的只是其中一部分(执行几率最高的部分)因此,经过测试的程序一般还不能轻易宣布为“没有问题”,只能说“经过测试的部分无问题”正如检查身体一样,经过内科、外科、眼科、五官科……各科例行检查后,不能宣布被检查者“没有任何病症”,他有可能有隐蔽的、不易查出的病症。

所以医院的诊断书一般写为“未发现异常”,而不能写“此人身体无任何问题”我们应当了解测试的目的,学会组织测试数据,并根据测试的结果修改完善程序第三部分 实验内容与安排实验一 简单的C程序实验1.实验目的(1)了解Dev-C++集成环境的窗口界面,熟练掌握如何编辑、编译、连接、运行一个C程序以及如何保存和修改C语言的源程序2)通过运行简单的C程序,初步了解C源程序的结构和特点3)学会简单的读程序和调试程序2.实验内容(1)输出图形2)求下图所示田径场的周长和面积3)已知圆的周长与面积公式为: Cir=2*3.14*rad Area=3.14*rad*rad 从键盘输入一个半径值,求该圆的周长和面积要求:用主函数实现半径的输入,圆周长和面积的输出,周长和面积用不同的函数来实现3.预习内容《C程序设计(第四版)》第1章、第3章实验二 顺序程序设计1.实验目的(1)掌握C语言中使用最多的一种语句——赋值语句的使用方法2)掌握C语言数据类型,熟悉如何定义一个整型、字符型和实型的变量,以及对它们赋值的方法,了解字符型数据和整型数据的内在关系3)掌握不同的类型数据之间赋值的规律。

4)掌握对各种类型数据的正确输入方法5)学会使用C的有关算术运算符,以及包含这此运算符的表达式6)掌握各种类型数据的输入输出的方法,能正确使用各种格式转换符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,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积用scanf输入数据,输出计算结果,输出时要求有文字说明,取小数点后2为数字请编程序3)求ax2+bx+c=0方程的根a, b, c由键盘输入,假设b2- 4ac>0。

3.预习内容《C程序设计(第四版)》第3章实验三 选择结构程序设计1.实验目的(1)了解C语言表示逻辑量的方法(以0代表“假”,以非0代表“真”)2)学会正确使用逻辑运算符和逻辑表达式3)熟练掌握if 语句和switch 语句4)结合程序掌握一些简单的算法5)进一步学习调试程序的方法2.实验内容本实验要求事先编好解决下面问题的程序,然后上机输入程序并调试运行程序1)有3个整数a, b, c,由键盘输入,输出其中最大的数2)有一函数: x (x<1)y= 2x-1 (1≤x<10)3x-11 (x≥10) 写程序,用scanf函数输入x的值,输出y相应的值运行程序.输入x 的值(分别为x<1、1~10、x>10这3种情况),检查输出的y 值是否正确3)给出一个百分制成绩,要求输出成绩等级A、B、C、D、E90分以上为A,81~89 分为B,70~79分为C,60~69分为D,60分以下为E① 事先编好程序,要求分别用if语句和switch语句来实现运行程序,并检查结果是否正确② 再运行一次程序,输入分数为负值(如-70),这显然是输入时出错,不应给出等级,修改程序,使之能正确处理任何数据,当输入数据大于100和小于0时,通知用户“输入数据错”,程序结束。

4)给一个不多于5 位的正整数,要求:① 求出它是几位数;② 分别输出每一位数字;③ 按逆序输出各位数字,例如原数为321,应输出123应准备以下测试数据: 要处理的数为1位正整数; 要处理的数为2 位正整数; 要处理的数为3 位正整数; 要处理的数为4 位正整数; 要处理的数为5 位正整数除此之外,程序还应当对不合法的输入做必要的处理,例如: 输入负数; 输入的数超过5位(如123456 )3.预习内容《C程序设计(第四版)》第4章实验四 循环结构程序设计(一)1.实验目的(1)熟悉掌握用while语句、do-while语句实现循环的方法2)掌握在程序设计中用循环的方法实现一些常用算法3)进一步学习调试程序2.实验内容编程序并上机调试运行1)输入两个正整数m和n,求它们的最大公约数和最小公倍数在运行时,输入的值m>n,观察结果是否正确再输入时,使m

例如153是一个“水仙花数”,因为153=13+53+334)编程序找出1000之内的所有完数,并输出所谓完数,是指一个数如果恰好等于它的因子之和,这个数就称为“完数”例如,6的因子为1,2,3,而6=1+2+3,因此6是完数3.预习内容《C程序设计(第四版)》第5章实验五 循环结构程序设计(二)1.实验目的(1)熟悉掌握用for语句实现循环的方法2)掌握在程序设计中用循环的方法实现一些常用算法3)进一步学习调试程序2.实验内容编程序并上机调试运行1) 有一个分数序列: 2/1,3/2,5/3,5/8,13/8,21/13,…… 求出这个数列的前20项之和 (2) 一个球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下,再反弹求它在第10次落地时,共经过多少米,第10次反弹多高3)输出以下图案: * *** ***** ******* ***** *** *3.预习内容《C程序设计(第四版)》第5章实验六 数 组(一)1.实验目的(1)掌握一维数组和二维数组的定义、赋值和输入输出的方法。

2)掌握与数组有关的算法(特别是排序算法)2.实验内容编程序并上机调试运行1)已有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入到数组中2)将一个数组中的值按逆序重新存放例如,原来顺序为8, 6, 5, 4, 1,要求改为1, 4, 5, 6, 83)输出以下的杨辉三角形(要求输出10行) 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 ………………………………(4)输出“魔方阵”所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等例如,三阶魔方阵为(此题选做) 8 1 6 3 5 7 4 9 23.预习内容《C程序设计(第四版)》第6章实验七 数 组(二)1.实验目的(1)掌握字符数组和字符串函数的使用2)掌握与字符数组有关的算法2.实验内容编程序并上机调试运行1)找出一个二维数组中的鞍点,即该位置上的元素在该行上最大、在该列上最小也可能没有鞍点此题选做)(2)编一个程序,将两个字符串s1和s2比较,若s1>s2,输出一个正数;若s1=s2,输出0;若s1

不要使用strcmp函数3)编写一个程序,将字符数组s2中的全部字符复制到字符数组1中不用strcpy函数复制时,’\0’也要复制过去,’\0’后面的字符不复制3.预习内容《C程序设计(第四版)》第6章实验八 函 数(一)1.实验目的(1)掌握定义函数的方法2)掌握函数实参与形参的对应关系,以及“值传递”的方式3)掌握函数的调用方法和过程4)掌握函数的递归调用2.实验内容编程序并上机调试运行1)写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果两个整数由键盘输入2)写一个函数,使给定的一个33的二维数组转置,即行列互换3)用递归方法求n阶勒让德多项式的值,递归公式如下:1 (n=0)Pn(x)= x (n=1) ((2n-1)*x-pn-1(x)-(n-1)*pn-2(x))/n (n>=1)3.预习内容《C程序设计(第四版)》第7章实验九 函 数(二)1.实验目的(1)掌握函数的嵌套调用和数组作为函数参数的方法2)掌握全局变量和局部变量、动态变量、静态变量的概念和使用方法2.实验内容编程序并上机调试运行。

1)输入10个学生5门课的成绩,分别用函数实现下列功能:① 计算每个学生平均分② 计算每门课的平均分③ 找出所有50个分数中最高的分数所对应的学生和课程④ 计算平均分方差2)给出年、月、日,计算该日是该年的第几天3.预习内容《C程序设计(第四版)》第7章实验十 指 针1.实验目的(1)通过实验进一步掌握指针的概念,会定义和使用指针变量2)能正确使用数组的指针和指向数组的指针变量3)能正确使用字符串的指针和指向字符串的指针变量4)了解指向指针的指针的概念及其使用方法2.实验内容编程序并上机调试运行程序(都要求用指针处理)1)输入3个整数,按由小到大的顺序输出2)输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个对换写3个函数:① 输入10个数;② 数据处理;③ 输出10个数3)写一个函数,求一个字符串的长度在main函数中输入字符串,并输出其长度4)编一个程序,输入月份号,输出该月的英文月名例如,输入“3”,则输出“Match”,要求用指针数组处理3.预习内容《C程序设计(第四版)》第8章实验十一 结构体与共用体1.实验目的(1)掌握结构体类型变量的定义和使用2)掌握结构体类型数组的概念和应用。

3)了解链表的概念,初步学会对链表进行操作2.实验内容编程序,然后上机调试运行1)有5个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入5个学生数据,要求输出3门课总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课的成绩、平均分数)要求用一个input函数输入5个学生数据;用一个average函数求总平均分;用max函数找出最高分学生数据;总平均分和最高分的学生的数据都在主函数中输出2)建立一个链表,每个结点包括:学号、姓名、性别、年龄输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去3.预习内容《C程序设计(第四版)》第9章实验十二 文 件1.实验目的(1)掌握文件以及缓冲文件系统、文件指针的概念2)学会使用文件打开、关闭、读、写等文件操作函数3)学会对数据文件进行简单的操作2.实验内容编写程序并上机调试运行1)有5个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号、姓名、3门课成绩),计算出平均成绩,将原有数据和计算出的平均分数存放在磁盘文件stud 中设5名学生的学号、姓名和3门课成绩如下: 10101 Wang 89,98,67.5 10103 Li 60,80,90 10106 Fun 75.5,91.5,99 10110 Ling 100,50,62.5 10113 Yuan 58,68,71在向文件stud写入数据后,应检查验证stud文件中的内容是否正确。

2)将上题stud文件中的学生数据按平均分进行排序处理,将已排序的学生数据存入一个新文件stu_sort中在向文件stu_sort写入数据后,应检查验证stu_sort文件中的内容是否正确3)将上题已排序的学生成绩文件进行插入处理插入一个学生的3门课成绩程序先计算新插入学生的平均成绩,然后将它按成绩高低顺序插入,插入后建立一个新文件要插入的学生数据为: 10108 Xin 90,95,60在向新文件stu_new写入数据后,应检查验证stu_new文件中的内容是否正确3.预习内容《C程序设计(第四版)》第10章。

下载提示
相关文档
正为您匹配相似的精品文档