一般格式:switch(表达式【
只能是整型表达式,C语言默认字符为整数,不能用浮点型和字符串型】){
case 常量表达式1【
不包含变量和函数调用的任何表达式,表达式值必须为整数或者字符】:语句序列1【后带有break时会从此处跳出switch循环,否则将会依次执行到语句结束】
case 常量表达式2
:语句序列2
……
case 常量表达式n
:语句序列n
default:语句序列n+1【
表达式值若与case后任意一常量表达式值不等,则执行此语句,所以本语句可存在可不存在 】}
eg:
#include<stdio.h> int main(){ double s1,s2,s; char $; scanf("%lf%c%lf",&s1,&$,&s2); switch($){ case '+':printf("%.2f\n",s1+s2);break; case '-':printf("%.2f\n",s1-s2);break; case '*':printf("%.2f\n",s1*s2);break;// 输出6.00 case '/':printf("%.2f\n",s1/s2);break;// 0.67 default:printf("运算符错误\n");break;}// 运算符错误 return 0; }
【
break使得实现了真正意义上的多分支,执行时op依次与case后的常量表达式比较,相等时开始执行本行,之后依次执行, 直到遇见break跳出switch循环】
在switch中不使用break
eg://输入一个正整数n(n<100000),请输出n的位数,并逆序输出n的每一位数字
#include<stdio.h> #include<math.h> int main(){ int n,len; scanf("%d",&n); len=(int)log10(n)+1;//计算n的位数 printf("%d\n",len); switch(len){ case 5:printf("%d",n%10); n=n/10; case 4:printf("%d",n%10); n=n/10; case 3:printf("%d",n%10); n=n/10; case 2:printf("%d",n%10); n=n/10; case 1:printf("%d",n%10); } return 0; }
/*在switch的某些语句段中使用break
计算某年某月的天数*/
#include<stdio.h> int main(){ int y,m,d; scanf("%d%d",&y,&m); switch(m){ case 4: case 6: case 9: case 11:d=30;break; case 2:{ if(y%4==0&&y%100!=0||y%400==0) d=29; else d=28; break; } default:d=31;break; } printf("%d",d); }
四则运算中讲究除数不能为0,所以fabs(y)>le-10(大于1*10(-10))
continue是中断循环的本次执行,立即开始执行下一次循环;而break是立即结束所在循环。
continue是指跳回for循环的开始,执行调整语 句并判断循环条件(即“直接进行下一次循环”),而break是指直接跳出循环