C语言之switch语句教学研究

2019-03-07 05:22韩祥波
电脑知识与技术 2019年35期
关键词:循环嵌套教学实践

摘要:探讨了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-),男,山东淄博人,讲师,硕士,研究方向为计算机软件与理论。

猜你喜欢
循环嵌套教学实践
基于嵌套Logit模型的竞争性选址问题研究
浅析英语词汇记忆策略
分层、过滤、循环教学法初探*
浅论高中化学生活化教学的实践与思考
浅谈初中物理实验教学与学生创新能力的培养
测量平差课程教学改革探讨与实践
一种基于区分服务的嵌套队列调度算法
无背景实验到有背景实验的多重嵌套在电气专业应用研究
连续批加工过程中嵌套自相关数据的控制图设计