?

談科學思維方法在“C 程序設計”教學中的運用

2024-01-21 18:52李曉會
關鍵詞:程序設計科學算法

崔 杰,趙 穎,李曉會

(遼寧工業大學 電子與信息工程學院,遼寧 錦州 121001)

二十一世紀是一個信息技術高速發展的時代,以計算機技術為代表的信息技術已經逐步滲透到社會的各個領域,計算機已經成為學習、生產、生活必備的工具,并發揮著重大的作用。作為新一代的大學生,對計算機技術的掌握尤為重要,不僅要掌握計算機的應用,還要提高自己的思維能力以及遇到問題能夠進行分析應變的能力。能夠恰當地運用科學的思維方法借助計算機高效地解決生活和工作中遇到的問題,是當代大學生需要逐步培養并具備的能力[1]。在大學階段,程序設計課程無疑是培養大學生計算機能力及科學思維最有效的課程。程序設計課程是每個大學的計算機基礎必修課程,對提升大學生程序設計能力和科學思維能力起著不可或缺的作用。有效地訓練和培養學生的科學思維能力,成為大學教師不可忽視的教學目標。在傳統的“C 程序設計”教學過程中,教師只注重程序設計本身涉及的數據結構和算法的講解,對程序設計中應用到的多種思維方法很少提及,學生也只是機械地學習編寫程序。程序設計中涉及很多的科學思維方法,常見的思維方法比如窮舉思維、發散思維、遞歸思維等。在教學過程中要有意識地將程序設計教學與科學思維方法聯系起來[2],并要貫穿課程始終。

一、科學思維方法的重要性

大學階段是學生自主學習及培養思維能力的黃金階段,要培養一個合格的大學生,首先要從培養他的思維能力開始,使其逐步養成用科學的思維方法思考問題、解決問題的習慣。如果教師只教給學生現象背后的原理或操作流程,學生的收益是很有限的??茖W思維方法能讓學生用敏銳、有創造性的眼光去看待事物,沉穩面對挑戰,用正確高效的方式去處理問題。養成這樣一種做事的習慣,將來無論到什么領域,學生們總是能依賴成功的思維方式解決問題,若把這種思維應用到工作、生活的方方面面,那它就能發揮更大的作用。

二、科學思維方法在“C 程序設計”教學中的運用

傳統的“C 程序設計”課堂不會刻意講授科學的思維方法,但是科學思維方法在“C 程序設計”中卻實實在在地被應用到。在傳統的教學模式下,科學思維方法的傳授并沒有得到教師的足夠重視。筆者依據多年積累的C 程序設計課程教學經驗,對程序設計中涉及的科學思維方法進行歸納總結。在課程講授的過程中,選取恰當的案例進行分析,使學生逐步養成用科學的思維方法來分析、解決問題的習慣,使學生學習程序設計的興趣也得到很大的激發,學習質量得以提升。本文主要講解窮舉思維、發散思維、遞歸思維在“C 程序設計”教學中的運用。

(一)窮舉思維

窮舉思維是一種最簡單、最直接且有效的解決問題的思維方法。雖然簡單直接,卻可以解決很多計算機領域中的計算問題。它的思想是根據問題的描述來確定數據個數及大致范圍,根據要求設置判斷的條件,對范圍內的數據逐一去檢查核對,直到找出全部的結果為止。如果排查完所有情況后都沒有符合要求的條件,則本題無解。窮舉思維在整個計算機領域的應用非常廣泛,看似簡單的窮舉思維方法,卻能夠利用計算機解決很多的問題。在程序設計中經常遇到的密碼破譯問題、素數問題、完數問題、水仙花數問題、邏輯判斷問題、雞兔共籠問題、硬幣問題等很多問題都是可以通過窮舉思維來解決的。窮舉的應用領域也非常廣闊,在理論上,由于計算機計算速度很快,采用窮舉法可使計算領域中的多種問題得到解決。在現實應用中,如果要解決的問題需要的數據量不是很大,那么就沒有必要花很大的代價去設計一種更高效的算法,用窮舉算法實現其運算速度一般情況下都是可以接受的。

