C語言程式設計入門之--第六章C語言控制語句
導讀:本章帶讀者理解什麼是控制語句,然後逐個講解C語言常用的控制語句,含有控制語句的程式碼量多起來後就要注意寫程式碼的風格了,本章末節都是練習題,大量的練習才能掌握好控制語句的使用。
6.1 什麼是控制語句
翻回第一章,當時為了講解計算機程式,舉了一個打醬油的例子:
第一種做法:首先要準備好100塊錢,然後出門要穿好衣服鞋襪,出門到便利店,拿到醬油付完錢,店家找錢,返回家中。
可以用更加精細的描述這個行為:
準備100塊錢,或許要翻箱倒櫃,直到找到100塊錢才可以出門,這段時間發生的事情可以用如下語句表達:
當(還沒找到100塊錢的時候 == false) { 繼續找錢;
如果(找到錢了 == true)
{
出門;
}
}
在以上語句中,當(......),如果(......),這類的控制行為用到計算機程式上就是控制語句了,因為C語言是外國人發明的,所以“當(.......)”轉換成程式就是“while(......)”,“如果(......)”轉換成程式就是“if(......)”。
繼續打醬油,到店裡找到醬油後,店家要找錢,醬油就算30塊錢好了,店家就要找還70塊錢,找錢的方法為右手從錢櫃裡面拿錢到左手,直到左手的錢夠70塊錢了就結束繼續拿錢,如下:
對於(開始左手沒有錢; 如果左手錢夠70塊錢了就結束; 右手繼續拿錢給左手)
{
這段時間可以做想做的別的事;
}
在C語言中,以上在控制語句中就為for(表示式1;表示式2;表示式3)。
注意:每個表示式用分號;隔開。
大致這麼理解控制語句就行了,下一節就把這些控制語句用到程式碼上編譯執行看結果。
6.2 條件判斷語句
6.2.1條件判斷語句if
如果......在英文中為:if......。
如果......那麼......在英文中為:if......else...... 。
這個就是基本的條件判斷語句。程式碼中是這麼體現的:
#include <stdio.h> void main() { int a = 3; int b = 5; if(a < b) { printf("a < b 成立\n"); } if(a > b) { printf("a > b 成立\n"); } else { printf("a > b 不成立\n"); } }
執行結果為:
a < b 成立
a > b 不成立
第一個條件控制語句中,只是判斷 a 是否小於 b,如果成立就printf一段話,如果不成立繼續往下執行。
第二個條件控制語句,判斷 a 是否大於 b,如果成立 printf 一段話,如果不成立 printf 另一段話。
if和if......else...... 可以進行巢狀,如下:
#include <stdio.h> void main() { int a = 3; int b = 5; int c = 7; if(a < b) { printf("a < b 成立\n"); } if(a > b) { printf("a > b 成立\n"); } else { printf("a > b 不成立\n"); if(a > c) { printf("a > c 成立\n"); } else { printf("a > c 不成立\n"); } } }
6.2.2 條件判斷語句switch
switch語句與if語句的功能一樣,它的作用在於更加清晰明瞭,適合條件判斷多的情形下使用,如下:
#include <stdio.h> void main() { int a; printf("請輸入要查詢的數字:"); scanf("%d", &a); switch(a) { case 1: printf("1 : 一心一意學程式 \n"); break; case 2: printf("2 : 兩全其美真棒棒 \n"); break; case 3: printf("3 : 三心二意很不好 \n"); break; default: printf("您輸入的數字還未加入到系統庫,請重新輸入 \n"); break; } }
switch做的工作,就是判斷傳入的數值,當輸入對應數值為case後面的數值的時候,執行相應語句,再執行break結束,如果沒有加break語句,就會繼續往下執行,讀者可以除去後編譯看看效果。當輸入的數值沒有對應的case處理,就會預設執行default裡面的操作。
一般淘寶、京東、10086、微信公眾號等等都有機器人客服和人工客服,比如讓客戶傳送1,就輸出一段客戶想要知道的內容,傳送2,就輸出另外一段,如果掌握了條件控制語句,那麼恭喜你,可以做簡單的機器人客服程式了,趕緊自己動手試試吧。
6.3 迴圈結構
人生,就是一個大迴圈你的起點,可能是他的終點。
通俗點說,人每天困了睡覺,肚子餓了吃飯,尿急了上廁所。實操一下,比如小明每隔兩秒鐘就要尿尿,怎麼用程式碼實現,結合之前學習,會寫出以下程式碼:
#include <stdio.h> void main() { printf("你好,我是小明!\n"); sleep(2); printf("尿尿 \n"); sleep(2); printf("尿尿 \n"); sleep(2); printf("尿尿 \n"); sleep(2); printf("尿尿 \n"); }
注:sleep是系統延時函式,裡面傳的數值就是讓程式等待的秒數。
以上程式碼,只可以“尿尿”四次,那麼小明要尿尿一百次呢,要一千次呢,要無限次呢?怎麼做。
這時候就要用到C語言中的迴圈語句了。
6.3.1 迴圈結構while
小明每隔兩秒"尿尿"十次,程式碼如下:
#include <stdio.h> void main() { int count = 0; printf("你好,我是小明!\n"); while(1) { sleep(2); printf("尿尿第%d次\n", count); count++; if(count == 10) { printf("尿完了 \n"); break; } } printf("下次再戰\n"); }
以上程式碼中,while()括號裡面的值傳的是bool值,因為1永遠為真,所以會無限執行,如果要驗證是否無限執行,可以把程式碼中的“break”除去。
在程式碼中的if語句裡,當count等於某個數的時候執行break,就能夠跳出迴圈了,這個數就是設定的“尿尿”次數了。
6.3.2 迴圈結構for
總是說“尿尿”似乎不太雅,改為“吃飯”吧。以下,為for語句的例子:
#include <stdio.h> void main() { int count = 0; printf("你好,我是小明!\n"); for(count = 0; count < 10; count++) { sleep(2); printf("吃飯第%d次\n", count); } printf("下次再戰\n"); }
for語句中,有兩個分號“;”,第一個分號前寫的是初始化值,讓count等於0,第二個分號寫的是判斷值,判斷count是否小於10,如果小於10就繼續迴圈,第二個分號後面就是執行語句,count自增1。編譯執行後發現,執行10次就跳出迴圈了。
基本上會以上控制語句就夠用很多了。只有大量的練習才能更好的掌握這幾種語句,後續比如coutinue,goto語句等自學都能掌握了。練習題如下:
求多個整數的和及平均值
等腰直角三角形
數字金字塔
九九乘法表
三天打魚兩天晒網
黑色星期五
如果練習有疑問可以在評論區留言。本章結束。