0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

if-else判斷語(yǔ)句和switch-case選擇語(yǔ)句介紹

C語(yǔ)言編程學(xué)習(xí)基地 ? 來(lái)源:C語(yǔ)言編程學(xué)習(xí)基地 ? 作者:C語(yǔ)言編程學(xué)習(xí)基地 ? 2022-10-08 10:19 ? 次閱讀

1、if-else判斷語(yǔ)句

一個(gè)基本的if語(yǔ)句由一個(gè)關(guān)鍵字if開(kāi)頭,跟上在括號(hào)()里邊的是表示邏輯條件的表達(dá)式,然后是一對(duì)大括號(hào){}中間是若干條語(yǔ)句,如果條件的邏輯表達(dá)式的結(jié)果不是零,那么就執(zhí)行大括號(hào)中間的語(yǔ)句,否則就跳過(guò)不執(zhí)行。

if的返回值為真或假,可以用bool型變量進(jìn)行存儲(chǔ),占用一字節(jié)。

當(dāng)if的條件滿(mǎn)足或者不滿(mǎn)足的時(shí)候要執(zhí)行的語(yǔ)句也可以是一條或者多條if-else 語(yǔ)句,這時(shí)候叫嵌套的if語(yǔ)句,而else 總是和最接近的 if 匹配。

tips:

在if或else后面總加上{}大括號(hào),即使只有一條語(yǔ)句的時(shí)候。風(fēng)格就是三觀。常見(jiàn)的錯(cuò)誤:忘了大括號(hào),if后面的分號(hào),錯(cuò)誤使用 == 和 = ,沒(méi)有匹配或令人困惑的else

例子題目:

描述請(qǐng)判斷它能否被 3,5,7 整除,并輸出以下信息:

能同時(shí)被 3, 5, 7 整除(直接輸出3 5 7,每個(gè)數(shù)中間一個(gè)空格);

只能被其中兩個(gè)數(shù)整除(輸出兩個(gè)數(shù),小的在前,大的在后。例如:3 5或者3 7或者5 7,中間用空格分隔);

只能被其中一個(gè)數(shù)整除(輸出這個(gè)除數(shù));

不能被任何數(shù)整除,輸出小寫(xiě)字符'n',不包括單引號(hào)。:

如:

輸入 105

輸出 3 5 7

解決答案:

