C語(yǔ)言入門篇--學(xué)習(xí)選擇,if,switch語(yǔ)句以及代碼塊
1.什么是語(yǔ)句
語(yǔ)句:C語(yǔ)言中由一個(gè) ; 隔開(kāi)的就是一條語(yǔ)句。
例如:
int a = 10;
printf("haha\n");
10;
'A';
; //空語(yǔ)句,啥都不執(zhí)行
2.選擇語(yǔ)句(分支語(yǔ)句)
2.1if語(yǔ)句&注意事項(xiàng)

2.1.1語(yǔ)法結(jié)構(gòu)
(1)
if (表達(dá)式)
{
代碼塊;
}
(2)
//二選一
if (表達(dá)式)
{
代碼塊1;//表達(dá)式為真
}
else
{
代碼塊2;//表達(dá)式為假
}
(3)
//多分支 多選一
if (表達(dá)式1)
{
代碼塊1;
}
else if (表達(dá)式2)
{
代碼塊2;
}
else
{
代碼塊3;
}
說(shuō)明:
- 1.if語(yǔ)句是選擇分支語(yǔ)句,只要滿足一個(gè)條件則其他語(yǔ)句就不執(zhí)行了。
- 2.if后( )判斷的是( )中表達(dá)式返回的結(jié)果。在C語(yǔ)言中,0為假,非0為真。
- 3.條件判斷為防止誤寫(xiě)為if (flag=6),可寫(xiě)成 if (6==flag)。
- 4.一個(gè){ }就是一個(gè)代碼塊,盡量使用{ },使邏輯更加清楚,以示其是完整的代碼塊,不容易出錯(cuò)。否則可能會(huì)出現(xiàn)編譯不通過(guò)或輸出結(jié)果錯(cuò)誤的情況。
如:
(1)編譯不通過(guò)
//error,編譯不通過(guò)
int main()
{
if (a > 10)
i++;
j++;//error,編譯不通過(guò)
else
j++;
return 0;
}
//推薦寫(xiě)法,帶全{ }
int main()
{
if (a > 10)
{
i++;
j++
}
else
{
j++;
}
return 0;
}
(2)懸空else問(wèn)題
//未加全{ },出現(xiàn)懸空else
int main()
{
int a = 0;
int b = 2;
if (1 == a)
if (2 == b)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
輸出:

//推薦寫(xiě)法,加全{ }
int main()
{
int a = 0;
int b = 2;
if (1 == a)
{
if (2 == b)
{
printf("hehe\n");
}
}
else
{
printf("haha\n");
}
return 0;
}
輸出:

(3).if語(yǔ)句多分支例子:
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<80)
{
printf("老年\n");
}
else
{
printf("長(zhǎng)命百歲\n");
}
system("pause");
return 0;
}
2.1.2懸空else
#include <stdio.h>
int main()
{
int a = 1;
int b = 2;
if(a == 1)
if(b == 2)
printf("hehe\n");
else//懸空else
printf("haha\n");
return 0;
}
輸出:hehe
說(shuō)明:
- 1.此處的else即為懸空else。
- 2.if else 語(yǔ)句嵌套時(shí),else采取就近原則匹配最近的if。
- 3.寫(xiě)代碼時(shí)盡量把{ }帶上,避免懸空else的出現(xiàn),導(dǎo)致輸出結(jié)果錯(cuò)誤,例子詳見(jiàn) 2.1.1 (2)懸空else問(wèn)題。
2.2switch語(yǔ)句&注意事項(xiàng)
2.2.1語(yǔ)法結(jié)構(gòu)
//switch語(yǔ)句是C語(yǔ)言中經(jīng)典多分支語(yǔ)句
switch (整型表達(dá)式)
{
case 常量表達(dá)式1:
語(yǔ)句;
case 常量表達(dá)式2:
語(yǔ)句;
...
case 常量表達(dá)式n:
default:
語(yǔ)句;
}
說(shuō)明:
- 1.switch語(yǔ)句是匹配跳轉(zhuǎn),case只有判斷功能,無(wú)分支功能;
case匹配到哪個(gè)位置就跳轉(zhuǎn)到哪個(gè)位置,從匹配位置開(kāi)始往后執(zhí)行;
case語(yǔ)句加break后則可實(shí)現(xiàn)分支。
- 2.整型表達(dá)式包含 int,char,long long,short 類型, int a=10; a>10;(1+2);等表達(dá)式。
- 3.常量表達(dá)式如97、'7'等。
2.2.2switch語(yǔ)句中的break
作用:在switch語(yǔ)句中break語(yǔ)句可以實(shí)現(xiàn)分支作用。
例子:
(1)無(wú)break
switch (3)
{
case 1:
printf("星期一\n");
case 2:
printf("星期二\n");
case 3:
printf("星期三\n");
case 4:
printf("星期四\n");
case 5:
printf("星期五\n");
case 6:
printf("星期六\n");
case 7:
printf("星期天\n");
}
輸出:

(2)有break
switch (3)
{
case 1:
printf("星期一\n");
break;
case 2:
printf("星期二\n");
break;
case 3:
printf("星期三\n");
break;
case 4:
printf("星期四\n");
break;
case 5:
printf("星期五\n");
break;
case 6:
printf("星期六\n");
break;
case 7:
printf("星期天\n");
break;
}
輸出:

