C語(yǔ)言學(xué)習(xí)if和switch分支選擇結(jié)構(gòu)

如何判斷一個(gè)整數(shù)是否為正數(shù)

計(jì)算機(jī)同我們一樣解虱,也是可以判斷大小。在此之前漆撞,我們需要先說明在計(jì)算機(jī)中用來判斷兩個(gè)數(shù)關(guān)系的符號(hào)殴泰,即關(guān)系運(yùn)算符。

關(guān)系運(yùn)算符號(hào)

c語(yǔ)言中的關(guān)系運(yùn)算符與數(shù)學(xué)上學(xué)習(xí)的有什么不同浮驳?

image.png

關(guān)系表達(dá)式的值是真和假悍汛,在C程序用整數(shù)1和0表示。
注意:>=, <=, ==, !=這種符號(hào)之間不能存在空格至会。

一员凝、分支選擇結(jié)構(gòu)之簡(jiǎn)單的if條件語(yǔ)句

if(判斷條件)
{
? 語(yǔ)句1;
? 語(yǔ)句2;
? 語(yǔ)句······
}

其語(yǔ)義是:如果表達(dá)式的值為真,則執(zhí)行其后的語(yǔ)句奋献,否則不執(zhí)行該語(yǔ)句健霹。

假如你現(xiàn)在想讓計(jì)算機(jī)判斷一個(gè)整數(shù)是否為正數(shù),如果是則顯示YES瓶蚂,不是則顯示NO糖埋,應(yīng)該怎么辦呢?窃这。

//判斷一個(gè)整數(shù)是否為正數(shù)
# include <stdio.h>
# include <stdlib.h>
int main()
{
    //定義一個(gè)變量a
    int a;
    scanf("%d",&a);
    //如果a大于0瞳别,則輸出YES 
    if(a>0)
    {
        printf("YES");  
    }
    //如果a小于等于0,則輸出NO 
    if(a<=0)
    {
        printf("NO");
    }
    return 0;
}

注意:if()后面沒有分號(hào)杭攻,直接寫{}

判斷一個(gè)數(shù)是否為偶數(shù)

什么是偶數(shù)呢祟敛?偶數(shù)就是能夠被2整除的數(shù),也就是說一個(gè)數(shù)除以2的余數(shù)為0兆解,那么這個(gè)數(shù)就是偶數(shù)馆铁。
那么我們現(xiàn)在只需要判斷這個(gè)數(shù)除以2的余數(shù)是不是0,即:

如果a除以2的余數(shù)與0相等锅睛,則輸出yes埠巨;
如果a除以2的余數(shù)與0 不相等,則輸出no现拒。

c語(yǔ)言中求余數(shù)的運(yùn)算符號(hào)是“%”辣垒,所以判斷一個(gè)數(shù)是否為偶數(shù)的c語(yǔ)言代碼就是:

# include <stdio.h>
# include <stdlib.h>
int main()
{
    int a;
    scanf("%d",&a);
    if(a%2==0)
    {
        printf("yes");
    }
    if(a%2!=0)
    {
        printf("no"); 
    }   
    return 0;
} 

二、分支選擇結(jié)構(gòu)之簡(jiǎn)單的if-else結(jié)構(gòu)

簡(jiǎn)單的if-else語(yǔ)句的基本結(jié)構(gòu):

if(判斷條件)
{
?語(yǔ)句;
?語(yǔ)句;
?······
}
else
{
?語(yǔ)句;
?語(yǔ)句;
?······
}

語(yǔ)義是: 如果表達(dá)式的值為真印蔬,則執(zhí)行if其后的語(yǔ)句勋桶,否則執(zhí)行else 里的語(yǔ)句。

注意:
if()后面沒有分號(hào)侥猬,直接寫{},else后面也沒有分號(hào)例驹,直接寫{}。

從鍵盤讀入一個(gè)整數(shù)陵究,判斷它是否為偶數(shù)的另一種簡(jiǎn)便快捷的代碼寫法如下:

