馬文霞
(鶴崗師范高等專科學校,黑龍江 鶴崗 154100)
反向教學法是相對于傳統的順式教學法而言的一種教學方法,它改變了傳統教學中從已知原因去探尋結果的過程,而是根據已知結果尋求結果產生的原因,這種方法有助于學生加深對所學知識的理解和掌握。反向教學法也可以理解為是“反其道而行之”的教學方法,簡單說是將人們早已習慣的沿著事物發展的正方向去思考問題并尋求解決方法這一順序反過來。其實,對于某些問題,尤其是一些特殊問題,從結論往回推,倒過來思考,從求解回到已知條件,反過去想或許會使問題簡單化。
《C語言》是一種用于計算機程序設計的編程語言,在高校教學中常被用作程序設計的語言基礎課。《C語言》本身是一門理論性很強,又依賴于大量上機實踐的語言。學生在學習中,普遍反映知識不易掌握理解,甚至于無法獨立編程、運用知識解決實際問題。
傳統的課堂教學中,教師多是依照教材編寫順序,先講解變量定義,再講變量定義示例,最后是程序舉例講解變量在程序中如何應用。如此的教學順序,對于比較簡單的內容,學生能理解掌握,但對于較復雜的部分,如指針,就不能收到良好的教學效果。
如果我們打破常規的教學順序,反其道而行之,結果又會如何呢?
接下來,談談本人在C語言課程教學中應用反向教學法的一些經驗體會。
1在講解變量定義語法格式中運用反向教學法
C語言中規定,變量在使用之前必須先定義,即給出數據類型,讓編譯系統根據數據類型為其分配內存空間。
傳統的教學過程中,是先講解指針變量定義的一般形式,然后依據定義格式,再給出一些指針變量定義的示例。本人認為此種教學順序不能很有效地讓學生深刻理解指針變量定義及其使用方法。本人在課堂教學中曾采用如下過程講解二級指針。
首先,給出變量應用實例示意圖:的,即基類型為int,因此完整的p變量的定義形式為:int*p;
變量q指向變量p,可知q是指針變量,得出部分定義形式:*q
由于指針變量q所指向的變量p的類型是int*,因此完整的q變量定義形式為:int**q;
C語言中規定,指針變量在使用之前不僅需要定義說明,而且必須賦予具體的值,未經賦值的指針變量不能使用,否則可能會造成系統混亂,甚至死機。
由指針p指向變量a知,指針p的值是a的地址&a,可由如下賦值語句實現:p=&a;
同理,由指針q指向變量p可知,q的值是p的地址&p,可由如下賦值語句實現:q=&p;
由上綜述,得出變量a、p、q的定義及賦值如下:
int a;
int*p;
int**q;
p=&a;
q=&p;
由int**q;可推出二級指針變量定義的一般形式是:
類型標識符 **指針變量名;
反向教學法雖然違背了人們在潛移默化中已經形成的研究問題的順序,也就是所謂的正序,但是因為這一特點,可以將復雜問題簡單化,使得許多依靠順式不能解決或難以解決的問題可以輕松的解決,并可以加深對問題的進一步認識,能夠充分提高學生主動學習的興趣。
2在講解程序填空題時運用反向教學法
根據程序運行結果完成程序填空題。學生在做此類題時往往一頭霧水,不知該從何處下手,此時巧妙運用反向教學法可能會收到意想不到的效果。例如,在C語言教材中有一道這樣的程序填空題,要求實現打印出如下所示三角形,完成填空。
}

a、p、q均是變量名,且已分配空間。由示意圖的指向可看出:變量q指向變量p,變量p指向變量a,已知a存儲單元中存放整數值10(嚴格的說是10的二進制形式),可得出a是整型變量,定義形式為:int*a;
變量p是指向變量a的,指向關系是通過地址來體現的,可以說,某變量的地址“指向”該變量單元。由此可知,變量p存儲單元中存放的是變量a的地址,即變量p是存放地址的變量也就是指針變量,得出變量p的部分定義形式:*p
由于指針變量p所指向的變量a是整型

2.1 學情分析
此程序填空題,是由方風波主編、地質出版社出版的《C語言程序設計》教材中,第三章結構化程序設計的課后習題(本人稍加修改)。學生此時已經學過結構化程序設計的三種基本結構:順序結構、選擇結構、循環結構。對構成循環結構的while語句、do-while語句、for語句的語法格式、執行過程都已了解并掌握,并能分析出較簡單的循環結構的程序的執行結果。但是對程序填空題來說,某些程度上也考驗學生的編程能力。學生此時還沒具有獨立編程的能力,因此做此題時困難很大。
2.2 運用反向教學法分析完成
從打印輸出的結果要求可以很明顯的看出,結果呈9行顯示,每行顯示的數據值及數據個數與行號相等。那要如何實現呢?程序中使用了雙重嵌套的for循環語句,嵌套循環執行過程的特點是外層循環執行一次,內層循環執行一輪。如果能用嵌套循環的外層循環、內層循環分別代表行號及控制每行中可以輸出數據個數,而內層循環的循環體語句用來實現打印輸出數據及換行,問題就可以引刃而解了。
也就是說,用外層循環執行9次表示9行,i是循環控制變量,初始值為1,循環執行9次,可得出滿足循環控制條件的i的最大值可取得9。外層循環的循環體由for語句和“printf(“ ’);”語句組成,”printf(“ ’);”語句可實現換行,即在輸出相應個數數據后換行;換言之,外層循環的循環體中的for語句可實現打印輸出若干數據。數據個數由循環次數決定,由于每行輸出數據個數不同,也就是決定輸出數據個數的for語句的循環次數不同,但控制數據輸出個數的循環次數恰好與其所在行的行號相同,作為循環控制變量的j的初始值為1,每次循環執行后循環控制變量都加1,由此可得出j的最大取值與控制行號的i變量的值相等,但循環控制表達式中使用的運算符是“<”,所以第二個空中應填寫“i+1”;輸出函數用來輸出數據,數據值與其所在行的行號相同,因此完整的輸出語句就是“printf(“%d”,i);”。
在完成此程序填空題的過程中,我們巧妙地運用了反向教學法,從結果出發,層層深入,逆推出需要達到的目標,當用正向思考方式無從下手時,反向思考有時可以起到意想不到的妙用。
在課堂教學中適當的應用反向教學法,有助于學生加深對所學知識的理解和掌握,可以提高教學效果;但不能一味的全盤否定順式教學法而全部應用反向教學法。它只是眾多教學方法中的一種,它并不是十全十美的。選擇何種教學方法,應該考慮知識內容的特點、學生的知識基礎、課堂教學環境等等。選擇恰當的一種或幾種教學方法,相互之間相輔相成,不但能夠活躍課堂氣氛、提高學生學習興趣,還能夠加深學生對知識的理解,更重要的是能夠幫助教師順利圓滿地完成教學任務。
[1]方風波.C語言程序設計[M].地質出版社.北京.2009
[2]逆向思維法.來源:百度百科
[3]反向教學法在高中生物教學中的應用初探.來源:全國中小學教師繼續教育網.