李秀香
摘要
根據(jù)C語言程序設計課的特點,引入計算思維,圍繞計算思維的本質特征,結合基于計算思維的教學內容組織,并舉例說明計算思維在C語言程序設計中的具體應用。
【關鍵詞】C語言程序設計 計算思維 抽象自動化
1 C語言程序設計課在高校存在的問題及畢業(yè)生的就業(yè)問題
C語言程序設計是許多高校理工科專業(yè)的一門重要專業(yè)課,為后期其它專業(yè)課的開設奠定了基礎。C語言這門課語法多,隨著算法的難度增加,大多數(shù)學生只停留在讀懂給定程序,而不能獨立設計算法和編寫程序。為了提高學生理解C語言的語法,有時在上課時使用案例教學法,直接把新的語法和知識點引入案例,這樣能給學生建立直觀的感性認識,但容易導致學生產生“只知其一,不知其二”的學習后果,不利于學生把知識學活、用活,更不利于學生對后續(xù)知識的掌握。
近年來,各大高校計算機專業(yè)畢業(yè)的學生就業(yè)比較困難,而從社會人才需求調查報告了解到:各行業(yè)對計算機類人才缺口很大(如大數(shù)據(jù)分析、AI人工智能)。許多單位招不到滿足社會需求的能針對某個領域的畢業(yè)生,而另一方面很多畢業(yè)生又不到適合自己的工作。出現(xiàn)這種矛盾的根本原因不是大學畢業(yè)生人數(shù)多或質量差,而是高校沒有很好完成大學畢業(yè)生與社會的接軌。大學的教育要擺脫以傳授知識為主,應主要培養(yǎng)計算機專業(yè)學生的主動自學能力、抽象思維能力、理解應用能力和操作能力。
2 計算思維
學習C語言程序設計課主要是要求學生掌握問題求解的算法,且用程序實現(xiàn)算法,這正是計算思維能解決的。近些年,各大高校圍繞計算思維開展教學,將計算思維應用于程序設計類課程教學中。
2006年3月,美國卡內基·梅隆計算機科學系主任周以真教授對計算思維給出了明確的定義,她認為:計算思維是運用計算機科學的基礎概念進行問題求解、系統(tǒng)設計、以及人類行為理解等涵蓋計算機科學之廣度的一系列思維活動。中國科學院院士、南京郵電大學教授陳國良解釋說,計算思維如同所有人都具備“讀、寫、算”(簡稱3R)能力一樣,是每個人應具有的基本技能,它已經成為人們最基礎、最普遍、最適用的技能,到2050以前,讓地球上每一位公民應具備“計算思維”的能力。
計算思維的本質是抽象和自動化。計算思維中的抽象指的是對求解問題的一種描述,是對問題的表達和推演,自動化是用具體的形式體現(xiàn)計算和結果。就C語言而言,抽象就是用變量、函數(shù)、數(shù)組等對需要解決的實際問題進行概括描述,抽象的過程實際上就是對實際問題確立模型的過程,自動化則是利用符合某種語言的語法規(guī)則編寫的語句,按照順序自動執(zhí)行語句并進行自動轉換。
程序設計語言和計算思維兩者相輔相成,語言是思維的體現(xiàn),思維是語言的載體。c語言中的函數(shù)、遞歸和模塊等知識點都承載著解決問題的計算思維。計算思維是模型加算法,在C語言中,把解決的問題抽象成與其相應的模型,然后確定算法,最后編寫程序求解問題。
3 基于計算思維的教學內容組織
面向過程的C語言程序主要介紹C語言基本的語法、操作對象及其數(shù)據(jù)類型、基本運算符和三種基本的程序控制結構等,這些基本概念都是對現(xiàn)實的抽象與表達,主要以理解和加強記憶為主。如在數(shù)據(jù)類型及表達式,這些操作對象是對系統(tǒng)特征的抽象。而C語言程序設計中的函數(shù)、數(shù)組、指針和文件等,則更應強調從現(xiàn)實到計算機邏輯的抽象表達。在此過程中,要注重學生抽象思維能力的培養(yǎng)。如數(shù)組是對多個相同或不同數(shù)據(jù)類型的一個或多個特征的抽象;函數(shù)的定義和調用分別是對系統(tǒng)功能和功能調用的抽象;結構體是對多個不同類型的多個特征的抽象,指針則是多個不同類型的多個特征集合的抽象。從以上c語言教學內容組織可見,C語言程序設計課程的教學表面上是對基本語法的學習和應用,深層次則是計算思維的訓練和基于該思維的分析問題、解決問題等創(chuàng)新能力的培養(yǎng)。
3.1 基本語法和數(shù)據(jù)類型的計算思維教學
C語言中的常量和變量是對對象的描述。常量是對在程序運行過程中的其值不變的特征抽象描述,如重力加速度g;而變量則是對程序運行中其取值發(fā)生變化的特征進行抽象,如建筑物的高度。不管是哪類對象,都有其取值范圍以及所允許的操作。例如,對于年齡,其取值范圍一般是從0-130,允許對其進行的操作可以是加減法等算術運算以及大于和小于等比較運算;而對于性別,就不能進行算術運算。C語言程序設計中對特征的取值范圍及允許的操作進行抽象的概念是數(shù)據(jù)類型?,F(xiàn)實生活中,描述多個相同數(shù)據(jù)類型的一個特征常用一維數(shù)組描述,而描述描述多個相同數(shù)據(jù)類型的多個特征常用二維數(shù)組描述,描述多個不同數(shù)據(jù)類型的多個特征則用結構體進行描述。
3.2 程序控制結構的計算思維教學
C語言程序設計語言中的三種控制結構順序結構、選擇結構和循環(huán)結構,都是看起來容易理解但很難靈活運用的內容。在講授這部分內容時,要在掌握基本語法和了解程序流程的基礎上,引導學生從多個角度進行思考和對問題的抽象,啟發(fā)學生通過不同的方法解決問題。
如對于解決同一實際問題,使用三種形式的循環(huán)控制結構for循環(huán)、while循環(huán)和do…while循環(huán),引導學生比較各種結構的不同和各自優(yōu)缺點。
4 計算思維在C語言程序設計中的具體應用
C語言中的典型算法有:窮舉法、遞推法、遞歸法、回溯法、迭代法、分治法、貪心法和動態(tài)規(guī)劃法等,這些典型算法常應用于實際的生活問題中。每年的大學生數(shù)學建模競賽總要用到這些典型算法。在遇到實際問題時,首先要通過對問題的分析;然后確定抽象出基本數(shù)據(jù)結構和算法;最后選擇合適的程序設計語言編制程序并進行調試運行,并根據(jù)運行結果改寫程序中的編程錯誤和算法設計錯誤(具體過程描述如圖1)。
如用計算思維解決01背包問題時,問題描述(如圖2)。解決此類問題應先對實際問題獲得感性認識,然后對問題進行抽象,如解決01背包問題時使用窮舉法,其基本思想是遍歷這顆樹,枚舉所有的情況,進行判斷,如果重量不超過Wm,且價值最大的方案就是問題的解。在實際遍歷時,如發(fā)現(xiàn)沒有意義的路徑時,就立即停止對它的進一步搜索,進而提高搜索效率。n種物品,樹的高度為n,共有2n-1個節(jié)點,構成一顆滿二叉樹(如圖3)。再對上面抽象出的問題建模,將問題定量轉化、利用數(shù)學模型擬合;通過抽象變量、定義函數(shù)、調用函數(shù)等方法,將開始的復雜問題轉換成一個可以求解的過程(如圖4)。最后通過編程,將問題轉化為機器可解的簡單問題,得出解決問題的方法(如圖5)。
計算思維在C語言程序設計應用中還應用注意以下幾個方面:
4.1 積極引導學生進行思維訓練
學習教材上一些具體實例后,要鼓勵學生敢于打破常規(guī),拓展思路,積極探索,爭取采用一題多解的方式,尋求更好的算法。程序設計更多的是從模仿開始,但也一定要有自己的思維,不要生搬硬套。在程序設計中,逐步培養(yǎng)學生抽象問題的能力,學會解決問題的方法和步驟,主動用計算思維去解決問題。
4.2 積極引導學生對典型算法的應用
學生掌握了典型算法后,積極引導學生應用典型算法解決實際問題,培養(yǎng)學生對典型算法的靈活應用和變通能力,及時總結c語言程序設計方法和設計過程中所涵蓋的計算思維,做到舉一反三,觸類旁通。
4.3 積極引導學生親自實踐
實踐是程序設計課的一個重要環(huán)節(jié),在學生自主實踐中,一定要讓學生認識和掌握解決問題的思維方式,教會學生如何學習和思考。在實踐中遇到問題,相互探討,通過老師提示,學生能獨立完成。
5 結語
計算思維在C語言程序設計中起著很重要的作用。授課時,要采用慢慢引入、循序漸進的方式把這種思維滲透到各個知識點和知識點的應用中,使學生在編程過程中自覺或不自覺地學會使用這種思維方式。培養(yǎng)學生在編程中得心應手地使用計算思維,是當代教師肩負的重要責任,當然,它是一個需要在教學中長期滲透和培養(yǎng)的過程,需要我們不斷探索,不斷實踐。
參考文獻
[1]專家論壇李竹林,王文發(fā).基于計算思維的程序設計類課程教學模式探索[J].2018(03):1-5
[2]Jeannette M.Wing.ComputationalThinking[J].Communciations of theACM,2006,49(03):33-35.
[3]袁開榜.二十一世紀.人們應該具有計算思維能力[J].計算機教育,2011(03):30-34.
[4]范興亮.C語言程序設計課程中的計算思維探析[J].無線互聯(lián)技術,2017(08):67-68.
[5]張雪,伍常,晉義.計算思維在C++程序設計教學中的應用[J].計算機教育,2013(13):52-56.
[6]汪紅兵,姚琳.C語言程序設計課程中的計算思維探析[J].中國大學教學,2014(09):59-62.
[7]張東生鄭文奎基于思維空間轉換的計算思維教育[J].計算機教育,2014(11):2-6.
[8]臧勁松培養(yǎng)學生計算思維的程序設計課程教學[J].計算機教育,2012(02):78-80.
[9]呂俊陸淑娟以計算思維培養(yǎng)為導向的《語言程序設計》課程教學改革[J].2016(15):213-215.