一般格式: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是指直接跳出循環