亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C語(yǔ)言深入講解語(yǔ)句與選擇結(jié)構(gòu)的使用

 更新時(shí)間:2022年05月12日 16:45:47   作者:kikokingzz  
這篇文章主要為大家介紹了C語(yǔ)言的語(yǔ)句與選擇結(jié)構(gòu),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

知識(shí)點(diǎn)1-語(yǔ)句

1.1 語(yǔ)句

1.表達(dá)式語(yǔ)句

由一個(gè)表達(dá)式加分號(hào)構(gòu)成一個(gè)表達(dá)式語(yǔ)句,其一般形式如下:

表達(dá)式 ;

Q1:什么是表達(dá)式?

A1:表達(dá)式就是C語(yǔ)言中由運(yùn)算符和數(shù)據(jù)構(gòu)成的式子;表達(dá)式運(yùn)算的結(jié)果稱為表達(dá)式的值,以下都是一些常見的表達(dá)式。

//表達(dá)式
1
-5
4+20
x = q++ % 3 
a*(b + c/d)/20 
q > 3

kiko:因此表達(dá)式語(yǔ)句就是在上面這些表達(dá)式后面加一個(gè)分號(hào)就完事了~

//表達(dá)式語(yǔ)句
1;
-5;
4+20;
x = q++ % 3 ;
a*(b + c/d)/20 ;
q > 3;

2.控制語(yǔ)句

由名字可見,控制語(yǔ)句用于控制程序的執(zhí)行過程,它是由特定的語(yǔ)句定義的,我個(gè)人將C語(yǔ)言中的控制語(yǔ)句分為以下3類:

  • 選擇語(yǔ)句:if-else語(yǔ)句、switch-case語(yǔ)句。
  • 循環(huán)語(yǔ)句:while語(yǔ)句、do-while語(yǔ)句、break語(yǔ)句。
  • 跳轉(zhuǎn)語(yǔ)句:break語(yǔ)句、goto語(yǔ)句、continue語(yǔ)句。

本期我們就講三類語(yǔ)句中的第一類,也就是選擇語(yǔ)句!

3.空語(yǔ)句

空語(yǔ)句是只有一個(gè)分號(hào)的語(yǔ)句,它在程序中什么也不做,可能就是起到一個(gè)占位作用。

; //空語(yǔ)句
for( int i=0; i<10; i++ )
; //循環(huán)體為空

4.復(fù)合語(yǔ)句

可以用花括號(hào){ }將一系列語(yǔ)句括起來(lái),使其大功能上相當(dāng)于一條語(yǔ)句,這就是語(yǔ)句塊。語(yǔ)句塊中可以有變量聲明,聲明必須位于塊的開始。

int x;
int y;
x = 6;
{   int z = 100;
    y = z/x;
    printf("%d \n", y);  
}   //從大功能上看,{}里面的三條語(yǔ)句相當(dāng)于一條語(yǔ)句

知識(shí)點(diǎn)2-選擇結(jié)構(gòu)

2.1 if語(yǔ)句

Q1:什么是if語(yǔ)句?

A1:if語(yǔ)句提供一種二分支選擇的控制流程,它根據(jù)表達(dá)式的值來(lái)決定執(zhí)行兩個(gè)不同情況下的其中一個(gè)分支程序段。

1.if語(yǔ)句的單分支

單分支就是只有一個(gè)分支,當(dāng)給定的條件滿足時(shí),執(zhí)行一個(gè)語(yǔ)句1;當(dāng)條件不滿足時(shí),不進(jìn)行任何操作,因此只有語(yǔ)句1一種輸出,因此我稱之為單分支。

if(表達(dá)式)
語(yǔ)句1;//如果為真,執(zhí)行語(yǔ)句;否則不執(zhí)行
//C語(yǔ)言規(guī)定:0為假,非0為真

案例1:如果小于18歲,輸出未成年。

//該情況只有一個(gè)分支,即只有小于18這種情況輸出。
#include<stdio.h>
int main()
{
    int age=10;
    if(age<18)
     printf("未成年\n");
     return 0;
}

2.if語(yǔ)句的雙分支

雙分支就是有兩個(gè)分支,當(dāng)給定的條件滿足時(shí),執(zhí)行語(yǔ)句1;當(dāng)條件不滿足時(shí),執(zhí)行語(yǔ)句2。因此有2種不同的輸出,稱之為雙分支。

if(表達(dá)式)
語(yǔ)句1;//表達(dá)式為真,執(zhí)行語(yǔ)句1
else
語(yǔ)句2;//否則,執(zhí)行語(yǔ)句2

案例2:小于18打印未成年;否則打印成年。

