摘要:探討了switch分支結構的常見錯誤,分析了與嵌套、循環(huán)結構的綜合使用,通過在計算機專業(yè)的卓越班和實驗班的實踐證明,學生的綜合編程能力和動手積極性得到進一步提高。
關鍵詞:switch;嵌套;循環(huán);函數重載;教學實踐
中圖分類號:G642 文獻標識碼:A
文章編號:1009-3044(2019)35-0157-01
1 概述
在卓越班和實驗班等基礎較好班級的教學過程中經常遇到學生對switch語句執(zhí)行順序的種種困惑,在多次的上機考試和期末考試中丟分較多,本文針對與之相關的各種難點分析探討。
2 教學實踐
2.1使用背景
在分支結構中我們常用if…else結構實現(xiàn),但對表達式相同的進行多次重復計算而毫無意義,switch語句正是恰好的解決方案。通過計算表達式的值,結合case語句實現(xiàn)到分支語句地跳轉來高效完成了多分支結構的選擇功能。其語法形式如下:
switch(變量表達式)
fcase常量1:語句;break;
…
case常量n:語句;break;
default:語句;break;
}
2.2常見錯誤
1)switch(表達式)中的表達式類型只能為int、char等離散的整型式類型。如:double x=2.36; switch(x){case 2:...}不符合要求。
2)case表達式具有唯一性。如:case 2:...case 2:...則錯。
3)case分支中要有break否則繼續(xù)執(zhí)行該分支后繼續(xù)執(zhí)行下句而不跳出。
4)缺少default,則當找不到匹配的case時程序出錯。
2.3綜合舉例
例1 #include
main()
{ int iVarA=11,iVarB=12,iVarC=16;
switch(iVarA)
{case 11: switch(iVarB)
{case 12:printf("A");break;
case 13:printf("B");break;
case 14:pnntf("C");break;)
case 15: switch(iVarC)
{case 16;printf("D");
case 17:printf("E");}
default: printf("F");}}
上題的輸出結果是"ADEF"。本題出現(xiàn)switch嵌套結構,即在"case"分支中又出現(xiàn)"switch"語句。只要把分支中的復雜語句當作該分支的一句復合語句來處理,則由繁到簡、方便求解。具體過程為:"iVarA"=11使得選擇"case 11",此分支中的"switch四句作為整體來處理即iVarB的值選擇"case 12"輸出"A"后遇到"break"跳出執(zhí)行"case 15"。此時的跳出不是"case11"的跳出,此時的"break"在"1"前,屬于"case 14"。故"case 11"不能跳出后執(zhí)行"case 15",由于"case 16"和"case 17"兩個分支都沒有;"break"故相繼輸出"DE",最后無跳轉執(zhí)行缺省語句輸出"F"。
例2 #include main()
{ char cMyVar;
while((cMyVar=getchar())!='\n')
switch(cMyVar-'1')
{case 0:
case 1:putchar(cMyVar+l);
case 2:putchar(cMyVar+2); break;
case 3:putchar(cMyVar+3);
default:putchar(cMyVar+4); break;}
printf("\n");}
上題是出錯率很高的試題,當輸入"2345"時輸出"345789"。下面分析解題過程:
"cMyVar"獲取輸入變量的第1個字符2,switch表達式計算得1此時分支對應"case 1"輸出3,但該分支沒跳出語句故繼續(xù)執(zhí)行"case 2"輸出4遇到break而完成本次循環(huán);"cMyVar"獲取輸入的第2個字符3,計算后執(zhí)行"case 2"輸出5,遇到"break"而完成本次循環(huán);同理下2次循環(huán)依次得解。本題錯點:1)沒注意case分支中有的無break而提前跳出本次循環(huán);2)switch表達式中"cMyVar"減1但變量本身沒變,在處理分支結構時有的把該變量減1后再輸出。
3 結論
switch分支結構的跳轉語句讓不少初學者頭疼不已、錯誤不斷,究其原因還是對缺省語句、"break"語句以及變量更改等不熟悉引起,本文結合幾個具體的綜合例子分析了上述易錯原因。
參考文獻:
[1]胡玲潔.《C++程序設計》中職教學中的易錯分析[J].電腦知識與技術,2019(02).
[2]譚浩強.C++面向對象程序設計[M].北京:清華大學出版社,2006.
[3]呂鳳翥.C++語言基礎教程[M].北京:清華大學出版社.1999.
[4]Bjarne Stroustrup.C++程序設計語言:特別版[M].裘宗燕,譯.北京:機械工業(yè)出版社,2010.
[5]錢能.C++程序設計教程[M].北京:清華大學出版社,1999.
[6]Stanley,B.Lippman,Barbara E.Moo.C++Primer中文版:第四版[M].李師賢,等譯.北京:人民郵電出版社,2006.
[7]陳維興,林小茶.C++面向對象程序設計教程[M].北京:清華大學出版社,2000.
[8]胡金錦.編程:一種觀察世界的新視角——以《冒泡排序》一課為例談計算思維[J].電腦知識與技術,2017(35).
[9]張敏輝.將案例驅動教學法運用于程序設計類課程的實踐與成效[J].高等教育研究,2012,29(2).
【通聯(lián)編輯:王力】
收稿日期:2019-09-10
作者簡介:韓祥波(1975-),男,山東淄博人,講師,碩士,研究方向為計算機軟件與理論。