实验大纲(参考答案)_第1页
实验大纲(参考答案)_第2页
实验大纲(参考答案)_第3页
实验大纲(参考答案)_第4页
实验大纲(参考答案)_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

1、实验一 C语言的运行环境、运行过程、简单的C程序设计【目的与要求】1 安装C语言编程集成工具tc+3.0,熟悉C语言上机操作的环境及C语言上机的一般过程。2 了解编辑窗口上主菜单中各功能项的含义。3 理解C语言程序的一般结构以及编辑、编译、连接、运行的操作过程。4 理解当程序运行时的输入和输出。【内容与过程】1安装C语言编程集成工具,进入此工具界面,检查设置是否正确;2对课本P3的例1-1,依次执行“编辑编译链接运行查看运行结果”这几个步骤 了解File菜单下功能项的作用,熟练使用New、Save、Save As、Exit。 了解Run菜单下功能项的作用,熟练使用Run、Compile、Use

2、r Screen。 了解Edit、Options菜单下功能项的作用3例1-1是只有输出;接下来执行例1-2(既有输入亦有输出);4执行例1-3,要求同时输入两个值【实验报告】1. 熟悉上机环境。1) 用于上机的C语言版本是什么? 答:Turbo C+ 3.02) 你是如何进入当前这个C语言环境的? 答:在windows操作系统中找到C:TCBINTC.exe,并双击运行。3) 当输入了最简单的C源程序后,如何执行编译链接运行步骤?会产生哪些文件,这些文件被放到什么位置了?答:首先用“File-Save”存盘;再用“Compile-Compile to obj”编译;然后用“Run-run”运行

3、;最后用“window-user screen”看运行的输出结果。产生了扩展名为.c、.obj和.exe的文件,存放这些文件的默认位置是C:TCbin4) 如何设置上机环境,使得产生的文件全部放到自定义的目录下?答:用“OptionDirectoriesOutput Directory”并输入专门设置来存放这些文件的具体目录路径。5) 产生的文件大小是?为什么exe文件远远大于obj文件?答:.c文件大小159byte;.obj文件大小854byte;.exe文件大小27.5kbyte。由此可见exe文件的大小远远大于.obj文件。这是因为.obj文件中只有本程序的语句翻译成的目标代码,而.e

4、xe文件则是把本程序的目标代码再链接上其它代码,如本程序中调用的printf()函数的目标代码等等,而形成的。目标代码尽管已经是机器指令,但是还不能运行,因为目标程序还没有解决函数调用问题,需要将各个目标程序与库函数连接,才能形成完整的可执行程序。()可执行程序:目标程序与库函数连接,形成的完整的可在操作系统下独立执行的程序称为可执行程序。可执行程序的扩展名为“exe”(在dos/windows操作系统下)6) 描述当开始运行例1-2后的过程(即运行后屏幕出现什么,敲下啥啥键后,出现什么.)答:程序运行中,首先在屏幕上显示:“please input value of x:”,此时程序暂停运行

5、,等待用户输入,用户输入一个小数,例如3.3后,再输入回车键,程序才继续运行,并在显示器上输出程序的最后计算结果。实验二 printf函数【目的与要求】掌握格式输出函数printf()及格式符【内容与过程】 运行课本P70-74的各printf()函数语句,查看输出结果,体会printf()函数中控制字符串中的普通字符、格式字符的用法,以及格式字符和输出表列的对应。【实验报告】 什么是printf()函数中控制字符串中的普通字符?其用法是怎样的?n是普通字符吗?是原样输出吗?答:在格式控制字符串内、除%、格式字符和修饰符外的其它字符都属于普通字符,具体包括空白字符、转义字符和可打印字符;用法是

6、原样输出或转义输出;n是普通字符;会被转义输出。 语句“printf(“hello ! s=x*x=%f ”, s);”中,哪些是普通字符?哪些是格式字符?哪个是输出表列?答:普通字符:hellow!s=x*x=格式字符:f输出表列:s 解释“printf(“%-25.15f,%25.15.fn”,a,a);”中,各参数间的对应关系答:共三个参数,第一个参数中的格式符%-25.15f与第二个参数a对应; 第一个参数中的格式符%25.15.f与第三个参数a对应。 解释“printf(“%dt%on”,a,b);”中,各参数的含义,及参数间的对应关系;答:第一个参数“%dt%on”规定了输出格式及

