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