導讀:本章帶讀者理解什麼是控制語句,然後逐個講解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語句等自學都能掌握了。練習題如下:
求多個整數的和及平均值
等腰直角三角形
數字金字塔
九九乘法表
三天打魚兩天曬網
黑色星期五
如果練習有疑問可以在評論區留言。本章結束。