目錄
前言
2.1分支語句
2.1.1什么是語句
2.2分支語句
2.2.1if語句的語法形式
2.2.2懸空else問題
2.2.3if書寫形式的對比
2.3switch語句
2.3.1switch的語法形式
2.3.2 switch與break的關(guān)系
2.3.3 switch與default的關(guān)系
前言
小伙伴們端午安康吖!今天我們要開始新的一章的學(xué)習(xí)!直接開始學(xué)習(xí)叭!
2.1分支語句
2.1.1什么是語句
在了解語句之前,我們先來了解以下的知識!c語言是結(jié)構(gòu)化的程序設(shè)計語言!那么什么是結(jié)構(gòu)化呢又或者結(jié)構(gòu)化都有哪些呢?結(jié)構(gòu)化主要包括:順序結(jié)構(gòu),循環(huán)結(jié)構(gòu),選擇結(jié)構(gòu)!
?選擇結(jié)構(gòu)對應(yīng)的是分支語句(if switch語句),循環(huán)結(jié)構(gòu)對應(yīng)的是循環(huán)語句(while,for,do while)。言歸正傳,什么是語句呢?用分號隔開的就是語句。c語言的語句分類有以下五種
- 表達(dá)式語句
- 函數(shù)調(diào)用語句
- 控制語句
- 復(fù)合語句
- 空語句
上代碼來具體看看叭!
#include<stdio.h>
int main()
{
3 + 5;//表達(dá)式語句
printf("haha\n");//函數(shù)調(diào)用語句
;//空語句
return 0;
}
今天我們要講的就是控制語句!控制語句用于控制程序的執(zhí)行流程以實現(xiàn)程序的各種結(jié)構(gòu)方式(c語言支持三種結(jié)構(gòu):順序結(jié)構(gòu),選擇結(jié)構(gòu),循環(huán)結(jié)構(gòu))它們有特定的語意符組成,c語言由九種控制語句可以分成以下三類:
- 條件判斷語句也稱為分支語句:if語句,switch語句
- 循環(huán)執(zhí)行語句:while語句, for語句,do while語句
- 轉(zhuǎn)向語句:break語句 goto語句,return 語句,continue語句
2.2分支語句
2.2.1if語句的語法形式
//if的單分支語法結(jié)構(gòu)
if (表達(dá)式)
語句式;
//If的雙分支的語法結(jié)構(gòu)
if (表達(dá)式)
語句式;
else
語句式;
//if的多分支語法結(jié)構(gòu)
if (表達(dá)式)
語句式;
else if (表達(dá)式)
語句式;
else if (表達(dá)式)
語句式;
else;
以年齡為例,我們具體來看看if的具體使用方式叭!當(dāng)年齡小于18時我們要進(jìn)行打印未成年,先用if單分支情況來試試叭
?哦豁,當(dāng)輸入13的時候真的打印了未成年欸,那要是當(dāng)我們輸入大于18時打印出成年人,可以談戀愛該怎么辦呢?再上代碼叭
#include<stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age > 18)
printf("成年人\n");
printf("可以談戀愛\n");
return 0;
}
運行一下看看能不能達(dá)到我們的預(yù)期叭
?這里來看貌似是按照我們的預(yù)期來的!我們再輸入一個值看看叭,當(dāng)我們輸入13時又會出現(xiàn)什么結(jié)果呢?
?這時竟然也打印了可以談戀愛!可是13不是成年人吶!這時我們會發(fā)現(xiàn)代碼出現(xiàn)了錯誤但是程序在編譯時并沒有出錯!那么我們該怎么改呢?這里會報錯是因為If后面默認(rèn)控制一條語句,當(dāng)出現(xiàn)了多條語句時要使用大括號!
#include<stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age > 18)
{
printf("成年人\n");
printf("可以談戀愛\n");
}
return 0;
}
此時我們再輸入13就沒有問題啦(同時上面的也是復(fù)合語句的寫法)
?總結(jié)一下:If語句默認(rèn)控制一條語句,當(dāng)出現(xiàn)多條語句時要使用大括號!
在用代碼來看看If的雙分支情況叭
#include<stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age < 18)
{
printf("未成年\n");
}
else
{
printf("成年人\n");
}
return 0;
}
這個語句也很簡單,但是有一個需要注意的點:else后面不可以直接跟語句!
#include<stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age < 18)
{
printf("未成年\n");
}
else(age >= 20)//代碼在編譯期間會報錯
{
printf("青年人\n");
}
return 0;
}
else后面想要跟語句的話得再加一個if,此時就要用到多分支啦,上代碼
#include<stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age < 18)
printf("未成年人\n");
else if (age >= 18 && age < 30)
{
printf("青年\n");
}
else if (age >= 30 && age < 50)
{
printf("壯年\n");
}
else if (age >= 50 && age < 100)
{
printf("老年人\n");
}
else
{
printf("老年人\n");
}
return 0;
}
以上的代碼有兩個需要注意的地方:
- else后面不可以直接跟語句,而else if可以直接跟語句(再次強(qiáng)調(diào))!!
- ?不可以采用數(shù)學(xué)的寫法:50<=age<=100這種寫法是錯誤的·,這種寫法才是正確的age>=50&&age<=100
2.2.2懸空else問題
直接上代碼!
#include<stdio.h>
int main()
{
int a = 5;
int b = 3;
if (a == 1)
if (b == 3)
printf("haha\n");
else
printf("hehe\n");
return 0;
}
是會打印hehe還是會打印haha1還是二者都打印亦或是二者都不打印呢?我們一起ctrl+f5來看看結(jié)果吧!
?這時我們會發(fā)現(xiàn)什么也沒有進(jìn)行打印,這是為什么呢!這是因為else只與離得最近的if進(jìn)行匹配而不是離得最近的!所以我們的代碼應(yīng)該是這個樣子的
#include<stdio.h>
int main()
{
int a = 5;
int b = 3;
if (a == 1)
if (b == 3)
printf("haha\n");
else
printf("hehe\n");
return 0;
}
為了更好的理解,也可以在if后面使用{ }
#include<stdio.h>
int main()
{
int a = 5;
int b = 3;
if (a == 1)
{
if (b == 3)
printf("haha\n");
else
printf("hehe\n");
}
return 0;
}
從這個代碼中我們得出兩點:
- ·else與離得最近的if進(jìn)行匹配
- 在進(jìn)行書寫代碼時要注意代碼風(fēng)格的問題。
關(guān)于代碼風(fēng)格的問題推薦醬醬們?nèi)タ?span style="background-color:#ffd900;">林銳博士寫的《高質(zhì)量c/c++編程》,里面有很好的講述噢!
2.2.3if書寫形式的對比
//第一種
if (condition) {
return x;
}
return y;
//第二種
if (condition)
{
return x;
}
else
{
return y;
}
這倆種進(jìn)行對比,醬醬們覺得哪種讀起來簡單明了呢?沒錯就是第二種!再次強(qiáng)調(diào)一遍一定要去看林銳博士寫的《高質(zhì)量c/c++編程》!
2.3switch語句
2.3.1switch的語法形式
sitch(整型表達(dá)式)
{
語句項;
}
其中語句項由case語句組成!那么case語句的結(jié)構(gòu)是什么樣的,上代碼!
case 整型常量表達(dá)式:
語句;
其中值得注意的是:switch里的整型表達(dá)式?jīng)Q定了case的入口!
2.3.2 switch與break的關(guān)系
題目·:輸入1到7可以得出相應(yīng)的星期,以題目為例來熟悉switch的語法吧
#include<stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
printf("星期1\n");
case 2:
printf("星期2\n");
case 3:
printf("星期3\n");
case 4:
printf("星期4\n");
case 5:
printf("星期5\n");
case 6:
printf("星期6\n");
case 7:
printf("星期天\n");
}
return 0;
}
寫的很棒,再來運行一下看看結(jié)果叭
?我們輸入2確實出現(xiàn)了我們想要的星期2,但是為什么還出現(xiàn)星期3到星期天呢?這就不得不要介紹switch與break的關(guān)系啦。在switch中,case決定入口,break決定出口。倘如語句中沒有break,則會一直執(zhí)行下去。
#include<stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
printf("星期1\n");
break;
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("星期天\n");
break;
}
return 0;
}
?此時就可以得到我們想要的結(jié)果啦!那要是我們想要把1到星期五都輸出weekday,星期六和星期天都輸出weekend!還是像之前一樣寫嗎?不不不,我們該做一些變動
#include<stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("weekday\n");
break;
case 6:
case 7:
printf("weekend\n");
}
return 0;
}
這樣是不是簡單多啦!再次進(jìn)行總結(jié):
- 在switch中搭配break,可以實現(xiàn)真正的分支
- break語句的實際效果是把語句列表劃分為不同的分支部分
最后再來一個注意事項:在最后一個case語句的后面加上一條break語句,這是為了避免之前一個case語句忘了添加break語句。
2.3.3 switch與default的關(guān)系
當(dāng)輸入的值與所有項都不匹配,代碼運行時也不進(jìn)行報錯,但是我們又并不想要時此時可以用上default語句。default語句的位置可以寫在case語句的任意位置。default語句也要跟上一個break噢,利用代碼來看看具體的實現(xiàn)形式叭
#include<stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("weekday\n");
break;
case 6:
case 7:
printf("weekend\n");
default:
printf("輸入錯誤\n");
break;
}
return 0;
}
?淺淺的總結(jié)一下叭文章來源:http://www.zghlxwxcb.cn/news/detail-505938.html
- 當(dāng)switch表達(dá)式的值與所有的case標(biāo)簽的值都不匹配時,default子句后的語句就會執(zhí)行
- case與整型常量表達(dá)式之間有一個空格
以上就是今天的內(nèi)容啦,端午安康醬醬們?。?span toymoban-style="hidden">文章來源地址http://www.zghlxwxcb.cn/news/detail-505938.html
到了這里,關(guān)于c語言修煉第二章--分支與循環(huán)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!