李素君 周波清
摘要:以新工科對新時代理工科大學生的培養(yǎng)目標與要求為準繩,結(jié)合地方應用型本科院校的辦學定位及計算機類專業(yè)對人才培養(yǎng)目標的要求,從C程序設計課程的開課目標與對象著手,以課程主要知識點為載體,詳細介紹了其主要教學過程設計中內(nèi)容的梯度設計方法、課程思政的巧妙融入方法及取得的成效。
關鍵詞:C程序設計;教學設計;課程思政;工程實踐與創(chuàng)新能力
中圖分類號:TP391? ? ?文獻標識碼:B
文章編號:1009-3044(2023)36-0142-04
開放科學(資源服務)標識碼(OSID)
0 引言
2016年,習近平總書記在全國高校思想政治工作會議上強調(diào),高校思想政治工作關系高校培養(yǎng)什么樣的人、如何培養(yǎng)人以及為誰培養(yǎng)人這個根本問題。要堅持把立德樹人作為中心環(huán)節(jié),把思想政治工作貫穿教育教學全過程,實現(xiàn)全程育人、全方位育人,努力開創(chuàng)我國高等教育事業(yè)發(fā)展新局面[1]。2017年以來,教育部積極推進新工科建設,先后形成了“復旦共識”“天大行動”和“北京指南”,并發(fā)布了《關于開展新工科研究與實踐的通知》等系列文件。與傳統(tǒng)的工科人才不同,新工科人才需要的是實踐能力強、創(chuàng)新能力強、具備國際競爭力的高素質(zhì)復合型人才[2]。C語言作為計算機類專業(yè)的核心基礎課程,主要培養(yǎng)學生解決實際問題的分析建模、程序開發(fā)及核心素養(yǎng)能力,在日常教學中若能較好地融入課程思政,引導學生在掌握程序設計思想與方法的同時,提升其綜合能力,便能實現(xiàn)育人育心的協(xié)同效應[3]。
1 C程序設計的開課目標與開課對象
對于一般普通高校來說,C程序設計課程是計算機類專業(yè)的核心基礎課程,其開課目標主要包括以下三個方面。
1.1 認知目標
1)使學生了解高級語言程序設計和面向過程程序設計的基本概念。
2)使學生熟練掌握C程序設計的基礎知識、語法和使用方法。
3)使學生熟練掌握結(jié)構化程序設計的基本方法和技能。
1.2 能力目標
1)使學生能正確使用C語言的數(shù)據(jù)類型、運算符、數(shù)組、指針、結(jié)構體等及能熟練使用三種基本結(jié)構進行程序設計。
2)使學生不僅能熟練閱讀程序,且具有分析和設計算法的能力。
3)使學生具有使用C語言解決常見典型實際問題的能力。
1.3 情感目標
1)激發(fā)學生學習程序設計的興趣,提高學生的專業(yè)認知度。
2)激發(fā)學生的愛國情懷和投身國產(chǎn)IT生態(tài)自主可控事業(yè)的使命感。
3)培養(yǎng)學生的工匠精神,牢固樹立關注工程與社會、環(huán)境的大工程觀思維,培養(yǎng)工程師的責任感。
4)培養(yǎng)學生良好的團隊合作精神、服務社會意識,提升學生服務社會的能力。
C程序設計課程的開課對象一般是大一剛?cè)雽W的新生。對于普通的二本院校來說,大部分學生不僅編程基礎薄弱、數(shù)學基礎欠扎實,且學習能力與耐力都欠理想。該課程語法規(guī)則繁多、內(nèi)容抽象,初學者很容易因為犯錯而失去學習熱情和積極性[4]。因此,若想通過64個標準課時的教學,實現(xiàn)預期的培養(yǎng)目標與要求,首先必須構建高效課堂,而構建高效課堂的前提是進行高效的教學設計,以與現(xiàn)實生活緊密相關的典型案例為切入點,靈活生動地引入相關知識點的學習,層層遞進,并依據(jù)新時代新工科的培養(yǎng)目標與要求,巧妙地融入課程思政,以實現(xiàn)在培養(yǎng)學生計算思維和程序設計能力的同時,提升其核心素養(yǎng),為個人的終身發(fā)展和可持續(xù)發(fā)展打下堅實的基礎[5]。
2 新工科背景下融合課程思政的C程序設計教學過程設計
以新工科對新時代理工科大學生的培養(yǎng)目標為準繩,將C程序設計的課程教學與思政教育進行巧妙融合,高效實用的教學過程設計便是第一步。好的教學設計是構建高效課堂的前提。而高效課堂的構建必須基于高效學習,即在課堂上充分調(diào)動學生的積極性、激發(fā)學生的學習興趣。這就要求教師在備課和教學過程設計等過程中要注意教學內(nèi)容與教學方法相得益彰,要注重寓教于樂、寓道于教和寓德于教[2]。
下面將以C程序設計課程的主要知識點為載體,以案例驅(qū)動法、分析法、演示法、總結(jié)法等為主要教學手段,以厚植愛國主義情懷和培養(yǎng)大國工匠精神為課程思政的切入點,以類比法或引導法為主要手段適時無縫地融入課程思政,詳細介紹主要教學過程的設計思路與方法。
模塊一:C程序的基本組成與開發(fā)過程。例如,介紹C程序的基本組成,通過如下簡單的案例程序引入:
#include <stdio.h>
int main( )
{? printf(“This is my first C program.\n”);
}
首先,讓學生自主觀察上述程序,并找一位同學用自己的話概括上述程序的組成特點。然后教師根據(jù)回答情況通過引導法讓全體學生明白C程序組成的基本框架與特點。接下來,現(xiàn)場調(diào)試運行程序,讓學生自主體會運行結(jié)果與源程序的區(qū)別。然后采用加減法,依次去掉程序中的某個部分或某一行,分別給出調(diào)試或運行結(jié)果。通過這個過程讓學生深層次明白C程序的基本特點及程序中每個語句的作用。接下來在此基礎上給出如下課堂思考題:如何在屏幕上打印輸出一個5行5列,四周由“*”組成,中間是空心的正方形。以實現(xiàn)對所學內(nèi)容的鞏固。叫一位學生上臺現(xiàn)場實現(xiàn),其余同學在下面實現(xiàn)。然后教師充分利用現(xiàn)場互動與討論,對答題情況進行適當?shù)目偨Y(jié)與鼓勵??偨Y(jié)時以引導法啟發(fā)學生思考,剛才為了讀懂別人程序所采用的加減法,在日常生活中,它在哪些情況下也是可行的呢?學生的參與度高,答案基本集中在如下觀點的周圍:當遇到復雜或棘手的事情時,可以先采用減法,把不太重要的細枝末節(jié)去掉,把關鍵的問題給解決,之后再采用加法,按照一定的規(guī)則順序把剩下的細枝末節(jié)給一一解決;同樣,當在學習中碰到難題或難以堅持時,也可以采用上述方法。此外,通過程序設計在人工智能領域的重要作用,引入中國在無人機、5G、機器學習、人臉識別、自然語言處理等領域取得的重大突破,以增強學生的民族自信心和自豪感;最后,給出課后思考題:已知a=2,b=3,請編程輸出2+3=5到屏幕。以實現(xiàn)對所學內(nèi)容的提升及下次課知識點的引入。
模塊二:C程序的基本數(shù)據(jù)類型、運算符和表達式。首先以上次課留下的課后作業(yè)作為引例,總結(jié)答題情況并現(xiàn)場編程實現(xiàn)兩種典型的方法。進而在此基礎上請同學們思考完成:如何編程實現(xiàn)求給定半徑所對應的圓的面積。從而引入本堂課的第一個教學內(nèi)容:數(shù)據(jù)類型、常量、變量的定義與使用。有了量,便可以進行運算。緊接著給出下述表達式:3-4+5和3-4×5,詢問學生上述表達式的結(jié)果。接著提問:上述表達式的結(jié)果為什么不是-6和-5呢?由此問題的解答可引導學生得出表達式的計算要根據(jù)運算符的優(yōu)先級和結(jié)合性。然后根據(jù)關鍵詞優(yōu)先級和結(jié)合性,引導學生探討在現(xiàn)實生活中,什么時候也要注意兩者的應用。接下來給出課堂思考題:①判別閏年的表達式;②a和b不同時為0;③三個數(shù)的最大值,以實現(xiàn)對所學內(nèi)容的鞏固與提升。總結(jié)時根據(jù)本章內(nèi)容是整個C語言的基石,自然引入:基礎不牢,地動山搖。最后給出課后思考題:①計算機是怎么實現(xiàn)表達式的計算的?②請編程輸出一個數(shù)的相反數(shù)。以挖掘?qū)W生的學習潛能與下次課知識點的引入。
模塊三:C程序的控制結(jié)構。本知識模塊的重點內(nèi)容是選擇結(jié)構和循環(huán)結(jié)構,其中選擇結(jié)構由上次所留的課后思考題:“請編程輸出一個數(shù)的相反數(shù)?!币?。根據(jù)作業(yè)情況進行總結(jié)并給出根據(jù)所學知識:使用條件運算符的程序?qū)崿F(xiàn)方法。然后以條件運算符的本質(zhì)功能為切入點,引入新知識點的學習:選擇結(jié)構。接下來便通過定義與實例相結(jié)合,詳細介紹C語言中選擇結(jié)構的實現(xiàn)方法與注意事項。并在此基礎上給出課堂思考題:“如何編程實現(xiàn)如下成績等級制的打???60分以下輸出不合格,60-80輸出合格,80-100輸出優(yōu)秀?!弊寣W生自主思考實現(xiàn)。然后依據(jù)答題情況,通過現(xiàn)場互動與討論,得出兩種典型的實現(xiàn)方法。接下來進行總結(jié)??偨Y(jié)時通過類比法引入毛主席晚年的兩次重大抉擇的重要性,讓學生明白在面臨選擇時要慎重,要以大局、集體利益為重,選擇之后必須要用力堅持的道理。整個過程學生參與度高,積極性也很高。最后給出如下課后思考題:①請編程實現(xiàn)從鍵盤輸入四個數(shù),請按從小到大的順序輸出;②請編程實現(xiàn)二元一次方程根的求解。以實現(xiàn)對所學內(nèi)容的提升與實際應用。
循環(huán)結(jié)構知識點的學習可由如下引例引入:
#include <stdio.h>
int main( )
{
int i=1;
while(i<=6){
printf(“%d “,i);
i++;
}
}
讓學生自主思考并猜測上述程序的運行結(jié)果。緊接著現(xiàn)場調(diào)試運行程序,給出運行結(jié)果。讓學生體會運行結(jié)果,并總結(jié)出該程序的功能。然后在此基礎上給出課堂思考題:“請對上述程序進行最小的改動,打印輸出1-100以內(nèi)所有能被5整除的整數(shù)?!苯^大部分同學都能較好地完成。接下來按梯度再給出思考題:“請編程求解S=1+2+3+...+100?!弊寣W生自主實現(xiàn)。結(jié)果發(fā)現(xiàn)學生的解答方法主要有兩種:逐項累加法和高斯法。然后現(xiàn)場給出兩種典型方法的實現(xiàn)過程,并引導學生分析兩種實現(xiàn)方法的區(qū)別與效率,進而讓學生明白程序設計不只是問題得到解決就行,還要注意尋求諸多解決方法中的最優(yōu)解。自然引入并實踐大國工匠、精益求精的精神。接下來總結(jié)是由1.01的100次方的結(jié)果和0.99的100次方的結(jié)果的差異,引導學生明白:不積跬步,無以至千里;不積小流,無以成江海。最后給出課后思考題:編程實現(xiàn)S=1+(1+2)+(1+2+3) +...+(1+2+3+...+100)的求解。以提升其編程素養(yǎng)及下次課內(nèi)容的引入:多重循環(huán)程序設計。
模塊四:數(shù)組的定義與使用。前面已經(jīng)編程實現(xiàn)四個整數(shù)的排序輸出,請思考:要對10個整數(shù)或更多的整數(shù)進行排序,該怎么實現(xiàn)?讓學生自主思考并找2到3位同學說出自己的實現(xiàn)思路與方法。然后通過現(xiàn)場互動與討論,以分析總結(jié)的方法引入新知識點的學習:數(shù)組。由數(shù)組的定義與特點,通過類比法引導學生懂得:物以類聚、人以群分,近朱者赤、近墨者黑的道理。然后詳細介紹引例的兩種實現(xiàn)方法,選擇法和冒泡法。接下來對兩種實現(xiàn)方法進行比較,引導學生進一步理解其中的差異及具體的實現(xiàn)要點。最后通過如下案例:
#include <stdio.h>
int main( )
{
int a[5]={1,2,3,4,5},i,t;
for(i=0;i<2;i++)//for(i=0;i<5;i++);
{? t=a[i]; a[i]=a[5-1-i];a[5-1-i]=t;}
for(i=0;i<5;i++) printf(“%d “,a[i]);
return 0;
}
讓學生自主分析上述兩個程序的運行結(jié)果,通過類比法引導學生懂得:在生活中很多時候都要注意畫蛇添足、過猶不及等尷尬局面。最后給出課后思考題:如何實現(xiàn)兩個較大整數(shù)(1 000位左右)的加法運算?通過對此問題的解答,讓學生更進一步理解數(shù)組的使用方法與使用場合。
模塊五:函數(shù)的定義與使用。該模塊的重難點內(nèi)容是遞歸函數(shù)設計。該內(nèi)容可通過以下引例引入:
#include <stdio.h>
void f(int n)
{? if(n>1)
f(n-1);
printf(“%d,“,n);
}
int main( )
{ f(5);
}
提醒學生認真觀察上述程序中的函數(shù)f( )與以前所學函數(shù)的區(qū)別,并模仿計算機的執(zhí)行過程給出程序的運行結(jié)果。接下來詳細分析上述程序運行的兩個階段,遞推與回歸,讓學生明白遞歸程序的本質(zhì)及設計方法。接下來要求學生對上述程序進行改造,使得程序的輸出結(jié)果為5,4,3,2,1。緊接著,讓學生依照階乘的數(shù)學定義,用遞歸算法實現(xiàn)求解10!。讓學生進一步理解遞歸函數(shù)的設計要點。接下來引入漢諾塔問題的求解,通過分析讓學生深入理解遞歸函數(shù)的設計方法與使用場合。由對漢諾塔問題求解的分析:64個盤子的移動次數(shù)引入課程思政:如果這個工作由人類來完成,假設每移動一次盤子只需要1秒鐘,那么移完64個盤子也需要5 800億年。我們知道地球的壽命約為96億年,可見,這個問題通過人類來解決是完全不可能的。但如果通過我國自主研發(fā)的超級計算機神威太湖之光來完成的話,只需約3分鐘,因為它的峰值性能能達到12.5億億次每秒,持續(xù)性能也能達到9.3億億次每秒。由中國在超算方面取得的傲人成就繼而引入:在短短的 70 多年時間里,新中國在經(jīng)濟、科技、軍事等領域取得巨大成績,以幫助學生牢固樹立和自覺踐行“四個自信”和“四個意識”。最后給出課后思考題:設有n級臺階,你可以一步跨1級,也可以一步跨2級,也可以一步跨3級,問從最底層開始走完全部臺階共有多少種走法?要求用遞歸函數(shù)實現(xiàn),以實現(xiàn)對所學技能的實踐、創(chuàng)新與提升。
模塊六:指針的定義與使用。這部分內(nèi)容的抽象性更強,所以講解時方法顯得尤為重要,首先通過引例:int a; int *p;讓學生由前面所學知識領會兩個語句的區(qū)別,從而領會指針變量的本質(zhì)及使用方法。接下來引入數(shù)組名與指針的區(qū)別,進而通過典型例題的設置例梯度性地介紹一重指針和一維數(shù)組,二重指針和二維數(shù)組的區(qū)別與聯(lián)系。本模塊的重點是函數(shù)的參數(shù)為指針。通過以下典型案例引入:
#include <stdio.h>
void Swap(int a,int b)
{
int t; t=a;a=b;b=t;
}
int main( )
{? int a=3,b=4;
Swap(a,b);
printf(“%d %d\n”,a,b);
}
#include <stdio.h>
void Swap(int *a,int *b)
{
int t; t=*a;*a=*b;*b=t;
}
int main( )
{? int a=3,b=4;
Swap(&a, &b);
printf(“%d %d\n”,a,b);
}
讓學生自主分析上述兩個程序的運行結(jié)果。進而讓學生明白函數(shù)的參數(shù)為普通變量和指針變量的區(qū)別。分析過程中通過類比法引導學生懂得:要實現(xiàn)新時代新目標,我們必須團結(jié)在黨中央周圍,聽從黨的指揮,舉國上下思想行動必須團結(jié)一致。最后給出課后思考題:寫一函數(shù),實現(xiàn)兩個字符串的比較。函數(shù)原型為:int strcmp(char *p1, char *p2);。以實現(xiàn)對所學知識的具體實踐與鞏固。
模塊七:結(jié)構體的定義與使用;模塊八:文件的讀寫。這兩模塊的知識由于教學時長的關系,在實際教學安排中是老師略講與學生自學為主相結(jié)合。其中結(jié)構體部分,在介紹鏈表的特點及其與數(shù)組的區(qū)別時,通過類比法引入課程思政:每個人都有自己的長處與短處,平時注意揚長避短,人生就會越來越精彩。在介紹文件的相關知識時,基于文件長期存儲的特點引入課程思政:知識與技能的長期存儲是平時大量地練習與實踐的結(jié)果。
綜上所述,不難看出,上述教學過程設計不僅緊緊圍繞新時代新工科的培養(yǎng)目標,而且思政元素與知識點的耦合度也非常高,能讓學生在掌握專業(yè)知識與技能的同時潛移默化地厚植其家國情懷、提升其思想境界與核心素養(yǎng)。
3 新工科背景下融入課程思政的C程序設計典型教學效果
上述教學模式與方案自2021年以來于本院進行了實施。在此期間,學生獲得藍橋杯C/C++組競賽成果如表1所示。從表中不難發(fā)現(xiàn):隨著課堂溫度的提升,學生的專業(yè)素養(yǎng)有了顯著提升。
4 結(jié)束語
課程教學設計以新工科背景下對新時代理工科大學生的培養(yǎng)目標及要求為準繩,對原有的教學內(nèi)容進行了優(yōu)化與深化,對原有的教學方法與理念進行了深層次的改革,以課程主要知識點為載體,講解時采用典型案例導入,注重學生的參與度、學習興趣與實踐創(chuàng)新能力,巧妙地融入課程思政,不僅提高了學生的學習興趣、學習獲得感、學習能力與工程實踐能力,更提升了學生的核心素養(yǎng)與社會責任感,育人育心效果顯著。
參考文獻:
[1] 習近平在全國高校思想政治工作會議上強調(diào):把思想政治工作貫穿教育教學全過程 開創(chuàng)我國高等教育事業(yè)發(fā)展新局面[N].人民日報,2016-12-09(1).
[2] 馮志紅,沈振乾,李鳳榮.C語言程序設計課程高效課堂的構建與實施[J].計算機教育,2022(8):133-137.
[3] 王蕊,黃建強.C語言程序設計課程思政教學探索[J].計算機教育,2022(1):74-77,83.
[4] 胡偉.基于案例教學法的線上線下混合式教學模式在C語言教學中的應用研究[J].電腦知識與技術,2023,19(13):137-139.
[5] 李薇,黑新宏,王磊,等.課程思政教育在C語言程序設計課程中的應用[J].計算機教育,2019(11):20-23.
【通聯(lián)編輯:梁書】