113.C語言_流程設計

第五章 流程設計node

  • 5.1 C語句概述
    • C語言的語句用來向計算機系統發出指令,一個實際的源程序一般包含若干語句,這些語句用來完成必定的操做任務。
      • 1.其餘類型語句
        • 函數調用語句(由函數調用加一個分號構成),如 scanf(「%d」,&a);。
        • 表達式語句(由一個表達式;構成一個語句),如 a=b;。
      • 2.空語句
        • C語言中全部語句都必須由一個分號(;)結束,若是隻有一個分號如main(){;},這個分號也是一條語句,稱爲空語句,程序執行時不產生任何動做,但表示存在着一條語句。
      • 3.複合語句
        • 在C語言中花括號「{ }」不只能夠用作函數體的開始和結束標誌,同時也經常使用作複合語句的開始和結束標誌,複合語句也可稱爲 「語句體」。
        • 在C語言中,任何表達式均可以加上分號構成語句,如 「i++;」。隨意加「;」會致使不少邏輯上的錯誤,要慎用,不要亂用。複合語句中最後一個語句中最後的分號不能忽略不寫。
      • 4.賦值語句
        • 前面已經介紹賦值語句是由賦值表達式和末尾的分號 (;)構成的。這裏要提醒讀者注意:「=」與「==」是兩個不一樣的運算符,前者纔是賦值運算符,然後者是關係運算符,用來進行條件判斷,不能把兩者混爲一談。如「i=2;」,功能是把數值2放到變量i中,而i==2是判斷變量i的值是否爲2。「j=j+1;」在程序執行時,首先取出j中的值,執行加數值1的操做後再把新值放回到j中。
  • 5.2 順序結構
    • C程序中的語句,按照它們在程序中出現的順序依次執行,由這樣的語句構成的程序結構稱爲順序結構。
  • 5.3選擇結構
    • 5.3.1  if語句和用if語句構成的選擇結構
      • if語句用來對所給定的條件進行斷定,判斷其表達式的值是否知足某種條件,並根據斷定的結果(真或假)決定執行給出的兩種操做中的哪種。
      • 5.3.1.1 if語句的幾種形式
        • (1)if
          • if(表達式)語句
            • 例如:
              if(a>b)
                  printf(「The answer is right!\n「);
              • 其中,if是C語言的關鍵字,a>b是條件判斷表達式。表達式兩側的括號不可少,而且只能是圓括號,不能用其餘括號替代。緊跟着的是一條輸出語句,稱爲if子句,若是在if子句中須要多個語句,則應該使用大括號({})把一組語句括起來構成複合語句,這樣在語法上知足「一條語句「的要求。
        • (2)if - else
          • if(表達式)
            • 語句1
          • else 語句2
            • 例如:
              if(a>b)printf(「The answer is right.\n「);
                  else  printf(「The answer is wrong.\n「);
        • (3) if-else-if
          • if(表達式1)語句1
            else if(表達式2)語句2
            else if(表達式3)語句3
            ┆
            else if(表達式m)語句m
            else 語句n
            「語句1「是if子句,「語句2…語句m「是else子句。這些子句在語法上要求是一條語句,但須要執行多條語句時,則應該使用花括號({})把這些語句括起來組成複合語句。
          • else不能獨立成爲一條語句,它只是if語句的一部分,不容許單獨出如今程序中。else必須與if配對,共同組成if…else語句。
      • 5.3.1.2 if語句的嵌套
        • 在if語句中又包含一個或多個if語句結構,稱爲if語句的嵌套,通常形式以下:
        • if(  )
          if()語句1
          else語句2
          else
          if()語句3
          else語句4
          應當注意:else老是與它上面的最近的沒有與else配對的if配對。
      • 5.3.1.3 條件運算符構成的選擇結構
        • 有以下語句:
          if(x<y)
              min=x;/*求兩數中較小的一個*/
              else min=y;
        • 能夠用min=(x<y)?x:y來替換,其中(x<y)?x:y 是一個條件表達式,「? :「就是條件運算符。該表達式是這樣執行的:若是(x<y)條件成立,則整個條件表達式取值x ,不然取值y 。
        • 優先級:條件運算符高於賦值運算符,但低於邏輯運算符、關係運算符和算術運算符。
    • 5.3.2  switch語句和goto語句
      • 5.3.2.1 switch語句
        • switch語句是C語言提供的多分支選擇語句,用來實現多分支選擇結構。它的通常形式以下:
          • switch(表達式)
            {
            case 常量表達式1 :語句1
            case 常量表達式2 :語句2
            case 常量表達式n :語句n
            default : 語句n+1
            }
            說明:
            • (1)switch是關鍵字,switch後面用花括號括起來的部分是switch語句體。
            • (2)switch後面括號內的「表達式「,能夠是C語言中任意合法表達式,但表達式兩側的括號不能省略。
            • (3)case也是關鍵字,與其後面的常量表達式合稱case語句標號,常量表達式的類型必須與switch後面的表達式的類型相匹配,且各case語句標號的值各不相同,不能重複。
            • (4)default也是關鍵字,起標號的做用,表明除了以上全部case標號以外的那些標號,default標號能夠出如今語句體中任何標號位置上,固然,也能夠沒有。
            • (5)case語句標號後的語句一、語句2等,能夠是一條語句,也能夠是若干條,在必要時,case語句標號後的語句能夠省略不寫,case和常量表達式之間必定要有空格。
            • (6) 必定要注意 有break 和沒有break的差異,沒有break時候,只要有一個case匹配了,剩下的都要執行,有break則是直接跳出了swiche語句。
            • (7) switch只能夠和break一塊兒用,不能夠和continue用。
            • (8) switch(x) x:是整型常量,字符型常量,枚舉型數據。不能夠是變量。
      • 5.3.2.2語句標號
        • 語句標號用標識符表示,它的命名規則與變量名相同,即由字母、數字和下畫線組成,在標識符後加一個冒號,就成了一個語句標號。在C語言中能夠在任何語句前加上語句標號。
        • m: 語句
      • 5.3.2.3 goto語句
        • goto語句爲無條件轉向語句,goto語句的通常形式以下:
        • goto  語句標號;
        • goto語句的做用:把程序的執行轉向語句標號所在的位置,這個語句標號必須與此goto語句同在一個函數內,濫用goto語句將使程序的流程毫無規律,可讀性差,所以初學者應慎用。
  • 5.4 循環結構
    • 概念
      • 在許多問題中,須要作某些重複執行的操做,這時就會用到循環結構。
      • 在程序設計中也同樣,例如,對1~100之間的天然數進行求和計算,計算某班級全部同窗的成績總分,還有不少,幾乎全部的程序都會包含循環控制結構。循環結構是程序中一種很重要的結構。
      • 其特色是,在給定條件成立時,反覆執行某程序段,直到條件不成立爲止。給定的條件稱爲循環條件,反覆執行的程序段稱爲循環體。C語言提供了多種循環語句,能夠組成各類不一樣形式的循環結構。
        • 1)       用while語句;
        • 2)       用do-while語句;
        • 3)       用for語句;
    • 5.4.1 while循環語句
      • 5.4.1.1 while語句通常形式以下:
        while(表達式)
            循環體
      • 5.4.1.2說明:
        • while是C語言的關鍵字。
        • 緊跟其後的表達式能夠是C語言中任意合法的表達式,該表達式是循環條件,由它來控制循環體是否執行。
        • 循環體能夠是一條可執行語句,當多項操做須要屢次重複作時,可使用複合語句。
      • 5.4.1.3執行過程:
        • (1)計算緊跟while後括號中表達式的值,當表達式的值爲非0時,則接着執行while語句中的內嵌語句;當整個表達式值爲0時,則跳過該while語句,執行該while結構後的其餘語句。
        • (2)執行循環體內嵌語句。
        • (3)返回去執行步驟(1),直到條件不知足,即表達式的值爲0時,退出循環,while結構結束。
      • 5.4.1.4 特色:
        • 先對錶達式進行條件判斷,後執行語句。
        • while語句構成的循環結構不一樣於由if語句構成的選擇結構。當if後面的條件表達式的值爲非零時,其if子句只執行一次;而當while後面的條件表達式的值爲非零時,其後的循環體中的語句將被重複執行。並且在設計循環時,一般應在循環體內改變與條件表達式中有關變量的值,使條件表達式的值最終變成零,以便能及時退出循環。
        •  1 #include<stdio.h>
           2 main()
           3     {
           4         int i,sum=0;
           5         i=1;
           6         while(i<=100)
           7         {
           8             sum=sum+i;
           9             i++;
          10         }
          11         printf ("%d\n",sum);
          12     }        
          例如:用while循環求天然數1到100的和,程序段以下:
    • 5.4.2 do…while循環語句
      • 5.4.2.1 do … while 循環結構的通常形式以下:
        do
            循環體語句
            while(表達式);
      • 5.4.2.2說明:
        • (1)do是C語言的關鍵字,必須和while聯合使用,不能獨立出現。
        • (2)do …while 循環由 do 開始,用while結束。在語法上,在do和while之間只能是一條語句,如須要執行多條語句時,能夠用大括號({})括起來,構成複合語句。必須注意的是:while(表達式)後的分號不可丟,它用以表示do … while 語句的結束。
        • (3)while後面的圓括號中的表達式,能夠是C語言中任意合法的表達式,由它控制循環是否執行,且圓括號不可丟。
        • 執行過程:先執行一次指定的循環體語句,執行完後,判別while後面的表達式的值,當表達式的值爲非零(真)時,程序流程返回,去從新執行循環體語句。如此反覆,直到表達式的值等於零爲止,此時循環結束。
      • 5.4.2.3特色:先執行循環體一次,而後判斷循環條件是否成立。
        • do…while構成的循環與while循環十分類似,它們之間的重要區別是:while循環的控制出如今循環體以前,只有當while後面的表達式的值爲非零時,纔可能執行循環體;在do … while 構成的循環體中,老是先執行一次循環體,而後再求表達式的值,所以不管表達式的值是否爲零,循環體至少要被執行一次。
          • #include<stdio.h>
            main()
             {
                    int i,sum=0;
                    i=1;
                    do
                    {
                        sum=sum+i;
                        i++;
                    }while(i<=100);
                    printf("%d\n",sum);
             }
            例如:用do-while循環求天然數1到100的和,程序段以下:
    • 5.4.3 for循環語句
      • for語句的通常形式爲:
        for(表達式1;表達式2;表達式3)
            語句
      • 5.4.3.1 說明:
        • for是C語言中的關鍵字,其後的圓括號中一般是3個表達式,這3個表達式能夠是C語言中任意合法表達式,它們一般用於for循環的控制。各個表達式之間用「;「隔開,且圓括號不可省略。按照語法規則,循環體只能是一條語句,如須要完成多項操做,能夠用大括號({})括起來構成複合語句。
      • 5.4.3.2執行過程:
        • (1)先求表達式1的值 。
        • (2)求表達式2的值,若其值爲真(非0),則執行for語句中指定的內嵌語句後執行下面步驟(3),若其值爲假(0),則退出循環,執行for如下的其餘語句。
        • (3)求解表達式3的值。
        • (4)重複執行步驟(2)。
        • #include<stdio.h>
          main()
          {
              int i,sum=0;
              for(i=0;i<=100;i++)
              {
                  sum=sum+i;
              }
              printf("%d\n",sum);
          }
          例:用for循環求天然數1-100的和,程序段以下:
    • 5.4.4循環的嵌套
      • 在某一個循環體內部又包含了另外一個完整的循環結構,稱爲循環的嵌套。前面介紹的3種類型的循環均可以互相嵌套,循環的嵌套能夠多層,但要保證每一層循環在邏輯上必須是完整的。
      •  1 #include<stdio.h>
         2 main()
         3 {
         4     int i, j;
         5     for (i=0; i<2; i++)
         6         for(j=0; j<2; j++)
         7             printf("%d %d \n", i,j);
         8 }
         9    /* 程序顯示的結果是:
        10     0 0
        11     0 1
        12     1 0
        13     1 1
        14 */
        例 有以下程序段:
    • 5.4.5 幾種循環的比較
      • 前面講的幾種循環均可以用來處理同一問題,通常狀況下它們能夠互相代替。不過最好根據每種循環的不一樣特色選擇最適合的。
      • while和do … while 循環,只在while後面指定循環條件,循環體內應包含使循環趨於結束的語句,for中使循環趨於結束的操做能夠包含在「表達式3「中。由while完成的循環,用for循環都能完成。在for語句「表達式1「中能夠實現循環變量的初始化,而while和do…while的循環變量初始化應在while和do…while語句以前完成。
    • 5.6 break語句和continue語句
      • 5.6.1 break語句
        • 在break後面加上分號就能夠構成break語句。
        • 在介紹選擇結構時,咱們已經知道break語句可使流程跳出switch結構,繼續執行switch語句下面的語句。實際上,break語句還能夠用於從循環體內跳出,即提早結束循環。
        • 說明:
          • (1)break語句只能出如今循環體內及switch語句內,不能用於其餘語句。
          • (2)當break出如今循環體中的switch語句體內時,其做用只是跳出該switch語句體。當break出如今循環體中,但並不在switch語句體內時,則在執行break後,跳出本層循環,固然也再也不去進行條件判斷。
      • 5.6.2 continue語句
        • 通常形式爲:continue;其做用是結束本次循環,即跳過循環體中下面還沒有執行的語句,而轉去從新斷定循環條件是否成立,從而肯定下一次循環是否繼續執行。
        • 說明
          • 與break語句不一樣,執行continue語句並無使整個循環終止。在while和do … while 循環中,continue語句使得流程直接跳到循環控制的條件判斷部分,而後決定循環是否繼續執行。在for循環中,遇到continue後,跳過循環體中餘下的語句,而去求解for語句中的「表達式3「的值,而後再次對「表達式2「的條件進行判斷,最後根據「表達式2「的值來決定for循環是否繼續執行。continue不論是做爲什麼種語句中的語句成分,都按上述功能執行。
          • continue語句和break語句的區別是: continue語句只結束本次循環,而不是終止整個循環的執行;而break語句則是結束整個循環過程,再也不判斷執行循環的條件是否成立。
          •  1 #include<stdio.h>
             2 #include<math.h>
             3 main()
             4 {
             5         int m,i,k;
             6         scanf("%d",&m);
             7         k=sqrt(m); /*此公式用於求m開根號*/
             8         for(i=2;i<=k;i++)
             9             if(m%i==0) break;
            10         if(i>=k+1)
            11             printf("%d is a primenumber\n",m);
            12         else
            13             printf("%d is not a primenumber\n",m);
            14 }
            例如 輸入任意的天然數,判斷此數是否是素數,有程序段以下:

 

 

相關文章
相關標籤/搜索