亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

實例講解 - C 語言的循環結構

2019-11-17 05:20:01
字體:
來源:轉載
供稿:網友
  這一講開始之前,我們需要預備一個函數。這個函數的作用就是把一個百分制成績轉換成等級制。轉換的過程我已經在講解分支結構的時候具體闡述了,現在僅提供函數如下:

  /* 預備 grade.h */
  char grade(int score) {
   switch (score / 10) {
    case 10: case 9:
        return 'A';
    case 8:
        return 'B';
    case 7:
        return 'C';
    case 6:
        return 'D';
    case 5: case 4: case 3:
    case 2: case 1: case 0:
        return 'E';
    default:
        return 0;
   }
  }

  在講解分支結構時提出的實例都只能解決一個成績的情況。假如需要將 5 個人的成績進行轉換,最簡單的辦法如下:

  /* 例1 */
  #include "grade.h"
  #include
  void main() {
   int n;
      scanf("%d", &n);
   printf("等級為: %c", grade(n));
   printf("請輸入成績: ");
   scanf("%d", &n);
   printf("等級為: %c", grade(n));
   printf("請輸入成績: ");
   scanf("%d", &n);
   printf("等級為: %c", grade(n));
   printf("請輸入成績: ");
   scanf("%d", &n);
   printf("等級為: %c", grade(n));
   printf("請輸入成績: ");
   scanf("%d", &n);
   printf("等級為: %c", grade(n));
  }

  例1 的結構非常簡單易懂,但是書寫起來只有一個感覺--煩!同樣的三句話,居然重復了 5 次。假如這個班的人數不止 5 人,而是數十人的話,……天??!簡直想都不敢想!
QQ病毒 騰訊QQ空間代碼專題 PPT教程專題 ADSL應用面面俱到 fireworks教程專題 計算機和網絡技術基礎知識 校園網專題 網吧技術專題
  C 語言當然不會笨得來一點方便都不給,這個"方便",就是循環結構。循環結構的目的就是減少重復代碼,減輕程序員的負擔。而其形式,在 C 語言中有三種:for 循環、while 循環和 do-while 循環。正面分別介紹如下:

  for 循環的基本格式是 for (語句1; 邏輯表達式1; 語句2) {語句組1},大括號包括其中的語句組1 也可以是一條語句。其執行過程如下:先執行語句1,然后判定邏輯表達式1。假如邏輯表達式1 的值為"真(非0)",則執行語句組1,否則結束循環。在沒結束循環的情況下,執行了語句組1 之后,執行語句2。然后再對邏輯表達式1 進行判定,再……,如此循環直到邏輯表達式1 為"假(0)"時為止。于是,例1 可以改寫如下:

  /* 例2 */
  #include "grade.h"
  #include
  void main() {
   int n, i;
   for (i = 0; i < 5; i++) {
    printf("請輸入成績: ");
    scanf("%d", &n);
    printf("等級為: %c", grade(n));
   }
  }

  嘿,這么簡潔?!知道循環結構的便利之處了吧。例2 中 i 從 0 到 4,共執行了 5 次循環體。當然,也可以跟據個人的習慣,將例2 中的 for 語句改寫為:

  for (i = 1; i <= 5; i++) {...}

  這樣或許更輕易理解,但我不推薦這樣做,因為 C 語言中的數組下標是以 0 開始的,采用例1 中的 for 語句更輕易在循環體中讀寫數組元素。就上例,假如我們要把所有成績輸入完成之后再逐一將其等級打印出來,就需要用到數組:

  /* 例3 */
  #include "grade.h"
  #include

  #define N 5

  void main() {
   int n[N], i;
   for (i = 0; i < N; i++) {
    printf("請輸入成績: ");
    scanf("%d", &n[i]);
   }
   for (i = 0; i < N; i++) {
    printf("第 %d 個成績的等級為: %c", i, grade(n[i]));
   }
  }

  例3 中,假如 i 從 1 到 N 循環的話,讀寫數組元素時就應該使用 n[i - 1] 而不是 n[i]。那么每執行一次循環體就會多一次減法運算,在一個循環 N 次的循環中,就會多進行 N 次減法運算,大大降低了程序效率。
  C 語言是一種靈活的語言。它的 for 循環也不是一成不變,必須按照它的基本格式書寫。暫時賣個關子,先看看從例3 修改過來的例4:

  /* 例4 */
  #include "grade.h"
  #include

  #define N 5

  void main() {
   int n[N], i = 0;
   for (; i < N; ) {
    printf("請輸入成績: ");
    scanf("%d", &n[i++]);
   }
   for (i = 0; ; i++) {
    if (i == N) {
     break;
    }
   printf("第 %d 個成績的等級為: %c", i, grade(n[i]));
  }
  }

  是不是很希奇,例4 中的兩個 for 循環中與上面兩個例子的 for 循環相比,都少用了一些語句,怎么回事?且聽我慢慢道來:

  第一個 for 循環中,少了 i = 0 和 i++ 兩句。其實仔細一看,這兩句也沒少。i = 0 已經在給 i 賦初值的時候就實現了,而 i++ 是在 scnaf 語句中順便實現的。所以,雖然沒有 i = 0 一句,但循環開始之前 i 的值已經是 0 了;雖然沒有 i++ 一句,但循環體中實際也改變了 i 的值。

  第二個 for 循環中少的只是那一句判定。而正是由于少了這一句判定,for 循環便不能自已結束。假如我在循環體中也不采取措施結束循環的話,這個循環將一直不停的執行下去,形成死循環。于是,我在循環體中對 i 進行判定,當它等于 N的時候執行一個 break 語句,跳出循環,填補了 for 語句中沒有邏輯表達式的缺陷。

  甚至,一個 for 語句就可以寫成 for (; ; ) {...},這樣一個 for 語句,簡單的說,就是一個死循環。

  還有一點需要說明,就是 break 語句。這個語句在講解 switch 分支結構的時候就已經見到過了。它除了能用于 switch 分枝結構之外,還能用于所有的三種循環結構。其作用就是兩個字--"跳出"。switch 分枝結構中,它用于跳出整個 switch 語句;而在循環結構中,它自然是用于跳出循環,執行它之后,循環體中所有其它語句都不會再執行,整個循環就此中斷。
