C語言中的分支語句用法解讀
前言
C語言是一種結構化的程序設計語言,其由三大基本結構組成,分別為:順序結構,選擇結構,循環(huán)結構,它們組成的算法結構可以解決任何復雜的問題。
對于順序結構指的就是從main函數(shù)入口開始,從頭到尾依次執(zhí)行代碼。
對于選擇結構,顧名思義就是進行選擇,其有兩種語句:
1.if語句
1.1 if語句的語法形式
if(表達式)
語句
1.2 if語句用法
例:輸入一個整數(shù),判斷是否為奇數(shù)
由于表達式判斷的依據(jù)為真,若為非0值,則執(zhí)行語句,為0,則不執(zhí)行語句,所以奇數(shù)判斷依據(jù) a%2==1 可以略為 a%2.
由上我們可以不由的想,若需要判斷出偶數(shù)呢?
這就涉及到了if..else語句了
2.if..else語句
2.1 if...else語句的語法形式
- if(表達式)
- 語句1
- else
- 語句2
2.2應用
1.對上文的代碼進行完善
2.輸??個年齡,>= 18歲就輸出:成年,否則就輸出:未成年
若我們要更加細致的區(qū)分不同年齡段的稱謂,我們就需要多條的if...else語句進行連用,即
3.嵌套if語句
if else語句可以進行連用構成多重判斷。
3.1例
輸??個?的年齡 ,如果年齡<18歲,打印"少年" ,如果年齡在18歲?44歲打印"?年" ,如果年齡在45歲?59歲打印"中?年" ,如果年齡在60歲?89歲打印"?年" ,如果90歲及以上打印"?壽星"。
常見編譯錯誤1
問題:
修改后:
4.懸空else問題
對于這個問題,我們需要知道一個規(guī)則--else總是與最接近的if匹配
例:
對于上圖代碼,最后輸出的結果是什么呢?
結果其實是沒有輸出的,這就是典型的懸空else問題。加了大括號后會便于理解,由于else總是與最接近的if匹配,所以在 a=0 的情況下,是不符合if表達式中條件的,故不會有輸出。
由此可知,適當?shù)募由洗罄ㄌ枙沟么a的可讀性高,邏輯更清晰。
當然,大括號還會改變與else最接近的if語句,如:
這樣就會輸出 haha 。
5.關系操作符
> ,>= , < , <= , == , !=
以上都是關系操作符,其返回 0\1 ,0表示假,1表示真。
常見編譯錯誤2. 要注意區(qū)別 == 與 = ,== 是表示相等,若 A==B 表示A與B的值相等,但若是 A = B 則是表示將B賦值給A,兩者不能混淆。
溫馨小提示:若當一個變量與一個常量比較相等時,建議將常量值放在 == 的左邊,這樣在寫錯了== 之后編譯器會進行報錯,便于檢查代碼。但若是將常量值位于 == 右邊則不會出現(xiàn)該報錯,但程序最后的結果時錯誤的。
常見編譯錯誤3.關系運算符不宜連用,會導致程序結果出錯
上圖就出現(xiàn)了錯誤,其執(zhí)行流程是這樣的:
先是a與47進行比較,得出0,后0與100進行比較,得出1,結果為真,返回 hehe。
那在C語言中如何表達 47<=a<=100?這就需要使用到邏輯操作符。
6. 邏輯操作符
- && :邏輯或 ---真真為真(真就是非0)
- || :邏輯與 ---假假為假(假就是0)
- ?。?/strong>邏輯非 ---改變單個表達式的真假
所以就可以表示為 47<=a&&a<=100 ; 若要表示 a<=47或 a>=100,則就是 a<=47||a>=100;
若要表示a不等于47,就是 a!=47。
例:輸入年數(shù),判斷是不是閏年
7.短路
在C語言邏輯運算中有一個特點,都是先對左側的表達式求值,再對右側的表達式求值,其順序是固定的,所以在左側的表達式已經(jīng)符合邏輯運算符的條件的時候,右側的表達式將不會被執(zhí)行,這就是短路。
例:
1.&&的短路
由于a++是先使用,再+1,所以當a=0的時候進行計算,故左側表達式為假,所以右側的表達式不會進行計算,由此輸出 1 4 5 0。
2.||的短路
同理,由于a++和c++的計算結果為真(1),所以后面的b++不會被計算了,最后輸出 1 4 6 1。
8..條件操作符
是C語言中唯一的三目操作符,其形式為:
例:比較兩個數(shù)的大小
9.switch語句
9.1 switch語句是一種特殊的if...else 結構,適用于判斷條件有多少個結果的情況。提高了代碼的可讀性,更方便使用。
9.2 switch語句的語法構
switch(整型/字符型表達式)
{
case(整型常量表達式1):(語句)
:
default:(語句)
:
}
根據(jù)表達式計算出的不同值,程序將會執(zhí)行不同的case語句。若是找不到對應的case語句,就會執(zhí)行default分支。
例:1.
2.輸??個1~7的數(shù)字,打印對應的星期?
例如:
- 輸?:1 輸出:星期?
- 輸?:2 輸出:星期?
- 輸?:3 輸出:星期三
- 輸?:4 輸出:星期四
- 輸?:5 輸出:星期五
- 輸?:6 輸出:星期六
- 輸?:7 輸出:星期天
變題:
1. 輸?1~5,輸出的是“?作?”;
2. 輸?6~7,輸出“休息?”.
若用戶輸入的不是1-7的數(shù)字該如何編寫代碼?
這時就可以借助default了。
switch語句中的case子句和default子句是沒有順序要求的,只要滿足實際需求就行。
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
C/C++使用API實現(xiàn)數(shù)據(jù)的壓縮與解壓縮
在Windows編程中,經(jīng)常會遇到需要對數(shù)據(jù)進行壓縮和解壓縮的情況,本文將深入探討使用Windows API進行數(shù)據(jù)壓縮與解壓縮的過程,感興趣的小伙伴可以了解下2023-11-11C語言自定義類型詳解(結構體、枚舉、聯(lián)合體和位段)
這篇文章主要給大家介紹了關于C語言中結構體、枚舉、聯(lián)合體和位段自定義類型的相關資料,分別介紹了結構體、枚舉、聯(lián)合體和位段等四種自定義類型,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下2021-08-08