标题 | 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-),男,山东淄博人,讲师,硕士,研究方向为计算机软件与理论。 |
随便看 |
|
科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。