1. 程式人生 > >C語言之 分支語句與迴圈語句粗見

C語言之 分支語句與迴圈語句粗見

今天讓我們走進C語言中的兩個基本語句的世界中,C語言呢,一共有兩大種語句,即分支語句和迴圈語句,他們的身影幾乎遍插整個程式設計界,是最最基本的語法知識。所以不可小看他們!接下來先看看分支語句:

分支語句(選擇語句)

分支語句又稱選擇語句,那麼先看看語句是什麼?

語句:以分號(;)結尾的一條命令列程式碼,例如:int i = 0 ;

知道了語句,那麼現在我們來看看分支語句分為哪幾類:分支語句有兩類

if 語句

switch語句

舉個 if 語句的例子:

	if (1 == i)
	{
		printf("you will have good offers!\n");
	}
	else if (2 == i)
	{
		printf("you maybe have no good offers!\n");
	}
	else if (3 == i)
	{
		printf("good bye!\n");
	}
	else
	{
		;
	}

由上面的例子我們可以總結一下關鍵點:

1 一組 { } 的程式碼叫做:程式碼塊 (上面一共4個程式碼塊)

2 if ( 表示式 )    計算機會判斷表示式是否為真,為真的話(即非0)則執行緊接著它下面的程式碼塊語句,為假的話(即 0)則跳過當前 if 語句,去判斷下一條語句。注意啦:我們可以看到上面 if () 語句中,我把數字放在 == 前面,這是個很棒的做法,因為這樣就可以防止我們把 == 寫成了  ,一旦我們寫錯了,編譯器就立刻會報錯,提示我們去除錯程式碼。(有沒有很機智~嘿嘿)

3 分支語句可以巢狀使用

4 分支語句有單分支語句和多分支語句,上面的例子就是多分支語句。(提一下:單分支語句就是隻有一個 if 語句 和 一個else 語句組合使用)。

5 格外注意:else 語句與離它最近的一個 if 語句匹配。

6 語句可以為空,即一行語句可以只寫一個分號   ' ;'   。

 

舉個switch多分支語句例子:

#include <stdio.h>
int main()
{
    int day = 0;
    switch(day)
   {
        case 1:
            printf("星期一\n");
            break;
        case 2:
            printf("星期二\n");
            break;
        case 3:
            printf("星期三\n");
            break;    
        case 4:
            printf("星期四\n");
            break;    
        case 5:
            printf("星期五\n");
            break;
        case 6:
            printf("星期六\n");
            break;
        case 7:
            printf("星期天\n");    
            break;
        default:  
            break;
   }
    return 0;
}

需要注意的幾個關鍵點:

1 每一條case語句最後都要記住帶上 break;  否則程式就會按順序往下執行,帶來意想不到的後果。

2 在switch語句的最後,必須要帶上 default 語句,這是一個好習慣!!!

3 switch語句還有一種寫法,如下:

我們的需求是:如果輸入1-5  則輸出"weekday"   ,   如果輸入6-7  則輸出"weekend" 。

#include <stdio.h>
#include <windows.h>

int main
{
	int day = 2;
	switch (day)
	{
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
		printf("weekday\n");
		break;
	case 6:
	case 7:
		printf("weekend\n");
		break;
	default:
		break;
	}

    system("pause");
    return 0;
}

 上面這個例子,用if語句相比,提高了效率。一看就應該能感覺得到吧~

 

 

聊完分支語句,那麼現在我們來聊聊迴圈語句,其實很簡單:迴圈語句有三種(其實有第四種,只是強烈建議慎用!!!待會下面我們會談到,這裡先賣個關子~):

while () 語句

for () 語句

do 

while () ; (這裡有分號,別忘了!!!)

我們先來看看while()語句:

#include <stdio.h>
#include <windows.h>

int main()
{
	int i = 0;//初始條件
	while (i < 10)//判斷條件
	{
		printf("hello bit!\n");
		i++;//更新條件
	}
	system("pause");
	return 0;
}

上面的例子我們已經知道了while迴圈語句的用法,下面我們來看看while迴圈語句中的break  和  continue

