实验1-3 C程序的执行顺序

 实验内容:

1、  用VC6.0调试执行一个C程序

2、  观察一个C函数被调用时的执行情况

实验目的及要求:

1、  掌握用VC6.0调试执行一个C程序的方法

2、  初步理解一个C函数的执行过程

实验重点:

1、  掌握“断点”、“调试执行”、“单步执行”等概念

2、  分析函数的执行过程

3、  在程序调试执行时输入数据,观察输出

实验难点:

1、  区分调试执行时快捷键F10和F11的异同

2、  理解被调用函数的执行过程

实验步骤:

1、打开VC6.0,创建一个名为1_4的工程,在编辑器窗口输入如下程序。

程序1-4:有两个函数的C程序

程序1-4有两个函数,sum函数的定义从第2行至第7行,main函数的定义从第8行至第15行。C程序的执行过程就是执行main函数的过程,下面利用VC6.0的调试功能查看一下程序1-4的执行过程。

2、把光标定位在第11行,单击编译工具栏上的手型图标(或按下快捷键F9),插入断点,如图1所示。

图1  程序1-4中插入断点

3、选择【组建(Build)】|【开始调试(Debug)】|【Go】命令(或按下快捷键F5),进入调试模式,如图2所示。在调试模式,程序执行到断点位置的语句时会自动停下,此时可以观察程序当前的状态如变量的值。

图2  用调试模式执行程序1-4

在调试模式下可以利用调试命令控制程序的执行,如此时可单步执行程序,即每次只执行一条语句,执行完一条语句后程序自动暂停执行。单步执行程序可以方便地查看程序执行的细节。

4、单击调试工具栏上的是单步执行命令(或按下快捷键F11),执行完第11行语句后程序再次暂停,如图3所示。

图3 单步执行

5、再次按下快捷键F11,并观察程序状态的变化。当执行到第13条语句时,sum函数被调用,程序开始进入并执行sum函数,如图4所示。

图4 开始执行sum函数

6、继续按下快捷键F11,执行完被调用的sum函数并返回到main函数后,如图5所示。

 

图5 执行完被调用函数后返回到调用函数

接下来要执行的第14条语句是printf函数调用,如果按下快捷键F11,那么程序将用调试模式执行printf函数。没有必要调试执行库函数,因此,此时按下快捷键F10 。

F10与F11的作用稍有不同。如果当前的执行语句中有函数调用,则用F10时不会单步执行(即调试执行)被调用函数,而是正常执行被调用函数(即连续执行被调用函数中的全部语句)。如果当前的执行语句中没有函数调用,则F10与F11作用相同。

通过调试执行可知,程序1-4的执行顺序是:11、12、13、3、5、6、7、13、14、15,其中在第3、7、15行处暂停执行程序的目的是方便查看当时的程序状态。

思考:

1)使用函数(调用函数)究竟意味着什么?

//执行了函数体中的代码

2)如何与被调用函数传递数据?(怎样向函数中传入数据,函数怎样传出数据,怎样接收从函数传出的数据?)

//可以把函数的返回值看作是被调用函数的最终结果。printf("%d", sum(3,2)*6);的输出是?

3)使用函数时应注意什么?

//区分函数有无返回值。有返回值时……无返回值时……

//printf函数有返回值吗?

//实验1-2探究2中的例子里它的返回值是多少?(最终的输出是“叠加”的效果)

7、分析实验1-1中思考:输入两个小数时(比如输入2.3  3.2时),程序的运行结果如图所示。

1)在程序中的第5行设置断点。如图6所示。

图6 在程序设置断点

2)调试执行程序。如图7所示。

图7 调试执行程序

3)无需单步执行库函数printf,因此使用F10调试执行程序。如图8所示。

图8 无需单步执行库函数printf

注意观察VC6.0的变化和程序运行窗口的变化。

4)无需单步执行库函数scanf,因此使用F10调试执行程序。如图9所示。

图9 无需单步执行库函数scanf

5)在程序运行窗口输入2.3 3.2↙,然后转回调试窗口。如图10所示。

图10 观察分析程序的运行情况

分析观察可知程序出错的原因了。格式字符串%d只能用于整数的输入,当用户输入小数时(如2.3),scanf函数会将其整数部分做为输入值,但此后该函数将不再处理用户后面的输入数据,因此程序中变量b没有获得新值。这里需注意,当定义一个变量时,应该认为其值为“随机数”。不过为了便于识别没有为变量赋值的情况,VC6.0会自动为其赋一个特殊值,如整型变量赋值为-858993460。

现在就知道为何程序有如下输出了:

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值