誤人子弟的保姆級(jí)C語言教程(貳)

前言

上一篇講了變量拿霉,輸入輸出等基本的內(nèi)容啸胧。
不知道聰明的同學(xué)是否認(rèn)真完成作業(yè)了~


38.jpg

下面公布作業(yè)的答案~

  1. 設(shè)計(jì)一個(gè)程序彪置,讓用戶依次輸入兩個(gè)數(shù)过吻,輸出這兩個(gè)數(shù)的加減乘除四則運(yùn)算的結(jié)果纯衍。


    image.png
  2. 設(shè)計(jì)一個(gè)程序,讓用戶依次輸入兩個(gè)數(shù)再榄,將兩個(gè)變量互換以后輸出狡刘。


    image.png

如果之前沒有寫出來,這里看完思路之后記得自己去重新寫一遍~

今天我們將會(huì)講一些新的概念困鸥。

分支

我們的賓館建好了嗅蔬,里面也有了各種房型以及形形色色的顧客,警示標(biāo)語也貼的到處都是,但是這個(gè)賓館還是評(píng)級(jí)不高澜术,為啥耙蘸?
你說為啥鸟废?你見過給你一塊地讓你建賓館猜敢,結(jié)果你建了一座筆直筆直的建筑?這不浪費(fèi)嗎侮攀?有的顧客想找房間還得走出好遠(yuǎn)~

所以這里引入一個(gè)新的概念锣枝,分支

眾所周知兰英,如果沒有特殊情況撇叁,程序是按順序從上至下一條一條執(zhí)行的。
而如果我們想改變一些程序的執(zhí)行順序畦贸,必然要有一些分支陨闹。
比如我們把昨天的作業(yè)題改一下。

  • 設(shè)計(jì)一個(gè)程序薄坏,讓用戶依次輸入兩個(gè)數(shù)趋厉,然后再讓用戶輸入1、2胶坠、3君账、4四個(gè)數(shù)的其中一個(gè),當(dāng)用戶輸入這四個(gè)數(shù)中任意一個(gè)的時(shí)候沈善,依次顯示a+b乡数,a-b,a*b闻牡,a/b的值净赴。當(dāng)用戶輸入其他數(shù)字的時(shí)候,輸出輸入錯(cuò)誤罩润。

臥槽這是什么玖翅,怎么忽然變得這么難了?大佬放我走吧我不學(xué)了割以!


9.jpg

別急金度,我先隨便寫一下代碼,你再來感受一下這個(gè)是不是傳說中那么難严沥。

    int a,b,operation;
    printf("請(qǐng)輸入數(shù)字a:");
    scanf("%d",&a);
    printf("請(qǐng)輸入數(shù)字b:");
    scanf("%d",&b);
    printf("請(qǐng)選擇你要執(zhí)行的運(yùn)算审姓,1-加法,2-減法祝峻,3-乘法魔吐,4-除法:");
    scanf("%d",&operation);
    if (operation == 1){
        int d = a+b;
        printf("a+b=%d",d);
    }else if (operation == 2){
        int d = a-b;
        printf("a-b=%d",d);
    }else if (operation == 3){
        int d = a*b;
        printf("a*b=%d",d);
    }else if (operation == 4){
        int d = a/b;
        printf("a/b=%d",d);
    }else{
        printf("輸入有誤");
    }
image.png

怎么樣扎筒,根據(jù)你所學(xué)的知識(shí)理解一下,是不是也不難酬姆,只不過里面加了if else之類的語句嗜桌。

if 和 else

在上面的程序中,我們也認(rèn)識(shí)了一個(gè)新朋友辞色,if和else骨宠。
把這倆哥們好好組合起來,就可以成為最簡(jiǎn)單的分支結(jié)構(gòu)相满。

    if (條件){
        執(zhí)行的語句层亿;
    }else{
        否則執(zhí)行的語句;
    }
image.png

當(dāng)然立美,有一些條件比較復(fù)雜匿又,我們可以用else if來做銜接

    if (條件1){
        執(zhí)行的語句;
    }else if(條件2){
        不滿足條件1且滿足條件2執(zhí)行的語句建蹄;
    }else{
        否則執(zhí)行的語句;
    }
image.png

一些需要注意的

  • else和if是邏輯對(duì)立的碌更,是互相排斥的。就像上面的圖洞慎,if和else剛好把紅色的圓給平分痛单,且互相沒有交集。
  • else和if之間可以夾雜無限個(gè)else if 但是每個(gè)條件不能有交集
    比如
    if (貓){
        
    }else if(小白貓){
        
    }else{

    }

就是錯(cuò)誤的邏輯劲腿,因?yàn)樾“棕垖儆谪埖囊环N旭绒,所以不可以用else if。條件2里面的else已經(jīng)把條件1的貓給排除了焦人。

  • 可以只有if沒有else快压。
    if (貓) {
        
    }
  • 多個(gè)if和else可以嵌套,else將會(huì)和距離他最近的if配對(duì)
    if (貓){
        if (小白貓){

        }else{
            //這個(gè)else和上面的if (小白貓)配對(duì)
        }
    }else if(狗){
        
    }else{
        //這個(gè)else和上面的 if (貓)以及else if(狗)配對(duì)
    }
  • 如果if里面只有一行語句垃瞧,if后面的大括號(hào){}可以省略(但是我不建議這樣做,因?yàn)闀?huì)亂套)