int main(void) 
{    int a;  
  scanf("%d", &a); 
 //輸入一個(gè)數(shù)//if圓括號(hào)所表示的 如果 a能被3整除  并且  a也能被 5整除  并且  a也能被7整除  
  if (a % 3 == 0 && a % 5 == 0 & a % 7 == 0) {//如果圓括號(hào)條件里邊的條件滿(mǎn)足      
  printf("3 5 7");//執(zhí)行這條語(yǔ)句    }    
else if (a % 3 == 0 && a % 5 == 0&& a % 7 !=0) {//否則,判斷這條語(yǔ)句是否滿(mǎn)足        printf("3 5");//滿(mǎn)足執(zhí)行這條語(yǔ)句   //下面的依次類(lèi)推    }  
  else if (a % 3 == 0 && a % 7 == 0 && a % 5 != 0) {        printf("3 7");   } 
  else if (a % 5 == 0 && a % 7 == 0 && a % 3 != 0) {        printf("5 7");   }   
  else if (a % 3 == 0 && a % 5 != 0 && a % 7 != 0) {        printf("3");    }   
  else if (a % 5 == 0 && a % 3 != 0 && a % 7 != 0) {        printf("5");    }   
  else if (a % 7 == 0 && a % 5 != 0 && a % 3 != 0) {        printf("7");    }  
  else {        printf("n");    }


return 0;}


2、switch-case選擇語(yǔ)句

switch語(yǔ)句是多分支選擇語(yǔ)句.用來(lái)實(shí)現(xiàn)多分支選擇結(jié)構(gòu)

Switch 函數(shù)圓括號(hào)的參數(shù)列表可由多對(duì)表達(dá)式和數(shù)值組成,ANSI標(biāo)準(zhǔn)允許它為任何類(lèi)型.,表達(dá)式是由左至右加以計(jì)算的,而數(shù)值則會(huì)在第一個(gè)相關(guān)的表達(dá)式為 True 時(shí)返回。如果其中有部分不成對(duì),則會(huì)產(chǎn)生一個(gè)運(yùn)行錯(cuò)誤。

當(dāng)表達(dá)式的值與某一個(gè)case后面的常量表達(dá)式的值相等時(shí),就執(zhí)行此case后面的語(yǔ)句,若所有的case中的常量表達(dá)式的值都沒(méi)有與表達(dá)式的匹配的,就執(zhí)行default后面的語(yǔ)句,每一個(gè)case的常量表達(dá)式的值必須互不相同,否則就會(huì)出現(xiàn)互相矛盾的現(xiàn)象,(對(duì)表達(dá)式的同一個(gè)值,有兩種或多種執(zhí)行方案),當(dāng)沒(méi)有一個(gè)表達(dá)式為 True,或者第一個(gè)為 True 的表達(dá)式的對(duì)應(yīng)值為 Null時(shí),Switch 會(huì)返回一個(gè)Null值。

switch 后面的表達(dá)式不能跟double,float,long,String ,boolean,可以接int,short,byte,char,

返回值:

switch(表達(dá)式, 值1, 結(jié)果1, 值2, 結(jié)果2, ...)

如果表達(dá)式的結(jié)果是值1,整個(gè)函數(shù)返回結(jié)果1

如果表達(dá)式的結(jié)果是值2,整個(gè)函數(shù)返回結(jié)果2

如果表達(dá)式的結(jié)果是值3,整個(gè)函數(shù)返回結(jié)果3

雖然它只返回其中的一個(gè)值,但是 Switch會(huì)計(jì)算所有的表達(dá)式。因此應(yīng)該注意到其所產(chǎn)生的副作用。例如,只要其中一個(gè)表達(dá)式導(dǎo)致被零除錯(cuò)誤,則運(yùn)行就會(huì)發(fā)生錯(cuò)誤。

例子: //請(qǐng)輸入一個(gè)數(shù)字n,然后輸出相應(yīng)的星期幾

   int main(void) {  


  int n;    scanf("%d", &n);  
  switch (n) {//判斷輸入進(jìn)來(lái)的數(shù)值是什么   
 case 1:printf("Monday"); break;//n=1就輸出此語(yǔ)句,平且用break函數(shù)退出   
 case 2:printf("Tuesday"); break;  
  case 3:printf("Wednesday"); break;   
 case 4:printf("Thursday"); break;  
  case 5:printf("Friday"); break;  
  case 6:printf("Sturday"); break;   
 case 7:printf("Sunday"); break;      
  default :        printf("error");   
 }   
 return 0;}

說(shuō)明:

在使用switch-case函數(shù)時(shí),在語(yǔ)句完畢后加上break函數(shù)表示將不再執(zhí)行下面的語(yǔ)句直接結(jié)束switch函數(shù)了。如果什么也不加,則是繼續(xù)執(zhí)行。

一:從“優(yōu)缺點(diǎn)”分析

if…else

優(yōu)點(diǎn):使用靈活,代碼空間小 ;

缺點(diǎn):效率低,因?yàn)?if else 必須遍歷所有的可能值;

switch…case

優(yōu)點(diǎn):代碼結(jié)構(gòu)清晰,效率高;

缺點(diǎn):

1、不夠靈活,switch 僅支持 int, char, unsigned char 等基本類(lèi)型。

2、代碼空間大,因?yàn)樗商?,特別是當(dāng) case 常量分布范圍很大但實(shí)際有效值又比較少的情況,switch…case 的空間利用率將變得很低。對(duì)于 switch,實(shí)際上是根據(jù) case 最小值與最大值,維系了一段連續(xù)的內(nèi)存空間,以空間換取時(shí)間;

二:從“底層原理”分析

if…else

系統(tǒng)是自上而下逐個(gè)條件去判斷,直到符合條件,所以應(yīng)將機(jī)率大的條件置于最前面。

switch…case

switch 語(yǔ)句根據(jù)一個(gè)整數(shù)索引值進(jìn)行多重分支,底層采用跳轉(zhuǎn)表這種數(shù)據(jù)結(jié)構(gòu)。跳轉(zhuǎn)表是一個(gè)數(shù)組,表項(xiàng) i 對(duì)應(yīng)代碼段的地址。當(dāng) switch 索引值等于表項(xiàng) i 時(shí)采取對(duì)應(yīng)的程序操作。

可簡(jiǎn)單理解為:

執(zhí)行 switch 時(shí)生成一個(gè)長(zhǎng)度為最大 case+1 的數(shù)組,程序首先判斷 switch 變量是否大于最大 case 常量,若大于,則跳到 default 分支處理。否則取得數(shù)組索引號(hào)為 switch 變量值大小,取得數(shù)組對(duì)應(yīng)值即為相應(yīng) case 代碼塊地址,程序接著跳到此地址執(zhí)行,完成分支的跳轉(zhuǎn)。