7、部分输出内容;第二和第三个参数a,b的值是另一部分输出内容;格式符%d对应于第二个参数a,把变量a中存储的值以带符号十进制整数的形式输出;格式符%o对应于第三个参数b,把变量b中存储的值以八进制整数的形式输出;“t”是输出制表符,即跳到下一个制表符区(制表符区以八个半角字符为一个区,认为屏幕每行有十个区);“n”是输出回车换行符,即跳到下一行起始位置。 “int a=-1; printf(“%dt%on”,a,a);”输出显示是?答:对int变量分配两个字节的编译系统,输出是:-1 177777对int型变量分配四个字节的编译系统,输出是:-1 37777777777实验三 scanf函数与字

8、符输入输出函数【目的与要求】掌握函数scanf()、getch()、getchar()、putch()、putchar()【内容与过程】 编辑并运行课本66的例3-5,对照课本75的3.4.4,体会scanf()函数中控制字符串和输入项列表的用法。注意:i. “#include <math.h>” 和 “q=sqtr(disc)/(2.0*a);”之间的联系ii. 程序中scanf函数在运行时,具体的输入操作是?体会调用scanf()函数输入多个数据时,数据之间的分隔符号。iii. 当Scanf函数的输入表列包含多项时,各项间可以有哪些分隔符号?iv. 把scanf函数调用语句修改

9、为“scanf(“a=%lfb=%lfc=%lf ”, &a, &b,&c);”后,具体的输入操作是?体会scanf()函数调用语句中的控制字符中的普通字符的用法。 运行课本P76-P78,3.4.4中的各个scanf函数调用语句 运行课本P78-P82,3.4.5中的各例题 运行83-84,课后题4,5,7,8【实验报告】 解释一下,课本66的例3-5中的“%lf”是什么意思? 答:输入一个长浮点型(即双精度型)的浮点数值。 在一个scanf()函数中输入多个数据时,数据之间可以使用哪些分隔符号? 答:如果在函数中没有指明,则可用空格符、回车符或制表符Tab作为数据间

10、的分隔。 比较一下,printf()与scanf()中的格式字符串和输出(入)表列在用法上有什么不同之处?为什么一般不建议在输入格式符中使用普通字符?答:不同之处有:1)printf()中的输出表列可以是常量、变量或者表达式,而scanf()中的输入表列必须是变量地址。2)printf()的格式字符中的普通字符是原样输出显示的;scanf()中的普通字符则不会显示在屏幕上、而必须由用户原样输入。不建议在输入格式符中使用普通字符的原因,就是因为无法保证用户会知道具体有哪些普通字符是必须输入的。 P83的课后题4答:(1)输出:c1=a,c2=b 因为输出格式符是%c,意味着输出结果是字符,即AS

11、CII码表中整数97、98对应的字符a和b c1=97,c2=98 因为输出格式符是%d,意味着输出结果是整数 (2)输出:c1=,c2= ASCII码表中整数197、198对应的字符是和 c1=-59,c2=-58 char类型变量占据8个二进制位空间,此时十进制数197和198的二进制存储的最高位即符号位为1,当以%d(即带符号十进制数)输出时,会被输出为负数 (3)输出:c1=,c2= c1=197,c2=198 int类型变量占据16个二进制位的空间,此时197和198的最高位,即符号位为0,所以不会被输出为负数。 P83的课后题5答:对应于scanf(),在键盘上输入:a=3b=7

12、对应于scanf(),在键盘上输入:8.5 71.82 对应于scanf(),在键盘上输入:Aa P83的课后题7注意面积、体积等应定义为double类型,半径、高等应定义为float型,并使用相应的输入输出格式符;圆周率PI应定义为常量(#define PI 3.14159,后面没有语句结束标志“;”),常量定义放在函数前面(不能放在函数里面),紧跟#include <stdio.h>。 P83的课后题8答:(1)二者皆可。 (2)用printf函数,用%d格式符输出 (3)不是完全无条件等价的。在以下情况不等价:当变量被赋整数值超过128,此时,char型变量和int型变量的%

13、d输出不同,不等价。(原因:char变量中的最高位会是1,输出负数;相同的数存储在int型变量中最高位是0,输出仍为正数。具体参看第4题。) 运行以下语句,输出结果是?为什么?Unsigned price=-1; printf(“%d, %u, %c”, price, price, price); 答:输出结果是:-1,65535, (空格)解释:unsigned price=-1;,则内存中price占据两字节单元,存储内容是1111111111111111; 对这个存储内容,以%d输出,是把其看作带符号数,则遵循减一取反后二进制数换算成十进制数后带负号,输出-1; 同样的存储内容,以%u输

14、出,是把其看作无符号数,则遵循直接二进制数换算成十进制数,输出65535; 同样的存储内容,以%c输出, 其中一种编译(由具体的编译平台决定)是取其低八位,转换成十进制数是255,在ASCII码表中找255对应的字符,是空格 实验四 单步运行、变量观察、算术运算、关系运算、逻辑运算、真假值和选择语句的的执行顺序【目的与要求】掌握单步运行和变量观察这两种程序调试方法【内容与过程】 单步运行:Run->trace into,可以对程序逐行地执行; 变量观察:window->watch,可以观察变量中的值的变化; 利用这两个工具,可以进行程序调试。2对应于P111的课后题3,输入以下程序

15、,并通过单步执行和变量观察察看各式计算结果值:Main() int a=3,b=4,c=5; int value; value=a+b>c&&b= =c; .3把P92的第8-11行的算式也放入,查看各式结果值,体会计算过程和计算结果4把P93第1-2行(x=5,y=1,age=18)、P94第1-2行的算式(x=5,y=1,age=18)也放入,同上。5把P87例4.2,单步执行,观察语句执行顺序【实验报告】1. 对应于前2、3和4, 1)如果要观察各式结果值,应把哪个变量放入观察窗口?2)写出各式结果值;3)回答课后题1,2答:1)把value值放入观察窗口。2)P1

