1. 程式人生 > >C語言中分支結構及迴圈結構的簡單介紹

C語言中分支結構及迴圈結構的簡單介紹

C語言程式中的結構可分為以下三種:

1.順序結構:程式從上往下依次執行就叫順序結構

          2.分支結構:程式有選擇的執行某段程式碼或者不執行某段程式碼

          3.迴圈結構:程式重複的執行某段程式碼 

順序結構是最簡單也是最基本的程式結構,它是由若干段程式碼組成,並按照從上到下的順序依次執行的,而我今天主要簡單介紹一下分支結構及迴圈結構。

一、分支結構

分支結構有兩大類語句:一種是if語句,一種是switch語句

1、分支結構之 if 篇

     a.  if 語句的第一種形式

          語法定義:     if(表示式){

                                     語句塊;

                                  }

           語義:如果表示式的結果為真,則執行語句塊,否則不執行語句塊。

    b. if 語句的第二種形式

         語法定義:     if(表示式){

                                 語句塊1;

                                }else{ 

                               語句塊2;

                               }

        語義:如果表示式的結果為真,則執行語句塊1,否則執行語句塊2。語句1或者語句塊2,至少會有一個被執行。

   c. if 語句的第三種形式

        if 語句的巢狀,簡單來說就是if語句裡再巢狀if語句,並沒有嚴格意義上的語法定義,遵守上面兩種形式就ok。

   d. if 語句的第四種形式

       語法定義:      if(表示式1){

                                 語句塊1;

                                }else if(表示式2){ 

                               語句塊2;

                               ... ...

                               }else if(表示式n){

                                語句塊n;

                               }else{

                                語句塊n+1;

                               }

            語義:先判斷表示式1,如果成立則執行語句塊1,後面的都不執行了,否則繼續判斷表示式2,如果成立,則執行語句塊2,後面的都不執行了,如果不成立則繼續判斷語句塊n,如果成立則執行語句塊n,否則繼續往下判斷,直到else上面的條件都不滿足,就執行語句塊n+1。我們的這種語法格式是一個整體,上面判斷過的內容如果不成立,那麼下面判斷時就已經做了過濾。 以下以if的第四種形式為例,進行一段程式設計:

        輸入一個屬於0-100的成績,按100-90,89-80,79-70,69-60,59-0,分別分成A、B、C、D、E等。

#include <stdio.h>

   int main(int argc, const char * argv[]) {

            printf("請輸入您的成績\n");
            
            int score;
            
            scanf("%d",&score);
            
            if(score<=100 && score>=90){
                
                printf("您的成績為A等\n");
            
            }else if(score>=80){
                
                printf("您的成績為B等\n");
            
            }else if (score>=70){
            
                printf("您的成績為C等\n");
                
            }else if (score>=60){
                
                printf("您的成績為D等\n");
            
            }else{
            
                printf("您的成績為E等\n");
            }
            
            printf("程式結束\n");
            return 0;
   }

 if語句小tips:

     1.if語句後面千萬不要加分號,如果你非要手賤加一個分號,那麼就加在大括號後面

     2.if語句的大括號,其實是可以省略的!當你省略大括號的時候,那麼if語句只能管到離它最近的一句語句,但是這句語句不能是宣告變數的語句

     3.if語句裡面可以寫任意條語句(必須要有大括號)

     4.0的數就是真,0就是假,避免讓你的表示式是永真或永假

     5.if語句裡面定義的變數只能在它語句塊裡面訪問

     6.if語句小括號裡面的表示式可以寫任意表達式

2、分支結構之 switch篇

      語法定義:           switch(表示式){
                                            case 常量表達式1:
                                           語句塊1
   break;

            case 常量表達式2:
    語句塊2
   break;

case 常量表達式3:
語句塊3
break;
                                           ……

default:
語句塊n
break;
}

語義:先得出表示式的結果,根據結果跳轉到相應的case語句塊裡面去執行

   表示式結果 == 常量表達式 就叫相應的case語句塊

                  如果case 後面的常量表達式沒有一個跟表示式結果對應的,那麼就跳轉到 default裡面執行語句塊n。

switch語句的穿透問題:當case塊裡面不加break的時候,會發生穿透

穿透意思:就是從這個case塊裡面執行完語句後,會繼續跳到下一個case塊裡面繼續執行。所以,我們必須加break,防止穿透。break可以跳出當前的switch語句

例項: 要求使用者輸入一個月份,判斷這個月份屬於哪個季節
            12月1月 2月:冬季
3月4月5月:春季
6月7月8月:夏季
9月10月11月:秋季

#include <stdio.h>