QQ病毒 騰訊QQ空間代碼專題 PPT教程專題 ADSL應用面面俱到 Fireworks教程專題 計算機和網絡技術基礎知識 校園網專題 網吧技術專題
  學會了 for 循環,雖然可以簡化不少代碼,但它似乎只能解決循環次數固定的情況。假如人數不固定,又該怎么辦?比如規定如下:輸入若干 0 至 100 的成績,假如成績不在此范圍,則表式結束。請看例5,例6:

  /* 例5 */
  #include "grade.h"
  #include
  void main() {
    int n;
    printf("請輸入成績: ");
    scanf("%d", &n);
    while (grade(n) != 0) {
     printf("等級為: %c", grade(n));
     printf("請輸入成績: ");
     scanf("%d", &n);
    }
   }

  /* 例6 */
  #include "grade.h"
  #include
  void main() {
   int n;
   do {
    printf("請輸入成績: ");
    scanf("%d", &n);
    if (grade(n) != 0) {
     printf("等級為: %c", grade(n));
   }
  } while (grade(n) != 0);
  }

  例5 和例6 分別使用了 while 循環和 do-while 循環結構。兩種循環結構都是在 while 后的邏輯表達式為真時執行循環體,為假時結束循環。二者的不同在于:while 循環是先判定,再執行循環體;而 do-while 循環而是先執行循環體后再作判定。因此,使用 do-while 循環至少要執行一次循環體。至于循環的執行過程,就請讀者自己分析了。

  例6 中對于同一個 n,至少要執行兩次 grade(n),大大降低了程序的效率。雖然可以用一個 char 型變量來解決這個問題,但我不想這樣作。于是又有如下方式的改寫:

  /* 例7 */
  #include "grade.h"
  #include
  void main() {
   int n;
   do {
    printf("請輸入成績: ");
    scanf("%d", &n);
    if (grade(n) == 0) {
     break;
    }
   printf("等級為: %c", grade(n));
   } while (1);
  }

  例7 中 while 語句的邏輯表達示值始終是真(1),所以這個循環也就是一個死循環,必須在循環體中用 break 語句跳出。用一個 if 語句判定跳出的時機,這也是很好理解的,就不多說了。但是看看下面的例8,可能就不是那么明白了。

  /* 例8 */
  void main() {
  int n;
  do {
   printf("請輸入成績: ");
   scanf("%d", &n);
   if (grade(n) == 0) {
    continue;
   }
   printf("等級為: %c", grade(n));
  } while (grade(n) != 0);
  }

  例8 的和例6 的區別主要就在于一個 continue 語句。這個語句可是循環結構所特有的,其作用與 break 語句相比,即有相似之處,也有相對之處。執行了 continue 語句之后,循環體中 continue 以下的語句將不再在這次循環中執行,但循環并不中斷,而是開始下一次循環。

  如例8 中,滿足 grade(n) == 0 的條件后,執行 continue 語句。然后 printf 語句被跳過,直接到 while 語句判定是否結束循環,假如不滿足結束循環的條件,那么將會要求輸入下一個成績。不過例8 中,只要能執行到 continue 語句,while 后的條件就一定為假,循環結束。例8 和例7 的區別就在于,例8 是正常結束,而例7 是被中斷。

  break 和 continue 兩個語句在 C 語言的循環結構中有著舉足輕重的作用。雖然使用巧妙的結構化程序手段可以避免使用這兩個語句,但這兩個語句的確能使程序結構更加簡單明了。所以,只要能用上它們的地方,我極力推薦使用它們。
