0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

C語言的循環(huán)與分支-2

汽車電子技術 ? 來源:微亮筆記 ? 作者: PASSION ? 2023-02-21 15:35 ? 次閱讀

上期我們介紹了分支語句的兩種句型:if 語句和 switch case語句。 而在c語言中我們經(jīng)常會需要重復地進行一些指令,但是不斷的編輯重復代碼不僅很繁瑣,還容易出現(xiàn)bug,因此循環(huán)語句的使用就非常有必要。今天要介紹的就是循環(huán)語句相關的知識。

本期主要介紹三種循環(huán)語句

1) while語句

2) do while語句

  1. for 語句
    
  2. 代碼規(guī)范化
    
  • while語句

我們已經(jīng)掌握了 if 語句

if(條件)
          語句;

當條件滿足的情況下,if語句后面的語句執(zhí)行,否則不執(zhí)行。這個語句只會執(zhí)行一次。

但我們發(fā)現(xiàn)生活中很多實際的例子是:同一件事情我們需要循環(huán)執(zhí)行多次。

那如何去滿足上述需求呢?c語言中引入了:while語句,可以實現(xiàn)循環(huán)。

while語句的語法結構:

while(表達式)
       循環(huán)語句;

還是使用一個代碼來解釋while循環(huán)的執(zhí)行過程:

#include 
int main()
{
  int i = 1;
  while (i<=10)
  {
    printf("%d\\n", i);
    i++;
  }
  return 0;
}

通過代碼可以看到,表達式i<=10在i==1的情況下判斷為真,所以循環(huán)體中的語句執(zhí)行,最后打印出1-10,那么我們可以知道,當表達式為真時,while循環(huán)才會執(zhí)行,當表達式為假,循環(huán)則不會執(zhí)行。那么如果表達式是一個非0的數(shù),循環(huán)會不會一直執(zhí)行呢?

#include 
int main()
{
  while (1)
  {
    printf("a");
  }
  return 0;
}

圖片

通過運行結果可以看到,當表達式為1時,while循環(huán)會一直執(zhí)行循環(huán)體,也就變成了一個死循環(huán)。

while循環(huán)中的break:

#include 
int main()
{
  int i = 1;
  while (i<=10)
  {
    printf("%d\\n", i);
    if (i==5)
    {
      break;
    }
    i++;
  }
  return 0;
}

通過前面的代碼我們知道這個代碼是用于打印1-10,那么如果在i==5的時候加入break,會發(fā)生什么呢?

圖片

可以看到當加入了break之后,當執(zhí)行到i==5時,后面的循環(huán)并沒有執(zhí)行,那么可以理解為break語句的意思是終止循環(huán)。

while循環(huán)中的continue語句

#include 
int main()
{
  int i = 1;
  while (i<=10)
  {
    if (i == 5)
    {
      continue;
    }
    printf("%d\\n", i);


    i++;
  }
  return 0;
}

圖片

上面我們知道了break的作用,那么continue和break有什么區(qū)別呢,通過運行結果可以看到,當輸出到4時,代碼進入了一個死循環(huán),而不是像break一樣終止,這是為什么呢?我來解釋一下,continue的意思為繼續(xù),當代碼執(zhí)行到continue時,會跳過本次循環(huán)而繼續(xù)下一次,從代碼中看到,當i==5時,循環(huán)跳過,那么i++不會執(zhí)行,i的值就不會改變,那么i==5回到表達式判斷5<10,進入循環(huán),那么這個時候i==5就又會觸發(fā)continue,然后i++又不能執(zhí)行,就造成i的值一直為5,一直跳過,就成了一個死循環(huán)。

  • do while語句

語法結構:

do {
     循環(huán)體語句;
} while(條件判斷語句);

執(zhí)行流程:

①執(zhí)行初始化語句

②執(zhí)行循環(huán)體語句

③執(zhí)行條件控制語句

④執(zhí)行條件判斷語句,看其結果是true還是false

如果是false,循環(huán)結束

如果是true,循環(huán)繼續(xù)執(zhí)行

⑤回到②繼續(xù)

do while語句與while很相似,只不過do while語句是先執(zhí)行循環(huán)體語句后進行條件判斷

此循環(huán)語句使用的較其他兩種較少,一般是在一些小游戲(猜數(shù)字,三子棋)中使用

  • for循環(huán)

語法結構:

for (表達式1; 表達式2; 表達式3)
{
        語句;
}

首先要強調(diào)兩點:

  1. 表達式1、表達式2和表達式3之間是用分號“ ;”隔開的,千萬不要寫成逗號。

  2. for(表達式1;表達式2;表達式3)的后面千萬不要加分號,很多新手都會犯這種錯誤——會情不自禁地在后面加分號。

    因為 for 循環(huán)只能控制到其后的一條語句,而在C語言中分號也是一個語句——空語句。所以如果在后面加個分號,那么 for 循環(huán)就只能控制到這個分號,下面大括號里面的語句就不屬于 for 循環(huán)了。

