趙素萍
(山西農業(yè)大學信息學院信息工程系,晉中 030800)
案例嵌套;案例驅動;循環(huán)嵌套
編程難已經是我國傳統(tǒng)灌輸式教學下導致的不爭的事實。因為編程必須通過大量的動手實踐才能掌握的一項技能。就好比玩游戲,如果將玩游戲作為課堂教學的一部分,課堂上教師講游戲規(guī)則,講的學生都快睡著了,下課的時候給學生們說你們課后要多練習。等到學生練習了時候又忘了規(guī)則是什么,相信很多學生都是干脆放棄不玩了。
同樣道理,編程其實就是玩的過程,像搭積木一樣,一個模塊一個模塊地編好,然后整合到一個項目中,最后由測試人員在運行中尋找錯誤,并將錯誤反饋給編程人員修改然后再測試,依此反復,直到能成功運行。如果將編程放到課堂上講,只會將學生的興趣一點點的消磨掉。正如當我碰到我們學校其他系的同事時,很多人都說“編程好難呀,我當時就沒學會”??上攵敃r的好學生都學的一知半解,傳統(tǒng)教學是真的不適合實踐性強的課程。
為了吸引學生的學習興趣,平時要多注意大學生關注的流行元素,將他們生活中的元素融合到教學案例中。
案例教學法指教師在教學過程中,以真實的大學生生活情境或事件為題材提出問題,在講授知識點的過程中提出小的案例,引導學生解決問題,當學生掌握當堂課的知識點后,分析案例并引導學生解決問題。該方法是激勵學生主動參與學習活動的一種教學方法。
每堂課開始時,首先回顧完上節(jié)課的內容后,拋出一個大案例,案例的特點必須是之前的知識點不能解決的問題。然后是本堂課內容的講授,而知識點的講授又必須引入多個小案例,即案例嵌套。學生學習完本節(jié)課的內容后,通過引導學生將大的案例解決。通過提出問題-分析問題-解決問題的流程,幫助學生掌握當堂課的知識點。此外,通過該案例的解決又可以加深對當堂課內容的掌握。最重要的是,學生知道為什么要學,學了能干什么,從而提高學生的獲得感。
應選擇學生熟悉的案例,這樣容易開展案例分析與功能挖掘。然后采用自頂向下的程序設計方法,具體分析案例將實現的功能。下面通過《C語言程序設計》這門課的兩個教學實施案例過程來介紹案例教學的應用。
(1)案例九九乘法表
該案例所涉及到的知識點為循環(huán)嵌套。通過多年的程序設計課程的教學發(fā)現,循環(huán)嵌套是較難掌握的知識點,通過案例嵌套法講解后,學生的掌握效果良好。
先回顧for循環(huán)的執(zhí)行流程,主要通過叫后排學生回答問題的方式來復習前面的知識點,這種做法的好處是:①減少學生玩手機的現狀;②提高學生的注意力;③提示學生該知識點的重要性;學生掌握了for循環(huán)的執(zhí)行流程后,讓學生分析一個例子:
for(i=1;i<=5;i++)
{for(j=1;j<=5;j++)printf(“%d,%d”,i,j);
printf(“ ”);}
根據學生掌握的for循環(huán)執(zhí)行流程的知識點,通過提示引導的方式,學生能猜出運行結果,然后在軟件中運行程序,結果如圖1:
圖1 執(zhí)行結果
通過對結果的觀察,可以發(fā)現,外層循環(huán)的循環(huán)變量i為行,內層循環(huán)的循環(huán)變量j為列;該結論是非常重要的,一定要在講課過程中多次強調。在此基礎上,要求學生思考如何寫成九九乘法表,即:
i*j=z(z為i和j的乘積)如2*2=4
回憶格式輸出的知識點,即可得出只需要將輸出語句從:
printf("%d,%d",i,j);
修改為:
printf("%d*%d=%d",i,j,i*j);
同時將行列的范圍改為1-9,得出的結果如圖2:
圖2 不對齊的執(zhí)行結果
通過觀察發(fā)現,從美觀上來說,并沒有對齊。提示學生規(guī)定結果z的最小寬度,如果寬度不夠,讓計算機補空格而不是人為補,若規(guī)定z最小寬度為3,則當z寬度為1則補2個空格,為2時補1一個空格,即可實現對齊,通過對知識點的提示,學生即會答出,將上面的輸出結果改為:
printf("%d*%d=%-3d",i,j,i*j);
通過對結果的分析,并和九九乘法表對比,即可得出,列j的范圍不能超過所在行的行數,即將內層循環(huán)改為:
for(j=1;j<=i;j++)printf(“%d*%d=%-3d”,i,j,i*j);
結果就是我們熟悉的九九乘法表,如圖3:
圖3 九九乘法表
通過一步一步的引導,學生是可以自己寫出九九乘法表的??吹阶罱K的結果時,學生臉上洋溢的笑容告訴我,案例驅動的教學方式不僅是可行的,而且是要大力提倡的。因為該教學方式不僅讓學生掌握了所要學習的知識點,同時學生也明白了為什么要學習,以及學了可以做什么。達到真正的學以致用,達到應用型本科院校的教學要求。
(2)游戲提示界面是否繼續(xù)的制作
該案例應用到的知識點是改變循環(huán)執(zhí)行狀態(tài)的語句,包括goto、break和continue;這三個語句有類似之處,也有區(qū)別。首先通過一個動畫讓學生對三個語句有個初步的印象:
圖4 三個語句的作用
首先復習循環(huán)嵌套,根據九九乘法表輸出由符號“*”構成的三角形,引導學生將直角三角形轉換為金字塔的形狀,即:
圖5
計算機執(zhí)行的過程其實是對現實世界的模擬,先讓學生想象在Word中輸入金字塔的步驟,第一步應該先輸入空格,第二步輸第一行的“*”,第三步輸換行,至此第一行輸入完成。下面行同第一行。問題是每一行前面的空格數是怎么確定的呢?
假設總行數n,當行數為i時,i行的空格數為k,星號數為j;
i+k=n、i=j
通過分析得出,空格數應該為n-i,*的個數為i,程序為
for(i=1;i<=5;i++){
for(k=1;k<=5-i;k++)printf(“”);//輸出所在行的空格數
for(j=1;j<=i;j++)printf(“*”);//輸出所在行的*
printf(“ ”);}
當i為1時,輸出空格的語句循環(huán)執(zhí)行4次,每次輸出一個空格,即為4個空格。輸出*的語句循環(huán)執(zhí)行一次,每次輸出一個*,即為1個星號。
根據對goto語句的作用分析,然后使用goto語句實現不輸出第二行的空格,即當行數為2時,跳過空格直接輸星號;
If(i==2)goto JumpSpace;
for(k=1;k<=5-i;k++)printf(“”);//輸出所在行的空格數
JumpSpace:
for(j=1;j<=i;j++)printf(“*”);//輸出所在行的*
根據對continue語句的作用分析,然后使用con?tinue語句實現不輸出第二行,即當行數為2時,結束本次循環(huán);
If(i==2)continue;
根據對break語句的作用分析,然后使用break語句實現只輸出前三行,即當行數為4時(輸出前3行后,i變?yōu)?)結束循環(huán)。
If(i==4)break;
在掌握了三個語句的作用后,通過對同一個圖形的變換,熟悉中又加入了一點點挑戰(zhàn),學生能積極主動地動腦筋,跟著教師的思路走,學生的學習興趣濃厚,教學效果非常好。
然而這還不夠,學以致用才是學習的最高境界,即必須讓學生明白學了這堂課可以做什么。而學生正處于對游戲敏感的時期,將所學知識應用到游戲中,也是學生比較感興趣的案例。
案例分析:用戶輸入1時重新開始,為了更形象地幫助學生了解continue、break和goto的含義,加入了提示語句“啊!夭折啦”。當用戶要退出時加入“拜拜啦”;當用戶輸入有誤時加入“不要搗亂”。
圖6
現在幾乎人手一臺智能手機,很多學生上課玩手機已經成了不爭的事實,如果能將學生玩手機和課堂教學結合起來,就會達到一石二鳥的效果。通過觀察發(fā)現,目前幾乎所有的付款方式都可以通過掃碼付款,慕課版教材上都有二維碼掃碼下載教學資料。通過Internet搜索,發(fā)現有二維碼生成器可以將文件上傳并將案例文件制作成二維碼,將生成的二維碼放到PPT中,學生即可通過掃碼的方式下載源程序,以供學生課堂或課后學習。
圖7
當今社會信息化高速發(fā)展、智能產品已經生活化。大數據、云計算、物聯(lián)網、人工智能等新興技術已經成為學校和社會非常受歡迎的熱門行業(yè)。對于每一個學習計算機知識的學生,想要掌握其中的一種或多種技術,都要通過大量的實踐來獲得。教師在這個過程中必須由淺入深地尋找大量的貼近學生生活的案例,充分調動學生的學習積極性,激發(fā)學生的興趣。根據應用型本科院校的教學特點,從教學實踐出發(fā),闡述了“案例驅動”教學法的應用,提供了二維碼分享教學資料的方法。實踐證明,教學效果顯著。