C语言实验指导书第2版华中科技大学_第1页
C语言实验指导书第2版华中科技大学_第2页
C语言实验指导书第2版华中科技大学_第3页
C语言实验指导书第2版华中科技大学_第4页
C语言实验指导书第2版华中科技大学_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C语言程序设计实验指导书(第二版)编著 曹计昌 卢萍 李开 张茂元华中科技大学计算机学院2008年3月目 录编写说明4实验1 Turbo C 2.0集成开发环境及简单程序调试5一、实验目的5二、实验任务5三操作指导(结合第1题)7实验2 表达式和标准输入与输出17一、实验目的17二、实验题目及要求171、源程序改错题172、源程序修改替换题183、编程设计题18实验3 流程控制实验19一、实验目的19二、实验题目及要求191源程序改错题192源程序修改替换题193编程设计题194. 选做题20实验4 函数与程序结构实验21一、实验目的21二、实验题目及要求211源程序改错题212源程序修改替换

2、题213跟踪调试题224编程设计题225选做题23实验5 编译预处理实验24一、实验目的24二、实验题目及要求241源程序改错题242源程序修改替换题243跟踪调试题254编程设计题26实验6 标准库及用户自定义库实验27一、实验目的27二、实验题目及要求271编程设计题272选做题28实验7 数组实验29一、实验目的29二、实验题目及要求291源程序改错题292源程序完善、修改、替换题293跟踪调试题304编程设计题315选做题31实验8 指针实验32一、实验目的32二、实验题目及要求321源程序改错题322源程序完善、修改、替换题323跟踪调试题334编程设计题345选做题34实验9 结构

3、与联合实验35一、实验目的35二、实验题目及要求351表达式求值的程序验证题352源程序修改替换题353编程设计题374选做题37实验10 文件实验38一、实验目的38二、实验题目及要求381文件类型的程序验证题382源程序修改替换题393编程设计题39编写说明本实验指导书是根据2008年出版发行的C语言程序设计教材编写。在实验题型方面进行了较大改进。除了传统的编程设计题之外,增加了源程序改错题,源程序完善、修改、替换题,程序的调试跟踪题等,目的是培养学生在C语言程序设计方面的实际编程动手能力。即:培养学生跟踪程序,设置断点,调试程序的能力;排除程序中语法、逻辑方面错误与故障的能力;养成细致、

4、周密、严谨的编程作风。源程序改错题先给出一些含有典型,常见错误的源程序,让学生通过编译或运行发现错误,并加以改正,从而纠正初学者易犯的常见错误。源程序修改替换题也是先给出源程序,然后要求学生按要求编写修改替换原来程序中的部分代码。如:用if语句和goto语句替换while循环,用switch语句替换多个if语句,用while循环替换for循环等。使学生掌握同一种算法的多种不同实现。跟踪调试结果填空题先给出源程序,要求学生填写程序运行过程中的某些中间结果。强迫学生用断点设置、单步跟踪等调试程序,观察并填写相应的中间结果。编程设计题只给出题目,要求学生完成从源程序的编程、编辑、修改,编译产生目标代

5、码,链接产生可执行文件,运行程序得到正确结果的全部环节。要求预先编写程序,上机实验从源程序的编辑开始。考虑学生上机实验的完成进度差别较大,因此每个实验安排3个题目,前2个必做,后一个供速度快的同学选做。3个题目的难度依次为易、中、较难。C语言程序设计的上机实验是进一步深刻了解C语言的语法、语义,掌握用C语言进行初步程序设计所需要的方法和技能的一个重要环节。优秀的程序员毫无例外的都是在机器上“摸爬滚打”出来的。C语言的创始人Dennis M. Ritchie是如此,C+的创始人Bjarne Stroustrup也是如此。这些语言大师们都是在机器上使用现行语言遇到巨大障碍的情况下才产生了发明新的计

6、算机语言灵感和动力。Dennis M. Ritchi直到上世纪90年代还在它的386机器上编程。因此作为C语言的初学者一定要要重视实验。学习C语言与学习和使用任何一门其它程序设计语言一样。首先要理解程序设计语言的语法和语义;然后通过上机熟悉该语言集成开发环境,掌握编辑、修改、编译、链接、跟踪、调试程序等方面的技巧。最后还要熟悉语言编译系统提供的库函数或类库,以便快速实现程序的设计与开发。上机实验就是学习和掌握上面三个环节的重要途径。“预则立,不预则废”。上机实验前一定要预先编好有关程序,把上机的重点放到程序的编辑、修改、编译、链接、跟踪、调试程序方面来。放到观察程序运行过程中的中间结果和运行完