執(zhí)行流程:

//求解表達式1。
//求解表達式2。若其值為真,則執(zhí)行 for 語句中指定的內(nèi)嵌語句,然后執(zhí)行第3步;若表達式2值為假,則結束循環(huán),轉到第5步。
//求解表達式3。
//轉回上面第2步繼續(xù)執(zhí)行。
//循環(huán)結束,執(zhí)行 for 語句下面的語句。

從這個執(zhí)行過程中可以看出,“表達式1”只執(zhí)行一次,循環(huán)是在“表達式2”“表達式3”和“內(nèi)嵌語句”之間進行的。

for循環(huán)的最簡單形式:

for (循環(huán)變量賦初值; 循環(huán)條件; 循環(huán)變量增值)
{
    語句;
}

下面我們使用for循環(huán)寫一個簡單的代碼

例:<求 1+2+3+4+…+100 的總和。>

# include 
int main(void)
{
    int i;
    int sum = 0;  //
    for (i=1; i<=100; ++i)  //++是自加的意思, ++i相當于i = i + 1
    {
        sum = sum + i;  /*等價于sum += i;但是不建議這么寫, 因為sum = sum + i看起來更清楚、更舒服*/
    }
    printf("sum = %d\\n", sum);
    return 0;
}

三種循環(huán)的區(qū)別:

for循環(huán)和while循環(huán)先判斷條件是否成立,然后決定是否執(zhí)行循環(huán)體(先判斷后執(zhí)行)

do…while循環(huán)先執(zhí)行一次循環(huán)體,然后判斷條件是否成立,是否繼續(xù)執(zhí)行循環(huán)體(先執(zhí)行后判斷)

  • 代碼規(guī)范化

1)if、else、for、while、do 都只能控制到其后的一條語句,如果要控制多條語句必須加大括號 {}。但基于代碼規(guī)范化,if、else、for、while、do 后面的執(zhí)行語句不論有多少行,就算只有一行也要加 {}。

2)像 if、for、while 等關鍵字之后應留一個空格再跟左括號 (,以突出關鍵字。

此外上面的程序還有一個知識點要跟大家說一下:從功能上講, for(i=1; i<=100;++i)完全可以寫成 for(i=1; i<101; ++i),而且建議大家盡量使用這種寫法。也就是說,循環(huán)語句的循環(huán)條件盡量寫成半開半閉的,不管是 for 循環(huán)還是 while 循環(huán)。

for(i=1; i<101; ++i)實際上是 1≤i<101,是半開半閉的;而 for(i=1; i<=100; ++i)實際上是 1≤i≤100,是全閉的。那么為什么建議使用半開半閉的呢?因為如果寫成 i<=100 的話,那么每次判斷的時候都要判斷兩次,即 i<100 和 i==100,而寫成 i<101 的話每次只需要判斷一次。

也許有人說:程序在執(zhí)行 i<=100 的時候不是將它轉換成 i<100||i==100 嗎?這樣由“短路或”的知識可知,如果前面的為真那么后面的不就不會執(zhí)行了嗎?這樣不也是判斷一次嗎?不是這樣的,系統(tǒng)是不會將 i<=100 轉換成 i<100||i==100 的,每次判斷的時候 i<100 和 i==100 都要判斷。

但是寫成半開半閉也有一個問題,就是會影響對代碼的理解。有時候?qū)懗扇]的區(qū)間理解起來才順暢,而寫成半開半閉反而不易理解,比如 `<=`右邊是變量或表達式的時候。這時候要以可讀性為第一要素,即哪種好理解就使用哪種?,F(xiàn)在 CPU 速度那么快,也不在乎那點效率。所以前面說“盡量”,沒有要求一定要那樣寫。
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 指令
    +關注

    關注

    1

    文章

    604

    瀏覽量

    35579
  • C語言
    +關注

    關注

    180

    文章

    7581

    瀏覽量

    135541
  • 代碼
    +關注

    關注

    30

    文章

    4694

    瀏覽量

    68075
