c語言 switch的用法 C語言中的SWITCH是什么意思?
執(zhí)行過程:
先計算并獲得switch后面小括號里的表達式或變量值,然后將計算結(jié)果順序與每個case后的常量比較。
當二者相等時,執(zhí)行個case塊中的代碼,當遇到break時,就跳出switch選擇結(jié)構,執(zhí)行switch選擇結(jié)構之后的代碼。
如果任何一個case之后的常量與switch后的小括號中的值相等,則執(zhí)行switch尾部的default塊中代碼。
switch用在編程中,如C語言中它經(jīng)常跟case一起使用,是一個判斷選擇代碼。其功能就是控制業(yè)務流程流轉(zhuǎn)的。
C語言程序語句switch語句的語法如下(switch,case和default是關鍵字):
switch ( controllingExpression )
{
case constantExpression1 :
case constantExpression2 :
case constantExpression3 :
statements;
//當滿足constantExpression1、constantExpression2、constantExpression3任何一個都執(zhí)行statements
break;
case constantExpression :
statements ;
break;
...
default :
statements ;
break;
}
擴展資料:
Switch在一些計算機語言中是保留字,其作用大多情況下是進行判斷選擇。以C語言來說,switch(開關語句)常和case break default一起使用。
遵守switch語句規(guī)則
switch語句非常有用,但在使用時必須謹慎。所寫的任何switch語句都必須遵循以下規(guī)則:
只能針對基本數(shù)據(jù)類型中的整型類型使用switch,這些類型包括int、char等。對于其他類型,則必須使用if語句。
switch()的參數(shù)類型不能為實型 。
case標簽必須是常量表達式(constantExpression),如42或者'4'。
case標簽必須是惟一性的表達式;也就是說,不允許兩個case具有相同的值。
參考資料來源:百度百科-switch (計算機語言關鍵字)
凡是使用過的人都會有同樣的感覺——C語言的使用靈活這個特點既是優(yōu)點又是缺點, 因為對精通C語言的用戶來講, 靈活就意味著編程可以無拘無束, 甚至隨心所欲; 但對初學者或者是尚未摸著規(guī)律的用戶來說, 有時候就會覺得C程序設計有點象霧里看花, 摸不著頭腦。 因為靈活就意味著沒有一個標準。 而實際上,C 語言和其它計算機語言一樣, 只要你真正掌握了該語言的每一個語句的特點, 理解、 運用就不難掌握了。 下面就C語言中switch 語句的使用特點談談自己的體會。 ---- switch 語句的格式如下: switch( 表達式) {case 常量表達式1: 語句1 case 常量表達式2: 語句2 case 常量表達式3: 語句3 case 常量表達式n: 語句n default : 語句n+1 } ---- 從表面上看來,switch 語句與PASCAL 語言中的case 語句以及FOXBASE 中的do case 語句非常類似, 只是關鍵字有所不同: 一個是switch; 而另一個是case 或do case。 但如果仔細閱讀過教材或有關參考書的話, 就絕不會有此想法。 從語句的功能上來看,PASCAL 和case 語句或FOXBASE 的do case 語句中的常量表達式是用來與case 后面的表達式比較以確定執(zhí)行哪一個語句, 一旦執(zhí)行了某一語句, 則會自動地結(jié)束這一case 后的語句; 而C 的switch 語句則不然。 首先,switch 語句中的常量表達式只是起到一個入口作用, 一旦執(zhí)行了相應的語句后, 只要沒有強迫中斷語句(break),它就會一直按順序繼續(xù)執(zhí)行下去, 也就是會執(zhí)行其它case 后面的語句, 直到遇到“}” 符號才停止。 乍看覺得有點不可事議, 但若仔細回味且切身編程體會, 那么就會感司到C的switch 語句的獨到之處。 接下來就幾個具體例子來剖析:switch 語句的特點以及區(qū)別于其它語言中的相應語句的妙處。 ---- 第一個例子: 根據(jù)輸入的百分制成績, 然后給出‘A’ ~‘E’ 相應的等級符(90-100 為‘A’、80-89 為‘B’、70-79 為‘B’、60-69 為‘C’、0-59 為‘E’)。主要的處理程序段如下:(temp、score、grade 皆為整型變量) temp=score/10; switch(temp) {case 9:grade=‘A’; case 8:grade=‘B’; case 7:grade=‘C’; case 6:grade=‘D’; case 5:grade=‘E’; } printf(“the grade is %c”,grade); ---- 仔細閱讀這段程序( 根據(jù)C語言的特點),就會發(fā)現(xiàn)有很多錯誤。 首先, 對100 分和低于50 分的情況沒有考慮; 其次,C 語言的switch 特點是順序執(zhí)行, 那么這段程序不輸入的分數(shù)如何, 最后的輸出都將是‘E’。因此, 修改這段程序, 可以得到一個正確答案是: temp=score/10; switch(temp) {case 10: case 9:grade=‘A’;break; case 8:grade=‘B’;break; case 7:grade=‘C’;break; case 6:grade=‘D’;break; case 5: case 4: case 3: case 2: case 1: case 0:grade=‘E’; } printf(“the grade is %c,grade”); ---- 但這么一個結(jié)果還不算是一個好的C程序, 因為它只是能得到正確的解, 沒有真正用到C的特點。 如果將C的特點運用到這段程序中, 則程序?qū)?yōu)化成如下: grade=‘A’; temp=score/10; switch(temp) {case 0: case 1: case 2: case 3: case 4: case 5:grade++; case 6:grade++; case 7:grade++; case 8:grade++; case 9: case 10: } printf(“the grade is %c,grade”); ---- 從這段程序中, 我們可以體會到前面所說的該語句的特點。 ---- 第二個例子: 運輸公司對用戶計算運費。 距離(s) 越遠, 每公里運費越低。 具體標準如下: s < 250 (km) 沒有折扣 250 < =s < 500 (km) 2% 折扣 500 < =s < 1000 (km) 5% 折扣 1000 < =s < 2000(km) 8% 折扣 2000 < =s < 3000(km) 10% 折扣 3000 < =s (km) 15% 折扣 ---- 設每公里每噸貨物的基本運費為p, 貨物重為w, 距離為s, 折扣為d, 則總運費計算公式為: ---- f=p*w*s*(1-d) ---- 分析此問題, 折扣的變化是有規(guī)律的: 折扣的“ 變化點” 都是250 的倍數(shù)(250,500,1000,2000,3000)。利用這一特點, 可以再設一變量c, 它代表250 的倍數(shù)。 當c<1 時, 無折扣;1<=c<2 時, 折扣為d=2%;2<=c<4 時,d=5%;4<=c<8 時,d=8%;8<=c<12 時,d=10%; c>=12 時,d=15%。 所以可以有如下沒有錯誤的程序段: scanf(“%f,%f,%d”,&p,&w,&s); if(s>=3000)c=12 else c=s/250 switch(c) {case 0:d=0;break; case 1:d=2;break; case 2: case 3:d=5;break; case 4: case 5: case 6: case 7:d=8;break; case 8: case 9: case 10: case 11:d=10;break; case 12:d=15; } f=p*w*s*(1-d/100.0); printf(“freight%15.f”,f); ---- 如同前一個題目, 這個程序段也完全可以利用switch 特點, 改進優(yōu)化得到如下程序段: d=0 scanf(“%f,%f,%k”,&p,&w,&s); if(s>=3000)c=12 else c=s/250 switch(c) {case 12:d+=5; case11: case 10: case 9: case 8:d+=2; case 7: case 6: case 5: case 4:d+=3; case 3: case 2:d+=3; case 1:d+=2; case 0: } f=p*w*s*(1-d/100.0); printf(“freight%15.4f”,f); ---- 從上面兩個例子分析, 使我們可以比較清楚地看見C語言中switch 語句與其它語言中相應語句的區(qū)別。 盡管在學習和教計算機語言的過程中, 我們始終認為語言是相通的, 這樣便于學習一門新的語言。 但是真正要把某一門計算機語言學好, 非得掌握它的特點。 ---- 這里僅僅是自己在編程實踐過程中的一點體會, 有錯誤的地方懇請批評指正。 希望對你有幫助!
case (c>=90 && c<=100):
case后面的必須是一個常量。
你這個可以先將成績除以10,再用switch
#include "stdio.h"
void main()
{
char c; /*這里別用char,改成:int c,d;*/
scanf("%c",&c); /*這一句也改成scanf("%d",&c);最好前面再加一句,printf("請輸入成績:"); 在這句后面加一句d=c/10;*/
switch(c) /*然后switch里面用d來判斷,switch(d)*/
{
case (c>=90 && c<=100):printf("成績的等級為:A.\n");
break; /*改成: case (10):
case (9):printf("成績的等級為:A.\n");break;
case (c>=80 && c<=89):printf("成績的等級為:B.\n");
break; /*改成:case (8):printf("成績的等級為:B.\n"); break;
}
}
因為90到100之間的數(shù)經(jīng)過除以10再取整以后就變成了9;100/10等于10,又因為case調(diào)用同一個語句的時候允許就在最后一個語句寫上那個語句,而將前面的那幾個省略掉,所以case (10):后面的就省掉了,當然寫上也不會錯。
你的補充的那個,你可以把它分開表示,就像我給你弄的那個case (c>=90 && c<=100):printf("成績的等級為:A.\n");
break; /*改成: case (10):
case (9):printf("成績的等級為:A.\n");break;
雖然有點糾纏不清的感覺,但是希望對解決你的疑問有一定的幫助,呵呵。。。
執(zhí)行case 2是因為在switch (x) 中x=1,所以執(zhí)行case 1,然而case 1 這條語句沒有break,所以switch (x)在執(zhí)行了case 1之后將繼續(xù)往下依次執(zhí)行case語句,直到碰到break就跳出switch 循環(huán)。
對于“a的自加是先執(zhí)行后在自加,當此程序a自加的時候沒有執(zhí)行其他語句啊?????? ” 則是你沒看到程序中的語句a++,b++它自加完了以后把值任然是賦值給a,b本身的,而不是賦值給其他變量例如c=a++;z=b++。如果是這樣賦值給別的變量的話那么就很明確了c,z的值將和課本上說得一樣都是自加以前的值 。也就是說這個程序當中最后printf輸出的是a,b的值,但是a,b在自加過程中值都變化了,就是說相當于語句a=a++,b=b++.
我將你的程序進行了更改,你將兩個程序都運行下然后再對照著看一下就明白為什么a,b的值最后是2和1了,程序如下
#include <stdio.h>
main()
{
int x=1,y=0,a=0,b=0,c=0,z=0;
switch (x)
{case 1:
switch(y)
{
case 0:c=a++;break;
case 1:b++;break;
}
case 2: c=a++,z=b++;break;
case 3:a++,b++;
}
printf("c=%d,z=%d\n",c,z) ;
}
對于 ++i 和i++ 有什么區(qū)別?
簡單而言: ++i在i 存儲的值上增加一并向使用它的表達式“返回” 新的, 增加后的值; 而i++ 對i增加一, 但返回原來的是未增加的值。
相關評說:
平果縣嚙入: ______ 不支持縮進,看代碼累 switch(a%3) { ``case 0: //當(a%3)==0時執(zhí)行下面的語句直到遇到break或return ````m++; ````break; ``case 1: //當(a%3)==1時執(zhí)行下面的語句直到遇到break或return ````m++; ``````switch(b%2) // 此switch在m+...
平果縣嚙入: ______ switch(){case : case :...... }先說語法,再說注意事項switch的判斷變量類型只能是字符型或者整型,請注意,只有這兩種才可以switch后面緊跟的那個小括號里面就是 要判斷的變量名稱 然后switch要求它后面的大括號完整,不能不寫case 后面加...
平果縣嚙入: ______ #include<stdio.h> void main() { int i; for(i=0;i<7;i++) { switch(i+1) { case 1: case 7:printf(" *\n");break; case 2: case 6:printf(" ***\n");break; case 3: case 5:printf(" *****\n");break; case 4:printf("*******\n");break; } } getch(); } 你看這個行么 不行還有用到 #include<conio.h>里函數(shù)的一個我想到的方法 不行給我留言
平果縣嚙入: ______ switch(表達式) { case 常量表達式1: 語句1; break; case 常量表達式2: 語句2; break; case 常量表達式3: 語句3; break; …… case 常量表達式n: 語句n; break; case 常量表達式n+1: 語句n+1; break; }
平果縣嚙入: ______ 在c的程序設計中,switch一般用于跳轉(zhuǎn),這個大家都知道,但用于什么情況的跳轉(zhuǎn)比較好呢,這就要看你要選擇的情況有幾類了,如果只有兩個,那我建議用 if() 語句; else 語句 ; 如果種類比較多,處于并列關系,那就可以用switch結(jié)構, ...
平果縣嚙入: ______ switch(a);不要分號 swhich后面沒有分號
平果縣嚙入: ______ switch(k) { case 1:case 4:case 7: s++;break; // 當k的值為1,4,7時,執(zhí)行 s++,跳出switch case 2:case 3:case 6:break; // 當k的值為2,3,6時,跳出switch case 0:case 5:s+=2;break; //當k的值為0,5時,執(zhí)行 s+=2, 跳出switch } switch中的break...
平果縣嚙入: ______ case標簽后面只能是常量表達式,而不是一個條件,你這樣可以用IF寫,不然的話只能是一個具體值,然后運行時系統(tǒng)把這個值跟a進行比較,在一樣的情況下就代表條件為真.
平果縣嚙入: ______ C語言中,switch語句的使用格式如下: switch(表達式) { case 常量表達式1 : 語句1; break; case 常量表達式2 : 語句2; break; ...... case 常量表達式n : 語句n; break; default : 語句n+1; } 舉例如下: int i=4, a=0; switch(i) { case 1 : ...
平果縣嚙入: ______ #include <stdio.h>#include <stdlib.h>#include <math.h> int x2y(int x) { int y; //求反正切值并強制轉(zhuǎn)換成整數(shù) arctan(x) = y -π/2 < y < π/2 switch((int)atan(x)){ case 1: y = 1; break; case 0: y = 0; break; case -1: y = -1; break; } return y; } int main() { printf...