7、毕后的运行结果方面来。最终使自己的大脑变成一台“计算机”,能够在脑袋中运行自己的程序,判断各种情况下程序的走向等等。从而提高上机的效率和程序设计的准确性。优秀的程序员往往不轻易“出手”,但出手往往令人拍案叫绝!因此,“预”是培养编程者养成一种深思熟虑的好的编程习惯。由于时间仓促,本实验指导书仅仅是试用版,先供大家参考。希望同学们在参考使用过程中多提宝贵意见,以便今后逐步加以完善。实验指导书中实验1、实验3由李开老师编写,实验4、实验5由张茂元老师编写,实验2、实验6和实验10由卢萍老师编写,实验7、实验8、实验9由曹计昌老师编写。并由曹计昌老师对实验指导书统稿。参编的老师们衷心希望自己的学生将

8、来能够成为编程高手,成为计算机领域的优秀人才!实验1 Turbo C 2.0集成开发环境及简单程序调试一、实验目的编写简单的C程序(顺序结构的程序),熟悉Turbo C 2.0集成开发环境,学会在集成开发环境中运行和调试程序的方法。我们将通过一个简单的例子演示操作步骤,有关Turbo C 2.0开发环境的详细信息请参阅教材的附录4。二、实验任务通过编辑、编译、链接、调试、执行下面程序。熟悉Turbo C 2.0集成开发环境及简单程序设计与调试过程。1输入三角形三边a,b,c的值,计算并输出三角形的面积。三角形面积公式为:s = (a + b + c)/2(平方根函数的调用形式为sqrt(x),

9、 x和函数值均为浮点类型,sqrt所需的系统头文件为<math.h>。)源程序如下:#include <stdio.h>#include <math.h>void main(void)float a,b,c,s,t;scanf("%f%f%f",&a,&b,&c); /* Line 8 */s=(a+b+c)/2 /* Line 9 */t=s*(s-a)*( s-b)*(s-c); /* Line 10 */area=sqrt(t); /* Line 11 */print("area=%dn"

10、,area); /* Line 12 */2. 输入自己的名字的汉语拼音,要计算机问候自己并且输出这是自己学习C语言的第一个程序的句子。源程序如下:#include "stdio.h"void show(char str);void main(void) char name20; printf("Input your name please!n"); gets(name); printf("Hello %s!n",name); show(name);void show(char str) printf("This is th

11、e first program for %s to learn C programming!n",str);3(选做)编程实现中输入10个整数,统计正数和负数的个数,计算正数和负数的累加和与平均值的算法。源程序如下:#include "stdio.h"void main(void) int x,k,positive,negtive,sum_pos,sum_neg; float even_pos,even_neg; k=1; positive=negtive=sum_pos=sum_neg=0; while(k<11) scanf("%d"

12、,&x); if(x!=0) if(x>0) positive+;sum_pos+=x;else +negtive; sum_neg+=x; k+; even_pos=(float)sum_pos/positive; even_neg=(float)sum_neg/negtive; printf("positive=%dtsum_pos=%dn",positive,sum_pos); printf("even_pos=%6.2fn",even_pos); printf("negtive=%dtsum_neg=%dn",n

13、egtive,sum_neg); printf("even_neg=%6.2fn",even_neg);三操作指导(结合第1题)(一)设置编译环境1创建自己的目录为了避免将不同的人、不同性质和用途的程序混放在一起,每个学生设一个专用的子目录,源程序文件和编译生成的目标文件都可以存放在此子目录中。在本例中创建自己的目录D:WT2进入TCTC的执行程序tc.exe本身也是一个DOS程序,如果在Windows中运行tc.exe,则首先转到MS-DOS环境,然后执行下列操作系统命令:cd tc (将当前目录指定为TC目录,该目录下有tc.exe)c: tc>tc (执行tc.

14、exe进入TC)退出TC有两种方式:一种是ALT-X(终止退出),终止退出后必须执行tc.exe才能重新进入TC;另一种是FILE / OS SHELL(驻留退出),驻留退出时用EXIT返回TC(不能用tc.exe)。3设置目录路径选择Options / Directories,会弹出一个窗口,如图1所示。图1第1行Include directories 指“包含文件”所在的目录,系统显示出默认的子目录C:TCINCLUDE。第2行Library directories 指库文件所在的目录,系统显示出默认的子目录C:TCLIB。第4行Turbo C directory 指Turbo C系统文件

