翁省輝,吳方
(北京理工大學珠海學院計算機學院,廣東珠海519085)
C語言作為程序設計的入門課程,我校各理工科專業(yè)均有開設。該課程的主要目的是培養(yǎng)學生的計算思維能力,初步掌握程序設計和程序實現方法,對培養(yǎng)學生程序設計基本思想、利用計算機求解問題能力有著重要的意義[1-2]。
本文針對學生在學習該課程中普遍存在的一些問題,探討以漸進式案例教學為主線的模式,使學生更容易掌握課程知識點。本次探討并不是完全放棄傳統(tǒng)的教學方式,而是將兩者有機結合,教學過程中將案例教學融入傳統(tǒng)教學中[3]。
以北京理工大學珠海學院面向全校非計算機專業(yè)開設的C語言程序設計課程為例,該課程重點講授計算機基礎、進制轉換、C語言簡介、編程環(huán)境、基本數據類型、標識符、運算符、輸入輸出、順序結構、分支結構、循環(huán)結構、數組、字符串、函數等內容,而課程學時為48學時。
由于課程性質以及學時等原因,傳統(tǒng)教學容易出現注重語法算法知識,輔以例題講解,學生被動地接受知識[4]。這類方法雖能較好地保證知識的系統(tǒng)性,但是容易導致學生死記硬背知識點、學習興趣不大、掌握知識不牢固等問題,不能充分發(fā)揮學生學習的興趣,導致教學效果較差。
教材中的傳統(tǒng)案例多數以數學知識為主[5]。一方面我校部分學生數學較薄弱,對案例的理解有一定困難,并且離實際應用較遠,學生普遍存在疑惑:學習C語言到底有什么用,無法感受C語言帶來的成就感與自豪感;另一方面這些案例大都圍繞知識點設計成一個個獨立的案例,無法有效串聯起來。
漸進式案例教學是指在教學過程中以一個綜合案例做為主線來展開教學,功能由簡到難,不斷引入新問題,利用每個章節(jié)的知識點逐步解決問題、完善功能,最終達到一個完整的、具有較強實際意義的綜合案例,從而培養(yǎng)學生興趣、培養(yǎng)學生分析、解決問題的能力的一種教學方法。具體實施時,先向學生展示案例的最終效果,然后逐步引導學生完成。
該教學模式有以下幾個原則:
教學案例的選擇直接影響學生的積極性。興趣是最好的老師,如果案例沒選好,學生初學時很難認可它的價值,學習缺乏目地性。這就需要在選擇案例時要充分考慮其趣味性,讓學生產生興趣,從而調動學生的學習熱情。
學生參與討論是案例教學重要的一環(huán),通過分析案例,學生可由被動學習變?yōu)橹鲃?,教師組織學生討論,并通過恰當的引導,讓學生主動提出問題,并思考如何解決。
初始的案例可能覆蓋部分知識點,這就要求要對案例進行擴展,既要符合實際需求,又要盡量覆蓋大部分知識點。
本文所采用的案例是一個定時關機的綜合案例。多年的演示情況可以看出學生對這個案例表現出較大的興趣。整個程序的運行結果如圖1所示。
圖1 定時關機運行界面Fig.1 Timing shutdown operation interface
下面以課程教材李鳳霞教授主編的《C語言程序設計教程(第3版)》[6]為例,列舉該案例覆蓋教材中的章節(jié)內容和知識點(我校非計算機專業(yè)學生只要求講到函數,如有需要,案例可以再進行擴展),如表1所示。
表1 定時關機案例覆蓋的章節(jié)內容及知識點Tab.1 Timing shutdown case covered sections of content and know ledge points
例中的關機功能是通過執(zhí)行DOS命令中的shutdown來實現的,所以在講解案例前需要講解一些預備知識點。首先需要講解shutdown這個命令以及參數的意義,然后再講解stdlib.h中的system函數的用法。最簡單的關機代碼如下:
#include<stdio.h>
#include<stdlib.h>
int main()
{
printf("歡迎使用定時關機程序 ");
system("shutdown-s-t 100");/*“-s”表示關閉計算機,“-t”表括示設置關機倒計時,后面的100是時間*/
return 0;
}
取消關機代碼如下:
#include<stdio.h>
#include<stdlib.h>
int main()
{
system("shutdown-a");/*“-a”表示取消關閉計算機*/
return 0;
}
下面就以上兩段代碼探討漸進式案例教學。
在學習完最簡單的HelloWolrd程序之后,就可以利用printf函數和轉義符‘ ’在關機代碼的基礎上進行主界面設計。主要代碼如下:
printf("---------------------------------- ");
printf("歡迎使用定時關機程序! 1表示關機 2表示取消關機 0表示退出 ");
printf("---------------------------------- ");printf("請輸入您的選擇: ");
不難看出,以上的代碼分別實現了關機和取消關機功能,能否將以上代碼合在一起實現一個既可以關機又可以取消關機的程序?接下來可以引導學生應用所學知識來實現此功能。該問題的解決包括3個方面:
1)如何實現讓用戶輸入自己的選擇。此時可以使用scanf函數,同時提醒學生注意標識符的命名規(guī)范以及良好的代碼規(guī)范。主要代碼如下:
int choice=0;
printf("---------------------------------- ");
printf("歡迎使用定時關機程序! 1表示關機 2表示取消關機 0表示退出 ");
printf("---------------------------------- ");
printf("請輸入您的選擇: ");
scanf("%d",&choice);
2)如何跟據用戶的選擇完成相應的功能。此時可以使用多分支if語句來實現。值得注意的是,學生經常將”==”與‘=’混淆,此時可以故意寫漏一個‘=’以加深學生的印象。另外,此時可以講解1==choice與choice==1的區(qū)別,前者能夠避免將”==”寫成‘=’而編譯器檢查不出的問題。主要代碼如下:
if(1==choice)
{
system("shutdown-s-t 100");
}
else if(2==choice)
{
system("shutdown-a");
}
else if(0==choice)
{
/*此處代碼之后再添加*/
}
else
{
printf("您的輸入有誤! 請重新輸入: ");
}
3)程序運行后一旦用戶完成輸入程序立即退出。這一問題可以通過引入getch()函數(需要添加頭文件conio.h)來解決。在程序語句return 0之前添加getch()即可實現。
以上的程序只能讓用戶做出一次選擇,而且一旦用戶輸入錯誤,程序運行結束,程序設計不夠人性化,此時通過引入while語句和break語句可以解決這一問題。主要代碼如下:
while(1)/*條件為1,永遠滿足,會一直循環(huán)直至break
退出*/
{
if(1==choice)
{
system("shutdown-s-t 100");
}
else if(2==choice)
{
system("shutdown-a");
}
else if(0==choice)
{
break;/*此處在3.2的基礎上增加break是為了在用戶輸入0時跳出循環(huán)*/
}
}
以上的代碼實現了定時關機功能,但是時間并不能由用戶自己指定,案例的實用性大打折扣,此時可以引導學生使用scanf函數讓用戶輸入一個時間(int型),然后通過使用itoa函數將int轉換成字符串型,最后使用字符串函數strcat函數將兩個字符串連接在一起。主要代碼如下:
int hour=0,minute=0;
int seconds=0;
printf("請設置關閉超時時間:如1 20表示1小時20分鐘后關機,請輸入 ");
scanf("%d%d",&hour,&minute);
seconds=hour*3600+minute*60;
char strTime[20];
itoa(seconds,strTime,10);
char strCommands[30]="shutdown-s-t";
strcat(strCommands,strTime);
printf("系統(tǒng)將在%d小時%d分鐘(%d秒)后關閉! ",hour,minute,seconds);
system(strCommands);
在講解函數這一章節(jié)內容的時候將以上代碼中功能相近的代碼寫在一個函數中。如3.1中主界面中的代碼可以作為一個函數的函數體。主要代碼如下:
void PrintUI
{
printf("---------------------------------- ");
printf("歡迎使用定時關機程序! 1表示關機 2表示取消關機 0表示退出 ");
printf("---------------------------------- ");
printf("請輸入您的選擇: ");
}
C語言程序設計課程概念抽象、語法枯燥、知識眾多,對學生的學習帶來很大的壓力。鑒于該課程的重要性,應該對該課程進行各種探索,本文提出的教學模式也是一個嘗試。多年的實踐結果表明,本文中的定時關機案例能夠讓學生認識到C語言的實用性,引起學生的極大興趣,能改變學生被動學習的局面,取得了較好的教學效果。
[1] 徐大華.C語言程序設計教學探索[J].信息技術,2010(12):26-28.XU Da-hua.Discussion on teaching-method with C programming language[J].Information Technology,2010(12):26-28.
[2] 葛文庚,藺莉.程序設計基礎課程教學模式研究與設計[J].電子設計工程,2012(4):44-46.GE Wen-geng,LIN Li.Research and design of the program design foundation course teaching[J].International Electronic Elements,2012(4):44-46.
[3] 徐新海,林宇斐.注重計算思維的啟發(fā)式C語言語法教學[J].計算機教育,2014(17):1-4.XU Xin-hai,LIN Yu-fei.Pay attention to the heuristic C language grammar teaching of Computational Thinking[J].IT Education,2014(17):1-4.
[4] 米磊,賁可榮,趙皚.“面向學生”的C語言教學方法研究與實踐[J].計算機工程與科學,2014(A1):5-9.MI Lei,BEN Ke-rong,ZHAO Ai.“Student-Oriented”teaching method of C language[J].Computer Engineering&Science,2014(A1):5-9.
[5] 劉淑嫻,阿里甫·庫爾班,李曉華.簡單案例為主線的教學模式在C語言教學中的應用[J].計算機教育,2011(4):89-93.LIU Shu-xian,A Li-pu·KU Er-ban,LI Xiao-hua.Application of a simple case of the main line of the teaching model in C language teaching[J].IT Education,2011(4):89-93.
[6] 李鳳霞.C語言程序設計教程[M].3版.北京:北京理工大學出版社,2011.