QQ病毒 騰訊QQ空間代碼專題 PPT教程專題 ADSL應用面面俱到 Fireworks教程專題 計算機和網絡技術基礎知識 校園網專題 網吧技術專題

  三種循環結構都說完了,但我還要強調 C 語言的靈活性。雖然循環結構有三種形式,但只使用其中仍意一種都能達到目的。例5 和例6 就展示了使用 while 和 do-while 兩種形式完成同要的任務。至于 for 循環,前面說它"似乎只能解決循環次數固定的情況",這"似乎"二字并非筆誤。它乍看只能解決循環次數固定的情況,但仔細一想,它也的確能解決循環次數不固定的情況。如例5 例6 用 for 循環的形式分別可以改寫為:

  /* 例9 */
  #include "grade.h"
  #include
  void main() {
  int n;
  printf("請輸入成績: ");
  scanf("%d", &n);
  for (; grade(n) != 0; ) {
   printf("等級為: %c", grade(n));
   printf("請輸入成績: ");
   scanf("%d", &n);
  }
  }

  /* 例10 */
  #include "grade.h"
  #include
  void main() {
  int n;
  int b = 1;
  for (; b; ) {
   printf("請輸入成績: ");
   scanf("%d", &n);
   if (grade(n) != 0) {
    printf("等級為: %c", grade(n));
   } else {
    b = 0;
   }
  }
  }


  看看例9 和例5,例10 和例6,是不是有異曲同工之妙?其實 C 語言的循環結構遠遠不止這些變形,只要你細心思考,一定還會發現更多"變形妙用"。哈哈哈哈,一吐為快,心中舒適多了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