15、所在的目录,系统显示的是安装时的默认目录C:TC。如果你的“包含文件”、库文件和系统文件存放的目录与缺省路径不相同,就作相应的修改。第3行Output directory指定输出文件(.obj文件和.exe文件)存放的目录,需要用户指定。如果用户不指定,系统就会就会将它保存在当前工作目录中。现在我们想指定输出文件目录为我们自己的目录,在选中第3行Output directory后,按回车键,就会弹出一个“输出文件目录”对话框,在此框内输入D:WT,见图2,它表示要将.obj文件和.exe文件保持在D:WT子目录中。图2 在进行了以上设置后,还应当把这些信息保存起来。方法是:在上述设置完毕后按E

16、sc键返回Options菜单,然后选择Save Options菜单项,将对环境的重新设置保存到配置文件(tcconfig.tc)中。(二)运行程序1编辑和存盘输入新程序:FILE / NEW,此时光标处于空白的编辑窗口(Edit区)等待用户输入。将本实验中第二部分的源程序照原样输入。保存新文件:FILE / WRITE TO,输入带路径的文件名。在本例中输入d:wtarea.c,将源文件area.c保存到自己的目录d:wt中,见图3。图3装入已存在的程序(老程序):FILE / LOAD,或F3,此时可输入要装入的源程序文件名(或直接按回车,然后从列表框中选取)。保存老文件:FILE / SA

17、VE,或F2。2编译、连接和运行2.1 编译和连接过程中发现错误在本例中,输入源程序后,按Ctrl+F9键,屏幕上的显示如图4所示。图4从中间的窗口可以看到在编译中发现了2个警告和2个错误。所谓“警告(Warning)”是指较轻微的错误,系统对此能够容忍,仍然把有警告的程序生成目标文件和可执行文件,可以执行程序,但不保证程序的运行结果正确。而“错误(Errors)”是指严重的错误,系统不能容忍任何一个错误,编译系统对有错误的程序不生成目标文件和可执行文件,必须改正后再重新编译和连接。按任何一个键后,中间的编译信息窗口消失,在屏幕下部的Message窗口中,显示了具体的出错信息,见图5。图5 该

18、窗口的第1行显示的是编译的文件名。第2行是出错信息,告诉用户在编译的源文件中的第10行出现了一个错误,错误的内容是:Statement missing ; in function main(主函数中的语句漏了一个分号)。从图5可以看到该行是以高亮度显示的。与此相应,在上部Edit窗口中的源程序第10行也是以高亮度显示的,这样便于用户对照检查。我们可以发现是第9行的末尾漏了一个分号,而不是第10行漏了分号。为什么会显示是第10行漏了分号呢? 这是由于编译系统在检查第9行时,发现语句末尾没有分号,但这时还不能判定该语句有错,因为C语言允许把一个语句分写在两行上。因此,编译系统接着检查第10行,看第

19、10行的开头有无分号。当发现第10行的开头没有分号时才判定出错,但此时的位置已是第10行了,所以报错的行数为第10行。所以,在看到出错信息时,不能只简单地从系统显示的出错行数去找错,应该连同上下行一起检查。在按回车键后,激活了上面的编辑窗口,光标自动停留在第10行上,以便用户修改,两个窗口中的高亮度显示行已恢复为正常显示。在编辑窗口顶部用红色显示刚才观察的出错信息,以便用户对照检查修改,见图6。图6我们在第9行末尾加上一个分号,然后再分析第2个错误。先按F6键以激活Message窗口,用­和¯键使第2条出错信息用高亮度显示,见图7。图7Message窗口中的第2个出错信息行