窮舉法也稱為列舉法,最終要列舉出全部需要的結果。根據窮舉法獲得結果數據類型的不同,可以分成簡單數據、數據的排列、數據的組合,分別對應下面3 種列舉方法,分別為順序列舉、排列列舉和組合列舉。

用窮舉法解決計算問題,大致可以分以下3 個步驟:

1.確定范圍:分析問題涉及哪些情況,設置窮舉的循環范圍。應用窮舉法解決時,對涉及的每種情況必須一一列舉,既不要遺漏,也不要重復,否則可能會導致解的遺漏或增加。

2.設計條件:首先將滿足問題的條件描述出來,然后利用選擇結構進行條件判定的實施,最后得到問題所有需要的解。

3.運行及結果分析:

以排列列舉為例:排列列舉每一個要求的結果都是一些數據的排列。以幼兒園老師分玩具為例:有5 個不同的玩具,要分給甲、乙、丙3 位同學,分配原則就是每個同學只能分到1 個玩具,請問老師有多少種不同的分玩具的方案?

(1)分析

本題是一個典型的排列窮舉實例,答案是一個排列問題,即從5 個玩具中取3 個進行排列的方法的總數。為了區分不同的玩具,需要將5 個玩具進行從1 到5 編號。最終的結果是3 個同學每人分到1 個玩具,必須滿足3 個人所得到的玩具的編號都不相同,這就是滿足題目要求的1 種分玩具方案。列出所有的分配方案就是最終的解。

(2)實現代碼如下:

(3)運行程序

程序運行后最終會有60 種分配方案,如果不列舉,學生也不會想到會有如此多的分配方案,通過本題目的學習,會使學生深刻體會到計算機與窮舉法結合的魅力。

(二)發散思維

發散思維是創新型人才應具備的最主要的特點,是評價人才創新能力的重要標志之一。發散思維是從待解決的問題出發,以不同的途徑和方法尋求多種解決問題的答案,最終比較方法之間的優劣以獲得最終解決問題的思維方法。在心理學領域,發散思維是大腦在思維時不按照一貫的想法去思考,通常呈現一種發散狀態的思維模式。發散思維能夠使人產生奇思妙想、拓展思路、開闊視野、轉換看待問題的角度,從而實現人才培養的全面發展。在C 程序設計課程的教學中,教師可以設計一些可以多路解決的程序設計題目,通過該類題目的訓練來逐步培養和訓練學生的發散思維能力。不同的學生看待問題的角度不同,做題的方法也就不同。首先,教師應積極鼓勵學生勤于思考,拓寬思路,對學生的思維給予鼓勵和肯定。其次,教師匯總學生的不同解決方法,引導學生分析不同方法的優缺點及適應情況,達到舉一反三的效果。以此教會學生發散性思維,使學生后續的程序設計的學習效果更為顯著。

在“C 程序設計”教學之初,發散思維就給學生留下了深刻的印象。例如求3 個數的最小值問題,是非常簡單的一道題,通過該題,卻讓學生實實在在體會到從不同角度、不拘一格的發散思維方法。求3 個數的最小值,首先,教師提出問題,學生分組討論采用怎樣的方法來解決,每組學生都可以列出幾種方法,雖然方法不夠完善,但已經足夠讓學生了解到發散思維的魅力。其次,由教師進行總結,該問題基本上可以從3 個方向來分析解決,即1 個1 個數比較;2 個2 個數比較;3 個數一起比較。最后,教師與學生一起討論每種方法的優劣及適用情況,哪種方法適合數據量比較大的情況,最終得出結論是前兩種方法更加適合推廣,為后續的選擇排序和冒泡排序埋下伏筆。解決求3 個數的最小值問題不但能開闊思路,同時也用到了if 選擇結構的3種形式及if 的嵌套,使學生把所學的知識融會貫通,對發散思維也有了更深的理解,為后續的“C 程序設計”學習奠定了良好的基礎。

