重慶工商職業學院 龔 衛
《C語言程序設計》課程是國內高職計算機軟件技術專業的必修課,該門課程是程序設計的入門學科,是學生學習面向對象程序設計語言的基礎。在多年的C語言程序設計的教學中,筆者發現,教師多采取傳統教學模式,在教學中占主導,學生被動吸收,這種教學方式,學生目的不明確,學習主動性不高,對下一步軟件設計的深入學習產生極大的影響。
高職教育,重在培養“有一定理論基礎、善于動手”的應用型人才。在教學中,重點突出學生主體地位,教師應引導學生主動學習,主動思考。在《C語言程序設計》教學中采用“任務驅動教學法”,緊緊圍繞教學目標,聯系實際,設計學生感興趣的任務,在任務驅動下開展教學,引導學生主動思考,逐步深入,分析問題,解決問題,促使學生積累程序設計的經驗,產生對后續課程學習的興趣。
“任務驅動教學法”在教學中主要包括“任務描述”、“任務咨詢”、“任務實施”、“任務拓展”四個過程。“任務描述”是提出任務,分析任務。“任務咨詢”是給出基本理論,從易到難分解任務。“任務實施”是解決任務。“任務拓展”是任務升級和拓展。本文以“雙重循環”教學為例,闡述“任務驅動教學法”在教學過程中的具體應用。
“雙重循環”的教學,建立在學生熟練掌握了“順序結構”、“選擇結構”、“基本循環結構”內容的基礎上,而“雙重循環”又是學習后續內容二維數組的基礎。教學中,任務的選擇相當重要,任務既要貫穿整個教學設計過程,又要考慮循序漸進的學習原則。筆者在教學中,以如圖1所示圖形作為“雙重循環”學習的任務。該任務具有系統性,可以由易到難的安排教學。
任務提出后,學生結合當前所學習的內容,進行分析。可以利用順序結構,通過多條printf(“******* ”)語句來解決問題。也可以對其中一行進行分析,根據星號的個數,用for循環語句for(i=1;i<=n;i++)printf(“*”);printf(“ ”);來解決。如果有N行,那么就需要N條類似的語句,顯然上面的兩種方法都不是解決這個問題的最好方法。這樣自然的引入“雙重循環”的學習。
解決任務,需要了解掌握一定的理論知識。這是任務咨詢階段首先要做的事情。讓學生了解“雙重循環”的一般結構:for(循環初值;循環終值;步長值){for(循環初值;循環終值;步長值) {內循環語句;} 外循環語句;},以及“雙重循環”對于二維圖形的輸出控制方式,外循環一般控制行,內循環控制每行具體輸出等相關知識點。

圖1

圖2

圖3

圖4
然后從易到難,對任務進行分解。先來討論,如何輸出如圖2所示圖形。該圖形是一個長方形,每行的輸出使由相同個數的星號字符和回車換行符兩部分組成。外循環語句控制行for(i=1;i<=4;i++),內循環語句控制每行具體輸出{for(j=1;j<=4;j++)printf(“*”);printf(“ ”);},這里特別提醒學生注意內循環星號和回車換行是兩個同級的輸出,需要用{}把上面語句括起來。完成該案例后,提出思考,外循環變量和內循環變量是否可以同名。行數和列數如果不確定,需要從鍵盤獲得取值,應該如何修改程序。
在解決了圖2的基礎上,進一步討論如何輸出圖3(1)所示圖形。該圖形是一個直角三角形,每行的輸出由星號字符和回車換行符兩部分組成,而該案例與圖2所示案例的不同在于,星號的個數隨著行數的增加有規律的遞增,解決問題還需要尋找內循環每行循環次數(星號個數)和外循環行號變量的關系。不難看出,第一行,輸出一個星號,內循環循環一次;第二行,輸出兩個星號,內循環循環二次;第N行,輸出N個星號,內循環循環N次。于是得到內循環語句為{for(j=1;j<=i;i++)printf(“*”);printf(“ ”);}。完成該案例后,再一次提出思考,如果圖形上下翻轉為如圖3(2)所示圖形,又應該怎樣考慮內循環每行循環次數(星號個數)和外循環行號變量的關系。
進一步深入,提出輸出如圖4所示圖形的案例。該圖形仍然是一個三角形,但每行的輸出有了一定的變化,它是由空格字符、星號、回車換行符三部分組成。空格字符、星號字符個數隨著行數的變化而變化,變化規律不同。由于每行先輸出的是空格字符,先考慮空格字符和行數的關系。第一行,輸出三個空格字符;第二行,輸出二個空格字符;第三行,輸出一個空格字符;第四行,不輸出空格。于是得到行號和列號的關系j<=4-i。星號的輸出與圖3(1)的規律相同。所以內循環語句為{for(j=1;j<=4-i;j++) printf(“”); for(k=1;k<=i;i++) printf(“*”);printf(“ ”);}。完成該案例后,提出思考,如何解決如圖4(2)所示圖形。學生很容易發現星號個數和外循環行號的關系,k<=2*i-1。
通過以上案例的分析和講解,由易到難,學生掌握了“雙重循環”的基本設計思想。最后把如圖1所示的任務提交給學生,要求在上機課程中完成。學生有了“雙重循環”處理二維圖形的經驗。就會在教師的引導下主動分析圖形,任務是輸出菱形,而菱形的變化規律有遞增,又有遞減。這時需要把圖形進行拆分,拆分為有單一遞增或遞減的規律兩個部分。然后分別對這兩個部分進行編程。任務實施的過程是學生復習鞏固的過程,也是檢驗學生學習效果的過程。
在學生完成了菱形圖形輸出的案例后,還可以拓展學生的知識。給出字母或者數字金字塔,讓學生課余組成興趣小組,共同協作思考完成。在掌握了“雙重循環”的特點,理解了“雙重循環”執行過程,學會了尋找圖形規律的基礎上,學生相互討論,相互促進,對下一步的學習有極大的幫助。
“任務驅動教學法”在筆者所在的高職院校《C語言程序設計》的課堂教學中得到了應用,取得了不錯的效果。在高職教學中,激發學生學習興趣,引導學生主動學習,領會程序設計的精髓,是每一個教師需要面對的問題。教師只有不斷學習新思想,進行教學方式的新探索,才可能真正幫助學生學有所獲,學有所得。
[1]廖劍華.任務驅動型案例教學在“C語言”課程教學中的實施[J].教育與職業,2011(5).
[2]趙穎.任務驅動法在高職計算機教學中的運用[J].黑龍江高教研究,2009(8).
[3]朱云霞.“任務驅動”教學法在計算機教學中的運用[J].中國電化教育,2002(5).
[4]黃雄波.高職C語言課程中循環結構的教學設計與實踐[J].計算機時代,2012(5).
[5]譚浩強.C語言程序設計[M].北京:清華大學出版社,2002.