C语言之switch语句教学研究
来源:用户上传
作者:
摘要:探讨了switch分支结构的常见错误,分析了与嵌套、循环结构的综合使用,通过在计算机专业的卓越班和实验班的实践证明,学生的综合编程能力和动手积极性得到进一步提高。
关键词:switch;嵌套;循环;函数重载;教学实践
中图分类号:G642 文献标识码:A
文章编号:1009-3044(2019)35-0157-01
1 概述
在卓越班和实验班等基础较好班级的教学过程中经常遇到学生对switch语句执行顺序的种种困惑,在多次的上机考试和期末考试中丢分较多,本文针对与之相关的各种难点分析探讨。
2 教学实践
2.1使用背景
在分支结构中我们常用if…else结构实现,但对表达式相同的进行多次重复计算而毫无意义,switch语句正是恰好的解决方案。通过计算表达式的值,结合case语句实现到分支语句地跳转来高效完成了多分支结构的选择功能。其语法形式如下:
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否则继续执行该分支后继续执行下句而不跳出。
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"。本题出现switch嵌套结构,即在"case"分支中又出现"switch"语句。只要把分支中的复杂语句当作该分支的一句复合语句来处理,则由繁到简、方便求解。具体过程为:"iVarA"=11使得选择"case 11",此分支中的"switch四句作为整体来处理即iVarB的值选择"case 12"输出"A"后遇到"break"跳出执行"case 15"。此时的跳出不是"case11"的跳出,此时的"break"在"1"前,属于"case 14"。故"case 11"不能跳出后执行"case 15",由于"case 16"和"case 17"两个分支都没有;"break"故相继输出"DE",最后无跳转执行缺省语句输出"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,但该分支没跳出语句故继续执行"case 2"输出4遇到break而完成本次循环;"cMyVar"获取输入的第2个字符3,计算后执行"case 2"输出5,遇到"break"而完成本次循环;同理下2次循环依次得解。本题错点:1)没注意case分支中有的无break而提前跳出本次循环;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].裘宗燕,译.北京:机械工业出版社,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).
【通联编辑:王力】
收稿日期:2019-09-10
作者简介:韩祥波(1975-),男,山东淄博人,讲师,硕士,研究方向为计算机软件与理论。
转载注明来源:https://www.xzbu.com/8/view-15123274.htm