(三)遞歸思維

遞歸思維方法比較難于理解,本文利用淺顯易懂的實例來講解遞歸思維方法。遞歸思維分為兩部分,遞推與回歸。遞推從問題向后推,一直推到能得到結果之后向前回歸,一直回歸到欲求問題的本身,使問題最終得以解決。同時,遞歸也存在不足之處,在遞歸調用的過程當中系統為每一層的返回點、局部量等開辟了棧來存儲,遞歸次數過多容易造成棧溢出等,所以在遞歸次數過多的情況下不提倡用該方法。

但如果算法很復雜,卻具有遞推和回歸的特性,利用遞歸算法編寫程序,可以使程序變得簡潔和清晰。遞歸算法在程序設計中應用廣泛,“漢諾塔”[3]問題就是典型的代表,該算法非常具有遞歸的代表性,但對初學者來說不容易理解。因此,作為遞歸算法的入門,筆者選取一個非常簡單的游戲來進行算法的入門講解,然后再讓學生去解決“漢諾塔”問題,學生有了興趣,解決問題的積極性也就提高了,問題也就變得沒那么難了。

遞歸思維舉例:猜一猜學生年齡問題游戲

讓班級中的5 個同學到前面站成一排,大家來猜一猜第1 個同學的年齡。第1 個同學說我比第2個同學大2 歲;第2 個同學說他比第3 個同學大2歲;第3 個同學說他比第4 個同學大2 歲;第4 個同學說他比第5 個同學大2 歲。最后第5 個同學說他的年齡是3 歲。請問誰能知道第一個同學的年齡是多大?

學生開始猜,如果想知道第1 個同學的年齡,要向后推問第2 個同學的年齡,想知道第2 個同學的年齡,要向后推問第3 個同學的年齡,以此類推一直推到第5 個同學的年齡。已知第5 個同學的年齡是3 歲,通過回歸就可以知道第4 個同學的年齡是5 歲,再回歸就可以知道第3 個同學的年齡是7歲,一直回歸就可以知道第1 個同學的年齡是11歲,這就是典型的遞歸算法的應用。

遞歸算法代碼實現如下:

遞歸算法分析:

1.在調用函數的過程中又直接或間接調用了該函數本身,進行層層調用,一直調用到遞推結束的條件,然后層層返回,一直到最初的調用位置。

2.必須有遞推結束的條件

通過這個猜年齡的小游戲讓學生深刻體會到遞歸算法的神奇,充分調動了學生的學習興趣,加深了學生對遞歸思維的理解,逐步掌握了遞歸思維解決問題的方法[4]。課后讓學生自己玩“漢諾塔”游戲,親身體驗游戲的過程,進行小組討論如何利用遞歸算法來解決“漢諾塔”問題。教材中有“漢諾塔”的范例,如果學生理解得不夠透徹,可以借助教材,最終也能夠順利解決。通過讓學生自己分析,寫出遞推函數,達到了舉一反三、對所學知識能夠靈活應用的目的。

三、總結

科學思維方法有很多,在教學中需要不斷積累,找到合適的案例,恰到好處地將科學思維加以運用,才能使教學達到預期的效果??茖W思維的引入使學生對編程的興趣明顯增強,無論是在期末考試還是在程序設計大賽中都有不錯的表現。在C程序設計課程教學中,教師通過有意識地培養學生的科學思維方式,使他們在遇到問題時能夠勤于思考、善于變通,根據不同問題的特點,選擇不同的方法來解決,把所學的知識與技術能夠靈活地運用到生產生活中,從而提高了分析問題和解決問題的能力。

猜你喜歡
程序設計科學算法
基于Visual Studio Code的C語言程序設計實踐教學探索
基于MapReduce的改進Eclat算法
點擊科學
Travellng thg World Full—time for Rree
科學大爆炸
從細節入手,談PLC程序設計技巧
進位加法的兩種算法
高職高專院校C語言程序設計教學改革探索
一種改進的整周模糊度去相關算法
科學拔牙
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合