【摘 要】C++程序設(shè)計(jì)課程難度較大,實(shí)踐要求很高。本文列舉了一些教學(xué)案例的實(shí)施,通過(guò)精選案例,實(shí)現(xiàn)在課時(shí)有限的條件下提高教學(xué)效率,取得更好的教學(xué)效果。
【關(guān)鍵詞】C++;教學(xué);案例;選取
一、引言
C++語(yǔ)言是當(dāng)今世界上應(yīng)用最廣泛、影響最深遠(yuǎn)的面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言之一,也是較難掌握的一門(mén)語(yǔ)言。C++程序設(shè)計(jì)課程難度較大,實(shí)踐要求很高,這就要求教師在授課時(shí)不僅要介紹C++語(yǔ)言的語(yǔ)法,還要講解案例,以提高學(xué)生的實(shí)踐能力。由于課時(shí)有限,如果案例選取得當(dāng),對(duì)教學(xué)效果會(huì)有明顯的正面影響。
二、前后呼應(yīng)
在選取案例的時(shí)候,既要注意保持知識(shí)點(diǎn)之間的連貫性,做到前后呼應(yīng);又要注意突出知識(shí)點(diǎn)之間的對(duì)比,使學(xué)生在案例的學(xué)習(xí)過(guò)程中掌握知識(shí)點(diǎn),靈活應(yīng)用。例如在講授選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)、數(shù)組以及函數(shù)相關(guān)章節(jié)時(shí),可以選取選擇排序問(wèn)題作為案例,由淺入深,最終能夠讓學(xué)生靈活運(yùn)用所學(xué)知識(shí)。
選擇排序是一種常用的數(shù)據(jù)排序算法,其編程需要運(yùn)用選擇、循環(huán)、數(shù)組以及函數(shù)諸多知識(shí)才能實(shí)現(xiàn)。根據(jù)這種特點(diǎn),以選擇排序?yàn)橹骶€,精心安排幾個(gè)案例前后呼應(yīng)。先使學(xué)生掌握必要的知識(shí)點(diǎn),隨著所學(xué)知識(shí)的加深,最后自然地掌握選擇排序。在講授選擇結(jié)構(gòu)時(shí),選取兩個(gè)簡(jiǎn)單案例:兩個(gè)數(shù)排序和三個(gè)數(shù)的排序。首先通過(guò)兩個(gè)數(shù)排序案例的講解,讓學(xué)生掌握變量間交換值的方法,即中間變量法。例如:if(a>b) { t=a;a=b;b=t;}在這個(gè)例子中,重要的是要讓學(xué)生強(qiáng)化變量賦值的概念。賦值會(huì)導(dǎo)致內(nèi)存中變量值的改變,借助于中間變量t 才能完成兩個(gè)變量值的交換。
在三個(gè)數(shù)的排序例子中,主要講授多個(gè)數(shù)選擇排序的基本算法,即運(yùn)用if結(jié)構(gòu),不斷地篩選,找出最小數(shù)、次小數(shù),并按升序排序。例如:
if(a>b) { t=a;a=b;b=t;}
if(a>c) { t=a;a=c;c=t;}
if(b>c) { t=b;b=c;c=t;}
這里首先應(yīng)用中間變量法交換兩個(gè)變量的值,其次大量應(yīng)用了if結(jié)構(gòu)來(lái)確定最小數(shù)和次小數(shù)。第一個(gè)if語(yǔ)句確保變量a存放a和b中最小的值,第二個(gè)if語(yǔ)句確保a 存放a、b和c中最小的值;第三個(gè)if語(yǔ)句則確保變量b 存放b和c中最小的值,即次小數(shù),這樣就完成了三個(gè)數(shù)的排序。通過(guò)這個(gè)案例不僅可以掌握if結(jié)構(gòu),而且深刻理解了選擇排序的算法精髓,為以后學(xué)習(xí)n個(gè)數(shù)的選擇排序法打下良好的基礎(chǔ)。
n個(gè)數(shù)的選擇排序?qū)嶋H上是if語(yǔ)句的不斷重復(fù),這需要循環(huán)結(jié)構(gòu)。存放多個(gè)邏輯上存在聯(lián)系的數(shù)據(jù),又需要借助數(shù)組。在學(xué)習(xí)了后續(xù)的循環(huán)結(jié)構(gòu)和數(shù)組之后,就可以適時(shí)將n個(gè)數(shù)的選擇排序問(wèn)題作為案例,幫助學(xué)生融會(huì)貫通所學(xué)知識(shí)。例如:
int a[10],i,j,t;
………………..
for(i=0;i<9;i++)
for(j=i+1;j<10;j++)
if(a[i]>a[j])
{t=a[i];a[i]=a[j];a[j]=t;}
在這個(gè)例子中,選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)和數(shù)組都得到了應(yīng)用,數(shù)組用來(lái)存放一批數(shù)據(jù),而循環(huán)結(jié)構(gòu)用來(lái)控制這批數(shù)據(jù)的選擇交換等重復(fù)操作。在排序循環(huán)的結(jié)構(gòu)中如何找出最小數(shù),以及兩個(gè)變量交換變量值,這些基本算法都是已經(jīng)掌握的。因此學(xué)生可以在前面的基礎(chǔ)上,集中精力,學(xué)習(xí)新的知識(shí)。
在學(xué)習(xí)了n個(gè)數(shù)選擇排序編程之后,講解函數(shù)知識(shí)時(shí)就可以將排序功能獨(dú)立出來(lái),編成函數(shù)模塊。例如:
void sort(int a[ ],int n)
{ int i,j,t;
for(i=0;i for(j=i+1;j if(a[i]>a[j]) {t=a[i];a[i]=a[j];a[j]=t;} } ……………….. sort(a,10); 編制函數(shù)sort實(shí)現(xiàn)選擇排序,供主調(diào)函數(shù)調(diào)用,排序功能被封裝在函數(shù)sort中。由于已經(jīng)掌握了選擇排序的精髓,現(xiàn)在只需要解釋函數(shù)調(diào)用的機(jī)制、參數(shù)傳遞的方式等與函數(shù)有關(guān)的問(wèn)題即可。根據(jù)授課需要還可以在指針一章中,再次安排選擇排序案例,重點(diǎn)講解在函數(shù)調(diào)用傳遞數(shù)組時(shí),如何使用指針作為函數(shù)參數(shù)。 以上是用選擇排序案例,闡述如何進(jìn)行教學(xué)案例的選取的。即注重知識(shí)點(diǎn)的前后呼應(yīng),用一組圍繞同一個(gè)問(wèn)題的案例,由易到難,最后解決綜合應(yīng)用問(wèn)題。在解決問(wèn)題的過(guò)程中,既通過(guò)精選的案例掌握了C++的基本知識(shí);又可以把這些知識(shí)融會(huì)貫通,用來(lái)編制較為復(fù)雜的程序。圍繞一個(gè)問(wèn)題不斷深入,在前面知識(shí)點(diǎn)的基礎(chǔ)上適當(dāng)增加新的知識(shí)點(diǎn),不僅可以有效緩解采用多個(gè)不相聯(lián)系的案例造成的課時(shí)緊張,而且還可以更好地理解知識(shí)點(diǎn)之間的聯(lián)系,從而牢固地掌握并將它們靈活應(yīng)用到實(shí)踐中去。 三、左右逢源 案例選取的方法很多,根據(jù)情況還可以采用左右逢源選取案例的方法。在講授C++的某些章節(jié)中,經(jīng)常會(huì)遇到一些難點(diǎn)。例如指針做函數(shù)參數(shù),有四種情況,它們之間是橫向的關(guān)系,彼此有著明顯區(qū)別,但又存在一定聯(lián)系。如何讓學(xué)生弄清它們彼此之間的區(qū)別與聯(lián)系呢?在實(shí)例選取中,要注意對(duì)具體實(shí)例的剪裁與改造,力爭(zhēng)用多種方法去解決同一個(gè)問(wèn)題。這樣在一個(gè)實(shí)例中就可以學(xué)習(xí)到多個(gè)橫向的、不同的知識(shí)點(diǎn),并領(lǐng)悟到它們之間的區(qū)別與聯(lián)系,更好地加以掌握。針對(duì)指針做函數(shù)參數(shù)的四種情況,可以選取求數(shù)組平均值的案例,用四種方法求解,最終揭示這四種情況彼此之間存在聯(lián)系的本質(zhì)。 在C++程序設(shè)計(jì)課程講授中,可以大量采用上述精選案例的方法,例如在循環(huán)一章中,采用一個(gè)計(jì)算累加和的案例,闡述三種循環(huán)結(jié)構(gòu)的特點(diǎn)。又如在結(jié)構(gòu)體一章中,采用一個(gè)案例對(duì)結(jié)構(gòu)體變量成員的幾種訪問(wèn)方法都給予了講解。在講解類的語(yǔ)法時(shí),采用描述時(shí)鐘的一個(gè)案例,將類與結(jié)構(gòu)體進(jìn)行對(duì)比,引發(fā)對(duì)程序設(shè)計(jì)思想的討論。 四、結(jié)語(yǔ) 如何精選案例?首先應(yīng)該對(duì)具體講授內(nèi)容有深刻理解,弄清特點(diǎn)和難點(diǎn),做到有的放矢;其次找出相關(guān)知識(shí)點(diǎn)之間的區(qū)別和聯(lián)系,在此基礎(chǔ)上構(gòu)思精巧的案例,盡量包容相關(guān)的知識(shí)點(diǎn),在講解中闡明相關(guān)知識(shí)點(diǎn)的特點(diǎn)和相互聯(lián)系。通過(guò)案例的精選,一方面使學(xué)生對(duì)基本概念深刻理解,另一方面又提高了學(xué)生的實(shí)際動(dòng)手能力,一舉兩得。 【參考文獻(xiàn)】 [1] 王曉東. C++程序設(shè)計(jì)簡(jiǎn)明教程(第二版)[M].北京:中國(guó)水利水電出版社, 2017. [2] 鄭莉. C++語(yǔ)言程序設(shè)計(jì)[M].北京:清華大學(xué)出版社, 2001. [3] 江義華. C/C++完美演繹[M].北京:中國(guó)水利水電出版社, 2001.