# include <stdio.h>
# include <stdlib.h>
int main()
{
    int a;
    scanf("%d",&a);
    if(a%2==0)
    {
        printf("yes");
    }
    else
    {
        printf("no"); 
    }   
    return 0;
} 

練習(xí):
比較兩個(gè)整數(shù)誰更大眠饮,同時(shí)打印輸出較大的整數(shù)。

//比較兩個(gè)整數(shù)大小铜邮,并打印輸出較大的整數(shù) 
# include <stdio.h>
# include <stdlib.h>
int main()
{
    int a, b, c;
    scanf("%d%d",&a,&b);
    //如果a大于b仪召,將a賦值給c,并打印c 
    if(a>b)
    {
        c=a;
        printf("%d",c); 
    }
    //反之松蒜,則將b賦值給c扔茅,并打印c 
    else
    {
        c=b;
        printf("%d",c);
    }
    return 0;
} 

我們學(xué)習(xí)了如何從兩個(gè)數(shù)中找出較大的一個(gè)數(shù),那么3個(gè)數(shù)該怎么辦呢秸苗?

1.首先召娜,用3個(gè)變量a,b,c分別存放從鍵盤讀入的3個(gè)數(shù)。
2.然后惊楼,先比較變量a和b的值玖瘸,將較大的值賦給變量d秸讹。
3.再比較變量d和c的值,如果變量c的值大于變量d的值雅倒,則把變量c的值賦給變量d璃诀。
4.最后輸出變量d的值。

c語(yǔ)言代碼為:

//比較3個(gè)數(shù)的大小蔑匣,并將最大值打印輸出 
#include<stdio.h>
#include<stdlib.h>
int main()
{
    //定義a,b,c,d 4個(gè)整型變量 
    int a,b,c,d;
    scanf("%d %d %d",&a,&b,&c);
    //如果a與b比較劣欢,將較大值賦值給d 
    if(a>b)
    {
        d=a;
    }
    else
    {
        d=b;
    }
    //c與d比較,如果c大于d裁良,則將c賦值給d 
    if(c>d)
    {
        d=c;
    }
    printf("%d",d);
    return 0;
} 

當(dāng)然還有另外一種寫法凿将,就是比較變量a和b,以及變量a和c的關(guān)系价脾,思路如下:

如果 a>=b 并且 a>=c牧抵,則輸出a;
如果 b>a 并且 b>=c彼棍,則輸出b灭忠;
如果 c>a 并且 c>b,則輸出c座硕。

其中“并且”在c語(yǔ)言中用“&&”來表示弛作,這時(shí)我們需要來了解一下c語(yǔ)言中的邏輯運(yùn)算符。

c語(yǔ)言中邏輯運(yùn)算符:
image.png

邏輯運(yùn)算的值也是有兩種分別為真和假华匾,C語(yǔ)言中用整型的1和0來表示映琳。其求值規(guī)則如下:

與運(yùn)算&&

參與運(yùn)算的兩個(gè)變量都為真時(shí),結(jié)果才為真蜘拉,否則為假萨西。例如:5>=5 && 7>5 ,運(yùn)算結(jié)果為真旭旭;

或運(yùn)算||

參與運(yùn)算的兩個(gè)變量只要有一個(gè)為真谎脯,結(jié)果就為真。 兩個(gè)量都為假時(shí)持寄,結(jié)果為假源梭。例如:5>=5||5>8,運(yùn)算結(jié)果為真稍味;

非運(yùn)算废麻!

參與運(yùn)算的變量為真時(shí),結(jié)果為假模庐;參與運(yùn)算量為假時(shí)烛愧,結(jié)果為真。例如:!(5>8),運(yùn)算結(jié)果為真怜姿。

另一種寫法的c語(yǔ)言代碼:

