C語言基礎第三篇--控制語句

看完了基本數據類型,就可以處理基本數據了,這些基本數據類型在以后會經常用到,用法也會慢慢接觸到。本篇文本主要講述C語言中的控制語句,在C語言中,控制語句一共有九種,主要分為:
分支語句(條件判斷語句):if、if-else條件判斷,switch語句;
循環語句 : for循環、while循環、do-while循環;
輔助控制語句(轉向語句) :break語句、return 語句、continue語句、goto語句;
下面我們一一介紹這幾種語句的使用,由于輔助控制語句是和其他兩種控制語句組合使用的,我們會在介紹前兩種語句的同時介紹輔助控制語句。
分支語句:

// if if-else 語句
if(condition){
//statements 當滿足條件時執行這里的語句
}else{
//statements 當不滿足條件時執行這里的語句
}
//or
if(condition1){
//statements 當滿足條件1時執行這里的語句
}else if(condition2){
//statements<span style="white-space:pre"> </span> 當滿足條件2時執行這里的語句
}else{
//statements<span style="white-space:pre"> </span> 當前兩個條件都不滿足時執行這里的語句
}
if-else語句判斷語句中經常使用到的語句,原理很簡單如上面的寫法 if(condition) 這里的condition是一個整型變量,在C語言中當condition==0時,條件判斷為假,當condition為非零值,條件判斷為真,以一個例子來說明:

include <stdio.h>

int main(int argc, const char * argv[]) {
int condition = 1; //定義變量condition,并初始化為1,此時condition為非零值,因此為真
if (condition) {
printf("line 5:true\n"); //當 condition 為真值時,即 condition 非零時執行
}else{
printf("line 7:false\n");//當 condition 為假值時,即 condition 為零時執行
}

condition = 0;//更改變量condition的值為零,在C語言中0代表假
if (condition) {
    printf("line 12:true\n"); //當 condition 為真值時,即 condition 非零時執行
}else{
    printf("line 14:false\n");//當 condition 為假值時,即 condition 為零時執行
}

condition = -2;//更改變量condition的值為負值-2,也是非零值,因此為真
if (condition) {
    printf("line 19:true\n");
}else{
    printf("line 21:false\n");
}
return 0;

}
輸出結果如下:
line 5:true
line 14:false
line 19:true
Program ended with exit code: 0
通常情況下,可能會有多個條件同時滿足時才會執行if代碼塊中的語句,或多個條件中的任意一個條件滿足就執行if代碼塊中的語句,這里就要用到嵌套的if語句或者組合邏輯運算符來解決這個問題,先來看嵌套的if語句,原理和單層if語句是一樣的,以一個例子來說明

int condition1 = 0,condition2 = 1;
if (condition1) {
if (condition2) {
printf("All of the two conditions are false\n");
}else{
printf("Condition1 is true but condition2 is false\n");
}
}else{
if (condition2) {
printf("Conditon1 is false but condition2 is true\n");
}else{
printf("All of the two conditions are false\n");
}
}

輸出結果如下:

Conditon1 is false but condition2 is true
Program ended with exit code: 0
很多時候我們只要知道兩者之中都是真或都是假,甚至有時候我們可以不用理會到底誰是真誰是假,只要他們組合到一塊是真的或都是假的就行,這時我們可以使用邏輯運算符來解決這個總是,首先我們先認識一下C語言中的幾個常用邏輯運算符,有時它們也是條件語句中的一部分。

C語言中提供了三種邏輯運算符,分別為&&與、||或、!非。
&& 邏輯與運算符,&&運算符兩邊的變量或表達式同時為真是 表達式才為真,一方為假,表達式即為假。
|| 邏輯或運算符,||運算符兩邊的變量或表達式一方為真,整個表達式即為真。
! 邏輯非運算符,! 運算符是對 !后面的變量或表達式取反(所有非零值取反后為0,0值取反后為1)
因此在上面的例子中要表達condition1和condition2同時為真時可用如下方式表達

if(condition1 && condition2){
printf("All of the two conditions is true\n");
}

同理,若要表達condition1和condition2中至少有一個為真時可用如下方式表達

if(condition1 || condition2)
{
printf("At least one of the two conditions is true\n");
}

而這里的邏輯非只是返回一個對其后的表達式取反后的值,但并不會對原表達式賦值,如下面表示如果condition為假

if(!condition)
{
printf("Condition is false\n");
}

switch語句是多分支語句,在判定條件比較多時可使用switch語句:
//switch語句

switch(condition){
case condition1:
//statements1;<span style="white-space:pre"> </span>當滿足條件1時執行這里的語句
break;
case condition2:
//statements2<span style="white-space:pre"> </span>當滿足條件2時執行這里的語句
break;
.
.
.
default:
//statementsn+1<span style="white-space:pre"> </span>當以上條件都不能滿足時執行這里的語句
break;
}

