第二章:分支與迴圈(1)什麼是語句
C語言是一門結構化程式設計語言:順序結構,選擇結構,迴圈結構
C語言中“;”隔開的就是一條語句。
(2)分支語句A:if語句第一點:if語句的基本結構
第一:單分支
第二:雙分支
第三:多分支
第二點:關於if語句的其他補充
第一:懸空if
else在匹配if時,匹配的是離它最近的if,所以下面的程式碼中,在閱讀上感覺要輸出“haha”,但是實際什麼都不輸出,因為下面的else是和內層的if匹配,它連第一個判斷都沒有進去
所以程式碼風格一定要清晰,不能人為的產生歧義
第二:請再不要把賦值運算子和比較運算子搞混了
所以為了防止這樣的低階錯誤,可以反著寫
if語句練習
1:判斷一個數是否為奇數
B:switch語句第一點:switch語句的基本結構
第二點:關於switch的一些說明
第一:switch後面是整形,case後面必須是整形或整形表示式
第二:case後面不是任何時候都加break語句。比如下列情形:要求輸入1,2,3,4,5,中任意一個數字,則輸出工作日,6和7則輸出休息日。
第三點:關於default的說明啊
第一:default和case的順序無關,但建議放在後面
第二:計算需求中沒有用default的地方,良好的程式碼風格也應該加上它
switch語句練習
如下圖這段程式碼,很好地體現了switch的執行過程
接下來,逐過程執行程式碼
(3)分支語句A:while第一點:while迴圈基本結構
第二點:while迴圈邏輯圖
第三點:關於break和continue
break是用來跳出當前迴圈
continue意思是簡單點理解就是跳過迴圈變數的等於某個值得,直接進行判斷。
第四點:經典例子while
第一:利用while讀走緩衝區字元,使getcha接收到鍵盤上所輸入的字元
(注意,上述操作結束時要按"ctrl +z")
上面的例項究竟有什麼用呢:如下要輸入一個輸入密碼的程式,問題在於程式為什麼不再getchar處等我們輸入Y或N後再進行判斷,而是直接跳過了這一步驟
那麼解決方法很顯而易見,只要在getchar讀輸入緩衝區前,把裡面的換行符讀走即可
當然上述的解決方法還是有限制的,只適用於某些特殊情況。所以完美的解決方式就是用本例項所要說明的while迴圈
第二:只接受數字列印,非數字不列印
B:for迴圈第一點:for迴圈的基本結構
第二點:for迴圈邏輯圖
表示式1只會被執行1次
第三點:break和continue在for迴圈中的使用
break和continue使用基本一致
第四點:關於for迴圈的注意事項
第一:不要在for迴圈體內改變迴圈變數
第二:建議for迴圈控制變數的取值採用“前閉後開”寫法
第三:for迴圈的初始化,調整,判斷都可以省略,其中判斷省略後條件恆為真(雖然各部分可以省略,但每一個部分都有存在的意義,所以隨意省略可能導致意想不到的錯誤)
比如,下面省略了for迴圈的初始化
第四:for迴圈允許多個迴圈變數
一道經典的筆試題
C:do while迴圈第一點:do while迴圈的基本結構
第二點:do while迴圈的邏輯結構
第三點:do while中的break和continue
do while中continue仍然會導致死迴圈
(4)goto語句A:goto語句說明C語言中提供了可以隨意濫用的goto語句額標記跳轉的符號,從理論上來說goto語句是沒有必要的,但是在某些特定場合下也會使用到goto語句,最常見的就是處理某些深度巢狀的語句,使用goto語句可以一次跳出多個迴圈,而在這樣的情況下使用break'是達不到,因為break只能跳出一層。
如下:可以使用go迴圈列印
由以上可以看出,使用goto語句可以使程式隨意跳轉,也就極易造成程式碼邏輯混亂
B:goto 語句適合的場景特別適合這種深層次巢狀
(5):本節練習與作業迴圈與分支經典練習題如下
(6):本節實戰專案:猜數字遊戲特別注意
1:C語言隨機數的生成方式
2:時間戳相關概念
3:rand,srand函式