收藏 人收藏

    評論

    相關推薦

    C語言基礎知識(5)--循環(huán)語句

    C語言基礎知識(5)--循環(huán)語句
    的頭像 發(fā)表于 06-15 10:18 ?1946次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>基礎知識(5)--<b class='flag-5'>循環(huán)</b>語句

    C語言中for循環(huán)的用法和應用 C語言中for循環(huán)與while循環(huán)的區(qū)別

    C語言中的循環(huán)結構時,for循環(huán)是最常用的一種。它允許重復執(zhí)行一段代碼,直到滿足特定條件為止。
    發(fā)表于 08-18 16:33 ?2764次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>中for<b class='flag-5'>循環(huán)</b>的用法和應用 <b class='flag-5'>C</b><b class='flag-5'>語言</b>中for<b class='flag-5'>循環(huán)</b>與while<b class='flag-5'>循環(huán)</b>的區(qū)別

    C語言循環(huán)結構的使用方法

    詳細介紹了C語言while循環(huán)結構、do-while循環(huán)結構、for循環(huán)結構、循環(huán)退出語句的語法
    發(fā)表于 11-02 11:26 ?1317次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b><b class='flag-5'>循環(huán)</b>結構的使用方法

    C語言for循環(huán)的用法和注意事項

    C 語言是一種廣泛使用的編程語言,它具有簡潔、高效、靈活的特點。C 語言中有很多控制流程的語句,其中 for
    的頭像 發(fā)表于 11-20 18:27 ?1992次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>for<b class='flag-5'>循環(huán)</b>的用法和注意事項

    C語言入門教程-if語句和while循環(huán)

    if語句和while循環(huán) C語言中,if語句和while循環(huán)都會用到布爾表達式。下面是一個使用if語句的簡單例子: #include
    發(fā)表于 07-29 10:48 ?8482次閱讀

    C++語言基礎講解視頻do while循環(huán)語句

    C++語言基礎講解視頻do while循環(huán)語句
    發(fā)表于 01-14 15:32 ?5次下載

    C語言教程之循環(huán)顯示隨機數(shù)問題

    C語言教程之循環(huán)顯示隨機數(shù)問題,很好的C語言資料,快來學習吧。
    發(fā)表于 04-25 15:03 ?0次下載

    C++語言程序設計時如何控制語句?

    本文檔的主要內(nèi)容詳細介紹的是C++語言程序設計時如何控制語句?內(nèi)容包括了1 C++語句概述2 if語句實現(xiàn)選擇結構3 switch語句實現(xiàn)多分支
    發(fā)表于 09-20 14:51 ?2次下載
    <b class='flag-5'>C</b>++<b class='flag-5'>語言</b>程序設計時如何控制語句?

    C語言程序設計教程之如何設計循環(huán)結構

    本文檔的主要內(nèi)容詳細介紹的是C語言程序設計教程之如何設計循環(huán)結構主要內(nèi)容包括了:1 while語句2 do-while語句3 for 語句4 break、continue和goto語句
    發(fā)表于 10-26 16:48 ?0次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>程序設計教程之如何設計<b class='flag-5'>循環(huán)</b>結構

    C語言教程之使用循環(huán)結構設計C語言程序的資料說明

    本文檔詳細介紹的是C語言教程之使用循環(huán)結構設計C語言程序的資料說明主要內(nèi)容包括了:1.while循環(huán)
    發(fā)表于 02-15 11:27 ?2次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>教程之使用<b class='flag-5'>循環(huán)</b>結構設計<b class='flag-5'>C</b><b class='flag-5'>語言</b>程序的資料說明

    C語言的3種循環(huán)結構分析

    C語言循環(huán)結構有for循環(huán)、while循環(huán)、do循環(huán)和goto
    的頭像 發(fā)表于 05-20 13:43 ?1.1w次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>的3種<b class='flag-5'>循環(huán)</b>結構分析

    從零開始跟我學C語言之分支結構(下)

    Hi!這里是漁火。今天我們繼續(xù)來講C語言分支結構。在C語言里,可以使用if-else實現(xiàn)分支
    的頭像 發(fā)表于 02-07 09:27 ?739次閱讀

    C語言循環(huán)分支

    我們大家都知道,c語言是一門** 結構化 **的程序設計語言,程序的運行都是以某種結構和順序為骨架去執(zhí)行的,那么本期就向大家介紹一下c語言
    的頭像 發(fā)表于 02-21 15:32 ?864次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>的<b class='flag-5'>循環(huán)</b>與<b class='flag-5'>分支</b>

    C語言基礎篇--選擇/順序/循環(huán)結構

    讀取更多技術文章,請掃碼關注前言在C語言中,按照程序的執(zhí)行流程不同,分為順序結構、分支結構和循環(huán)結構。多么復雜的邏輯事物都是由這三個結構組成。順序結構順序結構是最簡單的一種流程結構,它
    的頭像 發(fā)表于 04-02 11:00 ?1340次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>基礎篇--選擇/順序/<b class='flag-5'>循環(huán)</b>結構

    c語言在while中嵌套if循環(huán)

    C語言是一種廣泛使用的面向過程編程語言,它提供了許多控制結構來幫助程序員實現(xiàn)復雜的邏輯和流程控制。其中,while循環(huán)和if語句是非常常見和重要的控制結構。本文將詳細介紹
    的頭像 發(fā)表于 11-22 10:09 ?4656次閱讀