1. 程式人生 > 實用技巧 >C語言程式設計入門之--第六章C語言控制語句

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語句等自學都能掌握了。練習題如下:

求多個整數的和及平均值

等腰直角三角形

數字金字塔

九九乘法表

三天打魚兩天晒網

黑色星期五

  如果練習有疑問可以在評論區留言。本章結束。