張秀美,趙旭霞
(中國石油大學(xué),北京 102249)
程序調(diào)試技術(shù)在C語言函數(shù)教學(xué)中的應(yīng)用
張秀美,趙旭霞
(中國石油大學(xué),北京 102249)
函數(shù)是C語言程序的基本組成單位,在C語言教學(xué)中必須使學(xué)生很好地掌握函數(shù)的概念、定義和調(diào)用等內(nèi)容。本文針對學(xué)生在學(xué)習(xí)函數(shù)過程中出現(xiàn)的一系列問題,提出在函數(shù)教學(xué)過程中使用程序調(diào)試技術(shù)加強對函數(shù)調(diào)用過程的演示,從而使學(xué)生更好地掌握函數(shù)的內(nèi)容,達(dá)到了較好的教學(xué)效果。
C語言;函數(shù);調(diào)試技術(shù)
C語言是一門函數(shù)式語言。學(xué)習(xí)C語言編程必須學(xué)好函數(shù)的使用。筆者在多年的教學(xué)過程中,發(fā)現(xiàn)學(xué)生在學(xué)習(xí)函數(shù)的過程存在一些問題。雖然這些內(nèi)容教師在課堂上都十分認(rèn)真地講解,但有些學(xué)生還是覺得內(nèi)容很抽象,不容易理解。程序調(diào)試技術(shù)一般用在程序查錯上。在程序調(diào)試的過程中,可以看到程序的執(zhí)行過程,包括函數(shù)的調(diào)用過程、形參實參的傳遞,變量的內(nèi)存地址等內(nèi)容,這樣可以很直觀地給學(xué)生講解函數(shù)的相關(guān)內(nèi)容,因此筆者在函數(shù)的教學(xué)中使用了程序調(diào)試技術(shù),使教學(xué)內(nèi)容不再抽象,而是具體化,使學(xué)生能夠更好地掌握相關(guān)知識,達(dá)到了較好的結(jié)果。
程序調(diào)試技術(shù)在函數(shù)教學(xué)中的具體使用:
1.通過調(diào)試技術(shù)直觀地查看函數(shù)的調(diào)用過程。首先設(shè)計一個簡單的使用函數(shù)的實例,jc函數(shù)實現(xiàn)計算n的階乘。在main函數(shù)中通過函數(shù)調(diào)用來求任意一個整數(shù)的階乘。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;}。為了給學(xué)生演示函數(shù)調(diào)用的過程,在標(biāo)號1語句處設(shè)置斷點,然后選擇go(F5)菜單調(diào)試執(zhí)行該程序,則程序執(zhí)行到斷點處停下,然后進(jìn)行單步調(diào)試,在debug工具欄中選擇Step into(F11)項,跟蹤進(jìn)到j(luò)c函數(shù)內(nèi)部查看,系統(tǒng)的執(zhí)行箭頭就會從原先1的位置跳轉(zhuǎn)到標(biāo)號2的位置去,可以通過單擊debug工具欄中CallStack項打開CallStack對話框查看調(diào)用細(xì)節(jié),如圖1所示。圖中顯示了main函數(shù)調(diào)用了jc函數(shù),實參的值是10。繼續(xù)單步調(diào)試,系統(tǒng)執(zhí)行jc函數(shù)的代碼,執(zhí)行到3處后,系統(tǒng)的執(zhí)行箭頭就會從標(biāo)號3的位置跳回到標(biāo)號1的位置去,表示函數(shù)調(diào)用完成,此時CallStack對話框也發(fā)生了變化,如圖2所示。這樣學(xué)生就很清晰地看到了程序運行過程中函數(shù)的調(diào)用過程,加深了記憶和理解。
圖1 jc函數(shù)被調(diào)用后
圖2 jc函數(shù)返回后
2.通過程序調(diào)試技術(shù)了解函數(shù)參數(shù)傳遞過程和局部變量的概念。在函數(shù)教學(xué)中,形參和實參的關(guān)系往往是學(xué)生容易出錯的地方。形參和實參是兩個不同的變量,實參的作用就是給形參傳值。而函數(shù)的形參以及函數(shù)內(nèi)定義的變量都是函數(shù)的局部變量,只能在該函數(shù)中使用。而在調(diào)試中通過查看變量的值可以很清晰地看到這些知識的作用,則比較生動具體。在上例中,程序在斷點停下后,選擇debug工具欄中的watch項,打開watch對話框,在對話框中輸入num和n,如圖3所示,此時num的值是5,而由于jc函數(shù)還沒有被調(diào)用,形參n還不存在。然后選擇Step into(F11)項,跟蹤進(jìn)到j(luò)c函數(shù)內(nèi)部查看,注意觀察watch對話框的變化,發(fā)現(xiàn)n的值變?yōu)?,而num失效了,如圖4所示。這說明程序的執(zhí)行進(jìn)入到j(luò)c函數(shù),形參變量n被創(chuàng)建并從實參獲得了值5。而num是main函數(shù)的局部變量,在其他函數(shù)中如jc函數(shù)中是無法訪問的,從而失效。
圖3 jc函數(shù)調(diào)用前的實參和形參
圖4 jc函數(shù)調(diào)用后的實參和形參
3.通過調(diào)試技術(shù)加強對指針做函數(shù)參數(shù)的內(nèi)容的理解。在講解函數(shù)的過程中,指針做參數(shù)是重點和難點之一。教師在教學(xué)過程中強調(diào)指針做形參,可以突破局部變量的限制而訪問到其他函數(shù)的局部變量,這在以后的函數(shù)使用中經(jīng)常用到。但學(xué)生覺得很難理解。筆者通過調(diào)試技術(shù)運行一個實例,查看實際的運行過程,來加深學(xué)生對內(nèi)容的理解。首先設(shè)計一個簡單的指針做參數(shù)的實例。void fun(int * q){*q=10;//…….2}int main(){int n=89;int * p=&n;fun(p);//…….1printf("n=%d\n",n);return 0;},在標(biāo)號1處設(shè)置斷點。調(diào)試運行該程序,在斷點處停下,p是fun函數(shù)的實參。此時選擇debug工具欄中的watch項,打開watch對話框,分別輸入p和&n,如圖5所示,它們值相同,都是0x0012ff44,表示n的內(nèi)存地址。然后選擇Step into項跟蹤進(jìn)入fun函數(shù)內(nèi)部執(zhí)行,由于p和n是main函數(shù)的局部變量,在fun函數(shù)內(nèi)部無法訪問,它們的值失效。然后,在watch對話框中再輸入q和*q,則可以看到如圖6的內(nèi)容。說明形參q從實參p獲得了值0x0012ff44,即q也保存了main函數(shù)中n的地址,而*q的意思是通過q保存的地址訪問該地址所表示的變量。繼續(xù)單步執(zhí)行,返回到main函數(shù)執(zhí)行,此時查看n的值,果真變?yōu)榱?0。即在fun函數(shù)內(nèi)部通過指針變量改變了main函數(shù)中局部變量的值。
圖5 fun函數(shù)調(diào)用前
圖6 fun函數(shù)調(diào)用后
筆者在實際的函數(shù)教學(xué)中采用了程序調(diào)試技術(shù),讓學(xué)生直觀地看到了程序的運行過程,從而加深了學(xué)生對函數(shù)調(diào)用過程、參數(shù)傳遞、指針做參數(shù)等內(nèi)容的理解。學(xué)生反應(yīng)良好。計算機技術(shù)總是在不斷的發(fā)展,教師還要不斷地探索更好的教學(xué)方法,使C語言課程的教學(xué)質(zhì)量進(jìn)一步提高。
[1]譚浩強.C程序設(shè)計(第四版)[M].清華大學(xué)出版社,2010.7.
[2]王濤偉,楊秀金.C++函數(shù)的參數(shù)傳遞和返回值問題的教學(xué)研討[J].吉林大學(xué)學(xué)報(信息科學(xué)版),2005,(23):70-74.
[3]徐曉.一種C語言函數(shù)部分的新教學(xué)方案 [J].計算機教育,2007,(9):56-58,13.
G642.4
A
1674-9324(2014)11-0085-02