if (貓) printf("喵");

所以if后面的條件咋寫捌汗个从?

寫了這么多偽代碼,只是希望聰明的同學(xué)能明白if的結(jié)構(gòu)歪沃。
那么現(xiàn)在我們來具體說一下if后面括號(hào)里的條件該怎么寫嗦锐。

比較運(yùn)算符

我們用這些運(yùn)算符來比較變量的大小,從而作為條件

  • 大于號(hào)> 沪曙,小于號(hào)<
    if (a > 0) {
        //如果a大于0則執(zhí)行
    }
  • 大于等于>=奕污,小于等于<=
    if (a >= 0) {
        //如果a大于等于0則執(zhí)行
    }
  • 相等 ==
    if (a == 0) {
        //如果a等于0則執(zhí)行
    }

這里相等是比較特殊的。據(jù)我所知液走,大部分編程語言都是用連等號(hào)來表示相等碳默。用以和賦值區(qū)分贾陷。
比如上面的a==0是a等于0的意思,而a=0是把0賦值給a的意思嘱根。

  • 不等于 !=
    if (a != 0) {
        //如果a不等于0則執(zhí)行
    }

邏輯運(yùn)算符

我們用這些運(yùn)算符來進(jìn)行一些邏輯運(yùn)算髓废,從而把比較運(yùn)算符關(guān)聯(lián)起來。

  • 邏輯且 &&
    if (a > 0 && b>0) {
        //如果a>0且b>0則執(zhí)行该抒,必須要a>0和b>0兩個(gè)條件都滿足慌洪,才可以
    }
  • 邏輯或 ||
    if (a > 0 || b>0) {
        //如果a>0或b>0則執(zhí)行,滿足a>0或b>0任意一個(gè)條件即可
    }
  • 邏輯非 !
    if (!a > 0) {
        //如果不滿足a>0則執(zhí)行,說白了就是a不大于0,也就是a<=0
    }
注意事項(xiàng)
  • 邏輯與邏輯之間是可以嵌套的凑保,也有一定的運(yùn)行優(yōu)先級(jí)冈爹,不過我建議直接無視優(yōu)先級(jí),把單一的邏輯用括號(hào)括起來欧引。
    比如
    if (a > 0 || (b == 0 && c > 0)) {
        //如果 a大于0 或 b等于0且c大于0 則執(zhí)行
    }

事實(shí)上 a > 0 || b == 0 && c > 0 不加括號(hào)和上面的結(jié)果是一樣的频伤。&&的優(yōu)先級(jí)比||要高,不過我依然建議加括號(hào)维咸,方便自己看得更明白剂买。

一些好玩的東西

//這兩個(gè)是等價(jià)的,是省略寫法
    if (a) {

    }
    if (a!=0) {

    }
//這兩個(gè)也是等價(jià)的癌蓖,是省略寫法
    if (!a) {

    }
    if (a==0) {

    }

大括號(hào)與變量的作用域

我們?cè)賮砘乜匆幌卤酒_篇用于演示的代碼

    if (operation == 1){
        int d = a+b;
        printf("a+b=%d",d);
    }else if (operation == 2){
        int d = a-b;
        printf("a-b=%d",d);
    }else if (operation == 3){
        int d = a*b;
        printf("a*b=%d",d);
    }else if (operation == 4){
        int d = a/b;
        printf("a/b=%d",d);
    }else{
        printf("輸入有誤");
    }

可以看到瞬哼,每個(gè)大括號(hào)里都有一個(gè)整形變量d。
由此可見租副,在大括號(hào)里定義的變量坐慰,最大范圍只能在本括號(hào)里使用。
所以定義變量的時(shí)候需要格外注意用僧,在最合適的地方定義结胀,才是正確的選擇。

    int a;
    if (a){
        //這里可以調(diào)用a
        a = 0;
        int b;
    }
    //這里不能調(diào)用b
    b = 0;//這句會(huì)報(bào)錯(cuò)
72.jpg

三段式(我也不知道這玩意叫啥)

有一些簡(jiǎn)單的分支關(guān)系责循,用if來寫太麻煩了糟港。
比如

    int a = 0
    if (a == 0){
        a = 1
    }else {
        a = 2
    }
    printf("%d",a);

有沒有簡(jiǎn)單一點(diǎn)的寫法呢?
事實(shí)上院仿,我們可以這樣寫秸抚。

    int a = 0;
    a == 0 ? a = 1: a = 2;
    printf("%d",a);

這個(gè)就是三段式,可以寫一些很簡(jiǎn)單的分支結(jié)構(gòu)歹垫。
格式就是

條件?滿足條件執(zhí)行:不滿足條件執(zhí)行;

三段式可以簡(jiǎn)化代碼剥汤,但是會(huì)降低代碼的可讀性。所以建議分清使用場(chǎng)合排惨。