//該情況只有兩個(gè)分支,即只有未成年、成年兩種不同的輸出結(jié)果
#include<stdio.h>
int main()
{
    int age=20;
    if(age<18)//年齡小于18時(shí)打印未成年
     printf("未成年\n");
     else//否則打印成年
     printf("成年\n");
     return 0;
}//由于我們將age初始化為20,因此最終會(huì)選擇打印“成年”

3.if語(yǔ)句的多分支

多分支就是有多個(gè)分支,這邊使用else if來(lái)使得if語(yǔ)句也可以進(jìn)行多個(gè)分支的判斷,我們?cè)诔绦蛑兄灰ㄟ^增加else if,就可以增加if語(yǔ)句判斷的分支數(shù)。

如下例中,當(dāng)表達(dá)式1滿足執(zhí)行語(yǔ)句1;如果不滿足表達(dá)式1,滿足表達(dá)式2,執(zhí)行語(yǔ)句2;其余情況執(zhí)行語(yǔ)句3,有3種不同的分支,因此我們稱之為多分支。

if(表達(dá)式1)//表達(dá)式1為真,執(zhí)行語(yǔ)句1
語(yǔ)句1;
else if(表達(dá)式2)//表達(dá)式1為假,表達(dá)式2為真,執(zhí)行語(yǔ)句2
語(yǔ)句2;
else//其余所有情況,執(zhí)行語(yǔ)句3
語(yǔ)句3;

案例3:輸入年齡后,判斷一個(gè)人的年齡范圍并輸出其結(jié)果(共有5種可能:未成年、青年、壯年、老年、老不死)

//有5種不同的輸出,因此判斷為多分支,需要結(jié)合else if
#include<stdio.h>
int main()
{
    int age=0;
    scanf("%d",&age);
    if(age<18)
     printf("未成年\n");
     else if (18<=age && age<28)
     printf("青年\n");
     else if(age>=50 && age<50)
     printf("壯年\n");
     else if(age>=50 && age<90)
     printf("老年\n");
     else//最后一個(gè)else也可以省略
     printf("老不死");
     return 0;
}

4.if語(yǔ)句與代碼塊

如果條件成立,要執(zhí)行多條語(yǔ)句,應(yīng)該使用代碼塊{ }。

#include <stdio.h>
int main()
{
    if(表達(dá)式)
   {
        語(yǔ)句列表1;//包含多條語(yǔ)句
   }
    else
   {
        語(yǔ)句列表2;//包含多條語(yǔ)句
   }
    return 0; 
}

案例4:輸入年齡后,判斷一個(gè)人的年齡范圍并輸出其結(jié)果(共有5種可能:未成年、青年、壯年、老年、老不死)

#include<stdio.h>
int main()
{
    int age=10;
    if(age<18)                //情況A(包含多條代碼,使用代碼塊)
     {
     printf("未成年\n");
     printf("不能談戀愛\n");
     }//一對(duì)大括號(hào),就是一個(gè)代碼塊
     else                     //情況B(包含多條代碼,使用代碼塊)
     {
     if (18<=age && age<28)
     printf("青年\n");
     else if(age>=50 && age<50)
     printf("壯年\n");
     else if(age>=50 && age<90)
     printf("老年\n");
     else//最后一個(gè)else也可以省略
     printf("老頑童");          
     }
    return 0;   
}

5.懸空else

Q1:什么是懸空else?

A1:else是和它離的最近的if匹配的,我們可以看一看下面這道例題來(lái)深入了解。

#include<stdio.h>
int main()
{
    int a=0;
    int b=2;
    if(a==1)
      	if(b==1)
       		 printf("hehe\n");
    else
       printf("haha\n");
    return 0;
}

從程序的書寫形式上來(lái)看,if (a==1)else printf("haha\n"); 是匹配的,按這個(gè)邏輯,因?yàn)閍=0不滿足第一個(gè)if條件,因此會(huì)直接進(jìn)入else printf("haha\n");,本題最終應(yīng)當(dāng)輸出haha,可真的如此嗎?

結(jié)果居然是什么都沒有輸出。這是因?yàn)閑lse是和離它最近if相匹配的,也就是與if(b==1)相匹配,因此上圖橙色方框圈起來(lái)的這幾行代碼都屬于if (a==1) 條件滿足的情況,而本題a初始化為0,不滿足a==1,因此就不會(huì)有任何輸出。

2.2switch語(yǔ)句

1.switch語(yǔ)句的定義

Q1:什么是switch語(yǔ)句?

A1:switch語(yǔ)句是一種專門進(jìn)行多分支選擇的分支控制語(yǔ)句。上面介紹了if語(yǔ)句使用else if可以實(shí)現(xiàn)多分支,但是具體實(shí)現(xiàn)起來(lái)程序冗長(zhǎng)且難以理解,而采用switch語(yǔ)句實(shí)現(xiàn)分支則結(jié)構(gòu)更清晰。switch語(yǔ)句的一般語(yǔ)法結(jié)構(gòu)如下:

