C語句可分為以下五類:
本節(jié)內(nèi)容著重介紹控制語句
什么是控制語句?
人在生活中做的事有三種狀態(tài),順序、選擇、循環(huán)
因而在程序中使用3種結(jié)構(gòu)就可以表示生活中的所有事
控制語句用于控制程序的執(zhí)行流程,以實現(xiàn)程序的各種結(jié)構(gòu)方式(C語言支持三種結(jié)構(gòu):
順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)),
它們由特定的語句定義符組成,C語言有九種控制語句
可分成以下三類:
1. 條件判斷語句也叫分支語句:if語句、switch語句;
2. 循環(huán)執(zhí)行語句:do while語句、while語句、for語句;
3. 轉(zhuǎn)向語句:break語句、goto語句、continue語句、return語句
2. 分支語句(選擇結(jié)構(gòu))
2.1 if 語句if語句的結(jié)構(gòu)
當(dāng)表達式為真,執(zhí)行語句,表達式為假,不執(zhí)行語句
0表示假非0表示真
//單分支
if(表達式1)
語句1;
//多分支
if(表達式1)
語句1;
else if(表達式2)
語句2;
else
語句3;
單分支語句
多分支語句
注:選擇語句中執(zhí)行的語句可以是多條語句
但是需要加大括號
如果不加大括號則會報錯
看一下下面這個代碼,猜猜打印的是什么?
int main()
{int a = 0;
int b = 2;
if(a == 1)
if(b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0; }
你猜到了嗎?
解釋:else總是與最近的一個if匹配,所以else與if(b==2)匹配
所以上述代碼等價于
int main()
{int a = 0;
int b = 2;
if(a == 1)
{
if(b == 2)
printf("hehe\n");
else
printf("haha\n");
}
return 0;
}
a==1不成立,所以根本不會打?。。?!
上述兩種代碼的效果是一樣的,但是格式?jīng)Q定了我們理解代碼的容易度,所以規(guī)范寫代碼很重要!!!
2.1.2 if書寫形式的對比//代碼1
if (condition)
{return x;
}
return y;
//代碼2
if(condition)
{return x;
}
else
{return y;
}
//代碼3
int num = 1;
if(num == 5)
{printf("hehe\n");
}
//代碼4
int num = 1;
if(5 == num)
{printf("hehe\n");
}
上述代碼2更好
理由:
雖然代碼一和代碼二的效果是一樣的
但是閱讀代碼的人不知道這個代碼究竟是有意而為之還是瞎貓碰死老鼠
上述代碼4更好
理由:
當(dāng)我們判斷常量和變量的值是否相等時
我們應(yīng)該把常量寫在前面,這樣可以避免我們將判斷語句寫成賦值語句
如果我們寫成if(5=num)
程序會報錯
2.1.3 練習(xí)1.判斷下面輸出什么?
int main()
{int age = 50;
if (20<=age<=30)
{printf("壯年");
}
return 0;
}
輸出壯年
20<=age<=50在C語言中并不能表示age屬于20到30
程序執(zhí)行關(guān)系表達式使從左往右執(zhí)行
20<=age的值為真,即1
1<=50的值為真,即1
所以if里面的表達式為1
會執(zhí)行語句
2.判斷一個數(shù)是否為奇數(shù)
int main()
{int n = 0;
scanf("%d", &n);
if (n % 2 == 1)
{printf("%d是奇數(shù)", n);
}
else printf("%d不是奇數(shù)", n);
return 0;
}
3.輸出1-100之間的奇數(shù)
int main()
{for (int i = 1; i<= 100; i++)
{if (i % 2 == 1)
printf("%d ", i);
}
return 0;
}
2.1.4 總結(jié)if里的表達式結(jié)果為非0,執(zhí)行語句,否則不執(zhí)行
else會與之最近的一個if進行匹配
if else 為一個語句,因為程序只會執(zhí)行其中一個執(zhí)行語句
if判斷變量和常量值是否相等時,將常量作為左操作數(shù)
switch語句也是一種分支語句。
常常用于多分支點判斷的情況。
如
輸入1,輸出星期一
輸入2,輸出星期二
輸入3,輸出星期三
輸入4,輸出星期四
輸入5,輸出星期五
輸入6,輸出星期六
輸入7,輸出星期日
如果我們使用if語句,則需要很多if else if else 這樣顯示的過于繁瑣
我們就有不一樣的語法形式
這就是switch語句
switch(整形表達式)
{語句項; //若語句項有多條,則需要在將語句項用大括號括起來
}
語句項是一些case語句:
//如下:
case 整形常量表達式:
語句;
2.2.1 在switch中的breakcase語句只是確定語句列表的進入點而不會劃分它們
break語句 的實際效果是把語句列表劃分為不同的分支部分
我們來看下面的程序
int main()
{int day = 0;
scanf("%d", &day);
switch (day)
{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");
}
return 0;
}
和我們想要的只打印星期一不一樣,這是為什么呢?
switch語句中case語句如果沒有break
則執(zhí)行完第一條語句后會繼續(xù)執(zhí)行后面的case語句知道遇見break或者switch語句執(zhí)行完
所以我們因該這么寫代碼
int main()
{int day = 0;
scanf("%d", &day);
switch (day)
{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;
}
return 0;
}
day的值是1,所以會執(zhí)行case 1語句,屏幕上打印星期一,并且遇到break語句,結(jié)束switch語句
如果我們想實現(xiàn)輸入1-5打印工作日,6-7打印節(jié)假日
用switch該如和實現(xiàn)?
int main()
{int day = 0;
scanf("%d", &day);
switch (day)
{case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日\n");
case 6:
case 7:
printf("節(jié)假日\n");
}
return 0;
}
day是5,尋找case 5 找到case 5 后執(zhí)行語句項,打印工作日,執(zhí)行break
語句,跳出switch語句
day是1,尋找case 1 找到 case 后執(zhí)行語句項,語句項為空
無break語句,執(zhí)行case 2的語句項,語句項為空,無break語句
同理,最后 執(zhí)行case 5的語句項,打印工作日,有break語句,跳出
switch語句。
編程好習(xí)慣:
在最后一個 case 語句的后面加上一條 break語句。
(之所以這么寫是可以避免出現(xiàn)在以后的最后一個 case 語句后面忘了添加 break語句)
2.2.2 default子句當(dāng)switch語句表達式的值與case所有標簽的值不一樣
程序會跳過switch所有的語句項
如果不想忽略不匹配所有標簽的表達式的值
可以使用default語句
在語句列表中添加default:
輸入9,與所有case標簽不匹配,執(zhí)行default語句后執(zhí)行break語句,跳出switch語句
注意點:
當(dāng)表達式的值與所有標簽不匹配時,會執(zhí)行default語句
一個switch只能有一個default語句
default語句可以出現(xiàn)在case語句能出現(xiàn)的任意位置
編程好習(xí)慣:
在每一個switch語句最后都加上default語句,并且在default語句最后加上break語句
2.2.3 練習(xí)#includeint main()
{int n = 1;
int m = 2;
switch (n)
{case 1:
m++;
case 2:
n++;
case 3:
switch (n)
{//switch允許嵌套使用
case 1:
n++;
case 2:
m++;
n++;
break;
}
case 4:
m++;
break;
default:
break;
}
printf("m = %d, n = %d\n", m, n); //m = 3, n = 5
return 0;
}
2.2.4 總結(jié)switch(表達式)表達式必須為整形表達式,可以時整形變量(包括字符)
case 標簽 標簽必須是整形常量
case 的語句項有多條時需要用大括號括起來
當(dāng)case 語句項沒有break語句時,執(zhí)行完此條語句項會執(zhí)行下條case 的語句項
有必要時盡量在每一個case 語句項最后加上break語句
盡量在每一個switch語句最后加上default語句并且最后加上break語句
最后看到最后,如果您覺得對您有幫助,請不要吝嗇手中的贊,這對我來說很重要,也是我創(chuàng)作的動力,如果您覺得哪里說的不清楚或者有問題,歡迎評論區(qū)留言
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
分享題目:【從0到1手把手帶你學(xué)C語言】詳解分支語句-創(chuàng)新互聯(lián)
網(wǎng)站網(wǎng)址:http://sd-ha.com/article36/dceisg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計、Google、網(wǎng)站收錄、網(wǎng)站營銷、面包屑導(dǎo)航、ChatGPT
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容