break

#include <stdio.h>
#include <windows.h>

int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 5)
			break;
		printf("%d ", i);
		i = i + 1;
	}
	system("pause");
	return 0;
}

輸出結果應該為:1 2 3 4

其實在迴圈中只要遇到break,就停止後期的所有的迴圈,直接終止迴圈。 所以:while中的break是用於永久終止迴圈的。

 

continue

#include <stdio.h>
#include <windows.h>

int main()
{
	int i = 1;
	while (i <= 10)
	{
                i = i + 1
		if (i == 5)
	        continue;
		printf("%d ", i);
		//i = i + 1;//放到這裡的話就是死迴圈,因為i沒有改變
	}
	system("pause");
	return 0;
}

continue是用於終止本次迴圈的,也就是本次迴圈中continue後邊的程式碼不會再執行,而是直接跳轉到while語句的判斷部分。進行下一次迴圈的入口判斷。

 

現在我們來看看for迴圈語句:

for(表示式1;表示式2;表示式3)

{
         迴圈語句;

}

表示式1 表示式1為初始化部分,用於初始化迴圈變數的。 表示式2 表示式2為條件判斷部分,用於判斷迴圈時候終
止。 表示式3 表示式3為調整部分,用於迴圈條件的調整。

可以發現在while迴圈中依然存在迴圈的三個必須條件,但是由於風格的問題使得三個部分很可能偏離較遠,這樣
查詢修改就不夠集中和方便。所以,for迴圈的風格更勝一籌。 for迴圈使用的頻率也最高。

 

break在for迴圈中

#include <stdio.h>
#include <windows.h>

int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		if (i == 5)
			break;
		printf("%d ", i);
	}
	system("pause");
	return 0;
}

 

continue在for迴圈中

#include <stdio.h>
#include <windows.h>

int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		if (i == 5)
		    continue;
		printf("%d ", i);
	}
	system("pause");
	return 0;
}

 

一些建議:
1. 不可在for 迴圈體內修改迴圈變數,防止 for 迴圈失去控制。
2. 建議for語句的迴圈控制變數的取值採用“半開半閉區間”寫法。

 

for迴圈的變種1

#include <stdio.h>
#include <windows.h>

int main()
{
	//變種1
	for (;;)
	{
	    printf("hehe\n");
	}
	system("pause");
	return 0;
}

結果是死迴圈

 

for迴圈的變種2

#include <stdio.h>
#include <windows.h>

int main()
{
	int x, y;
	for (x = 0, y = 0; x<2, y<5; ++x, y++)
	{
		printf("hehe\n");
	}
	system("pause");
	return 0;
}

逗號表示式,從左到有依次運算,但是依照最後一個表示式為準!!!

 

do語句的特點
迴圈至少執行一次,使用的場景有限,所以不是經常使用

#include <stdio.h>
#include <windows.h>

int main()
{
	int i = 10;
	do
	{
		printf("%d\n", i);
	} while (i<10);
	system("pause");
	return 0;
}

 

goto語句

C語言中提供了可以隨意濫用的 goto語句和標記跳轉的標號。
從理論上 goto語句是沒有必要的, 實踐中沒有goto語句也可以很容易的寫出程式碼。
但是某些場合下goto語句還是用得著的, 最常見的用法就是終止程式在某些深度巢狀的結構的處理過程, 例如一次跳出兩層或多層迴圈。這種情況使用break是達不到目的的。 它只能從最內層迴圈退出到上一層的迴圈。

關機的例子

int main()
{
    char input[10] = {0};
    system("shutdown -s -t 60");
    while(1)
   {
        printf("電腦將在1分鐘內關機,如果輸入:我是豬,就取消關機!\n請輸入:>");
        scanf("%s", input);
        if(0 == strcmp(input, "我是豬"))
       {
            system("shutdown -a");
            break;
       }
   }
    return 0;
}

 

goto語言真正適合的場景如下:
for(...)
    for(...)
   {
        for(...)
       {
            if(disaster)
                goto error;
       }
   }
    …
error:
 if(disaster)
         // 處理錯誤情況