20、告诉我们:源程序第11行有错误,错误的内容是:Undefined symbol area in function main(符号area在主函数中未被定义)。可以看到编辑窗口中源程序第11行也是以高亮度显示的,经检查发现变量area未定义,应当修改。按回车键,激活编辑窗口,光标停留在第11行上,同时在编辑窗口顶部显示出错信息行。将程序第6行改为:float a,b,c,s,area;作了以上的修改后,再按Ctrl+F9键,屏幕上的显示如图8所示。图8从中间的窗口可以看到在连接中发现了1个错误。按任何一个键后,中间的连接信息窗口消失,在屏幕下部的Message窗口中,显示了具体的出错信息,见图9

21、。图9第3行是出错信息,内容是:Undefined symbol _print in module area.c(符号print在area.c文件中未被定义),经检查发现库函数的名字写错了,应当修改。按F6键,激活编辑窗口,将程序第11行的print改为printf。再按Ctrl+F9键,这次程序就可以开始运行了。2.2 在TC集成环境中运行在编辑窗口完成一个源程序的编辑后,如果经过检查认为没有问题,就可以直接按Ctrl+F9键。这时Turbo C将一次完成从编译、连接到运行的全过程。这是运行Turbo C程序最简便常用的方法。如果在编译或连接中有错,就将停下来,显示出错信息,等用户改正后再按

22、Ctrl+F9键重新编译、连接;如不出错,就自动开始运行。 程序运行时,如有键盘输入语句,屏幕显示会切换到用户屏,此时用户可从键盘输入数据。在本例中,按Ctrl+F9键以后,屏幕显示切换到用户屏,要求输入数据,用户可从键盘输入:3 4 5见图10。图10按回车键后,屏幕的显示又从用户屏切换回TC窗口,因此用户看不到运行结果。如果想看运行结果,可按Alt+F5键,此时屏幕显示切换到用户屏。程序运行的结果显示在用户屏上。用户在看完运行结果后,如想回到编辑窗口继续对源程序进行编辑修改,可按任一键即回到TC窗口。下面把最常用的功能键的有关操作简要列出:Ctrl+F9:编译、连接、运行Alt+F5:观看

23、运行结果按任一键:从用户屏切换回TC窗口2.3 在DOS环境下运行如果在编译、连接过程中未发现错误,系统就会生成可执行文件.EXE,在DOS环境下进入可执行文件.EXE所在的目录,直接输入可执行文件名,即可运行程序。在本例中可执行文件名为area.exe,输入命令方式为:d:wt>area(三)用DEBUG方式运行程序程序的编译和连接没有错误,不等于运行结果一定正确。编译系统能检查出语法错误,但无法检查出逻辑错误。在本例中,经过修改,这个源程序已经没有语法错误,顺利通过编译和连接。在运行时如输入:3 4 5则输出结果为:area=0这个结果显然是不对的。可能用户难以很快地找出错误的原因,

24、这时可采用下面介绍的两种动态调试方法。1单步执行这种方法的特点是:程序一次执行一行。每执行完一行后,就停下来,用户可以检查此时各有关变量和表达式的值,以便发现问题所在。对本例中的程序,重新开始运行,按F7键,可以看到在编辑窗口的源程序的主函数main()处,用高亮度显示,表示准备进入main函数。同时可以看到屏幕下部的Message窗口变成了Watch窗口,它是观察数据用的,见图11。图11再按一次F7键,亮条移到第8行(第6行是对变量的定义,不是执行语句,故被跳过),表示下一步要执行此行。再按一次F7键,此时执行第8行,由于该行是scanf函数语句,需要输人数据,所以切换到用户屏,用户在此处

25、输入:3 4 5按回车键后,屏幕显示切换到编辑窗口,亮条移到第9行,表示第8行已执行完毕。再按两次F7键,亮条移到第11行,表示第10行已执行完毕。此时可以检查一下有关变量的值是否正确。按Ctrl+F7键,在编辑窗口中出现一个观察数据的输入框。如果我们想查看变量a的值,就在此框内输入字符a,见图12。图12按回车键后,该输入框消失,在屏幕下部的Watch窗口显示出a的当前值3.0,见图13。图13如果还想查变量b的值,需要重新按Ctrl+F7键,并在Add watch框内输入字符b,然后按回车键,就可在Watch窗口看到变量b的值是4.0。用同样方法可得到变量c的值5.0,变量s的值6.0,变

