4.4Switch语句复习:多分支if语句if(表达式1)语句1;elseif(表达式2)语句2;elseif(表达式3)语句3;……elseif(表达式n)语句n;else语句n;switch语句又称开关语句,它的用途类似于多分支的if语句。但是这种多分支选择仅取决一个表达式不同的值,用起来十分方便。一.switch语句的一般格式switch{case常量1:语句1;case常量2:语句2;……case常量n:语句n;default:语句n+1}功能:计算选择表达式的值,当表达式的值与某一个case后面的常量相等、相匹配时,就执行此case后面的处理语句。执行完一个case后面的语句后,流程控制转移到下一个case处继续执行。若所有case中的常量都不与选择表达式的值相匹配,就执行default后面的语句。[例]输入一个数字,输出相应星期的英文单词。#includestdio.hmain(){intnum;printf(inputintegernumber:);scanf(%d,&num);switch(num){case1:printf(Monday\n);case2:printf(Tuesday\n);case3:printf(Wednesday\n);case4:printf(Thursday\n);case5:printf(Friday\n);case6:printf(Saturday\n);case7:printf(Sunday\n);default:printf(error\n);}}执行后请输入3查看输入结果根据表达式的取值,判断其与哪一个常量表达式相等。如=表达式i,则自语句i开始执行,直到语句n+1止。若与所有常量表达式值不相等,则从default后的语句开始执行。功能:switch(表达式){case常量1:语句1;break;一般形式改为:以上存在一个问题:没有完全起到分支作用。解决办法:增加break语句,使之跳出switch结构。case常量2:语句2;break;……case常量n:语句n;break;default:语句n+1;}请大家修改以上例子,使之正确。注:1.常表值必须互不相等,否则二异性。2.case顺序无关紧要。3.终止switch语句的执行,借助break语句完成。4.switch语句的描述的是多分支选择的一种特殊情况,可用if语句等价实现。思考:下面程序输出的结果为多少?#includestdio.hmain(){inti=10;switch(i){case0:i+=1;case10:i+=1;case11:i+=1;default:i+=1;}printf(%d,i);}练习1:某自动售货机,用户根据提示进行选择,程序根据输入的按钮序号售出饮料:若按button1售出water;按button2售出tea;按button3售出coffee;按button4售出milk;按button5售出cola;对于其它选择显示“Selectionerror!”,请编程实现。#includestdio.hmain(){intbutton;printf(button1=water,button2=tea,button3=coffee,button4=milk,button5=cola\n);printf(pleaseinputnumbers:);scanf(%d,&button);switch(button){case1:printf(water);break;case2:printf(tea);break;case3:printf(coffee);break;case4:printf(milk);break;case5:printf(cola);break;default:printf(selectionerror);}}•练习2•从键盘上输入一个百分制成绩score,按下列原则输出其等级:score≥90,等级为A;80≤score90,等级为B;70≤score80,等级为C;60≤score70,等级为D;score60,等级为E。#includestdio.hmain(){intscore;printf(inputascore(0~100):\n);scanf(%d,&score);if(score=90)printf(grade=A\n);elseif(score=80)printf(grade=B\n);elseif(score=70)printf(grade=C\n);elseif(score=60)printf(grade=D\n);elseprintf(grade=E\n);}#includestdio.hmain(){intscore,grade;printf(Inputascore(0~100):);scanf(%d,&score);grade=score/10;/*将成绩整除10,转化成switch语句中的case标号*/switch(grade){case10:case9:printf(grade=A\n);break;case8:printf(grade=B\n);break;case7:printf(grade=C\n);break;case6:printf(grade=D\n);break;case5:case4:case3:case2:case1:case0:printf(grade=E\n);break;default:printf(Thescoreisoutofrange!\n);}}