16、11的课后题3,各式结果值是0 1 1 0 1 P92的第8-11行,参照课后题3的赋值,各式结果值是0 0 0 0 P93第1-2行,P94第1-2行,参照课后题3的赋值,另设x=5,y=1,age=18,各式结果值是1 0 0 02. 对应于前5,1)若输入是”3.6, -3.2”,写出执行顺序;2)若输入是”-3.2, 3.6”,写出执行顺序答:1)若输入是”3.6, -3.2”,执行顺序是2-5-6-8-9-10-12-13-14;2)若输入是”-3.2, 3.6”,执行顺序是2-5-6-12-13-14实验五 逻辑运算与分支判断【目的与要求】1 了解和使用关系运算符、逻辑运算符、条件

17、运算符及运算。2 掌握if语句、嵌套if结构、条件运算符、switch语句的使用方法。【内容与过程】1. if的几种形式和使用方法,理解分支语句的语句执行顺序2. switch语句的语法形式和使用方法,理解其执行顺序3. 各例题和课后题【实验报告】1 单步运行课本P88的例4.3,运行两次,第一次如课本输入“3,7,1”,单步执行,语句执行顺序是?;第二次输入“1,3,7”,单步执行,语句执行顺序是?答:输入“3,7,1”,语句执行顺序是2-3-5-6-12-13-14-15-16-17-18-19-20-21-22-23-24-25-26;输入“1,3,7”,语句执行顺序是2-3-5-余下所

18、有各行。2例4-9程序中共用到函数scanf() 、printf()、fabs()和sqrt(),其中fabs()和sqrt()是在math.h 中定义的,所以要把这个文件include进本程序中。1) 如果希望单步运行时每一步都能够实时地看到变量disc的值,又称监视/观察disc变量,应该怎么做?答:Window-watch-Ins-disc。2) 程序中原if语句的条件表达式是(fabs(a)<=1e-6),其逻辑含义是什么?答:判断实型变量a的值是否为0。3) 若把这个条件表达式改成( a = 1e-6),有无语法错误?此时是否进入为真分支;答:语法没有错,进入为真分支4) 若改

19、成(a),有无语法错误?此时是否进入为真分支。答:语法没有错,是否进入为真分支取决于变量a的具体取值。3单步运行课本P110的例4.10,如课本输入“100,20,300”,语句执行顺序是?如果删掉源程序中所有“break;”语句,同样的输入,语句执行顺序是?答:输入“100,20,300”,语句执行顺序是:2-3-6-7-8-9-10-13-26-27-28;删掉源程序中所有“break;”语句,同样的输入,语句执行顺序是:2-3-6-7-8-9-10-13-余下所有各行。P112的7,画流程图,并分析其运行情况(1)流程图如下:运行情况分析:如果输入负数(如-3),程序运行后输出“x=-3

20、, y=0”;如果输入0,程序运行后输出“x=0,y=-1”;如果输入正数(如3),程序运行后输出“x=3,y=-1”。以上运行情况说明,程序不能实现题目函数。这是因为本应与第一个if配对(如源程序书写对齐所示)的else实际上与第二个if配对(如流程图所示)了。(2)运行情况:如果输入负数(如-3),程序运行后输出“x=-3, y=0”;如果输入0,程序运行后输出“x=0,y=-1”;如果输入正数(如3),程序运行后输出“x=3,y=1”。以上运行情况说明,程序不能实现题目函数。这是因为本应与第一个if配对(如源程序书写对齐所示)的else实际上与第二个if配对(如流程图所示)了。实验六 循