switch(表達(dá)式)
{
case 常量表達(dá)式1:語(yǔ)句1;(break;)
case 常量表達(dá)式2:語(yǔ)句2;(break;)
···
case 常量表達(dá)式n:語(yǔ)句n;(break;)
default:語(yǔ)句n+1;
}

switch語(yǔ)句的執(zhí)行過程:

  • 計(jì)算switch表達(dá)式的值。
  • 將該值與case后面的常量表達(dá)式的值相比較,當(dāng)switch表達(dá)式的值與某個(gè)常量表達(dá)式i的值一致時(shí),就從該case后的語(yǔ)句i開始執(zhí)行,直到遇到break語(yǔ)句或整個(gè)switch結(jié)束。
  • 若switch表達(dá)式與任何常量表達(dá)式的值均不同時(shí),則執(zhí)行default后面的語(yǔ)句或執(zhí)行switch結(jié)構(gòu)的后續(xù)語(yǔ)句。

上述switch結(jié)構(gòu)的幾點(diǎn)注意:

(1)switch 后面的圓括號(hào)內(nèi)的表達(dá)式類型一般為整型、字符型和枚舉型,不能為浮點(diǎn)型。

(2)case標(biāo)簽: case后必須跟整數(shù)類型(包括char類型)的常量或整型常量表達(dá)式。

Q2:case后為什么可以跟char類型?

A2:因?yàn)锳SCII字符在內(nèi)存中是以整型存儲(chǔ)的!

(3)break語(yǔ)句:它使程序控制跳出當(dāng)前循環(huán)或switch語(yǔ)句的剩余部分,它實(shí)際效果是把語(yǔ)句列表劃分為不同的分支部分。

(4)default子句:當(dāng) switch表達(dá)式的值并不匹配所有case標(biāo)簽的值時(shí),這個(gè)default 子句后面的語(yǔ)句就會(huì)執(zhí)行。所以,每個(gè)switch語(yǔ)句中只能出現(xiàn)一條default子句。

2.switch語(yǔ)句的實(shí)戰(zhàn)案例

案例1.0 選擇打印星期

//該程序在接收到整數(shù)1-7后,會(huì)打印相對(duì)應(yīng)星期,然后運(yùn)行到break,跳出switch語(yǔ)句
#include<stdio.h>
int main()
{
    int day = 0;
    scanf("%d", &day);
    switch (day)//day必須定義為整型
    {
    case 1+0 :printf("星期1\n");break;//case1+0 √ case后跟整型常量就行
    case 2:printf("星期2\n");break;
    case 3:printf("星期3\n");break;
    case 4:printf("星期4\n");break;
    case 5:printf("星期5\n");break;
    case 6:printf("星期6\n");break;
    case 7:printf("星期7\n");break;
    }
    return 0;
}

案例1.1 改進(jìn)打印星期

題目變化:輸入1-5打印工作日;輸入6-7打印休息日.

巧妙利用case語(yǔ)句未遇到break程序會(huì)持續(xù)進(jìn)行,因此無(wú)論從case1進(jìn)入還是從case5進(jìn)入,最終都會(huì)在printf("工作日")下一行的break結(jié)束switch語(yǔ)句;case6&case7同理。

案例2.0:求求看最后m與n的值為多少?

#include<stdio.h>
int main()
{
    int n = 1;
    int m = 2;
    switch (n)
    {
    case 1:m++;
    case 2:n++;
    case 3:
        switch (n)
        {
        case 1:n++;
        case 2:m++; n++; break;                        
        }
    case 4:m++;
    default:
        break;
    }
    printf("m=%d , n=%d \n", m, n);
    return 0;
}

這一題的細(xì)節(jié)主要在于理解switch的嵌套,我們一步一步分析:

  • 進(jìn)入case1,m++,m變?yōu)?。
  • 進(jìn)入case2,n++,n變?yōu)?。
  • 進(jìn)入case3,這里嵌套了一個(gè)子switch語(yǔ)句,由于此時(shí)n為2,因此進(jìn)入子case2,m++,n++,遇到break跳出子switch語(yǔ)句,此時(shí)m為4,n為3。
  • 進(jìn)入case4,m++,m變?yōu)?,由于沒有遇到break繼續(xù)向下執(zhí)行。
  • 遇到default中的break,結(jié)束switch語(yǔ)句,打印結(jié)果,此時(shí)m=5,n=3。