26、量t的值36.0。现在,Watch窗口中的信息如下:t: 36.0s: 6.0c: 5.0b: 4.0a: 3.0最先查看的a值在最下面一行,最后查看的s值在最上面一行。这些值都是正确的,没有问题。应再继续运行,检查后面的语句有无问题。再按一次F7键,亮条移到main函数的第12行,表示第11行已执行完毕。此时,按Ctrl+F7键,在Add watch框内输入area并按回车键,在Watch窗口中显示出area的值是6.0,而不是0。三角形面积应该等于此值。那么为什么printf函数会输出0呢? 我们再按F7键,亮条移到main函数的第13行,表示第12行已执行完毕。在Watch窗口中显示出a

27、rea的值仍然是6.0,说明area的值是对的,而printf函数语句的输出不对。由于printf函数语句已执行完,应当在用户屏上有输出,用Alt+F5观察用户屏上的显示,发现输出结果为area0。至此,出错的范围已缩得很小了,就在printf函数语句内,而且肯定是输出格式有问题,导致未能正确输出一个数据。经仔细检查,发现用了输出整数的格式符d,这就查出了出错的原因。将d改为f,再用Ctrl+F9运行程序。在输入3,4,5之后,输出结果为:area=6.000000结果正确。以上我们通过一个简单的例子详细地介绍了如何用单步执行的方法进行动态调试。实际上,对这种简单的程序,许多人可能很快就能查出

28、错误所在,而不必采用单步执行方法,我们主要是通过这个例子来说明如何使用F7和Ctrl+F7键检查程序的错误。上面是用功能键实现单步执行的方法,也可以通过选择菜单命令来实现单步执行。用Run下拉菜单中的Trace into命令也能使程序单步执行,相当于按一次F7键。选择主菜单条中的Breakwatch后按回车键,得到下拉菜单。从中选择Add watch,并按回车键,也可得到Add watch输入对话框,相当于按一次Ctrl+F7键。显然,用功能键比用菜单选择方便得多。2设置断点单步执行法能有效地、一行一行地检查感兴趣的数据的值,但是如果程序很长,是难以逐行进行检查的。对于一个较长的程序,常用的方

29、法是在程序中设若干个断点,程序执行到断点时暂停,用户可以检查此时有关变量或表达式的值。如果未发现错误,就使程序继续执行到下一个断点,如此一段一段地检查。这种方法实质上是把一个程序分割成几个分区,逐区检查有无错误,这样就可以将找错的范围从整个程序缩小到一个分区,然后集中精力检查有问题的分区。再在该分区内设若干个断点,把一个分区分成几个小区,然后寻找有错的小区。用这种方法可不断缩小找错范围直到找到出错点。设断点的方法是:将光标移到某一行上,然后按Ctrl+F8键,此行就以颜色条覆盖,作为断点行。如果想取消断点行,则将光标移到断点行上,再按一次Ctrl+F8键,颜色条消失,该行就不再是断点行。运行时

30、遇断点行暂停,此时,用户可以用前面介绍过的方法查看有关变量和表达式的值。如果想继续运行,再按一次Ctrl+F9键即可。按Ctrl+F9使此程序运行,输入a、b、c的值1、2、6。在结束运行后,按Alt+F5键观察用户屏,发现输出为:sqrt:DOMAIN errorFloating pomt error:Overflow这显然不对。为了找出问题所在,可在程序中第9行、第11行和第12行设置断点,把光标先后移到这三行,并按Ctrl+F8键,这三行就被红色条覆盖,如图14所示。图14按Ctrl+F9运行程序,执行到scanf函数语句时,切换到用户屏,输入a、b、c的值。这次输入:1 2 6程序继续

31、执行到第一个断点行暂停。请注意是遇到断点行即暂停,所以断点行并未被执行,只执行到断点行的上一行。此时按Ctrl+F7键查看a, b, c的值,从Watch窗口可以看到a, b, c的值是正确的。到目前为止,并未发现程序有错误。再按Ctrl+F9键使程序继续运行,到第二个断点暂停。此时再按Ctrl+F7键查看t的值,从Watch窗口可以看到t的值为59.0625,t为负值在计算平方根时会出现错误。为证明此点,按Ctrl+F9继续运行,执行“areasqrt(t);”时屏幕闪了一下(这是程序向用户屏输出信息,然后又切换回TC窗口而产生的),按Alt+F5键观察用户屏,可看到出错信息: sqrt:D