21、环(一)【目的与要求】掌握while语句、do-while语句、for语句的使用方法。、【内容与过程】1. 输入课本P96的例5-1中的源程序代码,简化成求1到3的累加和,把变量I和sum加入观察窗口,单步运行,体会循环语句的执行(不断循环)以及观察变量I和sum的变化情况。2. 输入课本P102的例5-2的源程序代码,简化成求1到3的累加和。用单步运行的方法跟踪这个源程序的每一步运行,体会循环的过程。3. 输入课本P106的例5-9中的源程序代码,简化成求1到3的累加和,注意while和do-while循环,它们的循环次数和变量变化是否完全一样?4. 输入课本P113的例5-16中的源程序代

22、码,简化成求1到3的累加和,并单步执行,体会goto语句和if语句的配合。5. 体会无限循环(即死循环)【实验报告】1. 对照课本P96的图5-2的流程图,说明循环控制变量、循环条件和循环表达式分别是哪个?循环控制变量的初始化语句是?循环条件测试语句是?循环控制变量更新语句是?答:循环控制变量是i、循环条件是I<=100, 循环表达式是I=I+1; 循环控制变量的初始化语句是I=1; 循环条件测试语句是I<=100; 循环控制变量更新语句是I=I+1.2. 对于例5-1,变量I的终值是多少?这个终值的意义是什么?答:I的终值是101, 这个终值的意义是使循环条件为假,以结束循环3.

23、 对于例5-2,循环语句I+执行了多少次,循环条件语句I<=100执行了多少次?说明什么?答:I+执行了100次,I<=100执行了100次。说明循环条件测试语句的执行次数并不是总比循环次数多一次的;如果在循环执行前测试循环条件,则循环条件测试语句会比循环次数多一次,如果在循环执行后测试循环条件,循环条件测试语句的执行次数会与循环次数相等。4. 对于例5-1 和例5-2,如果循环条件是(I<=3),两个程序的循环执行次数是否一样?把while语句和do-while语句的循环条件改为(I>3), 其它不变,说说这两种语句的运行会有什么不一样。答:如果循环条件是I<=

24、3,则循环执行次数是一样的;如果改成I>3,则while一次都不执行,do while执行一次。5. 对于例5-3,把for循环的for()中的语句I=1删掉,单步执行,有何现象?为什么?只把I<=3删掉,单步执行,有何现象?为什么?只把I+删掉,单步执行,有何现象,为什么?答:把I=1删掉,则中是个随机值,难以预计其执行;把I<=3删掉,则死循环;把I+删掉,也是死循环。6. 对于P141的课后题10,对照p116的流程图5-2,设计算法并用流程图表达,说说适合用哪个循环语句实现?为什么?并写成源代码,调试运行。答:流程图为:适合用for循环实现,因为循环次数已知。源代码略

25、实验七 循环(二)【目的与要求】1 正确理解、使用中断语句break与continue。2 理解和掌握嵌套循环【内容与过程】1 单步跟踪同一个程序,描述一下用break与continue的区别:1) 单步时的执行的顺序有什么不同?2) 跳出循环时的循环变量取值有什么不同?2 单步跟踪嵌套循环的运行过程,体会内外层循环的执行顺序,以及从中体现出来的循环变量的变化。【实验报告】1 上机运行课本P137的程序例5.9,输入18,单步跟踪,把变量i,放入观察窗口。请问:1) 单步跟踪时,执行完break和continue语句的下一个被执行到的语句分别是?答:执行完break的下一个被执行到的语句是pr

26、intf(“%d is not a prime number.n”,n);执行完continue的下一个被执行到的语句是i+。2) 循环结束时,i变量的取值分别是?答:如果break,循环结束时i变量的值是2;如果continue,循环结束时i变量的值是53) 解释一下为什么会有这样的区别。答:break的作用是结束所有整个循环;continue的作用是结束当次循环,但依然继续下一次的循环。2 上机运行课本P137的例5-10(改为求3-9间的素数,即for (n=3;n<=9;n=n+2),单步跟踪,完成以下内容:1) 答: n k i m第一次外层循环 3 1 0 (不符合循环条件,

27、没有进入内层循环) 第二次外层循环 5 2 1 第1次内层循环 2 0 第三次外层循环 7 2 2 第1次内层循环 2 2 第四次外层循环 9 3 3 第1次内层循环 2 第2次内层循环 3 2)整个程序运行过程中,语句n=3执行了 1 次;语句n<=9执行了 5 次;语句n=n+2执行了 4 次;3)语句i=2执行了 4 次;语句i<=k执行了 1+2+2+2=7 次;语句i+执行了 0+1+1+1=3 次。4) 课后作业: P140页第6题#include <stdio.h>int main() int I,j,n; float sum1=1,sum2=0; for