int main(int argc, const char * argv[]) {
    
        printf("請輸入月份\n");
        int month;
        scanf("%d",&month);
        
        switch (month) {
                
            case 1:
            case 2:
            case 12:
                printf("冬季\n");
                break;
                
            case 3:
            case 4:
            case 5:
                printf("春季\n");
                break;
                
            case 6:
            case 7:
            case 8:
                printf("夏季\n");
                break;
                
            case 9:
            case 10:
            case 11:
                printf("秋季\n");
                break;
                
            default:
                printf("輸入錯誤\n");
                break;
        }

switch語句小tips:

1.switch語句後面的小括號只能寫整數型別的表示式,否則會報錯

2.case後面只能接常量表達式且不能有重複的值

3.switch小括號後面不要加分號,手賤要加分號加在大括號後面

4.case後面不能立即宣告變數,除非在宣告前面加一條或者N條語句,非要在 case後面立即宣告變數,那麼就在case塊裡面加一個大括號

5.如果不加大括號宣告的變數,其他case塊也可以訪問

6.default可以寫在任意位置,不影響結果

注: 任何可以用if語句實現的功能,絕對也可以用switch語句來實現,同樣用switch語句可以做得東西,if也完全可以。

        如果要判斷範圍的話用if比較方便,用switch比較麻煩,不能直接用;

        如果是判斷具體的某個值,並且值不是很多的時候用switch方便和簡潔。

二、迴圈結構

 迴圈結構主要語句:while迴圈、do-while迴圈、for迴圈

1、迴圈結構之 while 篇
    a. while  語句

語法定義:while(表示式){

迴圈體;
   }
語義:1.先判斷表示式是否成立,如果成立,則跳轉第2點內容,否則跳轉第3點內容
    2.執行迴圈體,執行完畢跳轉到第1點內容
            3.跳出迴圈,迴圈結束

遍歷1-10的數字,程式碼如下:

#include <stdio.h>

int main(int argc, const char * argv[]) {
    
   //迴圈變數,用來控制迴圈的次數的
    int i = 0;
    
   while (i < 10) {//i<後面的數字就能控制迴圈的次數,並且後面的數字是迴圈額次數

       printf("%d ",i+1);

       i++;   //控制迴圈結束的語句
   }    
   return 0;
}
while迴圈語句小tips:

1.防止死迴圈。避免條件永真或永假。如果永真就是死迴圈,如果永假就不迴圈,寫起來毫無意義

2.while迴圈後面千萬不要加分號,手賤要加分號,就加在大括號後面

3.記得結束迴圈的語句不要忘了寫,如以上的 i++;

4.迴圈跟if語句一樣的地方就是:大括號可以省略。只能控制離它最近的一條語句,並且這條語句不能是宣告變數的語句

2、迴圈結構之do- while 篇

do-while的語法:do{

迴圈體;

}while(表示式);

注意:while的小括號後面一定要加分號

語義:    1.執行迴圈體,跳轉到第2點

2.判斷表示式的結果是否為真,如果為真,跳轉到第1點,否則跳轉到第3點

3.跳出迴圈,迴圈結束。

跟while迴圈的最大的區別就是:do-while是先執行迴圈體,再判斷,while是先判斷再執行

while裡面的迴圈體很可能1次都不會被執行,do-while裡面的迴圈體至少被執行1次。

例項就不演示出來了,do-while 一般在迴圈體至少需要被執行一次的時候使用。

3、迴圈結構之for 篇

在上面介紹while迴圈的時候,提過一定要寫結束迴圈的語句(i++;),否則就會發生死迴圈。那麼for迴圈可以起到讓我們無論如何都不會忘卻寫i++;

首先語法是:    for(表示式1;表示式2;表示式3){

迴圈體;

    }

語義:1.先執行表示式1,跳轉到第2點

2.判斷表示式2的結果是否為真,如果為真,跳轉到第3點,否則跳轉到第5點

3.執行迴圈體,執行完畢,跳轉到第4點

4.執行表示式3,執行完畢跳轉到第2點

5.跳出迴圈,迴圈結束

遍歷1-10的數字,程式碼如下:

#include <stdio.h>

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

for迴圈的其他格式:

 表示式1,表示式2,表示式3都可以省略

注意:表示式2沒寫的話代表是死迴圈

就算你不寫表示式1,表示式2,或者表示式3,但是那兩個分號無論如何都不省略

表示式1,表示式3,可以寫任意條語句,用 ,(逗號)隔開

for迴圈的巢狀(可用來列印各種圖形,一般用來控制平面)

意思即為:一個for迴圈裡面還嵌套了一個for迴圈

含義:外層迴圈控制行數,內層迴圈控制列數!

例項:列印等腰三角形,

           * 

        * * * 

      * * * * * 

   * * * * * * * 

* * * * * * * * * 

程式碼如下:
#include <stdio.h>

int main(int argc, const char * argv[]) {
            
      for (int i=1; i<=5; i++) {   //控制行數
                
          for (int j=1; j<=5-i; j++) { //控制每行等腰三角形前面的空格數量,空格數量=總行數-當前行數.如第一行只有一個*,前面有4個空格,所以空格數=5-1=4
                    
              printf("  ");    //列印每行的空格
      }
          for (int j=1; j<=i*2-1; j++) { //控制每行等腰三角形的*數量,*=行數*2-1.如第一行*=1*2-1=1
                     
              printf("* ");  //列印每行的星星

          }

              printf("\n");  //列印每行的換行
                
     }
     return 0;
}
總而言之,不管圖形如何複雜,外層迴圈控制行數都是可以確定的。

以上這些,分支結構及迴圈結構就介紹完畢。