李德川 方振國 梁霞
【摘要】在現代工程教育背景下,要求加強培養知行合一的高素質專門人才。文中以C語言軟件設計教學為研究對象,通過對C語言教學現狀的分析,提出用階梯型目標對實驗對象進行分級設計,解決學生參與度低、編程不積極和實驗無效果的現象。在實驗設計中,結合生活實際,利用學生思維活躍特點,充分發揮學生的個性特長,把知識的傳授貫穿在程序設計中,將普及性教育與探究式教育相融合,探索提升實踐創新能力的教學新模式。
【關鍵詞】C語言? 探究? 新工科
【基金項目】安徽省“六卓越、一拔尖”卓越人才培養創新項目(2019zyrc056);淮北師范大學教學研究項目(JY19003, JY19037)。
【中圖分類號】G642 【文獻標識碼】A 【文章編號】2095-3089(2021)08-0054-03
新工科是在建立國際競爭的新優勢、加快我國經濟發展和產業升級的迫切需求下提出的,建立適應國家戰略發展的新型工程教育[1]。要站在國家戰略層次上審視產業和未來的需求,以服務和引領行業發展為己任,培養高素質的工程技術人才[2]。在教書育人的實踐中,要以立德樹人為根本,遵循工程教育的發展規律,從實踐出發,把教學內容與社會需求結合起來,堅持以學生為導向,尊重學生的個性發展,培養理論能力與工程能力交叉融合的創新型工程人才[1,3]。新工科背景下的人才培養要求我們從專業建設出發,緊密結合實踐[4],培養實踐能力強、創新水平高和綜合素質過硬的優秀畢業生[5]。在此背景下,我們從電子信息系的C語言程序設計的教學出發,探討實驗教學的新模式。C語言程序設計又稱為高級語言程序設計,是大學生必修的一門基礎課程[6]。學習程序設計既可以了解計算機的工作原理,也可以用來培養學生分析、總結和處理問題的能力。對于同一個問題,在C語言編程中可以有多種處理方法,程序的多重性可以極大地活躍學生的創造性思維。C語言實驗作為應用的一個實踐環節,在課程教學中占據非常重要的地位,如何在實驗中保質保量地讓每一位學生都能個性發展、最大限度地發揮所長,而不是完成基礎訓練,是目前實驗教學中急需解決的一個問題。目前,實驗教學項目的類型大部分以“驗證”“設計”“綜合”為主,學生配有實驗指導書,學生課前預習和編寫程序,上機來驗證,然后,教師根據實驗報告上學生驗證的情況給以評判。對于學習能力強的學生,上機驗證這個過程很快完成,挑戰性不高,導致學習興趣下降;而對于基礎稍差的同學,通過整節課的學習和調試也能完成。在實驗報告上,基礎好的同學和基礎差的同學調試內容幾乎沒有什么區別,在得分上也很接近,沒有區分度。本文從C語言實驗教學的設計出發,把實驗設計為含有基礎應用和高級應用兩個層次,把驗證、設計和綜合等環節融入到實驗設計中去,以此來探討實驗教學的改革模式,實現對教學對象的全覆蓋,并能夠對學生個體進行差異化培養。
本文以“點菜系統”的設計為例,把選擇結構作為必須掌握的基礎知識,把循環結構作為提高部分,實現實驗教學的層次設計。
1.基礎知識的理解和應用
在教學中,基礎知識為學生必須掌握的部分,要求全部學生能夠了解和運用。在基礎應用這個層次,學生只要能夠正確運用選擇結構的相關知識,實現點菜,即可認為達到了實驗目的。
在課程的具體實施中,可以把該部分分為以下幾個環節:基礎知識的掌握情況、程序設計的討論階段和程序的實施。
1.1基礎知識的理解
在基礎知識的掌握環節,可以通過學生主動回答,其他同學補充,教師總結的形式來鞏固基礎知識。通過問答,學生可掌握選擇結構的類型和使用條件。如選擇的兩種語句:if()和switch()語句;
if語句為兩分支語句,含有3種形式:
第一種形式:無else部分
if(表達式)? ?語句;
第二種形式:標準格式
if(表達式)? 語句1;
else? ?語句2;
第三種形式:嵌套
if(表達式1)? 語句1;
else if(表達式2)? 語句2;
…
else if(表達式n)? 語句n;
else 語句n+1;
switch語句為多分支語句:
switch(表達式)
{case 常量1:語句1;
case 常量1:語句1;
…
case 常量n:語句n;
default: 語句n+1;? ?}
在學生了解語句格式時,提醒學生語句使用的語法規則,如在if語句中,表達式的類型可以為關系、邏輯、數值等不同形式。但在switch語句中,表達式的類型必須為整型或字符型。這一部分大約用時5分鐘。
1.2程序結構設計的多樣性
在程序設計的討論環節,引導學生用不同的語句實現選擇功能,放飛學生的思維定式。比如用if語句怎么實現?用if-else if-else語句怎么實現?用switch語句怎么實現?在討論后,總結用哪個語句寫程序更簡潔,更美觀。而在程序的具體語句形式上不指定格式,充分給予學生自主選擇權。而在分支語句的表達式上,既可以用數字,也可用字符來代替某菜名,示例如下:
用整型變量n代表選擇的某菜名。
if(n==1)? ?printf("番茄雞蛋\n");
if(n==2)? ?printf("紅燒排骨\n");
…
或用if—else if—else表示
if(n==1)? ?printf("番茄雞蛋\n");
else if(n==2)? ?printf("紅燒排骨\n");
…
或用switch表示
switch(n)
{ case 1: printf("番茄雞蛋\n");break;
case 2: printf("酸辣土豆絲\n");break;
…
}
若用字符ch代表選擇的某菜名。
if(ch== 'a')? ?printf("番茄雞蛋\n");
if(ch== 'b')? ?printf("紅燒排骨\n");
…
或用if—else if—else表示
if(ch== 'a')? ? ? printf("番茄雞蛋\n");
else if(ch== 'b')? ?printf("紅燒排骨\n");
…
或用switch表示
switch(ch)
{ case? 'a': printf("番茄雞蛋\n"); break;
case? 'b': printf("酸辣土豆絲\n"); break;
…
}
經過上述的討論,學生在程序的多樣性上有了一個直觀的認識,對選擇結構又多了一分認識。這一部分大約用時10~15分鐘。
1.3程序的設計與指導
在程序的實施環節,學生選擇1~2種形式來完成剩下的部分,讓學生體會程序的編輯-執行過程。同時,隨機將學生運行的結果展示在大屏幕上,提高學生的參與感和自豪感,增強學習動力。
在本環節完成后,教授分支語句的任務已經圓滿完成,在這一環節中,參加實驗的每一位學生都可以實現預期結果,實驗目的已經達到,保證了人人參與,人人會用,實現了大眾教育。
對于學習能力強、計算機操作熟練的學生,如何抓住他們的興趣點,讓他們有所收獲,是我們在教學中需要考慮的個性化培養的問題。
2.程序的高級運用
在上述用分支語句實現點菜的過程中,每次運行只能得到一個菜名,功能性有一定的局限性。我們可以對該程序進行難度升級,例如點菜時,實現想點幾道菜就點幾道菜,想結束點菜就結束點菜。在這一部分的訓練中,用問題的難度升級進行精英化教育。
2.1項目任務的分解
要解決上述問題,首先,如何實現任意多次點菜?其次,如何在不想點菜的時候,結束程序?把這兩個問題分解出來拋給學生,引發學生的思考,引導學生認識循環語句、循序結束的條件,以及循環內部的循環方向。經過討論,可以得知循環既可以用for語句,也可以用while語句;循環結束的語句可以用特定字符來判斷;是否循環可以在循環內部設置接收新字符的函數。
2.2關鍵語句
循環語句的選用,例如用當選擇特定字符Q時,退出點菜,則該表達式為ch!= 'Q';用while語句嵌套分支語句,表示為while(ch!= 'Q')。此時,還有一點一定要學生體會的是,循環體內的循環執行方向,ch=getchar(); 若該條語句缺失,程序將怎樣運行?如何修正?引導學生積極思考,掌握C程序的運行邏輯,提高學生分析問題、解決問題的能力。
2.3示例演示
點菜系統的實現有很多種方法,我們以其中一種switch為例,演示點菜系統的全過程,用程序運行結果與學生編程進行相互驗證。
#include <stdio.h>
void main()
{ char ch;
ch=getchar();
while( ch!= 'Q')
{switch(ch)
{? ?case 'a': printf("番茄雞蛋\n");break;
case 'b': printf("酸辣土豆絲\n");break;
case 'c': printf("紅燒排骨\n");break;
default: printf("請選擇其他可口菜肴!\n"); putchar('\a');}
}
ch=getchar();
}
printf("thanks!\n"); }
從參考程序上來看,程序非常簡單,但是若少了一些關鍵點,程序很難正確執行,例如我們去除循環執行方向的語句:ch=getchar(),則結果是無限循環,始終顯示第一個分支,即第一道菜“番茄雞蛋”;若含有ch=getchar();語句,則運行結果完全正常,循環方向隨著輸入的變化而不斷變化。通過以上述兩種結果的對比,提醒學生在程序體嵌套的過程中要時刻注意程序的走向,通過對程序的預分析,提高自己的應用水平。
2.4程序的輸出優化
這一部分以課外作業的形式留給學生,讓學生有充分的鍛煉和選擇的機會。如在選擇前,分行顯示所有菜名及其對應的字符編號,菜名是否用分割符分開等等,提高學生改進程序的熱情。
3.結論
本文以C語言的上機實驗為研究對象,對實驗的內容和實施方式進行分級量化,在基礎知識掌握環節,面向全員,實現基礎知識教育的全覆蓋,實現大眾化教育;在知識進階環節,面向學習和動手能力強的同學,重點提高,充分發揮學生學習的主觀能動性,實現精英化教育。在實驗教學活動中,始終堅持以學生的發展為中心的教育理念,把學生個性化的認知融入到教學活動中,把教學實踐與社會需求結合起來,培養學生終身學習的能力,以實際行動探索新工科背景下的人才培養模式。在該模式下,通過對實驗教學的實施,我們發現學生對基礎知識理解得更深入,學生更愿意動手設計自己的個性化程序,教學效果明顯提升。在今后的教學中,將進一步考慮把生活實例與C語言編程結合起來,探討新的實驗教學模式,以滿足新形勢下的實驗教學需求。
參考文獻:
[1]鐘登華.新工科建設的內涵與行動[J].高等工程教育研究,2017(3):7-12.
[2]林健.面向未來的中國新工科建設[J].清華大學教育研究,2017,38(2):26-35.
[3]顧菊平,堵俊,華亮.新工科視域下綜合性大學電氣類創新型人才培養的路徑選擇[J].中國大學教學,2018(1):56-60.
[4]李正良,廖瑞金,董凌燕.新工科專業建設:內涵、路徑與培養模式[J].高等工程教育研究,2018(2):20-24.
[5]林健.新工科建設:強勢打造“卓越計劃”升級版[J].高等工程教育研究,2017(3):13-20.
[6]譚浩強.C語言程序設計[M].北京:清華大學出版社, 2013.
作者簡介:
李德川(1985年-),男,安徽懷遠人,副教授,博士,研究方向:電子技術。