260637778.doc(匡珍春制作)
实验六 函数与编译预处理(4学时)
实验前必须做的操作——新建文件夹: .................
首先在各自对应的计算机ncre(k:)盘上对应座位号文件夹内新建一个文件夹,文件夹的名字为“班级+学号的后两位+姓名”,如座位号为K02,航海1111班、学号后两位是02的、姓名为“张强”的同学,则其对应的文件夹名字是:航海111102张强。然后在刚才建好的文件夹里面再建立一个文件夹,文件夹为“实验6”。
【实验目的】
1、 掌握自定义函数的一般结构及定义函数的方法;
2、 掌握函数的形式参数、实际参数、函数返回值等重要概念; 3、 掌握函数实参与形参间的“值传递”方式; 4、 掌握函数声明、函数调用的一般方法;
5、 掌握模块化程序设计思想,会采用C语言中函数进行模块化程序设计; 6、 掌握全局变量和局部变量作用域以及全局变量和局部变量的使用方法; 7、 掌握函数的嵌套调用的程序的执行过程,会使用嵌套调用设计程序; 8、 掌握使用函数递归调用的程序的执行过程,会使用递归程序解决实际问题; 9、 理解宏的概念,掌握宏定义。了解文件包含的概念,掌握其用法; 10、学习对多文件程序的编译和运行;
11、熟练掌握VC程序调试方法,包括断点的设置和取消,以及单步执行跟踪进入函数和跳出函数的方法。
【实验内容】
[实验任务一]:断点的设置和取消、单步执行跟踪进入函数和跳出函数方法练习 程序跟踪调试实例6-1:调试示例(请仔细按以下各步骤进行操作):
从键盘输入一个正整数n,计算 n! 的值,要求定义和调用函数fact(n),计算n!。
源程序(有错误的程序)
第 1 页 共 11 页
260637778.doc(匡珍春制作)
运行结果(改正错误后程序的运行结果) Input n: 10 10! = 3628800
说明:实验五中我们使用了程序运行到光标位置调试程序,本次实验需要掌握设置断点,以及单步调试进入函数和跳出函数的方法。
【操作步骤】:
(1)输入源程序,并以error6_1.c文件名最终保存在实验6文件夹里,编译程序,出现警告信息:
双击该警告信息,箭头指向“f=fact(n);”这一行,警告信息指出函数“fact”没有定义,而函数“fact”实际上已经定义了,这是为什么呢?因为函数在调用之前,必须先声明。在主调函数的变量定义前面加上函数声明“long fact(int m);”后,重新编译,连接,都正确。
注意:
如果将error6_1.c文件改为error6_1.cpp (即改为C++源程序文件),编译程序时,出现的将是以下错误信息(而不是警告信息):
可见VC++系统对.c文件和.cpp文件在进行编译时,对语法的要求不完全一样,这一点希望同学们注意。此处错误修改的方法与上面相同。
(2)调试开始,设置2个断点(断点的作用:程序执行到断点处暂停,使用户可以观察当前的变量或其它表达式的值,然后继续运行),先把光标定位到要设置断点的位置,然后单击编译工具条上的
(Inert
/ Remove Breakpoint (F9)),断点就设置好了(如图6.1所示)。如果要取消断点,只要把光标放到要取消的断点处,单击
,这个断点就取消了。
第 2 页 共 11 页
260637778.doc(匡珍春制作)
图6.1 设置断点
(3)单击编译工具条
(go (F5)),运行程序,用户输入n的值10后,程序运行到第一个断点位置
暂停(如图6.2所示)。
图6.2 程序运行到断点位置
(4))单击
(Step Into (F11))进入函数fact()调试,箭头表示程序已经执行到函数fact()内(如图
6.3所示)。
第 3 页 共 11 页
260637778.doc(匡珍春制作)
(5)使用,在函数fact()中设置程序的第3个断点(如图6.3所示)。
图6.3 进入函数fact( )调试,并在运行时设置断点
(6)单击(go (F5)),程序直接运行到断点处,暂停(如图6.4所示),在变量窗口观察到product
的值是-2903040,不正确,因为变量product未赋初值,加上语句product=1后,按以上的步骤,重新编
译、连接,运行到第3个断点处,变量窗口中product的值正确。
图6.4 程序从函数fact()开始直接运行到第3个断点的位置(return前面)
第 4 页 共 11 页
260637778.doc(匡珍春制作)
(7)现在需要从被调函数返回到主调函数,单击调试工具条中的(Step Out (Shift+F11)),程序
返回主调函数继续执行(如图6.5所示)。
图6.5 程序回到了主调函数
(8)继续单击(go (F5)),程序执行到最后(如图6.6所示),在运行窗口输出10!=3628800,与题目要求的结果一致。
图6.6 程序执行到最后
(9)单击终止调试图标
(Stop Debugging(Shaft+F5)),程序调试结束。
第 5 页 共 11 页