李敏
摘要:隨著信息技術的進步,計算機學科與其他學科的交叉發成為新的趨勢。在程序設計類課程教學中,培養計算思維的能力與講授專業知識同等重要。本文闡述了計算思維的重要性,并以C程序設計課程為例,探討了以培養計算思維能力為主的教學改革方法與思路。
關鍵詞:C程序;教學改革
中圖分類號:TP311 文獻標識碼:A
文章編號:1009-3044(2019)12-0111-02
1 計算機思維的重要性
計算思維是運用計算機科學的基礎概念進行問題求解、系統設計、以及人類行為理解等涵蓋計算機科學之廣度的一系列思維活動。[1]計算機技術作為21世紀發展最快的技術,許多領域與其結合都得到了重大的突破,未來的計算機將會成為人們最常用的工具之一。無論是計算機專業的畢業生還是非計算機專業的畢業生,將來都要面臨使用計算機處理實際問題的情況。因此,在程序設計類課程的教學中,激發學生學習計算機語言的興趣,培養學生對計算機語言的認知能力及利用計算機語言處理實際問題的能力是非常重要的。
目前,計算思維的培養在國內外都受到了普遍重視。在美國,不僅有卡內基梅隆大學的專題討論,更有眾多科研組織的參與。在英國的愛丁堡大學,人們在一連串的研討會上探討與計算思維有關的主題。研討會上所涉及的學科已延伸到哲學、物理、生物、醫學、建筑、教育等各個不同的領域。[2]在我國,部分中小學及高校都開展了以培養計算思維為核心的教學改革,希冀通過計算機課程的學習,使計算思維成為每個人的基本技能。
2 融入計算思維的C程序設計課程教學改革
傳統C程序設計教學通常按照C程序設計經典教材的順序講授知識點,學生往往容易陷入語法知識的細枝末節而忽略了程序設計的本質。而且傳統講授式方法難以調動學生的學習積極性,容易導致理論與實踐脫節,學生的實踐能力不足。特別對于非計算機專業的學生而言,重點應是要培養他們分析問題、解決問題的思維方式和創新能力。
(1)改革傳統教學模式,以培養計算思維為主線設計教學活動
由于C語言偏向計算機底層的抽象特性,學生很難建立起從自然語言到符合計算思維的C語言程序之間的轉換。因此,C程序設計教學中計算思維的訓練成為教學中的難點。[3]基于計算思維提煉課程知識點,將計算思維方法和現代教學模式相結合,設計課堂教學內容和實踐教學環節,重點突出學生應用能力和創新能力的培養。
(2)設計出基于計算思維的C程序設計課程教學案例
以學生為主體、教師為主導,突破傳統教學以知識為本位的培養模式,從培養計算思維角度編寫教學案例。利用教學案例,鼓勵學生從多方面思考問題,探尋問題解決方法,讓學生從被動接受知識的“觀眾”變為主動參與者。[4]
(3)建立以培養計算思維為主的評價機制
探索在C程序設計課程教學中計算思維培養的教學評價與學習評價,建立激勵學生學習、促進學生“學會學習”和全面發展的評價機制。
3 以培養計算思維為主的教學方式
在對河套學院2014級和2015級數學與應用數學班學生的C程序設計課程問卷調查中顯示:58.73%的同學表示“課程上能聽懂,但讓自己編程就不會了”,50.79%的同學表示“語法會了,但遇到編程題,不知道該用什么算法”,導致這一現象產生的根本原因還是計算思維的缺失。有的學生在面對問題時不能找到有效的解題思路,有的學生找到了解題思路卻又不知道如何使用C語言來實現,因此在程序設計課程教學中應該注重培養學生應用計算思維的解題能力。
3.1 鼓勵學生創新
在教學中教師不能“講”得太多,至少不能直接把解題思路和過程都提示給學生,要讓學生學會獨立思考,鼓勵學生使用不同的、新穎的方法來解決問題。集體的智慧是偉大的,要引導學生分享他們的思路,這樣會有更多的學生得到啟發。例如在求100以內能被13整除的最大的數時,學生的想法百花齊放,下面以最典型的三種解法為例。
解法一:for (i=1;i<=100;i++)
if (i%13==0)
max=i;
解法一利用最基本的定義,從1-100中遍歷所有的數找到能被13整除的數賦值給max,當循環結束后,max中存放的就是100以內能被13整除的最大的數。顯然這樣解法體現了我們使用循環程序設計的初衷。
解法二:for (i=13;i<=100;i+=13)
max=i;
在解法二中,學生分析后認為13是一個質數,所以能被13整除的數應是13的倍數,這樣初始值可以從13開始,每次讓i的值以13遞增,于是取到的每一個i就是能被13整除的數,當循環結束后,max中存放的就是100以內能被13整除的最大的數。相比第一種算法,第二種的效率更高一點,體現了在循環次數上的創新。
解法三:i=100/13;
max=i*13;
解法三最讓人驚奇,雖然該同學沒有在程序中使用循環,但是通過對C語言程序設計中,除號“/”兩端的操作數都是整數時結果取整的理解,準確地求得了結果。我想解法三應該是三種解法中效率最高的一種,也是更應該得到表揚的。從解題的方法可以看出學生沒有局限于程序設計的一般思路,在解題時充分考慮了之前所學習的語法知識,再結合自己的思考,得出了一種創新的解法,這正是學習程序設計語言要倡導的計算思維。我們有時往往過于強調程序設計的語法和語句,而忽略了實際問題的不同解決方法。計算思維應該是利用計算機幫助我們來解決實際問題,如果這個問題可以由簡單的辦法解決,我們為什么要讓問題變得更復雜呢?在程序設計的教材中為了說明一個語法而給出一個示例,但這樣的程序有時只是為了說明一種結構,并不是代表這種問題應該這樣處理。學生在學習程序設計語言時應該在掌握語法的基礎上打破常規思維,靈活運用所學知識,培養分析問題、解決問題的能力和創新能力。
3.2善于利用設疑
授人以魚,不如授人以漁。授人以漁,不如授人以欲。在教學中如果學生不愿意聽,那即使教師講得很好,學生也不一定能掌握。但如果把學生的興趣調動起來,讓學生主動地去尋找答案,可能會收到意想不到的效果。例如,在講解完順序結構和選擇結構時,讓學生開發簡單的計算器程序,可選擇實現加、減、乘、除四種運算中一種。學生通過輸入兩個數,和想選擇的運算類型,用switch語句實現了分支選擇。
這時學生會發現此時的程序不管選擇哪一種運算,只能運行一次,如果想再次執行必須要重新運行程序。如何才能讓程序可以依據選擇執行多次運算呢?帶著這個疑問,為學生引入循環程序設計的知識,啟發學生思考簡單的計算器程序能否根據用戶的選擇而確定。如果用戶不選擇退出,程序就可以一直計算下去。
興趣是最好的老師,再比如說“猜數游戲”。即由計算機隨機生成一個1到100之間的數請人猜,每人有十次機會猜測,如果猜對了,則計算機給出提示:“正確!”并結束游戲,否則提示用戶所猜的數是高還是低,如果十次都沒有猜對也結束游戲。對于這個問題教師可以提出三個疑問,通過設疑來充分調動學生的學習興趣。
第一個問題:如何生成隨機數num?
我們都知道在C語言中,使用rand()函數會生成一個偽隨機數,但如果沒有一個可變的量做種子,生成的數是不變的。那么如果找到一個不斷變化的量呢?經過思考,不斷變化的時間就成了我們最好的選擇。
處理方法:首先用當前和系統時間生成隨機數的種子srand(time(0)),再利用這個種子生成隨機數num,num = rand(),這樣得到的num就會因為運行時間不一樣,而得到不同的隨機數。
第二個問題:如何把隨機數限制在1-100之間?
rand函數的原型為int rand(void),它會返回一個[0,RAND_MAX]間的隨機整數。利用所學的知識如何把一個隨機整數限制在100以內,可以引導學生聯想到水仙花數或類似習題,模運算符自然就被委以重任。
處理方法:利用模運算符取余的特性,使用num=num%100,會把隨機數num限制在0-99之間,再把num加1就會得到一個1-100的整數。于是,最終的語句為num=num%100+1。
第三個問題:如何選擇程序結構?
首先,需要分支結構來實現比較運算。當用戶輸入猜測的數后,比較用戶的猜測與隨機數是否相等,如果相等,則提示“正確”,并結束游戲;如果不等,則比較猜測隨機數的大小,并提示用戶結果。其次,需要循環結構實現十次猜測的機會。但是在控制循環的條件時,應該分為兩種情況:一種是用戶猜測十次都沒猜對,結束循環;另一種是用戶在十次之內就猜對了,這時也要結束循環。
在猜數游戲中,涉及的主要操作有:生成隨機數;限制隨機數在一個指定的范圍;判斷猜測與隨機數是否一致;給10次猜測機會,猜測正確時退出。對應的知識點分別為rand()函數、模運算、選擇結構、循環結構和break。通過這個案例,讓學生學會綜合運用所學的知識處理實際問題,在其中培養了學生的計算思維。
作為提高部分,可以讓學生思考如何利用隨機數生成小學數學100以內加、減法測試程序,用戶能夠輸入測試的算式數目,并分別給出算式,要求輸入答案,并能判斷結果是否正確,最后給出得分率。依據題目讓學生充分地發揮自己的想象,鼓勵程序的創新,讓學生提高綜合實踐能力。
4 總結
基于計算思維的C語言課程教學改革主要探究基于計算思維的C程序設計課程教學模式,以培養計算思維為主線,結合先進的教學理念,先確定教學重點,再針對重點教學內容設計可行的教學活動,提出具體的課堂教學內容設計方案,并應用于C程序設計課程的教學活動。最終通過評價和反饋機制,不斷地完善C程序設計課程教學設計和教學案例。旨在通過C程序設計課程的改革激發學生學習興趣,提高學習效率,培養學生良好的計算思維能力。
參考文獻:
[1] Jeannette M. Wing.Computational thinking[J].Communications of the ACM,2006(3):33-35.
[2] 董榮勝,古天龍.計算思維與計算機方法論[J].計算機科學,2009,36(01):1-4+42.
[3] 鄭冰,寧鵬飛.基于JiTT模式的C語言教學中計算思維的培養[J].計算機教育,2018(10):101-104.
[4] 解紅,劉建.基于計算思維的大學計算機課程改革與實踐研究[J].福建電腦,2018,34(10):60+119.
【通聯編輯:朱寶貴】