三:從“選擇性”分析

當(dāng)選擇分支較少時(shí),選用 if else 比 switch…case 的效率要高。一般 3個(gè) 以?xún)?nèi)的分支我會(huì)用 if…else 結(jié)構(gòu),大于3個(gè)的分支我都會(huì)用 switch…case,個(gè)人習(xí)慣,這樣結(jié)構(gòu)看著舒服。

當(dāng)選擇分支較多時(shí),選用switch…case結(jié)構(gòu)會(huì)提高程序的效率。

四:總結(jié)

switch…case 只能處理 case 為常量的情況,對(duì)非常量的情況是無(wú)能為力的。

例如 if (x > 1 && x < 100),是無(wú)法使用 switch…case 來(lái)處理的。

所以,switch 只能是在常量選擇分支時(shí)比 if…else 效率高,但是 if…else 能應(yīng)用于更多的場(chǎng)合,它比較靈活。

審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 存儲(chǔ)
    +關(guān)注

    關(guān)注

    13

    文章

    4411

    瀏覽量

    86465
  • Switch
    +關(guān)注

    關(guān)注

    1

    文章

    533

    瀏覽量

    58692
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4355

    瀏覽量

    63319

原文標(biāo)題:【零基礎(chǔ)學(xué)C語(yǔ)言】知識(shí)總結(jié)四:if-else判斷語(yǔ)句和switch-case選擇語(yǔ)句