28、(i=1;i<=20;i+) sum1= sum1*I; sum2=sum2+sum1; printf(“n阶累加和为%7.2fn”, sum2); 画出例5.6中三个程序段的流程图。答:对应于P129页的源代码,其流程图是:对应于P130页的源代码(break),其流程图是:把P130页的源代码中的break语句改成continue语句,其流程图是:实验八 函数(一)【目的与要求】1 函数定义的方法。2 函数调用机制与调用方式。3 掌握对被调函数的说明,实参与形参的对应关系,“值传递”的数据传递方式。【内容与过程】1通过单步跟踪,体会函数调用时执行顺序的变化;2通过看观察窗口中变量取值

29、的变化,体会变量生存期的涵义。【实验报告】1 给课本P127的程序例7.2编号如下,单步跟踪这个程序的完整的执行过程,假设执行时的输入是“3 -5”写出整个程序的语句执行顺序。1: /*example7_2.c*/2: include <stdio.h>3: int max(int x,int y)4: 5: int z;6: z=x>y?x:y;7: return(z);8: 9: int main() 10: 11: int max(int x,int y)12: int a,b,c;13: printf(“please enter two integer number:

30、”);14: scanf(“%d%d”,&a,&b);15: c=max(a,b);16: printf(“max is %d”,c);17: return 0;18: 1) 按序号写出程序执行顺序答:9-10-13-14-15-3-4-6-7-15-16-17-182) 对于这个程序的a,b,c,x,y变量,把它们放入观察窗口,当执行到main()函数的内容时,这几个变量情况如何,为什么?答:执行到main()函数时,a,b,c变量有效, x,y变量是undefined symbol。因为a,b,c在main()函数中定义,其作用域就只在main()函数中,所以a,b,c变量

31、有效;x,y变量不在main()函数中定义,main()函数不是x,y变量的作用域,所x,y变量无效。实验九 函数(二)【目的与要求】1体会递归函数的执行顺序2体会变量的作用域和存储类型【内容与过程】1 对课本P186的例7.6的源程序进行编号(共14行),并执行,写出语句执行顺序。答:2-4-7-9-11-12-7-9-11-12-7-9-11-12-7-9-11-12-7-9-10-12-13-12-13-12-13-12-13-4-5-62 给出源程序如下,编辑并执行,把变量x加入观察窗口,单步执行(编号为1-46),回答以下问题:答:1) 第2,3,4行是对函数进行 声明 ;第6,24

32、,32,40行是对函数进行 定义 ;第15-20行是对函数进行 调用 。2) 第5行定义的变量x是一个 全局 变量。3) 单步执行到第9行,这里的x是第_8_行定义的变量x, 值为_5_.4) 单步执行到第12行,这里的x是第_11_行定义的变量x, 值为_7_.5) 单步执行到第14行,这里的x是第_8 _行定义的变量x, 值为_5_.6) 单步执行到第28行,这里的x是第_26_ _行定义的变量x, 值为_25 _.7) 单步执行到第36行,这里的x是第_34 _ _行定义的变量x, 值为_50 _.8) 单步执行到第43行,这里的x是第_5_ _行定义的变量x, 值为_1 _.9) 再次

33、单步执行到第28行,这里的x是第_26_ _行定义的变量x, 值为_25 ,因为_x的存储类型是auto,意味着会被存储在动态存储区,会随函数调用结束而释放空间,因此上次函数调用的x值没有保留下来_10) 单步执行到第36行,这里的x是第_34 _ _行定义的变量x, 值为_51 ,因为_x的存储类型是static,意味着会被存储在静态存储区,不会随函数调用结束而消失,因此上次调用时增一后的x值被保留_11) 再次单步执行到第43行,这里的x是第_5_行定义的变量x, 值为_6 ,因为_ x是全局变量,存储在静态存储区,同时作用域是整个程序,因此x值的变化一直保留_1:#include <stdio.h>2:void a(void);3:void b(void);4:void c(void);5:int x=1;6:int main()7:8: int x=5;9: printf(“x in main is %dn”,x);10:11:int x=7;12:printf(“x in inner scope of main is %dn”,x);13:14:printf(“x in main is %dn”,x);15:a();16:b();17:c();18:a();19:b();20:c();21:printf(“nx in main is %dn”,x

温馨提示

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

评论

0/150

提交评论