您好, 访客   登录/注册

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