32、OMAIN error Floating pomt error:Overflow表示在调用sqrt函数时,出现数据范围的错误(sqrt要求参数值不小于0,负数超出了有效范围),引起“浮点数错误溢出”。这个错误是由于输入a, b, c的值不恰当而造成的,程序本身并无错误,不需要修改程序。在以后运行时应注意使输入的三角形三边的值要满足三角形的性质:两边之和大于第三边。实验2 表达式和标准输入与输出一、实验目的1 熟练掌握各种运算符的运算功能,操作数的类型,运算结果的类型及运算过程中的类型转换,重点是C语言特有的运算符,例如位运算符,问号运算符,逗号运算符等;熟记运算符的优先级和结合性;2 掌握ge

33、tchar, putchar, scanf 和printf 函数的用法。3 掌握简单C程序(顺序结构程序)的编写方法。二、实验题目及要求1、源程序改错题下面给出了一个简单C语言程序例程,用来完成以下工作:1输入华氏温度f,将它转换成摄氏温度c后输出;2输入圆的半径值,计算并输出圆的面积;3输入短整数、,将的高字节作为结果的低字节,的高字节作为结果的高字节,拼成一个新的整数,然后输出;在这个例子程序中存在若干语法和逻辑错误。要求在计算机上对这个例子程序进行调试修改,使之能够正确完成指定任务。#include<stdio.h>#define PI 3.14159;voidmain( v