//判斷3個(gè)數(shù)的大小
#include <stdio.h>
int main()
{
    int a,b,c;
    scanf("%d %d %d",&a,&b,&c);
    //如果 a>=b 并且 a>=c,則輸出a沧卢;
    if(a>=b && a>=c)
    {
        printf("%d",a);
    }
    //如果 b>a 并且 b>=c粪薛,則輸出b;
    if(b>a && b>=c)
    {
        printf("%d",b);
    }
    //如果 c>a 并且 c>b,則輸出c湃交。
    if(c>a && c>b)
    {
        printf("%d",c);
    }
    return 0;
} 
挑戰(zhàn)練習(xí)

比較3個(gè)數(shù)的大小息罗,并從大到小排序輸出。

第一種方法:
如果a>=b 并且 b>=c温圆,打印a b c挨摸;
如果a>=c 并且 c>b得运,打印a c b;
如果b>a 并且 a>=c锅移,打印b a c熔掺;
如果b>=c 并且 c>a,打印b c a非剃;
如果c>a 并且 a>=b置逻,打印c a b;
如果c>b 并且 b>a备绽,打印c b a券坞;
代碼如下:

//比較排序3個(gè)數(shù)字大小,從大到小輸出
#include <stdio.h>
int main()
{
    int a,b,c,t;
    scanf("%d %d %d",&a,&b,&c);
    //如果a>=b 并且 b>=c疯坤,打印a b c报慕;
    if(a>=b && b>=c)
    {
        printf("%d %d %d",a,b,c);
    } 
    //如果a>=c 并且 c>b,打印a c b压怠;
    if(a>=c && c>b)
    {
        printf("%d %d %d",a,c,b);
    } 
    //如果b>a 并且 a>=c眠冈,打印b a c;
    if(b>a && a>=c)
    {
        printf("%d %d %d",b,a,c);
    } 
    //如果b>=c 并且 c>a,打印b c a蜗顽;
    if(b>=c && c>a)
    {
        printf("%d %d %d",b,c,a);
    } 
    //如果c>a 并且 a>=b布卡,打印c a b;
    if(c>a && a>=b)
    {
        printf("%d %d %d",c,a,b);
    } 
    //如果c>b 并且 b>a雇盖,打印c b a忿等;
    if(c>b && b>a)
    {
        printf("%d %d %d",c,b,a);
    } 
    return 0;
} 

第二種方法(稱之為“換位法”):

1.先將a與b比較,如果a<b崔挖,則a與b交換贸街。需要借助另一變量t中轉(zhuǎn)。
2.將a與c比較狸相,如果a<c薛匪,則a與c交換。
3.將b與c比較脓鹃,如果b<c逸尖,則b與c交換。

c語(yǔ)言代碼為:

//“換位法”從大到小瘸右,排序三個(gè)數(shù)大小 
#include<stdio.h>
int main()
{
    int a,b,c,t;
    scanf("%d %d %d",&a,&b,&c);
    //1.先將a與b比較娇跟,如果a<b,則a與b交換太颤。需要借助另一變量t中轉(zhuǎn)苞俘。
    if(a<b)
    {
        t=a;
        a=b;
        b=t;
    }
    //2.將a與c比較,如果a<c栋齿,則a與c交換苗胀。
    if(a<c)
    {
        t=a;
        a=c;
        c=t;
    } 
    //3.將b與c比較,如果b<c瓦堵,則b與c交換基协。
    if(b<c)
    {
        t=b;
        b=c;
        c=t;
    }
    printf("%d %d %d",a,b,c);
    return 0;
} 

分支選擇結(jié)構(gòu)之嵌套if-else語(yǔ)句

C語(yǔ)言中嵌套if-else語(yǔ)句。嵌套if-else語(yǔ)句的意思菇用,就是在if-else語(yǔ)句中澜驮,再寫if-else語(yǔ)句。其一般形式為:

if(判斷條件)
{
? if(判斷條件)
?{
? 執(zhí)行代碼塊;
?}
?else
?{
? 執(zhí)行代碼塊;
?}
else
{
?執(zhí)行代碼塊;
}
}

