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

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

//推薦寫法,加全{ }
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語句多分支例子:
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("長命百歲\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
說明:
- 1.此處的else即為懸空else。
- 2.if else 語句嵌套時,else采取就近原則匹配最近的if。
- 3.寫代碼時盡量把{ }帶上,避免懸空else的出現(xiàn),導(dǎo)致輸出結(jié)果錯誤,例子詳見 2.1.1 (2)懸空else問題。
2.2switch語句&注意事項
2.2.1語法結(jié)構(gòu)
//switch語句是C語言中經(jīng)典多分支語句
switch (整型表達(dá)式)
{
case 常量表達(dá)式1:
語句;
case 常量表達(dá)式2:
語句;
...
case 常量表達(dá)式n:
default:
語句;
}
說明:
- 1.switch語句是匹配跳轉(zhuǎn),case只有判斷功能,無分支功能;
case匹配到哪個位置就跳轉(zhuǎn)到哪個位置,從匹配位置開始往后執(zhí)行;
case語句加break后則可實現(xiàn)分支。
- 2.整型表達(dá)式包含 int,char,long long,short 類型, int a=10; a>10;(1+2);等表達(dá)式。
- 3.常量表達(dá)式如97、'7'等。
2.2.2switch語句中的break
作用:在switch語句中break語句可以實現(xiàn)分支作用。
例子:
(1)無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語句中的default語句
作用:當(dāng)表達(dá)式的值與case都不匹配時,則執(zhí)行default的語句。
說明:
- 1.default語句可以出現(xiàn)在任何一個case語句出現(xiàn)的地方。
- 2.switch后表達(dá)式的值與case都不匹配時,不管default的語句在switch里的哪一個位置,都執(zhí)行default的語句,一個switch語句中只可出現(xiàn)一個default。
- 3.default語句可以不寫,但做為一種良好的編程習(xí)慣,可以在case語句中加上default,并且在其后加上break。
eg:
(1)default在最后
int main()
{
switch ('r')
{
case 'w':
printf("工作日\n");
break;
case 'r':
printf("休息日\n");
break;
case's':
printf("加班日\n");
default:
printf("輸入有誤\n");
break;
}
return 0;
}
輸出:

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

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

2.2.4switch語句的嵌套
例子:(可以自己嘗試做一下輸出結(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;
}
輸出:

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

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

以上就是C語言入門篇--學(xué)習(xí)選擇,if,switch語句以及代碼塊的詳細(xì)內(nèi)容,更多關(guān)于C語言的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C/C++最短路徑算法之迪杰斯特拉Dijkstra的實現(xiàn)詳解
Dijkstra(迪杰斯特拉)算法是典型的單源最短路徑算法,用于計算一個節(jié)點到其他所有節(jié)點的最短路徑。本文將詳解該算法的圖解與實現(xiàn),需要的可以參考一下2022-07-07
C++用new創(chuàng)建對象和不用new創(chuàng)建對象的區(qū)別解析
在C++用new創(chuàng)建對象和不用new創(chuàng)建對象是有區(qū)別的,不知你是否清楚的了解它們到底有什么樣的區(qū)別呢?下面小編就用示例來告訴大家吧,需要的朋友可以過來參考下2013-07-07