34、oid ) int f ; short p, k ; double c , r , s ;/* for task 1 */ printf(“Input Fahrenheit:” ) ; scanf(“%d”, f ) ; c = 5/9*(f-32) ; printf( “ n %d (F) = %.2f (C)nn ”, f, c ) ;/* for task 2 */printf("input the radius r:");scanf("%lf", &r);s = PI * r * r;printf("nThe acreage i

35、s %.2fnn",&s);/* for task 3 */printf("input hex int k, p :");scanf("%x %x", &k, &p );newint = (p&0xff00)|(k&0xff00)<<8;printf("new int = %xnn",newint);2、源程序修改替换题下面的程序利用常用的中间变量法实现两数交换,请改用不用第三个变量的交换法实现。#include<stdio.h>void main( ) int

36、 a, b, t; printf(“Input two integers:”); scanf(“%d %d”,&a,&b); t=a, a=b, b=t; prinf(“na=%d,b=%d”,a,b);3、编程设计题上机调试运行以下程序:(1)编写一个程序,输入字符,如果是大写字母,则将转换成对应的小写,否则的值不变,最后输出。(2)编写一个程序,输入无符号短整数x,(0 15, 1 16-),取出x从第位开始向左的位(从右至左编号为015),并使其向左端(第15位)靠齐。(3)IP地址通常是4个用句点分隔的小整数,如32.55.1.102。这些地址在机器中用无符号长整形表示

37、。编写一个程序,以机器存储的形式读入一个32位的互联网IP地址,对其译码,然后用常见的句点分隔的4部分的形式输出。实验3 流程控制实验一、实验目的1 掌握复合语句、if语句、switch语句的使用,熟练掌握for、while、do-while三种基本的循环控制语句的使用,掌握重复循环技术,了解转移语句与标号语句。2 练习循环结构for、while、do-while语句的使用。3 练习转移语句和标号语句的使用。4 使用Turbo C 2.0集成开发环境中的调试功能:单步执行、设置断点、观察变量值。二、实验题目及要求1源程序改错题下面是计算s=n!的源程序,在这个源程序中存在若干语法和逻辑错误。要

38、求在计算机上对这个例子程序进行调试修改,使之能够正确完成指定任务。例如,8!=40320。#include <stdio.h>main() int i,n,s=1; printf("Please enter n:"); scanf("%d",n); for(i=1,i<=n,i+) s=s*i; printf("%d! = %d",n,s);2源程序修改替换题(1)修改第1题,分别用while和do-while语句替换for语句。(2)修改第1题,输入改为“整数S”,输出改为“满足n!S的最小整数n”。例如输入整数4

39、0310,输出结果为n=8。3编程设计题(1)打印如下杨辉三角形。 1 /*第0行 */ 1 1 /*第1行 */ 1 2 1 /*第2行 */ 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 1 8 28 56 70 56 28 8 1 1 9 36 84 126 126 84 36 9 1每个数据值可以由组合计算(表示第i行第j列位置的值),而的计算如下: (i=0,1,2,)(j=0,1,2,3,i)本程序中为了打印出金字塔效果,要注意空格的数目。一位数之间是3个空格,两位数之间有2个空格,3位数之

40、间只有一个空格,程序编制过程中要注意区分。(2)编写一个程序,将用户输入的任意正整数逆转,例如,输入1234,输出4321。4. 选做题 编写一个程序,用牛顿迭代法求方程满足精度e=10-6的一个近似根,并在屏幕上输出所求近似根。牛顿迭代法:求方程近似根的迭代公式为,其中是函数f(x)的导函数。牛顿迭代法首先任意设定的一个实数来作为近似根的迭代初值x0,然后用迭代公式计算下一个近似根x1。如此继续迭代计算x2, x3, , xn, 直到,此时值xn即为所求的近似根。实验4 函数与程序结构实验一、实验目的1熟悉和掌握函数的定义、声明;函数调用与参数传递方法;以及函数返回值类型的定义和返回值使用。

41、2熟悉和掌握不同存储类型变量的使用。3熟悉多文件编译技术。二、实验题目及要求1源程序改错题下面是计算s=1!+2!+3!+n!的源程序,在这个源程序中存在若干语法和逻辑错误。要求在计算机上对这个例子程序进行调试修改,使之能够正确完成指定任务。#include "stdio.h"void main(void) int k; for(k=1;k<6;k+) printf("k=%dtthe sum is %ldn",k,sum_fac(k);long sum_fac(int n) long s=0; int i; long fac; for(i=1;i

42、<=n;i+) fac*=i; s+=fac; return s;2源程序修改替换题(1)修改第1题中sum_fac函数,使其计算量最小。(2)修改第1题中sum_fac函数,计算。3跟踪调试题计算fabonacci数列前n项和的程序如下:其中,long sum=0,*p=&sum;声明p为长整型指针并用&sum取出sum的地址对p初始化。*p表示引用p所指的变量(*p即sum)。void main(void) int i,k; long sum=0,*p=&sum; scanf("%d",&k); for(i=1;i<=k;i+

43、) sum+=fabonacci(i); printf("i=%dtthe sum is %ldn",i,*p); long fabonacci(int n) if(n=1 | n=2) return 1; else return fabonacci(n-1)+fabonacci(n-2);单步执行程序,观察p,i,sum,n值。(1)刚执行完scanf("%d",&k);语句,p,i值是多少?(2)从fabonacci函数返回后光条停留在哪个语句上?(3)进入fabonacci函数,watch窗口显示的是什么?(4)当i=3,从调用fabona

44、cci函数到返回,n值如何变化?4编程设计题(1)编程让用户输入两个整数,计算两个数的最大公约数并且输出之(要求用递归函数实现求最大公约数)。同时以单步方式执行该程序,观察递归过程。(2)编程验证歌德巴赫猜想:一个大于等于4的偶数都是两个素数之和。编写一个程序证明对于在符号常量BEGIN和END之间的偶数这一猜测成立。例如,如果BEGIN为10,END为20,程序的输出应为:GOLDBACH'S CONJECTURE:Every even number n>=4 is the sum of two primes.10=3+712=5+720=3+175选做题1、设file1.c如

45、下:#include <stdio.h>int x,y; /* 外部变量的定义性说明 */char ch; /* 外部变量的定义性说明 */void main(void) x=10; y=20; ch=getchar(); printf("in file1 x=%d,y=%d,ch is %cn",x,y,ch); func1();file2.c如下:extern int x,y; /* 外部变量的引用性说明 */extern char ch; /* 外部变量的引用性说明 */void func1(void) x+; y+; ch+; printf("

