朱瑛
摘要:開設(shè)C語(yǔ)言程序設(shè)計(jì)課程的指導(dǎo)思想是:通過掌握一門計(jì)算機(jī)語(yǔ)言,學(xué)會(huì)與計(jì)算機(jī)溝通交流,了解計(jì)算機(jī)解決問題的方式方法, 就類似我們掌握了自然語(yǔ)言,可以完整的表達(dá)自己的思想。
關(guān)鍵詞:C語(yǔ)言程序設(shè)計(jì);編程;方式方法;要素
中圖分類號(hào):G424 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2016)18-0097-02
近年來C語(yǔ)言作為計(jì)算機(jī)語(yǔ)言在國(guó)內(nèi)外得到迅速推廣應(yīng)用,在程序語(yǔ)言使用中排名第二,只和排行第一的JAVA語(yǔ)言相差甚微。其功能豐富,表達(dá)力強(qiáng),使用靈活方便,目標(biāo)代碼運(yùn)行效率高,兼有高級(jí)語(yǔ)言與低級(jí)語(yǔ)言的許多特點(diǎn),幾乎所有操作系統(tǒng)都支持C語(yǔ)言開發(fā)?!癈語(yǔ)言程序設(shè)計(jì)”在高校相關(guān)專業(yè)往往是編程的入門課,從“門外漢”變成“門內(nèi)漢”的過程不僅需要學(xué)習(xí)基礎(chǔ)概念、編程知識(shí)、編程方法,還需將自己的智慧轉(zhuǎn)換成計(jì)算機(jī)能夠識(shí)別的代碼,這個(gè)轉(zhuǎn)換過程需要我們學(xué)會(huì)用計(jì)算機(jī)的思維方式方法解決問題。所以,學(xué)習(xí)C語(yǔ)言、設(shè)計(jì)算法、編寫程序的教學(xué),就是對(duì)學(xué)生進(jìn)行思維方式引導(dǎo)和培養(yǎng)的過程。
1 教學(xué)現(xiàn)狀
C語(yǔ)言程序設(shè)計(jì)課程一般在大學(xué)低年級(jí)開設(shè),該階段的學(xué)生大多數(shù)沒有編程基礎(chǔ),甚至于一些計(jì)算機(jī)的基礎(chǔ)知識(shí)也似是而非,僅停留在計(jì)算機(jī)的使用上,對(duì)于計(jì)算機(jī)能夠?qū)崿F(xiàn)各種操作的原因不了解。剛開始許多學(xué)生認(rèn)為學(xué)習(xí)編程和學(xué)習(xí)應(yīng)用軟件的使用一樣,在不長(zhǎng)的時(shí)間內(nèi)就能夠成為編程“高手”。而C語(yǔ)言程序設(shè)計(jì)作為編程的入門課,首先必須講授編程的一些基本概念,比如常量、變量、數(shù)據(jù)類型、運(yùn)算符、表達(dá)式等。這些內(nèi)容相對(duì)顯得枯燥,部分性急的學(xué)生要耐心學(xué)習(xí)。因?yàn)檫@些內(nèi)容是編程的基礎(chǔ),需要學(xué)生深入掌握,由此對(duì)學(xué)生的心理就要有所把握。
隨著教學(xué)內(nèi)容的推進(jìn),有些學(xué)生慢慢跟不上進(jìn)度,課上聽得懂,但自己編程就不知從何入手,究其原因,其一是對(duì)算法沒有掌握,其二是對(duì)這門語(yǔ)言了解不夠。算法是編程的思路,有了算法,才可能寫出程序,如果學(xué)生對(duì)算法不理解或者掌握不夠,則直接影響編程。除此之外,如何將現(xiàn)成的算法用C語(yǔ)言描述出來,許多學(xué)生仍然不很熟悉。
2 教學(xué)內(nèi)容與目的
C語(yǔ)言的教學(xué)是從常量、變量、運(yùn)算符、表達(dá)式等基本概念開始,逐步引導(dǎo)學(xué)生進(jìn)入與計(jì)算機(jī)溝通交流的初級(jí)階段。這不僅要使學(xué)生掌握這些基本概念,還需要讓學(xué)生理解這些就是編程的素材。C語(yǔ)言解決的所有問題最終都需要用語(yǔ)句來描述,而語(yǔ)句是由這些語(yǔ)言要素所構(gòu)成,怎樣把常量、變量、運(yùn)算符、表達(dá)式靈活地組合成解決問題的語(yǔ)句,是編程的關(guān)鍵。類似我們把漢語(yǔ)的一個(gè)個(gè)單詞組合成表達(dá)特定含義的語(yǔ)句,C語(yǔ)言的常量、變量、運(yùn)算符、表達(dá)式相當(dāng)于詞匯,將它們組合成完成特定要求的語(yǔ)句。在結(jié)構(gòu)化編程中,學(xué)生只能從總體到具體,逐步細(xì)化、逐步分解,只有知道計(jì)算機(jī)能夠執(zhí)行什么后,才能寫出算法乃至程序。
學(xué)習(xí)編程語(yǔ)言很難像學(xué)習(xí)漢語(yǔ)一樣,時(shí)時(shí)都有一個(gè)環(huán)境,只在課堂的時(shí)間接觸C語(yǔ)言,熟悉的進(jìn)程必然緩慢。課堂的作用僅在于接觸、理解,而真正掌握則需要自己盡可能多的應(yīng)用所學(xué)知識(shí)。也就是我們常說的“C語(yǔ)言的編程能力不是看出來的 ,不是聽出來的,而是自己動(dòng)手練出來的”。一個(gè)人知道很多漢語(yǔ)詞匯,但不能將它們連成通順的句子表達(dá)自己的思想,說明這個(gè)人表達(dá)能力不行。學(xué)習(xí)編程的過程中,如果只知道基本概念和知識(shí),而不能靈活的用來解決問題,就沒有意義了,因?yàn)檎莆栈A(chǔ)知識(shí)的目的是為了利用它們編寫程序,讓計(jì)算機(jī)完成我們交付的任務(wù)。
3 教學(xué)方法和策略
計(jì)算機(jī)只執(zhí)行程序,不能告訴我們?nèi)绾谓鉀Q問題。我們編寫程序,就需要考慮解決問題的思路和方法,并且讓這些思路和方法能夠在計(jì)算機(jī)上實(shí)現(xiàn),這就是設(shè)計(jì)算法、編程。教學(xué)過程中可以使學(xué)生理解這些思路和方法,逐步接受計(jì)算機(jī)的思維方式,熟悉編程語(yǔ)言。
3.1目標(biāo)定位
根據(jù)C語(yǔ)言的特點(diǎn),將教學(xué)劃分為三個(gè)階段:第一階段是基本語(yǔ)言要素,包括常量與變量、數(shù)據(jù)類型與操作符、程序的基本結(jié)構(gòu)、數(shù)組與指針、函數(shù);第二階段是高級(jí)程序設(shè)計(jì)要素,包括結(jié)構(gòu)體、變量的作用域、模塊化程序設(shè)計(jì)、文件;第三階段是課程設(shè)計(jì),要求學(xué)生解決一些實(shí)用的問題。
第一階段的教學(xué)可以為每章列出一個(gè)提綱,指出重點(diǎn)和難點(diǎn)。例如,講授“操作符與表達(dá)式”時(shí),重點(diǎn)強(qiáng)調(diào)C語(yǔ)言的許多語(yǔ)句都是通過表達(dá)式來描述,運(yùn)輸符的優(yōu)先級(jí)和結(jié)合律是表達(dá)式的核心,如果牢記了運(yùn)輸符的優(yōu)先級(jí)和結(jié)合律,在讀懂程序的過程中就可以做到事半功倍,而數(shù)據(jù)類型、變量、常量則一帶而過。這樣既可以提高課堂效率,又避免學(xué)生因過于繁雜的內(nèi)容失去耐心。又如,講解數(shù)組與指針時(shí),區(qū)分?jǐn)?shù)組名與指針變量的相同與不同,許多學(xué)生還會(huì)糾結(jié)引入指針的必要性,但通過解釋類似郵件快遞的具體地址與慣常用名在收件速度上的不同,則增強(qiáng)學(xué)生對(duì)指針變量的理解。總之,難易結(jié)合,通過簡(jiǎn)單易懂的例子解釋復(fù)雜問題,需要死記硬背的基本概念則通過讀程序、改寫程序得以加強(qiáng),由此為自己編寫程序打下良好的基礎(chǔ)。
第二階段的教學(xué)是在學(xué)生已經(jīng)掌握基本語(yǔ)言要素的基礎(chǔ)上展開。這時(shí)可以延續(xù)前面的教學(xué)模式,用少量的時(shí)間對(duì)知識(shí)要點(diǎn)大致講述,不過多涉及細(xì)節(jié)問題,布置較大的案例程序進(jìn)行分析和練習(xí),總結(jié)所學(xué)知識(shí)。本階段要遵循循序漸進(jìn)的原則,先要求學(xué)生讀懂程序,再修改部分程序、觀察程序的運(yùn)行結(jié)果,然后要求學(xué)生對(duì)解決類似的問題嘗試著編寫程序,最后擺脫開熟悉的命題,提出完全陌生的問題讓學(xué)生解決。
第三階段是課程設(shè)計(jì),教師提出的選題要能調(diào)動(dòng)學(xué)生的興趣和參與熱情,既實(shí)用又不至于讓學(xué)生產(chǎn)生畏難情緒。例如,編寫學(xué)生學(xué)籍管理、輸出企業(yè)的人事管理等。該階段是對(duì)前期學(xué)習(xí)的總結(jié)。
3.2設(shè)立案例庫(kù)
案例庫(kù)的質(zhì)量將影響教學(xué)效果。因此案例必須:
1)典型性,能夠覆蓋課程的相關(guān)知識(shí)點(diǎn)。
2)實(shí)用性、趣味性,便于調(diào)動(dòng)學(xué)生的興趣。
3)針對(duì)性,要考慮到學(xué)生的接受能力。
4)系統(tǒng)性,案例間要相互聯(lián)系。
例如,講解數(shù)組與指針的時(shí),列舉了一個(gè)例子,給出利用下標(biāo)法編寫的程序,要求學(xué)生修改為利用指針編程。另外,提醒學(xué)生如何正確使用一維數(shù)組和二維數(shù)組。
例題:已知5個(gè)學(xué)生3門課程的成績(jī)。求:(1) 每個(gè)學(xué)生平均成績(jī);(2) 每門課程的平成績(jī);(3) 總平均成績(jī)。
思路:
1) 定義二維數(shù)組score[5][3]存儲(chǔ)成績(jī);
2) 定義一維數(shù)組st_aver[5]存學(xué)生平均成績(jī);
3) 定義一維數(shù)組cu_aver[3]存課程平均成績(jī);
4) 定義變量aver存儲(chǔ)總平均成績(jī)。
源程序:
#include
int main()
{ float score[5][3];
float st_aver[5],cu_aver[3];
float sum,aver;
int i,j,t;
for(i=0;i<5;i++)
{ printf(“input a shudent score:”);
for(j=0;j<3;j++)
scanf(“%f”,&score[i][j]); }
for(i=0;i<5;i++)
{ sum=0;
for(j=0;j<3;j++)
sum=sum+score[i][j];
st_aver[i]=sum/3;}
for(j=0;j<3;j++)
{ sum=0;
for(i=0;i<5;i++)
sum=sum+score[i][j];
cu_aver[j]=sum/5;}
sum=0;
for(i=1;i<3;i++)
sum=sum+cu_aver[i];
aver=sum/3;
for(i=0;i<5;i++)
printf("%6.1f",st_aver[i]);
printf("\n");
for(i=0;i<3;i++)
printf("%6.1f",cu_aver[i]);
printf("\n");
printf("aver=%f\n",aver);
return 0;}
需要注意的是讓學(xué)生自己編程,除了布置課后作業(yè),課堂上的練習(xí)也非常必要。因?yàn)榻處熀茈y控制課后學(xué)生到底用了多長(zhǎng)時(shí)間去編程或思考編程,但是讓他們?cè)谡n堂上的練習(xí)又要占用大量時(shí)間,這和緊張的課時(shí)有沖突,作者認(rèn)為比較折中的辦法是編程時(shí)教師多用板書,由此在板書過程中帶動(dòng)學(xué)生跟著思考,部分代碼教師可以特意空出來,告知學(xué)生這部分代碼要做什么事,然后可以由學(xué)生補(bǔ)充完整。
3.3項(xiàng)目教學(xué)策略
“大任務(wù)”與“小事件”是教學(xué)改革的核心。所謂“大任務(wù)”是指能夠結(jié)合大部分知識(shí)點(diǎn),并具有實(shí)用性,它是學(xué)生在經(jīng)過C語(yǔ)言程序設(shè)計(jì)第一、二階段的學(xué)習(xí)后,必須完成的項(xiàng)目。所謂“小事件”是某個(gè)具體知識(shí)點(diǎn),可以是語(yǔ)言要素,也可以是一小段典型案例(例如,選擇排序)。在整個(gè)教學(xué)過程中,“小事件”是“大任務(wù)”必要的準(zhǔn)備,是實(shí)現(xiàn)“大任務(wù)”的基礎(chǔ);“大任務(wù)”是“小事件”的延伸和拓展,是“小事件”的綜合運(yùn)用,兩者相輔相成。
例如,在完成第一階段語(yǔ)言要素的講授后,就布置課程的綜合設(shè)計(jì)題目——學(xué)生成績(jī)管理系統(tǒng)。將“大任務(wù)”分解成若干“小事件”,并標(biāo)注出每個(gè)“小事件”涉及的知識(shí)點(diǎn)、解決問題的思路和著重點(diǎn),讓學(xué)生帶著任務(wù)去學(xué)習(xí),使學(xué)生有目的的吸取知識(shí),提供學(xué)習(xí)效率,然后通過這個(gè)項(xiàng)目,將所學(xué)知識(shí)整合起來,完成一個(gè)實(shí)用系統(tǒng)。由此讓學(xué)生認(rèn)識(shí)到所學(xué)知識(shí)的意義,并更加激發(fā)其學(xué)習(xí)興趣。
案例教學(xué)的目的就是要調(diào)動(dòng)學(xué)生學(xué)習(xí)的主觀能動(dòng)性,讓學(xué)生帶著問題去學(xué)習(xí)、探索,在尋找解決問題方案的過程中掌握知識(shí)。
4 結(jié)論
學(xué)生掌握了C語(yǔ)言的基本要素后,通過將“大任務(wù)”分解成若干“小事件”,以“小事件”講解為中心,對(duì)案例分析——分解——模擬設(shè)計(jì)——模塊整合等幾個(gè)環(huán)節(jié)組織教學(xué)的案例驅(qū)動(dòng)教學(xué)方法,有助于提高學(xué)生的學(xué)習(xí)興趣,有利于培養(yǎng)學(xué)生發(fā)散思維的能力。
“C語(yǔ)言程序設(shè)計(jì)”案例驅(qū)動(dòng)教學(xué)模式是一種學(xué)生變被動(dòng)學(xué)習(xí)為主動(dòng)學(xué)習(xí)的有效方法,由于能夠理論聯(lián)系實(shí)際,讓學(xué)生帶著問題進(jìn)入課程的學(xué)習(xí),讓學(xué)生改變以往混學(xué)分的思想,對(duì)這門課的認(rèn)同度有了明顯提高。另外,大大加強(qiáng)了師生間的互動(dòng)交流,教學(xué)相長(zhǎng)得以充分體現(xiàn),部分學(xué)生還結(jié)合自己的專業(yè)和愛好,積極參與教師的科研工作,其探究能力和創(chuàng)新意識(shí)得到了較好的培養(yǎng)。
參考文獻(xiàn):
[1] 譚浩強(qiáng). C程序設(shè)計(jì)[M].3版.清華大學(xué)出版社 2005.
[2] 譚浩強(qiáng). C程序設(shè)計(jì)題解與上機(jī)指導(dǎo)[M].3版.清華大學(xué)出版社,2005.
[3] 呂忠寶. 項(xiàng)目教學(xué)法與傳統(tǒng)教學(xué)法的比較[J].科技信息,2007(9).