While迴圈
初寫:2005.05.16, 更新日期:2020.08.03
 
參考資料:
 
  • while 語法格式
     while ( 判斷式  )
     {
       要重複的工作;
       ...
     } 
    說明:只要符合判斷條件,就執行迴圈內的工作。
    否則,就跳出迴圈。
    典型用途:不確定重複次數條件的工作。

    • [範例1]: 無窮迴圈
      #include <stdio.h>
      main()
      {
         int a=1;
         while(1){             // 此條件永遠為真
           printf(" %d\n", a++);
         }
      }
      輸出結果為何?
      當(判別式)為真,其傳給while的數值就是1,
      所以,while(1)就是未設定跳出條件的while,
      也就是無窮迴圈!
      如果使用telnet連線寫程式,請問要如何終止這種程式呢?

    • 練習1:請執行下列程式
      輸出結果為何?



    • 練習2:請執行以下程式碼(需在Linux或ssh mbox環境執行)
      請問神秘的 27 號鍵是哪一個鍵,能讓迴圈終止呢?
      讓你看到The End?



    • 範例3 講解:
      #include <stdio.h>
      main( )
      {
         float a,b,c,d,e,ave;
         printf("Input No. 1 grade:");
         scanf(" %f",&a);
         printf("Input No. 2 grade:");
         scanf(" %f",&b);
         printf("Input No. 3 grade:");
         scanf(" %f",&c);
         printf("Input No. 4 grade:");
         scanf(" %f",&d);
         printf("Input No. 5 grade:");
         scanf(" %f",&e);

         ave= ( a + b + c + d + e ) / 5;
         printf("Your average grade is %.2f ",ave);
      }

    • 練習3: 請以while迴圈改寫上述程式
      (變數個數使用不超過4個)
      程式輸入5位同學成績後,並求其平均至小數點下二位。
      Input Your 1-Math grade:100
      Input Your 2-Math grade:95
      Input Your 3-Math grade:80
      Input Your 4-Math grade:85
      Input Your 5-Math grade:77
      The Average Math grade = 87.40

      程式接受輸入到(-1)後,停止輸入成績,並算出前述所有同學的平均成績。
      Input Your 1-Math grade:100
      Input Your 2-Math grade:70
      Input Your 3-Math grade:-1
      The Average Math grade = 85.00

    • [進階]:
      請將上面程式,以while語法來改寫,輸入q後停止輸入成績。
     
  • do-while 語法
    do
     {
       要重複的工作;
       ...
     } while ( 判斷式 );     // 注意,後面有分號
    • 若符合判斷式,則繼續重複迴圈。
    • 若不符合判斷式,則跳出迴圈。
    • 注意:會先執行圈內工作一次後,才來作判斷。

  • 範例


  • 練習
    如上成績平均範例,改成利用do-while,
    接受輸入到(-1)後,停止輸入成績,
    並算出前述所有同學的平均成績。


曾聖超老師製作