先回顧一下之前寫的比較3個(gè)數(shù)大小的代碼惋鸥,然后思考如何用“嵌套”的方式來解決這個(gè)問題杂穷。
在之前我們使用“&&”這個(gè)邏輯關(guān)系運(yùn)算符號(hào)來解決兩個(gè)條件同時(shí)“滿足”的需求

if(a>=b && a>=c)
    print("%d",a);

上述代碼,可以用“嵌套”的方式寫成:

//如果a大于等于b卦绣,再進(jìn)一步討論a與c的關(guān)系
if(a>=b)
{
    //如果a大于等于c成立耐量,則輸出a,不成立則輸出c
    if(a>=c)
    {
        printf("%d",a);
    }
    else
    {
        printf("%d",c);
    }
}

那如果a大于等于b不成立呢滤港,我們的完整代碼該如何編寫呢廊蜒?

//if-else嵌套趴拧,判斷三個(gè)數(shù)大小
#include<stdio.h>
int main()
{
    int a,b,c;
    scanf("%d %d %d",&a,&b,&c);
    if(a>=b)
    {
        if(a>=c)
        {
            printf("%d",a);
        }
        else
        {
            printf("%d",c);
        }
    }
    else
    {
        if(b>=c)
        {
            printf("%d",b);
        }
        else
        {
            printf("%d",c);
        }
    }
    return 0;
} 

如何把代碼修改的更簡(jiǎn)潔呢?
當(dāng)if或else語(yǔ)句后只需執(zhí)行一條代碼時(shí)山叮,可省略{ }著榴。

if-else if 結(jié)構(gòu)

95 “A”;86~100 “A”屁倔;70~85 “B”脑又;60~69“C”;小于60“D”
要求輸入A B C D 锐借,輸出成績(jī)范圍问麸。
定義char grade 用if else實(shí)現(xiàn)

# include <stdio.h>
int main()
{
    char grade;
    printf("請(qǐng)輸入等級(jí):"); 
    scanf("%c",&grade);

    if(grade=='A')
    {
        printf("分?jǐn)?shù)在86~100分"); 
    }
    else if(grade=='B')
    {
        printf("分?jǐn)?shù)在70~85分"); 
    }
    else if (grade=='C')
    {
        printf("分?jǐn)?shù)在60~69分"); 
    } 
    else if(grade=='D')
    {
        printf("分?jǐn)?shù)在60分以下"); 
    } 
    else if(grade != 'A' ||grade != 'B' || grade !='C' ||grade !='D')
    {
        printf("輸入錯(cuò)誤!"); 
    }
    return 0;
}  

switch 分支選擇

#include <stdio.h>
int main()
{
    char grade;
    scanf("%c",&grade);
    switch(grade)
    {
        case 'A':printf("分?jǐn)?shù)在86~100分"); break; 
        case 'B':printf("分?jǐn)?shù)在70~85分"); break; 
        case 'C':printf("分?jǐn)?shù)在60~69分"); break; 
        case 'D':printf("分?jǐn)?shù)在60以下"); break; 
        default:printf("輸入錯(cuò)誤!");
    }
}

從鍵盤輸入一個(gè)月份,輸出對(duì)應(yīng)季節(jié)
12~2 冬季
3~5 春季
6~8 夏季
9~11 秋季

//從鍵盤輸入一個(gè)月份,輸出對(duì)應(yīng)季節(jié)
    /*
    12~2 冬季
     3~5 春季
     6~8 夏季
     9~11 秋季
    */  
#include <stdio.h>
int main()
{
    int number ; 
    printf("請(qǐng)輸入一個(gè)1~12的月份,以回車結(jié)束\n");
    scanf("%d",&number);
    switch (number) {
        case 12:
        case 1:
        case 2:
            printf("冬季");
            break;
        case 3:
        case 4:
        case 5:
            printf("春季");
            break;
        case 6:
        case 7:
        case 8:
            printf("夏季");
            break;
        case 9:
        case 10:
        case 11:
            printf("秋季");
            break;
        default:
            printf("輸入錯(cuò)誤钞翔!\n");
            break;
    }
    return 0;
}
    