到此這篇關(guān)于C語(yǔ)言深入講解語(yǔ)句與選擇結(jié)構(gòu)的使用的文章就介紹到這了,更多相關(guān)C語(yǔ)言語(yǔ)句與選擇結(jié)構(gòu)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • OpenCV實(shí)現(xiàn)亂序碎片復(fù)原

    OpenCV實(shí)現(xiàn)亂序碎片復(fù)原

    這篇文章主要介紹了通過OpenCV 直方圖相似度對(duì)比,實(shí)現(xiàn)將4張打亂順序的碎片拼接復(fù)原并展示原圖。文中的示例代碼講解詳細(xì),需要的朋友可以學(xué)習(xí)一下
    2021-12-12
  • c語(yǔ)言?指針零基礎(chǔ)講解

    c語(yǔ)言?指針零基礎(chǔ)講解

    指針是指向另一個(gè)變量的變量。意思是一個(gè)指針保存的是另一個(gè)變量的內(nèi)存地址。換句話說,指針保存的并不是普通意義上的數(shù)值,而是另一個(gè)變量的地址值。一個(gè)指針保存了另一個(gè)變量的地址值,就說這個(gè)指針“指向”了那個(gè)變量
    2022-02-02
  • Qt數(shù)據(jù)庫(kù)應(yīng)用之實(shí)現(xiàn)通用數(shù)據(jù)庫(kù)清理

    Qt數(shù)據(jù)庫(kù)應(yīng)用之實(shí)現(xiàn)通用數(shù)據(jù)庫(kù)清理

    項(xiàng)目如果需要存儲(chǔ)很多日志記錄比如運(yùn)行日志,時(shí)間長(zhǎng)了記錄數(shù)量非常多,數(shù)據(jù)庫(kù)體積不斷增大,對(duì)應(yīng)數(shù)據(jù)庫(kù)表的增刪改查的效率不斷降低,因此需要將早期的數(shù)據(jù)清理。本文將詳細(xì)介紹一下通用數(shù)據(jù)庫(kù)清理的實(shí)現(xiàn),需要的可以參考一下
    2022-02-02
  • C++?多態(tài)虛函數(shù)的底層原理深入理解

    C++?多態(tài)虛函數(shù)的底層原理深入理解

    這篇文章主要介紹了C++?多態(tài)虛函數(shù)的底層原理深入理解,多態(tài)是在不同繼承關(guān)系的類對(duì)象,去調(diào)用同一函數(shù),產(chǎn)生了不同的行為,通常是父類調(diào)用子類的重寫函數(shù),在C++中就是?父類指針指向子類對(duì)象,此時(shí)父類指針的向下引用就可以實(shí)現(xiàn)多態(tài)
    2022-08-08
  • ffmpeg?在?win平臺(tái)下的編譯以及集成

    ffmpeg?在?win平臺(tái)下的編譯以及集成

    這篇文章主要為大家介紹了ffmpeg?在?win平臺(tái)下的編譯以及集成詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2023-05-05
  • C語(yǔ)言如何改變字體顏色

    C語(yǔ)言如何改變字體顏色

    這篇文章主要介紹了C語(yǔ)言如何改變字體顏色,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • wxWidgets實(shí)現(xiàn)無(wú)標(biāo)題欄窗口拖動(dòng)效果

    wxWidgets實(shí)現(xiàn)無(wú)標(biāo)題欄窗口拖動(dòng)效果

    這篇文章主要為大家詳細(xì)介紹了wxWidgets實(shí)現(xiàn)無(wú)標(biāo)題欄窗口拖動(dòng)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • C語(yǔ)言各種操作符透徹理解下篇

    C語(yǔ)言各種操作符透徹理解下篇

    C?語(yǔ)言提供了豐富的操作符,除了上篇中的算術(shù)操作符,移位操作符,位操作符,賦值操作符外,還有單目操作符、關(guān)系操作符、邏輯操作符、條件操作符等等,讓我們通讀本篇來(lái)詳細(xì)了解吧
    2022-02-02
  • C++ inline內(nèi)聯(lián)函數(shù)詳解

    C++ inline內(nèi)聯(lián)函數(shù)詳解

    這篇文章主要介紹了C++ inline內(nèi)聯(lián)函數(shù)詳解,有感興趣的同學(xué)可以借鑒參考下
    2021-02-02
  • VC++實(shí)現(xiàn)通過API來(lái)查看程序錯(cuò)誤信息的方法

    VC++實(shí)現(xiàn)通過API來(lái)查看程序錯(cuò)誤信息的方法

    這篇文章主要介紹了VC++實(shí)現(xiàn)通過API來(lái)查看程序錯(cuò)誤信息的方法,非常實(shí)用的功能,需要的朋友可以參考下
    2014-08-08

最新評(píng)論