吳麗娟, 吳建軍, 李 柳
(沈陽師范大學 物理科學與技術學院, 沈陽 110034)
?
《C程序設計》課堂教學方法改革創新的探索
吳麗娟, 吳建軍, 李 柳
(沈陽師范大學 物理科學與技術學院, 沈陽 110034)
通過多年的《C程序設計》課程及課堂的教學改革探索,對課堂教學方法和教學環節的創新進行了歸納總結,提出了“X+3”課堂教學方法。在課堂教學中,根據不同教學環節和教學內容采用不同的教學方法。首先,采用問題驅動法引入新知識,使學生明確學習的內容和解決的問題,程序舉例法鞏固所學的知識,遞進式問題驅動教學法完成課堂難點和重點的講解,掌握解決問題的方法;然后,歸納總結與練習的創新教學法加強學生對所學知識的掌握與理解,鍛煉學生利用所學知識分析問題與解決問題的能力;最后,通過習題課的翻轉嘗試教學法,提升學生創新探索的能力。通過對課堂教學環節改革創新的問卷調查和信息反饋,教學方法得到學生的認可,并取得了良好的效果。
課堂教學; 問題驅動; “X+3”教學法; 總結與練習; 翻轉嘗試
《C程序設計》作為一門計算機程序設計基礎課程,是沈陽師范大學物理科學學院電子信息工程專業的必修基礎課,是學習本專業其他課程的前修課程。該課程的概念、語法和規則較多,語句使用靈活,對于一年級剛接觸編程的學生是一門較難掌握的課程。
課堂教學作為課程的關鍵的教學單元,其教學方法的創新改革,直接影響課程的教學質量和學生的學習效果以及創新創業教育。目前該課程的課堂教學大多采用傳統的講授式教學法,教師認認真真地講完精心準備的一堂課后,學生的反饋的信息是“基本理解概念和知識點,但用語句自己編寫程序比較困難”,因此對于計算機語言類課程,課堂教學方法的改革創新勢在必行。
C語言是一種結構化的程序設計語言,數據結構豐富,語法規則多,理論、實驗課時有限,要求學生不僅要掌握數據結構、典型算法,還要利用C語言完成程序的設計編寫, 這么多的教學內容,在有限的課堂教學內完成,教學任務是很繁重的。其次,上課學生人數多,采用傳統的講授式教學法很難了解學生對知識的掌握情況。《C程序設計》課程作為學校的課堂教學改革的試點課程,課堂教學的改革創新是課程改革重要部分,經過多年的改革與實踐,本文提出了“X+3”課堂教學方法的改革創新,利用多媒體教學課件與教學平臺輔助教學。
“X+3”方法中的“X”指的是根據不同教學內容和教學要求采用的不同教學方法。如問題驅動法、案例法、翻轉嘗試法、啟發式、應用舉例法、實驗對比法、遞進案例法等。方法中的“3”指的是問題驅動教學法、歸納練習和課堂翻轉教學法。
問題驅動教學法,就是在教學過程中教師根據教學內容設置問題,將問題作為知識講解的載體,將新知識點融入問題中,讓學生主動思考問題的解決方法,并在解決過程問題中講解知識點,將問題貫穿整個課堂教學過程的教學方法。
由于《C程序設計》課程的基本概念較多,語法、數據結構復雜,算法較難,在教學過程中,在課堂上通過問題教學法可以提高學生的注意力,課堂氣氛活躍,有利地調動學生思維的積極性和主動性,充分體現學生的主體地位。
問題驅動教學法可以利用課堂提問的方法,調動學生去思考問題;或者使用演示運行結果的方法,使學生因為看到運行結果而引起探索問題的原因;或者使用改錯的方法,讓學生思考錯誤的原因,從而掌握所學知識。
歸納練習和課堂翻轉教學法,對于課堂新知識點的教學過程可分為:1)教授過程,使學生掌握新知識的概念和應用;2)歸納過程,即對本節課所學的知識進行歸納總結,找出難點和重點;3)練習過程, 根據本節課所學的知識和應用舉例,進行基本概念和知識提升的練習,在做練習的過程中,學生對所學的知識進行鞏固,達到自主學習的目的。教師檢查,從中發現學生對知識的掌握情況,及時補充講解,使學生對本節所學的知識進行充分的理解和掌握;4)在習題課中采用課堂翻轉嘗試教學法,以學生為主體,教師為學生提供嘗試環境試題,讓學生獨立思考,探索創新。
《C程序設計》課堂教學環節包括復習,回顧上節內容;新知識的引入,詳細講解新知識點,應用舉例;歸納總結與課堂練習等。根據各階段不同的教學要求,采用不同的教學方法。
2.1 問題驅動法引入新知識
引入新知識時,教學目標是充分調動學生的學習積極性,明確學習的內容,思考如何解決問題,掌握知識點。
例如從如何解決以下問題入手,引入循環結構新知識點:1) 輸入全班90個學生的成績;2) 求100個整數和;3) 查找90個學生中C成績的最高分;4) 統計一組數中素數的個數。本章教學內容比較簡單,教學時間較短,只需點到“要學什么,怎么實現”就可以。
例1 求100個整數和的求解。其代碼如下:
for(i=1;i<100;i++)
sum=sum+i;
教師列舉需要編程解決的問題,并進行算法分析,寫出程序流程圖和算法的主要語句,講解所用到的新的知識內容,實現循環控制,分析循環控制注意的關鍵問題。選取的案例應圍繞教學重、難點,程序簡潔,內容接近學生原有知識和能力,具有一定的應用性和趣味性。充分激發學生的好奇心和求知欲,使學生產生學習的動力。
2.2 程序舉例法鞏固新知識
程序舉例鞏固新知識點,解決實際問題。在課堂教學階段,教學目標是要學生熟練掌握C語言的語法知識點和典型算法的設計。
案例1 判斷n是否是素數[9]
#include
void main()
{
int n,i,k;
scanf(″%d″,&n);
k=sqrt(n);
for(i=2;i<=k;i++)
if(n%i==0)break;
if(i>=k+1)
printf(″%d is a prime number ″,n);
else
printf(″%d is not a prime number ″,n);
}
語法知識點:for(; ;)語句的使用語法;
算法設計:判斷素數的算法。
在計算機語言學習過程中,編寫程序要解決的問題一般都是簡單的數學問題,學生對問題本身都是清楚的,但如何使用計算機編寫程序來解決問題對初學者來說是一個難點,如果只是簡單的程序講解,學生會感覺平淡而失去學習興趣,無法很好地掌握語句的使用和程序設計的精髓。
判斷素數的算法是本課中最典型的算法之一,其難點是for(; ;)語句循環結束后,循環控制變量i值的變化情況,就此問題在課堂上讓學生進行思考,i值在什么情況下n是素數?將所學的新知識點融入到問題中,以程序為載體,講授知識點;問題作為驅動,理解for語句在程序中的應用;分析程序,給出運行結果,學生閱讀程序后,明確所學的知識內容,掌握語句的初步使用和算法的設計思想。
2.3 遞進式問題驅動法解決難點
遞進式問題驅動完成課堂難點的講解。指針一章是本書的難點,利用已學的知識引導學生分析案例,討論問題的解決方法,遞進式提問,環環緊扣,引導學生分析并解答問題,掌握課堂的難點。
案例2 返回值指針值得函數
學生在上機實驗中用數組的方法實現了求10個學生5門功課的平均分,并且要排序平均分。
#define N 10
#define M 5
float a_stu[N];
void aver_stu(float score[10][5])
{int i,j;
float s;
for(i=0;i {s=0; for(j=0;j s+=score[i][j]; a_stu[i]=s/5.0;} } 案例分析3 #define N 10 #define M 5 float *aver_stu(void) {int i,j; float s; float a_stu[N]; for(i=0;i {s=0; for(j=0;j s+=score[i][j]; a_stu[i]=s/5.0; } return a_stu; } 案例1實驗的目的是要求學生掌握函數的定義和全局變量的使用,所以在實驗中每個學生的平均分是用全局變量定義。在講到函數返回值是指針時,在本實驗的基礎上提出問題:如果每個學生的平均分不用全局變量,如何將在函數中求得的所有學生的平均分如何帶回到主調函數中?函數的返回值是什么? 學生自主思考后教師給出提示:數組的名字代表什么?函數的返回類型如何定義? 由此引出函數返回值為指針類型,給出返回值為指針類型的函數的定義,學生參與思考和逐步遞進式的案例分析3,學生掌握了本課的主要知識點,然后給出舉一反三的實踐練習題,鞏固本課堂所學知識。 2.4 歸納練習法掌握知識點 課程總結時,對本節課的知識點進行歸納總結,在此基礎上針對所學的新知識點進行練習,對C課程,主要掌握新語句的語法和功能,以及解決實際問題的應用。所以課堂練習題有基本概念的掌握和應用2部分,首先由教師給出課堂練習題,題目要具備全面性、完整性、覆蓋新的知識內容和已學過的知識,從基本概念題到綜合應用題,難度要適中,由淺入深引導學生分析、討論,給出答案,歸納總結所用到的知識點。 在完整的案例分析之后,借鑒遞進式教學法的思想,對練習題進一步擴展,增加難度,舉一反三,啟發學生對案例進一步完善。 1) 循環結構語句語法的實踐練習案例 以下程序段中do-while循環的結束條件是( ) int n=0,i; do { scanf(″%d″,&i); n++; }while(p!=567 &&n<3); A) i的值不等于567或者n的值小于3; B) i的值等于567或者n的值大于等于3; C) i的值不等于567并且n的值小于3; D) i的值等于567并且n的值大于等于3; 2) 循環結構階乘算法的實踐練習案例 編寫程序,求5! #include void main() {int t=1,i=2; do {t=t*i; i++; } while(i<=5 ); printf(″t=%d″,t); } 3) 所學知識點的綜合實踐案例 有如下程序 #include #include void main() { int n1=0,n2=0; char c; for( ;(c=getchar())!= ′#′; ) switch(c) {case ′a′ case ′h′: default: n1++; case ′0′: n2++; } printf(″%d,%d
″,n1,n2); } 如果從鍵盤上輸入china#〈回車〉,則程序運行結果為( ) A) 5,5 B) 5,0 C) 6,6 D) 2,0 通過練習鞏固所學的內容,使學生掌握分支、循環結構控制語句語法和應用。在練習過程中充分調動學生的積極性與主動性,讓學生“邊練邊學”,進一步提高學生對基本概念和語法規則的理解和掌握,使學生更加深刻的理解課堂講解中沒有掌握的知識點,并將學到的知識轉化為編程的能力,使不同程度的學生都能在此教學環節得到提高,達到課堂所學知識在本節課就能消化掌握的目的。 由簡到難的遞進式課堂練習,滿足了不同程度學生學習的要求,可以幾個同學一起討論,互相幫助,互相解答疑問。在典型習題的分析過程中,要求學生積極參與,充分挖掘學生自主學習的能力和學習信心,培養學生實踐創新能力,同時倡導學生要具有團隊合作精神,因此,歸納總結與練習是課堂教學必不可少的教學環節。 2.5 翻轉嘗試教學法提升學生創新能力 課堂翻轉嘗試教學一般用于習題課中。該教學法以學生為主體,教師為學生創建嘗試條件和試題,為學生的嘗試活動提出任務,學生在所學的知識的基礎上,用“七分熟”的舊知識創新學習“三分生”的新知識。試題包含新舊知識的連接點和探究性,能夠調動學生學習探索新問題的興趣。 案例4 求3*3矩陣的對角線元素的和 解答1 #include void main() {int a[3][3],sum=0; int i,j; for(i=0;i<3;i++) for(j=0;j<3;j++) scanf(″%d″,&a[i][j]); for(i=0;i<3;i++) sum=sum+a[i][i]; printf(″sum=%6d
″,sum); } 解答2 #include〈stdio.h〉 void main() {int a[3][3],sum=0; int i,j; for(i=0;i<3;i++) for(j=0;j<3;j++) scanf(″%d″,&a[i][j]); for(i=0;i<3;i++) for(j=0;j<3;j++) if(i==j||i+j==2) sum=sum+a[i][j]; printf(″sum=%6d
″,sum); } 解答1是習題解答指導書中給出的答案,只求出正方向矩陣對角線元素和,本題作為反轉嘗試法教學的案例,要求學生自主設計算法并編寫程序,教師檢查后提出思考討論的問題:思考對角線有幾條?如何判斷對角線上的元素?讓學生討論判斷條件,并修改完善程序如解答2所示。 通過翻轉嘗試教學法培養學生分析問題、全面思考的能力,掌握C程序算法的設計思想,發展學生思維,增強學生的創新能力,也為教師有針對性地重點講解提供信息。 “教學有法,但無定法”,沒有一種放之四海而皆準的教學方法,應根據不同的教學內容、學生的理解情況,采用不同的教學方法的組合與創新,形成符合實際的高效教學方法[9]。 在《C程序設計》課程的課堂教學中,通過多年的教學實踐,將問題驅動教學,舉例教學,啟發教學、遞進式教學與傳統的講授教學相結合,營造了良好的課堂教學氣氛,激發了學生的學習興趣,讓學生在愉快的環境下學習,既提高了教學效率,又培養了學生獨立學習的能力。通過2015級電子專業79份問卷調查和信息反饋,對啟發與講授,講授與互動的3+X教學方法得到所有學生的認可,并取得了良好的效果。2015級電子專業79人,在2015—2016學年第2學期《C程序設計》課程期末考試中良好以上占29.5%,不及格率占8.9%,其中包含重修學生22人,是歷屆學生中及格率最高的一年。 [1]相方莉.“微課”翻轉課堂在高職C語言教學中的應用研究[J]. 中國教育信息化·基礎教育, 2014(20):8-10. [2]劉小晶. 翻轉課堂模式在“數據結構”課程教學中的應用研究[J]. 教學實踐與教師專業發展, 2014(8):105-109. [3]曾明星. 軟件開發類課程翻轉課堂教學模式研究[J]. 實驗室研究與探索, 2014,3(2):203-206. [4]王蕊,薩娜. C_程序設計課程的翻轉課堂教學模式研究與實踐[J]. 軟件工程師, 2015,18(3):49-50. [5]韓新才. 高校生物技術專業教學方法改革探索與實踐[J]. 廣東化工, 2008,35(1):118-120. [6]王新光,萬定生,張希偉. 淺談程序設計語言教學中工程能力的培養[J]. 吉林大學學報(信息科學版), 2005,23(增刊2):110-112. [7]許淑華. C++程序設計課堂教學“X+2"方法探討[J]. 計算機時代, 2014(6):63-65. [8]譚浩強. C程序設計[M]. 4版. 北京:清華大學出版社, 2012. [9]張黎寧,苗哲,周宇. 基于多種教學方法優勢互補的《C程序設計》課堂教學[J]. 計算機工程應用技術, 2008,4(8):2284-2285. Exploration ofCprogramdesignteaching methods reform and innovation WULijuan,WUJianjun,LILiu (College of Physics Science and Technology, Shenyang Normal University, Shenyang 110034, China) The classroom teaching methods and the teaching link innovation are induced and summed up by exploring ofCprogramdesigncourse teaching of many years in the paper. The “X +3” classroom teaching method are put forward. The different teaching methods are used according to the different teaching links and teaching contents in class teaching. At first new knowledge points are introduced by adopting the problem-driven method to make students clear learning content and the problem; the new knowledge are consolidated by the program example, class difficulty and important parts are explained to master the methods of solving the problem by progressive problem-driven teaching method; Then innovation teaching methods of summing up and practice strengthen the students master and understand the knowledge that have studied, and exercise students to analyze and solve problems abilities; Finally improve students’ ability of innovation to explore by flipping class and try teaching model. The teaching method gets the students approved and achieved good results through questionnaire investigation and information feedback. classroom teaching; problem-driven; “X + 3” teaching method; generalization and practice; flipped class and try 2016-06-19。 遼寧省科技廳自然科學基金資助項目(201102205)。 吳麗娟(1964-),女,遼寧遼中人,沈陽師范大學教授,博士。 1673-5862(2016)04-0503-06 G642.0 A 10.3969/ j.issn.1673-5862.2016.04.0263 結 論