文章出處:【微信號(hào):cyuyanxuexi,微信公眾號(hào):C語(yǔ)言編程學(xué)習(xí)基地】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    詳解C語(yǔ)言中if-elseswitch-case語(yǔ)句

    一個(gè)基本的if語(yǔ)句由一個(gè)關(guān)鍵字if開(kāi)頭,跟上在括號(hào)()里邊的是表示邏輯條件的表達(dá)式,然后是一對(duì)大括號(hào){}中間是若干條語(yǔ)句,如果條件的邏輯表達(dá)式的結(jié)果不是零,那么就執(zhí)行大括號(hào)中間的語(yǔ)句,否則就跳過(guò)不執(zhí)行。
    發(fā)表于 10-17 10:40 ?3528次閱讀

    C語(yǔ)言中if語(yǔ)句、if-else語(yǔ)句switch語(yǔ)句詳解

    在C語(yǔ)言中,有三種條件判斷結(jié)構(gòu):if語(yǔ)句、if-else語(yǔ)句switch語(yǔ)句。
    發(fā)表于 08-18 16:36 ?1.2w次閱讀
    C語(yǔ)言中if<b class='flag-5'>語(yǔ)句</b>、<b class='flag-5'>if-else</b><b class='flag-5'>語(yǔ)句</b>和<b class='flag-5'>switch</b><b class='flag-5'>語(yǔ)句</b>詳解

    python判斷語(yǔ)句

    python判斷語(yǔ)句:if1. 簡(jiǎn)單小例子如果滿(mǎn)足條件 A,則執(zhí)行代碼塊 a,否則執(zhí)行代碼塊 b。類(lèi)似這樣的控制流程語(yǔ)句,稱(chēng)之為條件語(yǔ)句。它的基本形式是if 判斷條件: 執(zhí)行
    發(fā)表于 02-25 16:22

    C++語(yǔ)言基礎(chǔ)講解視頻Switch分支條件判斷語(yǔ)句

    C++語(yǔ)言基礎(chǔ)講解視頻Switch分支條件判斷語(yǔ)句
    發(fā)表于 01-14 08:00 ?7次下載

    Proteus之if-else語(yǔ)句的應(yīng)用

    Proteus之if-else語(yǔ)句的應(yīng)用,很好的Proteus資料,快來(lái)學(xué)習(xí)吧。
    發(fā)表于 04-18 14:49 ?0次下載

    FPGA學(xué)習(xí)系列:if-elsecase

    設(shè)計(jì)背景:不管是在什么軟件和硬件語(yǔ)言,我們?cè)谖覀兊拇a中都或多或少的用到這兩條語(yǔ)句,if..elsecase語(yǔ)句,今天我們將學(xué)習(xí)verilog中的這兩條
    的頭像 發(fā)表于 06-01 16:59 ?1.2w次閱讀
    FPGA學(xué)習(xí)系列:<b class='flag-5'>if-else</b>與<b class='flag-5'>case</b>

    C語(yǔ)言的switch case多分支選擇語(yǔ)句的詳細(xì)資料說(shuō)明

    1、switch-case開(kāi)關(guān)語(yǔ)句是一種多分支選擇語(yǔ)句,用來(lái)實(shí)現(xiàn)多方向條件分支。雖然采用if-else條件
    發(fā)表于 07-12 17:39 ?1次下載
    C語(yǔ)言的<b class='flag-5'>switch</b> <b class='flag-5'>case</b>多分支<b class='flag-5'>選擇</b><b class='flag-5'>語(yǔ)句</b>的詳細(xì)資料說(shuō)明

    FPGA代碼經(jīng)驗(yàn) case,casez,casex語(yǔ)句

    使用case語(yǔ)句代替嵌套的if-else將會(huì)產(chǎn)生更易讀的代碼,更好的邏輯利用率和更高的性能。
    的頭像 發(fā)表于 12-11 10:42 ?6413次閱讀

    不會(huì)有人不知道怎么優(yōu)雅的替換if-else語(yǔ)句

    來(lái)自:love1024.blog.csdn.net/article/details/104955363 場(chǎng)景日常開(kāi)發(fā),if-else語(yǔ)句寫(xiě)的不少吧??當(dāng)邏輯分支非常多的時(shí)候,if-else套了一層
    的頭像 發(fā)表于 07-28 15:46 ?1522次閱讀
    不會(huì)有人不知道怎么優(yōu)雅的替換<b class='flag-5'>if-else</b><b class='flag-5'>語(yǔ)句</b>吧

    python判斷語(yǔ)句的詳細(xì)說(shuō)明

    python判斷語(yǔ)句:if 1. 簡(jiǎn)單小例子 如果滿(mǎn)足條件 A,則執(zhí)行代碼塊 a,否則執(zhí)行代碼塊 b。類(lèi)似這樣的控制流程語(yǔ)句,稱(chēng)之為條件語(yǔ)句。 它的基本形式是 if 判斷條件: 執(zhí)行
    的頭像 發(fā)表于 02-25 16:22 ?2475次閱讀

    什么是SystemVerilog-決策語(yǔ)句-if-else語(yǔ)句?

    決策語(yǔ)句(Decision statements)允許程序塊的執(zhí)行流程根據(jù)設(shè)計(jì)中信號(hào)的當(dāng)前值分支到特定語(yǔ)句。SystemVerilog有兩個(gè)主要的決策語(yǔ)句:if…else
    的頭像 發(fā)表于 02-09 14:15 ?1332次閱讀
    什么是SystemVerilog-決策<b class='flag-5'>語(yǔ)句</b>-<b class='flag-5'>if-else</b><b class='flag-5'>語(yǔ)句</b>?

    條件判斷語(yǔ)句(if語(yǔ)句

    條件判斷語(yǔ)句,作為任何編程語(yǔ)言都不可缺少的內(nèi)容,在C語(yǔ)言中也不例外。條件判斷語(yǔ)句可以讓程序的功能更加復(fù)雜,從而實(shí)現(xiàn)各種各樣的功能。
    的頭像 發(fā)表于 02-21 15:24 ?3780次閱讀
    條件<b class='flag-5'>判斷語(yǔ)句</b>(if<b class='flag-5'>語(yǔ)句</b>)

    Java中switch語(yǔ)句的使用

    在Java學(xué)習(xí)中我們見(jiàn)過(guò)很多有意思的語(yǔ)句if語(yǔ)句、for語(yǔ)句、while語(yǔ)句switch語(yǔ)句
    的頭像 發(fā)表于 03-08 11:03 ?1226次閱讀
    Java中<b class='flag-5'>switch</b><b class='flag-5'>語(yǔ)句</b>的使用

    Verilog代碼:if-elsecase的電路結(jié)構(gòu)和區(qū)別

    每個(gè)if-else就是一個(gè)2選1mux器。當(dāng)信號(hào)有明顯優(yōu)先級(jí)時(shí),首先要考慮if-else,但是if嵌套過(guò)多也會(huì)導(dǎo)致速度變慢;if語(yǔ)句結(jié)構(gòu)較慢,但占用面積小。 嵌套的if語(yǔ)句如果使
    的頭像 發(fā)表于 11-29 15:10 ?3890次閱讀

    java中的switch語(yǔ)句 case的取值

    Java中的switch語(yǔ)句是一種用于多重條件判斷語(yǔ)句,用于根據(jù)不同的條件執(zhí)行不同的代碼塊。在switch
    的頭像 發(fā)表于 11-30 16:05 ?1330次閱讀