switch語句語義為,計算condition的值,并逐一與內部的case語句的條件進行比較,如果相同,則繼續執行該case中的statements,若不相同則跳過case中的statements并對比下一個case,若所有case中的condition都不相同則執行default中的statements+1,需要注意的是switch語句中的condition應該傳入的值應該是整數類型的值,也可以傳入一個char型的值,因為前邊說過char其實也是一種整數類型,下面一個例子來深入感受switch語句。

include <stdio.h>

int main(int argc, const char * argv[]) {
int condition; //定義一個condition變量來存儲輸入的值
printf("請輸入1 - 12 中的整數,將輸出對應月份的英文\n");
scanf("%d",&condition);//從控制臺接收一個數字并保存到condition變量中
switch (condition) {
case 1:
printf("January\n");
break;
case 2:
printf("February\n");
break;
case 3:
printf("March\n");
break;
case 4:
printf("April\n");
break;
case 5:
printf("May\n");
break;
case 6:
printf("June\n");
break;
case 7:
printf("July\n");
break;
case 8:
printf("August\n");
break;
case 9:
printf("September\n");
break;
case 10:
printf("October\n");
break;
case 11:
printf("November\n");
break;
case 12:
printf("December\n");
break;
default:
printf("您輸入的數字有錯誤");
break;
}
return 0;
}

輸出結果如下:

請輸入1 - 12 中的整數,將輸出對應月份的英文
2
February

請輸入1 - 12 中的整數,將輸出對應月份的英文
13
您輸入的數字有錯誤
在if 語句中可以做一些復雜的判斷,但在switch中只能判斷整型數值,因此若要判斷復雜條件應先將相關復雜條件轉換為數值條件后,再使用switch來判斷。

在這里我們還使用到了一個輔助控制語句--break,我們稱之為跳出語句,其語義是跳出當前switch判斷,并執行switch代碼塊下面的語句,在這里即執行return 0;語句,這里的return語句在前面已經說過,它后面所跟著的變量類型對應于函數定義時的返回值類型。break語句一般用于switch語句中,若在某一case中沒有使用break語句,那么將不會跳出switch判斷,而是繼續進行下一case的判斷,直到執行到break語句才會跳出switch判斷語句。
循環語句

// for 循環
for(stateInitialValue;stateEndCondition;changeExpression){
//do something;
}
在c語言中使用for循環需要先定義一個狀態變量,在for語句中給定初始值、結束值和變化量,表示為for(初始值;結束條件;變化表達式),定義好之后,狀態量將從狀態量初始值開始,每次改變一個狀態量的變化量,直到滿足結束條件,跳出for循環,下面以一個例子來感受一下for循環的使用:

include <stdio.h>

int main(int argc, const char * argv[]) {
int i;//定義變量i
for (i = 0; i < 10; i++) {
printf("%d ",i);
}
return 0;
}

輸出結果為:

0 1 2 3 4 5 6 7 8 9
這里的i 為狀態變量,在for 語句中首先初始化這0,然后設定其結束條件為i < 10,即當執行到i >= 10時循環結束,且for語句的代碼塊中的代碼不再執行,此時在本例中的i == 10 但這個10并沒有輸出,隨后設置i 的變化量為每循環一次加一,之后便是for語句的代碼塊,在里面輸出i的當前值。

使用while循環也可以達到這一目的,只需將for循環的那一段代碼替換為:

while (i < 10) {
printf("%d ",i++);
}
此時輸出與上面的輸出也是一樣的,while循環的表達式可表示為while(條件語句){//while代碼塊},這里的條件語句也需要是一個整型數值。

同樣這一語句用do while也可以完成,代碼如下:

do {
printf("%d ",i++);
} while (i < 10);
需要注意的是,使用do-while時會先執行一次do代碼塊中的語句,然后再進行判斷,而使用while和for 時需要先進行條件判斷再執行代碼塊中的語句,兩者在輸出上有時是有差另的。

最后來看一下goto 語句和continue語句,這兩個語句的使用頻率不是很高,且不推薦使用goto語句,因為goto語句是強制跳轉語句,在運行過程中可能會出現各種奇怪的總是,對應于匯編語言的jJMP指令,為無條件跳轉,而continue語句語義為跳過本次循環未執行到的語句,繼續執行下一次循環
,continue語句一般應用于for循環中,用例子來感受continue語句如下:

include <stdio.h>

int main(int argc, const char * argv[]) {
int i = 0;//定義變量i
for (i = 0;i < 10; i++) {
if (i == 5) {
continue;
}
printf("%d ",i);
}
printf("\n%d\n",i);
return 0;
}

輸出結果如下:

0 1 2 3 4 6 7 8 9
10

總結:
在實際應用中,控制語句是經常使用的語句,要注意的是各類控制語句的執行條件,只有這些執行邊界條件定義得當,才能真正發揮其作用,如果邊界條件處理不得當,常常會發生一些意想不到的錯誤。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,702評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,615評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,606評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,044評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,826評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,227評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,307評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,447評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,992評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,807評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,001評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,550評論 5 361
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,243評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,667評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,930評論 1 287
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,709評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,996評論 2 374

推薦閱讀更多精彩內容