(3)需求改變
int main()
{
int day = 3;
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("weekday\n");
break;
case 6:
case 7:
printf("weekday\n");
break;
}
}
輸出:

2.2.3switch語(yǔ)句中的default語(yǔ)句
作用:當(dāng)表達(dá)式的值與case都不匹配時(shí),則執(zhí)行default的語(yǔ)句。
說(shuō)明:
- 1.default語(yǔ)句可以出現(xiàn)在任何一個(gè)case語(yǔ)句出現(xiàn)的地方。
- 2.switch后表達(dá)式的值與case都不匹配時(shí),不管default的語(yǔ)句在switch里的哪一個(gè)位置,都執(zhí)行default的語(yǔ)句,一個(gè)switch語(yǔ)句中只可出現(xiàn)一個(gè)default。
- 3.default語(yǔ)句可以不寫(xiě),但做為一種良好的編程習(xí)慣,可以在case語(yǔ)句中加上default,并且在其后加上break。
eg:
(1)default在最后
int main()
{
switch ('r')
{
case 'w':
printf("工作日\(chéng)n");
break;
case 'r':
printf("休息日\(chéng)n");
break;
case's':
printf("加班日\(chéng)n");
default:
printf("輸入有誤\n");
break;
}
return 0;
}
輸出:

(2)default在中間
int main()
{
switch ('r')
{
case 'w':
printf("工作日\(chéng)n");
break;
default:
printf("輸入有誤\n");
break;
case 'r':
printf("休息日\(chéng)n");
break;
case's':
printf("加班日\(chéng)n");
break;
}
return 0;
}
輸出:

(3)case未匹配到,執(zhí)行default語(yǔ)句
int main()
{
switch ('N')
{
case 'w':
printf("工作日\(chéng)n");
break;
default:
printf("輸入有誤\n");
break;
case 'r':
printf("休息日\(chéng)n");
break;
case's':
printf("加班日\(chéng)n");
break;
}
return 0;
}
輸出:

2.2.4switch語(yǔ)句的嵌套
例子:(可以自己嘗試做一下輸出結(jié)果)
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++;
break;
default:
break;
}
printf("m = %d, n = %d\n", m, n);
return 0;
}
輸出:

說(shuō)明:
- 1.switch語(yǔ)句支持嵌套使用。
- 2.當(dāng)前套使用時(shí),switch語(yǔ)句中的break僅是跳出離其最近的switch語(yǔ)句。
3.代碼塊
1.一個(gè){ }就是一個(gè)代碼塊。
2.凡是在代碼塊里定義的變量叫做臨時(shí)變量,函數(shù)也是代碼塊,因?yàn)楹瘮?shù)也用{ }括起來(lái)了。
3.凡是在代碼中定義的變量都叫局部變量,只在本代碼塊內(nèi)有效。
(1)error
int main()
{
int flag = 6;
if (6 == flag)
{
int x = 10;//x在本代碼塊{}內(nèi)定義,出了本代碼塊后x無(wú)效
}
printf("%d\n", x);//x在其他代碼塊中不可使用
return 0;
}
輸出:

(2)編譯通過(guò)
int main()
{
int flag = 6;
if (6 == flag)
{
int x = 10;
printf("%d\n", x);//x在本代碼塊{}內(nèi)定義,出了本代碼塊后x無(wú)效
}
int x = 20;//可以在其他代碼塊定義一個(gè)同名的變量
printf("%d\n", x);
return 0;
}
輸出:

以上就是C語(yǔ)言入門篇--學(xué)習(xí)選擇,if,switch語(yǔ)句以及代碼塊的詳細(xì)內(nèi)容,更多關(guān)于C語(yǔ)言的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C/C++最短路徑算法之迪杰斯特拉Dijkstra的實(shí)現(xiàn)詳解
Dijkstra(迪杰斯特拉)算法是典型的單源最短路徑算法,用于計(jì)算一個(gè)節(jié)點(diǎn)到其他所有節(jié)點(diǎn)的最短路徑。本文將詳解該算法的圖解與實(shí)現(xiàn),需要的可以參考一下2022-07-07
C語(yǔ)言實(shí)現(xiàn)短字符串壓縮的三種方法詳解
這篇文章主要和大家分享一下smaz,shoco,unisox2三種短字符串壓縮算法,并分別探索它們各自的壓縮率與壓縮和解壓縮性能,需要的可以參考一下2022-08-08
Qt實(shí)現(xiàn)TCP同步與異步讀寫(xiě)消息的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何在?Qt?中實(shí)現(xiàn)?TCP?客戶端和服務(wù)器的同步和異步讀寫(xiě)消息,有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-04-04
貪心算法的C語(yǔ)言實(shí)現(xiàn)與運(yùn)用詳解
這篇文章主要介紹了貪心算法的C語(yǔ)言實(shí)現(xiàn)與運(yùn)用詳解,運(yùn)用么,就是文中所附的ACM練習(xí)題,哈哈:D需要的朋友可以參考下2015-08-08
C++用new創(chuàng)建對(duì)象和不用new創(chuàng)建對(duì)象的區(qū)別解析
在C++用new創(chuàng)建對(duì)象和不用new創(chuàng)建對(duì)象是有區(qū)別的,不知你是否清楚的了解它們到底有什么樣的區(qū)別呢?下面小編就用示例來(lái)告訴大家吧,需要的朋友可以過(guò)來(lái)參考下2013-07-07