46、in file2 x=%d,y=%d,ch is %cn",x,y,ch);试用TCC进行多文件编译和链接。然后在DOS环境下运行生成的可执行文件。实验5 编译预处理实验一、实验目的5 掌握文件包含、宏定义、条件编译、assert宏的使用;6 练习带参数的宏定义、条件编译的使用;7 练习assert宏的使用;8 使用Turbo C 2.0集成开发环境中的调试功能:单步执行、设置断点、观察变量值。二、实验题目及要求1源程序改错题下面是用宏来计算平方差、交换两数的源程序,在这个源程序中存在若干语法和逻辑错误。要求在计算机上对这个例子程序进行调试修改,使之能够正确完成指定任务。#inclu

47、de "stdio.h"#define SUM a+b#define DIF a-b#define SWAP(a,b) a=b,b=avoid main int b, t; printf("Input two integers a, b:"); scanf("%d,%d", &a,&b); printf("nSUM=%dn the difference between square of a and square of b is:%d",SUM, SUM*DIF); SWAP(a,b); Print

48、f("nNow a=%d,b=%dn",a,b);2源程序修改替换题下面是用函数实现求三个数中最大数、计算两数之和的程序,在这个源程序中存在若干语法和逻辑错误。要求:1)对这个例子程序进行调试修改,使之能够正确完成指定任务;2)用带参数的宏替换函数max,来实现求最大数的功能。void main(void) int a, b, c; float d, e; printf("Enter three integers:"); scanf("%d,%d,%d",&a,&b,&c); printf("nthe

49、 maximum of them is %dn",max(a,b,c);printf("Enter two floating point numbers:");scanf("%f,%f",&d,&e);printf("nthe sum of them is %fn",sum(d,e);int max(int x, int y, int z) int t; if (x>y) t=x; else t=y; if (t<z) t=z; return t;float sum(float x, float

50、y) return x+y;3跟踪调试题 下面程序利用R计算圆的面积s,以及面积s的整数部分。#define Rvoid main(void)float r, s;int s_integer=0; printf ("input a number: "); scanf("%f",&r); #ifdef R s=3.14159*r*r; printf("area of round is: %fn",s); s_integer= integer_fraction(s); printf("the integer fracti

51、on of area is %dn", s_integer); assert(s-s_integer)<1.0); #endifint integer_fraction(float x) int i=x; return i;1)修改程序,使程序编译通过且能运行;2)单步执行。进入函数decimal_fraction时watch窗口中x为何值?在返回main时, watch窗口中i为何值?3)排除错误,使程序能正确输出面积s值的整数部分,不会输出错误信息assertion failed。4编程设计题(1)三角形的面积是,其中,a,b,c为三角形的三边,定义两个带参数的宏,一个用来

52、求s,另一个用来求area。编写程序,用带参数的宏来计算三角形的面积。(2)用条件编译方法来编写程序。输入一行电报文字,可以任选两种输出:一为原文输出;二为变换字母的大小写(如小写a变成大写A,大写D变成小写d),其他字符不变。用#define命令控制是否变换字母的大小写。例如,#define CHANGE 1 则输出变换后的文字,若#define CHANGE 0则原文输出。实验6 标准库及用户自定义库实验一、实验目的1熟悉和掌握C图形库的使用。2学会建立库的基本方法。3、学会使用标准库中的随机数函数。二、实验题目及要求1编程设计题 ( 第1题必做,第24题可以任意选作)1)写一个程序:模拟

53、重复投掷一个硬币直到连续掷出三次heads。程序应该演示每次投掷的结果(tails或heads)以及投掷硬币总数。2)编程序实现多变的填充矩形,程序运行时,显示一个矩形,以白色为填充色,当按下任意键时,矩形的填充图案和颜色会发生改变。3)在不同的位置以不同的大小画10个圆。每个圆应该随机地选择半径并且被摆在屏幕里一个随机的位置上,每个圆必须适合窗口,以防止伸展出边界。4) 创建一个日历库,该库包括MonthName、MonthDays、FirstDayOfMonth和IsLeapYear四个函数。这四个函数的函数原型及功能为: char *MonthName(int month);该函数将月份month转换成对应的英文名,如将月份2转换成February。 int MonthDays(int month,int year);该函数返回某年year某月month的天数。 int FirstDayOfMonth(int month,int year);该函数计算某年year某月month的第一天是星期几,返回该结果。 int IsLeapYear(int year); 该函数判断某年year是否闰年,是

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论