1. 程式人生 > >7. C 語言 -- 分支結構: if 語句

7. C 語言 -- 分支結構: if 語句

本部落格主要內容為 “小甲魚” 視訊課程《帶你學C帶你飛》【第一季】 學習筆記,文章的主題內容均來自該課程,在這裡僅作學習交流。在文章中可能出現一些錯誤或者不準確的地方,如發現請積極指出,十分感謝。
也歡迎大家一起討論交流,如果你覺得這篇文章對你有所幫助,記得評論、點贊哦 ~(。・∀・)ノ゙

  在上一篇部落格中介紹了關係運算符和條件運算子,實際上這兩個運算子在很多時候會結合到分支結構中一起使用,那什麼是分支結構呢?

  如下圖所示,左側是順序結構,右側是分支結構

圖1 順序結構與分支結構[1]

順序結構的程式雖然能解決計算、輸出等問題,但不能做判斷再選擇。對於要先做判斷再選擇的問題就要使用分支結構。分支結構的執行是依據一定的條件選擇執行路徑,而不是嚴格按照語句出現的物理順序。

[ 2 ] ^{[2]}

  下面將主要介紹 if 語句。

1 if 結構

   if 結構如下圖所示

這樣的結構使得程式在執行的時候,滿足條件的時候會執行某一個特定的語句塊,但是不滿足的時候就不會執行,具體的使用方法如下

…… // 其它語句
if (表示式)
{
    …… // 邏輯值為真所執行的語句、程式塊
}
…… // 其它語句

  下面對這種結構進行進行舉例說明

#include <stdio.h>
int main()
{
	int a = 20;

	if (a >= 18)
	{
		printf("滿足年齡要求!\n");
		printf("歡迎光臨!\n");
	}
	return 0;
}

2 if…else 結構

   if…else結構如下圖所示

這樣的結構使得程式在執行的時候,滿足條件的時候會執行某一個特定的語句塊1,不滿足的時候就會執行某一個特定的語句塊1,具體的使用方法如下

…… // 其它語句
if (表示式)
{
    …… // 邏輯值為真所執行的語句、程式塊
}
else
{
    …… // 邏輯值為假所執行的語句、程式塊
}
…… // 其它語句

  下面對這種結構進行進行舉例說明

#include <stdio.h>

int main()
{
	int i = 20;
	if (i >= 18)
	{
		printf("滿足年齡要求!\n");
	}
	else
	{
		printf("您的年齡不滿足要求!\n");
	}
	return 0;
}

3 if…else if 結構(巢狀)

   if…else if 結構如下圖所示

在這裡插入圖片描述
這樣的結構使得程式在執行的時候,滿足條件 1 的時候會執行某一個特定的語句塊1,如果不滿足條件 1 要判斷是否滿足條件 2 ,如果滿足條件 2 會執行對應的語句 2 ,如果不滿足(此時相當於同時不滿足條件 1 和條件 2 ),會接著判斷是否滿足下面的條件,……一直這樣判斷下去,直至最後一個條件,如果仍不滿足就執行語句 n+1。具體的使用方法如下

…… // 其它語句
if (表示式1) 
{ 
        …… 
}
else if (表示式2) 
{ 
        …… 
}
  .
  .
  .
else if (表示式n) 
{ 
        …… 
}
else 
{ 
        …… 
}
…… // 其它語句

  下面對這種結構進行進行舉例說明

#include <stdio.h>

int main()
{
	int i;

	printf("請輸入分數:");
	scanf("%d", &i);

	if (i >= 90)
	{
		printf("A\n");
	}
	else if (i >= 80 && i < 90)
	{
		printf("B\n");
	}
	else if (i >= 70 && i < 80)
	{
		printf("C\n");
	}
	else if (i >= 60 && i < 70)
	{
		printf("D\n");
	}
	else
	{
		printf("E\n");
	}

	return 0;
}

上面的這段程式對於輸入的成績進行判斷,90分及以上:A,80 ~ 90分:B,70 ~ 80分:C,60 ~ 70分:D,低於60分:E。

4 容易犯的錯誤

  如上是 if…else if 結構的使用方法,但是有的時候為了投籃或者沒有注意,會寫成下面的這種形式

#include <stdio.h>

int main()
{
	int i = 0;

	if (i == 0){
		i = i + 1;
		printf("i 的值是:%d\n", i);
	}
	if (i == 1){
		i = i + 2;
		printf("i 的值是:%d\n", i);
	}
	else{
		printf("i\n");
	}

	return 0;
}

執行上面的程式可以得到如下的結果

i 的值是:1
i 的值是:3

造成這個結果的原因在於上面你得程式首先了執行了第一個 if 中的語句,之後再執行第二個 if 中的語句;而不是像之前的 if…else if 中那樣,只執行一個條件分支中的語句,所以在使用的時候要尤為注意。

參考文獻

[1] 將暮未暮 《Java 分支結構》
[2] 百度百科 《分支結構》
[3] “小甲魚” 視訊課程《帶你學C帶你飛》【第一季】P11

歡迎大家關注我的知乎號(左側)和經常投稿的微信公眾號(右側)
在這裡插入圖片描述