高清亚洲成在人网站天堂| 亚洲精品女av网站| 久久精品久久久久电影| 亚洲一区二区中文| 欧洲一区二区视频| 日韩黄色高清视频| 国产成人拍精品视频午夜网站| 欧美xxxx14xxxxx性爽| 久久久91精品国产| 久热精品视频在线观看一区| 国产69久久精品成人看| 欧美xxxx18国产| 亚洲高清福利视频| 欧美午夜精品久久久久久浪潮| 高清视频欧美一级| 国产女同一区二区| 日韩电影中文字幕在线观看| 日韩电影在线观看免费| 国产精品视频自拍| 欧美另类精品xxxx孕妇| 亚洲国产欧美自拍| 黑人巨大精品欧美一区二区| 成人xvideos免费视频| 日韩av成人在线| 欧美性猛交xxxx富婆弯腰| 久久综合久久八八| 欧美成人午夜免费视在线看片| 亚洲欧美成人一区二区在线电影| 欧美肥婆姓交大片| 国产一区二区动漫| 久久精品国产久精国产思思| 欧美激情第一页xxx| 亚洲精品福利在线观看| 一区二区三区亚洲| 欧美色视频日本高清在线观看| 中文字幕在线观看日韩| 成人久久18免费网站图片| 亚洲精品二三区| 日韩在线视频网| 国产免费一区二区三区在线能观看| 国产伦精品一区二区三区精品视频| 欧美精品videos性欧美| 国产综合色香蕉精品| 国产亚洲日本欧美韩国| 亚洲精品福利在线| 国产在线日韩在线| 国产成人一区二区三区电影| 久久69精品久久久久久久电影好| 91国偷自产一区二区三区的观看方式| 自拍偷拍亚洲一区| 91免费看国产| 欧美日韩亚洲视频| 欧美成aaa人片免费看| 热久久99这里有精品| 欧美在线视频导航| 久久国产加勒比精品无码| 久热国产精品视频| 亚洲成人久久网| 国产欧美一区二区白浆黑人| 日韩精品久久久久| 91精品国产色综合久久不卡98口| 国产免费一区二区三区香蕉精| 少妇高潮久久久久久潘金莲| 亚洲欧洲日本专区| 九色成人免费视频| 久久综合伊人77777蜜臀| 日日狠狠久久偷偷四色综合免费| 日韩免费中文字幕| 日韩av在线免费观看一区| 亚洲第一中文字幕在线观看| 日本欧美国产在线| 日韩av一区二区在线观看| 成人免费视频在线观看超级碰| 亚洲аv电影天堂网| 日韩电影中文字幕av| 日韩经典中文字幕| 国产区亚洲区欧美区| 日韩欧美亚洲国产一区| 97超级碰碰碰| 2024亚洲男人天堂| 最近的2019中文字幕免费一页| 精品高清一区二区三区| 97超碰国产精品女人人人爽| 精品少妇一区二区30p| 欧美巨猛xxxx猛交黑人97人| 国产婷婷色综合av蜜臀av| 国产精品a久久久久久| 亚洲一二三在线| 亚洲最新av在线| 成人黄色激情网| 亚洲二区在线播放视频| 国模视频一区二区三区| 亚洲欧美精品suv| 麻豆国产va免费精品高清在线| 丝袜亚洲欧美日韩综合| 亚洲视频一区二区三区| 国模私拍视频一区| 国产精品igao视频| 亚洲成年人在线播放| 久久韩剧网电视剧| 91在线精品视频| 日韩av影院在线观看| 欧美大人香蕉在线| 91在线中文字幕| 国产日韩精品视频| 欧美在线中文字幕| 中文字幕日韩欧美精品在线观看| 久久五月天色综合| 伊人成人开心激情综合网| 日韩av一区二区在线观看| 欧美极品美女电影一区| 免费av在线一区| 国产精品三级久久久久久电影| 国产精品视频播放| 亚洲欧美成人精品| 精品中文字幕乱| 久久久免费在线观看| 日韩欧美成人网| 国产aⅴ夜夜欢一区二区三区| 国内免费久久久久久久久久久| 日韩欧美黄色动漫| 欧美最顶级丰满的aⅴ艳星| 91久久国产综合久久91精品网站| 亚洲男女自偷自拍图片另类| 中文字幕日韩有码| 欧美激情va永久在线播放| 51久久精品夜色国产麻豆| 日韩在线中文视频| 精品视频在线观看日韩| 中文字幕欧美国内| 成人中文字幕+乱码+中文字幕| 精品夜色国产国偷在线| 亚洲最大在线视频| 丝袜美腿精品国产二区| 国产精品视频yy9099| 国产精品极品美女粉嫩高清在线| 国产精品一区二区av影院萌芽| 一区二区成人精品| 久久99久久99精品免观看粉嫩| 亚洲欧美变态国产另类| 91香蕉嫩草神马影院在线观看| 国产91精品久久久久久| 国产综合久久久久久| 国产欧美日韩最新| 亚洲国产日韩欧美综合久久| 成人久久一区二区| 成人写真视频福利网| 久久久久久久久久av| 亚洲区一区二区| 日韩有码在线观看| 久久69精品久久久久久久电影好| 欧美激情视频一区二区三区不卡| 日韩大片免费观看视频播放| 精品五月天久久| 精品国产拍在线观看| 国产美女精品视频| 久久视频在线观看免费| 欧美孕妇毛茸茸xxxx| 欧美成人免费网| 精品亚洲一区二区三区| 人人爽久久涩噜噜噜网站| 国产z一区二区三区| 色老头一区二区三区| 亚洲深夜福利网站|