switch 和 case

switch和case是另一種分支寫法吭敢。
一般用于變量的固定數(shù)值寫分支。

    switch (變量){
        case 數(shù)值1:{
              //變量為數(shù)值1則執(zhí)行
        }break;
        case 數(shù)值2:{
              //變量為數(shù)值2則執(zhí)行
        }break;
        default:{
              //變量的值上面沒包含暮芭,則執(zhí)行
        }break;
    }

比如還是開篇的那個(gè)問題鹿驼,1-加法欲低,2-減法,3-乘法蠢沿,4-除法伸头,更適合使用switch case來寫。

    int a,b,operation;
    printf("請(qǐng)輸入數(shù)字a:");
    scanf("%d",&a);
    printf("請(qǐng)輸入數(shù)字b:");
    scanf("%d",&b);
    printf("請(qǐng)選擇你要執(zhí)行的運(yùn)算舷蟀,1-加法恤磷,2-減法,3-乘法野宜,4-除法:");
    scanf("%d",&operation);
    switch (operation) {
        case 1:{
            int d = a+b;
            printf("a+b=%d",d);
        }break;
        case 2:{
            int d = a-b;
            printf("a-b=%d",d);
        }break;
        case 3:{
            int d = a*b;
            printf("a*b=%d",d);
        }break;
        case 4:{
            int d = a/b;
            printf("a/b=%d",d);
        }break;
        default:{
            printf("輸入有誤");
        }break;
    }
image.png
注意事項(xiàng)
  • 注意每條后面都要接一個(gè)break扫步,如果不加break會(huì)有神奇的事情發(fā)生~
  • switch和if有各自的使用場(chǎng)景,在很多時(shí)候是也是可以通用的匈子。
  • 結(jié)尾的default可以不寫河胎。就像if沒有寫else一樣。



以上便是分支的全部?jī)?nèi)容虎敦。

這節(jié)課內(nèi)容雖然沒有上一節(jié)多游岳,但是需要更多的練習(xí)才能做好。
這邊留幾個(gè)思考題~

  • 寫一個(gè)程序其徙,判斷用戶輸入的年份是否是閏年胚迫,并輸出結(jié)果。
  • 寫一個(gè)程序唾那,讓用戶給定月份访锻,輸出該月有多少天。
    • 進(jìn)階:寫一個(gè)程序闹获,讓用戶輸入年月日期犬,輸出該天是當(dāng)年的第幾天。
  • 寫一個(gè)程序避诽,判斷用戶輸入的數(shù)字是否是7的倍數(shù)或者含有7的數(shù)龟虎。
26.jpg
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市沙庐,隨后出現(xiàn)的幾起案子鲤妥,更是在濱河造成了極大的恐慌,老刑警劉巖轨功,帶你破解...
    沈念sama閱讀 216,919評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異容达,居然都是意外死亡古涧,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門花盐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來羡滑,“玉大人菇爪,你說我怎么就攤上這事∑饣瑁” “怎么了凳宙?”我有些...
    開封第一講書人閱讀 163,316評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)职祷。 經(jīng)常有香客問我氏涩,道長(zhǎng),這世上最難降的妖魔是什么有梆? 我笑而不...
    開封第一講書人閱讀 58,294評(píng)論 1 292
  • 正文 為了忘掉前任是尖,我火速辦了婚禮,結(jié)果婚禮上泥耀,老公的妹妹穿的比我還像新娘饺汹。我一直安慰自己,他們只是感情好痰催,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,318評(píng)論 6 390
  • 文/花漫 我一把揭開白布兜辞。 她就那樣靜靜地躺著,像睡著了一般夸溶。 火紅的嫁衣襯著肌膚如雪逸吵。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,245評(píng)論 1 299
  • 那天蜘醋,我揣著相機(jī)與錄音胁塞,去河邊找鬼。 笑死压语,一個(gè)胖子當(dāng)著我的面吹牛啸罢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播胎食,決...
    沈念sama閱讀 40,120評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼扰才,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了厕怜?” 一聲冷哼從身側(cè)響起衩匣,我...
    開封第一講書人閱讀 38,964評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎粥航,沒想到半個(gè)月后琅捏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,376評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡递雀,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,592評(píng)論 2 333
  • 正文 我和宋清朗相戀三年柄延,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缀程。...
    茶點(diǎn)故事閱讀 39,764評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡搜吧,死狀恐怖市俊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情滤奈,我是刑警寧澤摆昧,帶...
    沈念sama閱讀 35,460評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站蜒程,受9級(jí)特大地震影響绅你,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜搞糕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,070評(píng)論 3 327
  • 文/蒙蒙 一勇吊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧窍仰,春花似錦汉规、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至碟狞,卻和暖如春啄枕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背族沃。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工频祝, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人脆淹。 一個(gè)月前我還...
    沈念sama閱讀 47,819評(píng)論 2 370
  • 正文 我出身青樓常空,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親盖溺。 傳聞我的和親對(duì)象是個(gè)殘疾皇子漓糙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,665評(píng)論 2 354

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