輸入一個(gè)不多于5位的正整數(shù)
1)輸出位數(shù)
2)分別輸出每位數(shù)字口叙,中間為“,”分隔開
3)反向輸出5位數(shù)

#include <stdio.h>
int main()
{
    int num, ten_th,thous,hund,ten,indiv;
    printf("請(qǐng)輸入一個(gè)不多于5位的正整數(shù):");
    scanf("%d",&num);
    if(num>9999 && num <=99999)
    {
        printf("這個(gè)數(shù)是一個(gè)五位數(shù):");
        ten_th=num/10000;
        thous=(num-ten_th*10000)/1000;
        hund=(num-ten_th*10000-thous*1000)/100;
        ten=(num-ten_th*10000-thous*1000-hund*100)/10;
        indiv=num%10;
        printf("%d,%d,%d,%d,%d\n",ten_th,thous,hund,ten,indiv) ;
        printf("反向輸出:%d%d%d%d%d",indiv,ten,hund,thous,ten_th) ; 
    } 
    else if(num<=9999&&num>999)
    {
        printf("這個(gè)數(shù)是一個(gè)四位數(shù):");
        thous=num/1000;
        hund=(num-thous*1000)/100;
        ten=(num-thous*1000-hund*100)/10;
        indiv=num%10;
        printf("%d,%d,%d,%d\n",thous,hund,ten,indiv) ;
        printf("反向輸出:%d%d%d%d",indiv,ten,hund,thous) ;
    } 
    else if(num<=999&&num>99)
    {
        printf("這個(gè)數(shù)是一個(gè)三位數(shù):");
        hund=num/100;
        ten=(num-hund*100)/10;
        indiv=num%10;
        printf("%d,%d,%d\n",hund,ten,indiv) ;
        printf("反向輸出:%d%d%d",indiv,ten,hund) ;  
    } 
    else if(num<=99&&num>9)
    {
        printf("這個(gè)數(shù)是一個(gè)兩位數(shù):");
        ten=num/10;
        indiv=num%10;
        printf("%d,%d\n",ten,indiv) ;
        printf("反向輸出:%d%d",indiv,ten) ; 
    } 
    else if(num>=0 && num<=9)
    {
        printf("這個(gè)數(shù)是一個(gè)一位數(shù):");
        printf("%d",num);
        printf("反向輸出:%d",num); 
    } 
    else if (num>99999 || num < 0)
    {
        printf("輸入錯(cuò)誤嗅战!"); 
    }
    return 0;
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市俺亮,隨后出現(xiàn)的幾起案子驮捍,更是在濱河造成了極大的恐慌,老刑警劉巖脚曾,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件东且,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡本讥,警方通過查閱死者的電腦和手機(jī)珊泳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拷沸,“玉大人色查,你說我怎么就攤上這事∽采郑” “怎么了秧了?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)序无。 經(jīng)常有香客問我验毡,道長(zhǎng),這世上最難降的妖魔是什么帝嗡? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任晶通,我火速辦了婚禮,結(jié)果婚禮上哟玷,老公的妹妹穿的比我還像新娘狮辽。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布隘竭。 她就那樣靜靜地躺著塘秦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪动看。 梳的紋絲不亂的頭發(fā)上尊剔,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音菱皆,去河邊找鬼须误。 笑死,一個(gè)胖子當(dāng)著我的面吹牛仇轻,可吹牛的內(nèi)容都是我干的京痢。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼篷店,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼祭椰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起疲陕,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤方淤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后蹄殃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體携茂,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年诅岩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了讳苦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡吩谦,死狀恐怖鸳谜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情式廷,我是刑警寧澤卿堂,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站懒棉,受9級(jí)特大地震影響草描,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜策严,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一穗慕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧妻导,春花似錦逛绵、人聲如沸怀各。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)瓢对。三九已至,卻和暖如春胰苏,著一層夾襖步出監(jiān)牢的瞬間硕蛹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工硕并, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留法焰,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓倔毙,卻偏偏與公主長(zhǎng)得像埃仪,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子陕赃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容