程序调试技术在C语言函数教学中的应用

2014-07-02 01:31张秀美赵旭霞
教育教学论坛 2014年11期
关键词:C语言对话框函数

张秀美,赵旭霞

(中国石油大学,北京 102249)

程序调试技术在C语言函数教学中的应用

张秀美,赵旭霞

(中国石油大学,北京 102249)

函数是C语言程序的基本组成单位,在C语言教学中必须使学生很好地掌握函数的概念、定义和调用等内容。本文针对学生在学习函数过程中出现的一系列问题,提出在函数教学过程中使用程序调试技术加强对函数调用过程的演示,从而使学生更好地掌握函数的内容,达到了较好的教学效果。

C语言;函数;调试技术

C语言是一门函数式语言。学习C语言编程必须学好函数的使用。笔者在多年的教学过程中,发现学生在学习函数的过程存在一些问题。虽然这些内容教师在课堂上都十分认真地讲解,但有些学生还是觉得内容很抽象,不容易理解。程序调试技术一般用在程序查错上。在程序调试的过程中,可以看到程序的执行过程,包括函数的调用过程、形参实参的传递,变量的内存地址等内容,这样可以很直观地给学生讲解函数的相关内容,因此笔者在函数的教学中使用了程序调试技术,使教学内容不再抽象,而是具体化,使学生能够更好地掌握相关知识,达到了较好的结果。

程序调试技术在函数教学中的具体使用:

1.通过调试技术直观地查看函数的调用过程。首先设计一个简单的使用函数的实例,jc函数实现计算n的阶乘。在main函数中通过函数调用来求任意一个整数的阶乘。double jc(int n),{double mul=1;//……2,int i;for(i=1;i<=n;i++)mul*=i;return mul;}//……..3;int main(),{int num=5;double r;r=jc(n);//…….1,printf("jiecheng is:%. 0f",jc(num));return 0;}。为了给学生演示函数调用的过程,在标号1语句处设置断点,然后选择go(F5)菜单调试执行该程序,则程序执行到断点处停下,然后进行单步调试,在debug工具栏中选择Step into(F11)项,跟踪进到jc函数内部查看,系统的执行箭头就会从原先1的位置跳转到标号2的位置去,可以通过单击debug工具栏中CallStack项打开CallStack对话框查看调用细节,如图1所示。图中显示了main函数调用了jc函数,实参的值是10。继续单步调试,系统执行jc函数的代码,执行到3处后,系统的执行箭头就会从标号3的位置跳回到标号1的位置去,表示函数调用完成,此时CallStack对话框也发生了变化,如图2所示。这样学生就很清晰地看到了程序运行过程中函数的调用过程,加深了记忆和理解。

图1 jc函数被调用后

图2 jc函数返回后

2.通过程序调试技术了解函数参数传递过程和局部变量的概念。在函数教学中,形参和实参的关系往往是学生容易出错的地方。形参和实参是两个不同的变量,实参的作用就是给形参传值。而函数的形参以及函数内定义的变量都是函数的局部变量,只能在该函数中使用。而在调试中通过查看变量的值可以很清晰地看到这些知识的作用,则比较生动具体。在上例中,程序在断点停下后,选择debug工具栏中的watch项,打开watch对话框,在对话框中输入num和n,如图3所示,此时num的值是5,而由于jc函数还没有被调用,形参n还不存在。然后选择Step into(F11)项,跟踪进到jc函数内部查看,注意观察watch对话框的变化,发现n的值变为5,而num失效了,如图4所示。这说明程序的执行进入到jc函数,形参变量n被创建并从实参获得了值5。而num是main函数的局部变量,在其他函数中如jc函数中是无法访问的,从而失效。

图3 jc函数调用前的实参和形参

图4 jc函数调用后的实参和形参

3.通过调试技术加强对指针做函数参数的内容的理解。在讲解函数的过程中,指针做参数是重点和难点之一。教师在教学过程中强调指针做形参,可以突破局部变量的限制而访问到其他函数的局部变量,这在以后的函数使用中经常用到。但学生觉得很难理解。笔者通过调试技术运行一个实例,查看实际的运行过程,来加深学生对内容的理解。首先设计一个简单的指针做参数的实例。void fun(int * q){*q=10;//…….2}int main(){int n=89;int * p=&n;fun(p);//…….1printf("n=%d\n",n);return 0;},在标号1处设置断点。调试运行该程序,在断点处停下,p是fun函数的实参。此时选择debug工具栏中的watch项,打开watch对话框,分别输入p和&n,如图5所示,它们值相同,都是0x0012ff44,表示n的内存地址。然后选择Step into项跟踪进入fun函数内部执行,由于p和n是main函数的局部变量,在fun函数内部无法访问,它们的值失效。然后,在watch对话框中再输入q和*q,则可以看到如图6的内容。说明形参q从实参p获得了值0x0012ff44,即q也保存了main函数中n的地址,而*q的意思是通过q保存的地址访问该地址所表示的变量。继续单步执行,返回到main函数执行,此时查看n的值,果真变为了10。即在fun函数内部通过指针变量改变了main函数中局部变量的值。

图5 fun函数调用前

图6 fun函数调用后

笔者在实际的函数教学中采用了程序调试技术,让学生直观地看到了程序的运行过程,从而加深了学生对函数调用过程、参数传递、指针做参数等内容的理解。学生反应良好。计算机技术总是在不断的发展,教师还要不断地探索更好的教学方法,使C语言课程的教学质量进一步提高。

[1]谭浩强.C程序设计(第四版)[M].清华大学出版社,2010.7.

[2]王涛伟,杨秀金.C++函数的参数传递和返回值问题的教学研讨[J].吉林大学学报(信息科学版),2005,(23):70-74.

[3]徐晓.一种C语言函数部分的新教学方案 [J].计算机教育,2007,(9):56-58,13.

G642.4

A

1674-9324(2014)11-0085-02

猜你喜欢
C语言对话框函数
二次函数
二次函数
函数备考精讲
基于Visual Studio Code的C语言程序设计实践教学探索
正常恢复虚拟机
基于C语言的计算机软件编程
高职高专院校C语言程序设计教学改革探索
论子函数在C语言数据格式输出中的应用