崔 杰
談C程序設(shè)計對大學(xué)生科學(xué)思維的培養(yǎng)
崔 杰
(遼寧工業(yè)大學(xué) 電子與信息工程學(xué)院,遼寧 錦州 121001)
科學(xué)思維是大學(xué)生必備的科學(xué)素質(zhì),將科學(xué)思維的培養(yǎng)納入大學(xué)課堂勢在必行。本文提出將科學(xué)思維引入C程序設(shè)計教學(xué),將多種科學(xué)思維方法在C程序設(shè)計教學(xué)中加以運(yùn)用。與傳統(tǒng)的教學(xué)模式相比,融入科學(xué)思維的教學(xué)模式對提高學(xué)生的科學(xué)素質(zhì)起到了非常重要的作用,同時也培養(yǎng)了學(xué)生綜合分析問題和解決問題的能力,對C程序設(shè)計的學(xué)習(xí)也起到了很大的促進(jìn)作用。
C程序設(shè)計;科學(xué)思維;思維方法
科學(xué)思維是科學(xué)工作者重要的科學(xué)品質(zhì),培養(yǎng)具有科學(xué)思維的綜合性素質(zhì)人才是大學(xué)的任務(wù)。在大學(xué)階段要把學(xué)生的人文素質(zhì)發(fā)展和科學(xué)素質(zhì)發(fā)展作為學(xué)生綜合素質(zhì)評定實施的重要內(nèi)容,引導(dǎo)大學(xué)生有意識地促進(jìn)兩方面素質(zhì)的發(fā)展。C語言程序設(shè)計課程包含很多的科學(xué)思維方法,教師在講授C程序設(shè)計時,要自覺地將人文精神和科學(xué)精神的培養(yǎng)貫穿于程序設(shè)計課程的始終,充分發(fā)掘程序設(shè)計課程對人才綜合素質(zhì)養(yǎng)成的潛移默化的作用,真正做到教書育人。
思維是人腦對客觀事物的間接的概括反映,是揭示事物的本質(zhì)特征及內(nèi)部規(guī)律的認(rèn)識活動??茖W(xué)思維教育的目的是提高學(xué)生基本的科學(xué)素質(zhì),這是學(xué)生素質(zhì)的一個重要組成部分。因此,推行素質(zhì)教育必須注重學(xué)生科學(xué)思維的訓(xùn)練。從某種意義上講,人類的每一種能力、每一個進(jìn)步,都與自己的思維能力息息相關(guān)。研究表明:古今中外在各個領(lǐng)域做出重大貢獻(xiàn)的杰出人物,他們所共同具有的是卓越出眾的思維能力。由于思維的重要性,國外從20世紀(jì)30年代開始對思維教育進(jìn)行研究。很多國際公司為了開發(fā)職工的創(chuàng)造潛力,提高企業(yè)的競爭力,在職工中進(jìn)行科學(xué)思維教育和訓(xùn)練,企業(yè)對職工進(jìn)行關(guān)于創(chuàng)新思維方法的培訓(xùn)。在我國,對思維的研究有較長的歷史,孔子說過:“學(xué)而不思則罔,思而不學(xué)則殆”,由此指明了學(xué)習(xí)與思維的關(guān)系。隨著信息時代的到來,知識更新的加快,社會競爭日趨激烈,科學(xué)思維教育越來越引起人們的重視。這是因為,將來一個人在社會競爭中是否成功,關(guān)鍵看他是否具有靈活的頭腦、敏銳的思維和創(chuàng)新能力,能否捕捉機(jī)會、組合機(jī)會和創(chuàng)造機(jī)會。因此,科學(xué)思維教育已成為科學(xué)教育的重要方面,科學(xué)思維的訓(xùn)練也應(yīng)成為素質(zhì)教育的一個重要內(nèi)容。
科學(xué)思維包括很多思維方法,正確地運(yùn)用科學(xué)思維方法,對今后的學(xué)習(xí)、工作以至于生活都有很大的益處。筆者根據(jù)多年的實踐,在自己講授的C程序設(shè)計課程中貫穿科學(xué)思維方法,包括系統(tǒng)思維、逆向思維、歸納思維、創(chuàng)新思維等,根據(jù)具體的問題來引出具體思維方法。這樣既可以加深對哲學(xué)的理解,又可以對所學(xué)的知識有一個質(zhì)的提升[1]。
系統(tǒng)思維是人類最重要的思維方式。它要求看待事物要從全局而非局部出發(fā),從系統(tǒng)整體來思考,找到整體與部分之間的辯證關(guān)系。系統(tǒng)思維要把握事態(tài)發(fā)展的動態(tài)性,要用發(fā)展的眼光看待事物。在C程序設(shè)計中的需求分析要求對軟件的各個環(huán)節(jié)進(jìn)行全局考慮,解決之間出現(xiàn)的諸多問題,包括硬件與軟件的問題,開發(fā)商與用戶的問題,軟件模塊之間的問題等,在問題協(xié)調(diào)中找到解決的方法。需求分析也不是不變的,隨著時間、軟硬件環(huán)境的變化,需求也會發(fā)生變化,對需求需要重新審視。在需求分析的過程中,要按照需求分析的五個階段:需求分析,獲取需求;建立概念模型;產(chǎn)生需求說明書;分析需求的正確性;跟蹤管理需求。在整個需求分析過程中體現(xiàn)了科學(xué)的系統(tǒng)思維方法。
歸納思維是從多個個體之中找到其中的規(guī)律加以歸納總結(jié),得到一個一般性的概括性的規(guī)則。這種方法主要是將收集到的已有資料加以“抽絲剝繭”地分析,最后得以做出一個概括性的結(jié)論。在結(jié)構(gòu)化程序設(shè)計中,循環(huán)結(jié)構(gòu)比較難理解,在循環(huán)中引入歸納思維的方法,可以達(dá)到事半功倍的效果。冒泡法排序算法在程序設(shè)計中歷來是很難理解的算法,采取歸納的方法,可以使學(xué)生對問題的理解達(dá)到水到渠成的效果。
歸納思維在排序算法中的應(yīng)用[1]。問題:將5個整數(shù)按照從小到大排序,部分源代碼如下:
#include
main()
{int a[5],i;
for(i=0;i<5;i++)
scanf(“%d”,&a[i]);
/*具體排序過程*/
…
for(i=0;i<5;i++)
printf(“%6d”,a[i]);
}
冒泡排序(Bubble Sort)的基本思想是:依次比較相鄰的兩個數(shù),將小數(shù)放在前面,大數(shù)放在后面。即在第一趟:首先比較第1個和第2個數(shù),將小數(shù)放前,大數(shù)放后。然后比較第2個數(shù)和第3個數(shù),將小數(shù)放前,大數(shù)放后,如此繼續(xù),直至比較最后兩個數(shù),將小數(shù)放前,大數(shù)放后。至此,第一趟排序結(jié)束,將最大的數(shù)放到了最后。
原始數(shù)據(jù):971264
第一趟比較結(jié)果:796412
代碼實現(xiàn):
for(j=0;j<4;j++)
if(a[j]>a[j+1]) {t=a[j];a[j]=a[j+1];a[j+1]=t;}
經(jīng)過第一趟的比較后,不難看出最大的數(shù)已經(jīng)排在了最后一個位置,那么利用同樣的方法再進(jìn)行第二趟比較,就會將第二大的數(shù)排在倒數(shù)第二位置。依次類推,只要同樣的方法進(jìn)行4趟比較,所有的數(shù)據(jù)就都可以排出來。
第二趟比較結(jié)果764912
第三趟比較結(jié)果647912
第四趟比較結(jié)果467912
也就是讓第一趟的代碼執(zhí)行4遍,那么歸納出程序段如下:
for(i=0;i<4;i++)
for(j=0;j<4;j++)
if(a[j]>a[j+1]) {t=a[j];a[j]=a[j+1];a[j+1]=t;}
實際上這個算法就已經(jīng)能夠?qū)?個數(shù)按照從小到大排序,但在講解排序過程中,有部分學(xué)生就已經(jīng)發(fā)現(xiàn)一個問題,就是每一趟的比較不需要比較到最后,而是隨著比較趟數(shù)的增多,比較次數(shù)可以逐漸減少。因為經(jīng)過每趟比較后出來的最大數(shù),下趟比較時就不需要處理了,這樣就可以提高程序的效率。因此,就提出對上面的程序進(jìn)行改進(jìn):
for(i=0;i<4;i++)
for(j=0;j<4-i;j++) /*隨著比較趟數(shù)的增加比較次數(shù)逐漸減少*/
if(a[j]>a[j+1]) {t=a[j];a[j]=a[j+1];a[j+1]=t;}
冒泡排序算法到此結(jié)束,同時引出其他的排序算法。在教師的引導(dǎo)下,只給出排序的思想,讓學(xué)生利用分步再歸納的方法自己編寫其他的算法,如選擇法。每個班級都會有大部分的同學(xué)將排序算法編寫出來,學(xué)生感覺收獲很大,同時也體會了歸納思維方法在程序設(shè)計中產(chǎn)生的效果。
逆向思維是一種重要的思考方式,也稱反向思維。一般思考問題都是從正面出發(fā),對于特殊的問題如果能從問題的對立面出發(fā),找到解決問題的方法,也可以達(dá)到意想不到的效果[2]。現(xiàn)實生活中有很多無法解決的問題,敢于“反其道而思之”,從結(jié)論往回推,倒過來思考,從求解回到已知條件,反過去想或許會使問題簡單化。其實,對于一些特殊問題,運(yùn)用逆向思維去思考和處理問題,實際上就是以“出奇”去達(dá)到“制勝”。C語言的學(xué)習(xí)對于大學(xué)一年級的學(xué)生來說有一定難度,尤其在初期入門階段,數(shù)據(jù)類型的學(xué)習(xí)就存在很大的問題,難理解、枯燥、記不住,從此對C語言的學(xué)習(xí)就失去了興趣。因此,可以用逆向思維的方法來解決該問題,學(xué)生對數(shù)據(jù)類型就自然而然地掌握了。為了解決困擾很多學(xué)生的數(shù)據(jù)類型問題,在C程序設(shè)計教學(xué)中采用了一個實例:
#include
main()
{int a=32767,b; /*a、b是兩個變量,用來存儲數(shù)據(jù)*/
b=a+1;
printf(“%d”,b);
}
這是一道C語言中最簡單的一道題,學(xué)生預(yù)計的結(jié)果應(yīng)該是32768,而實際運(yùn)行后的結(jié)果卻是-32768。這讓每個學(xué)生都感到很詫異,功能如此強(qiáng)大的電腦,為什么這么簡單的問題都不能正確計算呢?據(jù)此,教師直接提出了一個數(shù)據(jù)存儲的問題。在計算機(jī)文化課程中曾講解過內(nèi)存、原碼、反碼和補(bǔ)碼的問題,在C程序設(shè)計中會使這些知識得以真正地理解。計算機(jī)中存取數(shù)據(jù)的基本單位為字節(jié),每個字節(jié)存儲8個二進(jìn)制位,對于有符號的數(shù)來說,第一位是符號位,0代表正數(shù),1代表負(fù)數(shù)。讓學(xué)生計算一下,1個字節(jié)能存放的有符號數(shù)據(jù)最大是多少呢?回答的結(jié)果是127。接下來計算2個字節(jié)能表示的最大一個正數(shù)是多少呢?回答是32767。通過前面的計算學(xué)生已經(jīng)深刻記憶兩個字節(jié)只能表示32767,再大就表示不了了。32767+1導(dǎo)致第一位變成了1,則正數(shù)變成了負(fù)數(shù)。此時教師就提出一個問題,a、b兩個變量在內(nèi)存中分配了兩個字節(jié),分配幾個字節(jié)是誰確定的呢?學(xué)生表示疑惑,于是教師將問題解釋:a、b變量分配兩個字節(jié)就是由它前面的關(guān)鍵字int決定的,int類型的變量,TC環(huán)境下操作系統(tǒng)為該類型變量分配兩個字節(jié)的存儲空間。于是對于上面的程序結(jié)果就明白了為什么。然后,學(xué)生馬上就提出問題,為什么這樣計算不將變量分配更多的字節(jié)?用哪個關(guān)鍵字來表示呢?于是,教師將剛才調(diào)試的程序,將變量的類型進(jìn)行了修改,將int改為long int,輸出格式也同步修改成%ld,則程序結(jié)果正確。學(xué)生終于明白:原來變量在內(nèi)存中分配字節(jié)數(shù)是可以編程者自己決定的。于是就想到直接申請更大的空間,通常的數(shù)據(jù)都能存下。那么,用什么關(guān)鍵字可以申請更大的空間呢?教師講解數(shù)據(jù)類型的種類,每種類型的變量在內(nèi)存中分配的字節(jié)數(shù),最后讓學(xué)生自己來選擇,學(xué)生說那就選擇double類型,分配8個字節(jié),通常的計算就都沒有問題,不會超過范圍。教師又提出了另一個問題,這樣是不是太浪費(fèi)內(nèi)存了?而且double類型是用來存儲實形數(shù)據(jù)的,存儲整形數(shù)據(jù)會不會存在誤差?
#include
main()
{long int a=32767,b;
b=a+1;
printf(“%ld”,b);
}
最后,教師總結(jié)數(shù)據(jù)類型相關(guān)的知識。學(xué)生理解了數(shù)據(jù)類型,知道數(shù)據(jù)類型的具體使用,但對于數(shù)據(jù)類型多記不住的問題又如何解決呢,教師明確告訴學(xué)生不需要記憶,用時查表就可以了,隨著數(shù)據(jù)類型的不斷使用,記住數(shù)據(jù)類型就不是問題了。實踐證明,這種逆向思維講解數(shù)據(jù)類型效果非常顯著,不但使學(xué)生對內(nèi)存產(chǎn)生了極大的興趣,也為程序設(shè)計打下了堅實的基礎(chǔ)。只要逆向思維在教學(xué)中運(yùn)用得當(dāng),勢必產(chǎn)生意想不到的效果。
創(chuàng)新是人的一種潛能,每名教師都要愛護(hù)和培養(yǎng)學(xué)生的好奇心,保護(hù)學(xué)生的探索精神、創(chuàng)新思維,堅信每個學(xué)生都能成才,每個學(xué)生都能創(chuàng)新[3]。在教學(xué)之初就引導(dǎo)學(xué)生關(guān)注程序設(shè)計課程在所學(xué)專業(yè)領(lǐng)域的應(yīng)用,鼓勵學(xué)生從網(wǎng)上或圖書館查閱相關(guān)資料,了解程序設(shè)計在所學(xué)專業(yè)的應(yīng)用,提高學(xué)生對學(xué)習(xí)程序設(shè)計的興趣。
同時,每年舉辦一屆全校范圍內(nèi)的程序設(shè)計大賽,鼓勵學(xué)生參加省、國家級比賽,因為競賽是培養(yǎng)全面優(yōu)秀人才的一項重要的活動。程序設(shè)計大賽對創(chuàng)新思維能力的培養(yǎng)起到了很大的推動作用,它對參賽學(xué)生的邏輯分析、策略制定和創(chuàng)新思維等方面具有極大的挑戰(zhàn)性。
通過C程序設(shè)計課程對大學(xué)生科學(xué)思維方法的培養(yǎng),使學(xué)生對知識的掌握由點到面,由量變到質(zhì)變,實現(xiàn)學(xué)生綜合素質(zhì)的提升,達(dá)到對學(xué)生科學(xué)素質(zhì)和人文素質(zhì)的綜合培養(yǎng)。應(yīng)用科學(xué)思維方法可以與傳統(tǒng)的教學(xué)方法互相補(bǔ)充,啟示人們以不同的視角看同一個問題,這樣會更全面地了解事物,同時也可以啟發(fā)教師在教學(xué)過程中恰當(dāng)?shù)剡\(yùn)用一些科學(xué)思維方法,可以達(dá)到事半功倍的效果。
[1] 譚浩強(qiáng),張基溫. C語言程序設(shè)計[M]. 北京: 高等教育出版社, 2006: 12.
[2] 栗亞榮, 劉宇偉. 程序設(shè)計中的科學(xué)思維方法[J]. 教學(xué)與管理, 2002(4): 76.
[3] 張國華. 系統(tǒng)思維在培養(yǎng)計算機(jī)類學(xué)生創(chuàng)新能力中的作用[J]. 福建電腦, 2019, 35(1): 54-55.
10.15916/j.issn1674-327x.2022.03.033
G642.0
B
1674-327X (2022)03-0131-03
2021-01-15
遼寧工業(yè)大學(xué)教學(xué)改革研究項目(2018081)
崔杰(1972-),女,遼寧海城人,副教授。
(責(zé)任編輯:付春玲)