成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

史上最強C語言教程----分支和循環(huán)(4)

lei___ / 3715人閱讀

摘要:表達式表達式為調整部分,用于循環(huán)條件的調整。語句的循環(huán)控制變量建議不可在循環(huán)體內修改循環(huán)變量,防止循環(huán)失去控制。建議語句的循環(huán)控制變量的取值采用前閉后開區(qū)間寫法。注意當條件初始化條件判斷條件更新都省略后,程序將進入死循環(huán)。

目錄

3.2 for循環(huán)

3.2.1?語法

3.2.2 break與continue在for循環(huán)中

3.2.3 for語句的循環(huán)控制變量

3.2.4 一些for循環(huán)的變種

(1)死循環(huán)

(2)兩段有趣的代碼

(3) 多個變量控制循環(huán)

注意:


3.2 for循環(huán)

我們已經知道了while循環(huán),但是我們?yōu)槭裁催€要一個for循環(huán)呢?

首先來看看for循環(huán)的語法:

3.2.1?語法

for(表達式1; 表達式2; 表達式3)     循環(huán)語句;

表達式1

表達式1為初始化部分,用于初始化循環(huán)變量的。我們稱之為條件初始化。

表達式2

表達式2為條件判斷部分,用于判斷循環(huán)時候終止。我們稱之為條件判斷。

表達式3

表達式3為調整部分,用于循環(huán)條件的調整。我們稱之為條件更新。

循環(huán)語句

每一次進入循環(huán)條件判斷通過后需要執(zhí)行的語句,如果想要執(zhí)行多條語句需要用{}將我們需要要執(zhí)行的多條語句括起來形成一個語句塊。

從上面可以看出:for語句與while語句與do while語句不同的地方在于它的條件初始化、條件判斷、條件更新更為緊湊,都在同一個()內,方便我們進行后續(xù)的修改,而do while 與while語句這三個部分相隔就比較遠,不便于進行修改,也因此我們使用for循環(huán)的頻率更高。

下面給大家舉個例子吧,幫助大家了解一下for循環(huán)語句的使用!

使用for循環(huán)在屏幕上打印1~10的數字。

#include int main(){	int i = 0;	//for(i=1/*初始化*/; i<=10/*判斷部分*/; i++/*調整部分*/)	for (i = 1; i <= 10; i++)	{		printf("%d ", i);	}	return 0;}

3.2.2 break與continue在for循環(huán)中

通過對比while和do while,它們在使用continue和break時,唯一的區(qū)別點在于for在執(zhí)行continue后進入的是條件更新語句,而while與do while則進入條件判斷語句,然后進入下一次循環(huán),而使用break時兩者都一樣,都是跳出循環(huán)。?

3.2.3 for語句的循環(huán)控制變量

建議:

1. 不可在for 循環(huán)體內修改循環(huán)變量,防止 for 循環(huán)失去控制。

2. 建議for語句的循環(huán)控制變量的取值采用“前閉后開區(qū)間”寫法。原因就是左閉右開可以清楚的看出循環(huán)次數。(當然,這并不是強制的,有時也應該根據使用場景進行靈活變通)

下面給出一個例子,幫助大家理解第二條建議:

int i = 0;//前閉后開的寫法for(i=0; i<10; i++){}//兩邊都是閉區(qū)間for(i=0; i<=9; i++){}

觀察上面兩個例子,前者采用的是左閉右開,后者采用的是完全閉區(qū)間,而前者很容易就能看出該循環(huán)的循環(huán)次數為10次,即10減去0,而后者則需要9-0+1才能得到真正的循環(huán)次數,雖然左閉右開不是強制規(guī)定的,但卻是眾多程序員所極力推薦的,因為這樣寫的話將會有更好的閱讀體驗,也有助于后續(xù)的調試。

3.2.4 一些for循環(huán)的變種

(1)死循環(huán)

#include int main(){    //代碼1    for (;;)    {        printf("hehe/n");    }    //for循環(huán)中的初始化部分,判斷部分,調整部分是可以省略的,但是不建議初學時省略,容易導致問題。

條件初始化,條件判斷,條件更新都是可以根據具體需要進行省略的,但我們往往并不推薦進行省略,因為加上之后程序將有更加良好的閱讀體驗,而且完全省略后將其寫在其它地方的話,相當于我們也放棄了for循環(huán)的真正作用,即拋棄了我們使用for循環(huán)的初衷,所以并不推薦大家去省略。

注意:當條件初始化、條件判斷、條件更新都省略后,程序將進入死循環(huán)。

(2)兩段有趣的代碼

//代碼1#includeint main(){    int i = 0;    int j = 0;    int count = 0;    //這里打印多少個hehe?    for (i = 0; i < 10; i++)    {        for (j = 0; j < 10; j++)        {            printf("hehe/n");            count++;        }    }    printf("%d/n", count);}
//代碼2#includeint main(){    int i = 0;    int j = 0;    int count = 0;    //如果省略掉初始化部分,這里打印多少個hehe?    for (; i < 10; i++)    {        for (; j < 10; j++)        {            printf("hehe/n");            count++;        }    }    printf("%d/n", count);}

在這兩段代碼中,用count進行保存hehe輸出的次數,執(zhí)行程序,程序的執(zhí)行結果分別是100、10。為什么會發(fā)生這種結果呢?下面我來給大家簡單分析一下!

先看這兩段代碼,唯一的區(qū)別就是后者在二層循環(huán)中for的括號中省略了條件初始化語句,這會造成什么影響呢?我們首先看第一段代碼:首先賦初值i=0;然后進行條件判斷,i<10,進入到了第二層for循環(huán),第二層for循環(huán)首先對j進行賦值操作,然后進行條件判斷j<10,輸出hehe,count變?yōu)?,然后進行條件更新,接著又重新進入了條件判斷,依次循環(huán),內層循環(huán)結束后將跳出。

此時已經輸出了10個hehe,然后進入了外層循環(huán)的條件更新,i++,i變?yōu)?,i<10,進入了第二次的內層循環(huán)。

由于此時存在條件初始化語句j又被賦值為0,重復上面的過程,又再次輸出了10個hehe,繼續(xù)重復上面的循環(huán),最終將打印10*10=100個hehe。

看代碼2,代碼2中由于不存在條件更新語句,所以在內層循環(huán)執(zhí)行完一次之后,當i賦值為1后進入第二次內層循環(huán)時,此時j的值未曾改變,依舊是10,所以內層循環(huán)在條件判斷時直接跳出,所以最終只能打印10個hehe。

總的來說,就是代碼2相比代碼1少了條件初始化語句,所以在循環(huán)過后j的值沒有改變,依舊是上一次循環(huán)結束后的值,即10,所以在內層循環(huán)條件判斷時直接不滿足跳出。

大家看到這相信大家也明白了,給大家展示這段代碼的意義就是希望大家不要對for語句中的三個部分進行省略!因為錯誤的省略有時會帶來嚴重的錯誤,使我們的代碼無法實現我們想要它真正實現的功能。

(3) 多個變量控制循環(huán)

#includeint main(){	//代碼4-使用多余一個變量控制循環(huán)	int x, y;	for (x = 0, y = 0; x < 2 && y < 5; ++x, y++)	{		printf("hehe/n");	}	return 0;}

條件運行結果大家也看到了,最終只打印了兩個hehe,為什么會這樣呢?因為當x=2時就不滿足條件判斷語句(判斷滿足的條件是x<2并且x<5)了,就跳出了循環(huán),此時只進行了2次循環(huán),打印出了兩個hehe。

這個地方呢,給大家拓展一下,如果我們把&&改為||會怎么樣呢?答案是會執(zhí)行5次循環(huán),因為如果當x =5時就不滿足條件判斷語句(判斷滿足的條件是x<2或者x<5滿足一個條件即可)了,就跳出了循環(huán),此時只進行了5次循環(huán),打印5個hehe。

注意:

很多同學喜歡這樣寫for循環(huán)語句:

#includeint main(){	for (int i = 0; i < 10; i++)	{		pritnf("hehe/n");	}	return 0;}

這樣寫呢,就是進行條件初始化的時候進行條件定義,這樣寫不是不行,但是此時要注意i的作用域,即只在這個for循環(huán)語句內有效,當然,我們并不推薦這種寫法,我們推薦的是下面這種寫法:

#includeint main(){	int i = 0;	for (i = 0; i < 10; i++)	{		pritnf("hehe/n");	}	return 0;}

為什么會推薦這種寫法呢?因為我們后面可能會對i進行判斷,判斷這個循環(huán)是否完全完成,或者判斷是否因為某些異常原因而終止了,這種代碼相對于上面第一種代碼更為實用,應用范圍更廣,所以推薦大家使用第二種!

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/123079.html

相關文章

  • 史上最強C語言教程----分支循環(huán)(5--終篇)

    摘要:目錄循環(huán)循環(huán)語句的語法語句的語法執(zhí)行流程執(zhí)行流程語句的特點語句的特點循環(huán)中的和循環(huán)中的和練習練習計算的階乘。多層循環(huán)這種情況使用是達不到目的的。它只能從最內層循環(huán)退出到上一層的循環(huán)。 目錄 3.3 do...while()循環(huán) 3.3.1 do語句的語法: 3.3.2 執(zhí)行流程 3.3.3...

    Reducto 評論0 收藏0
  • 史上最強C語言教程----函數(1)

    摘要:無論實參是何種類型的量,在進行函數調用時,它們都必須有確定的值,以便把這些值傳送給形參。形式參數當函數調用完成之后就自動銷毀了。函數的調用傳值調用函數的形參和實參分別占有不同內存塊,對形參的修改不會影響實參。沒有找到找到了下標為 目錄 1.? 函數是什么? 2.??C語言中函數的分類: 2...

    A Loity 評論0 收藏0
  • 一文搞懂 Java 線程中斷

    摘要:判斷目標線程是否被中斷,會清除中斷標記。技術棧線程休眠被中斷,程序退出。示例全部信息輸出并正常退出,只是在方法被中斷并清除標記后手動重新中斷當前線程,然后程序接收中斷信號返回退出。通過以上個中斷示例,相信對線程中斷的概念有了全面的了解。 在之前的一文《如何優(yōu)雅地終止一個線程》中詳細說明了 stop 終止線程的壞處及如何優(yōu)雅地終止線程,那么還有別的可以終止線程的方法嗎?答案是肯定的,它就...

    BDEEFE 評論0 收藏0
  • 深入淺出 Java 中的包裝類

    摘要:前陣子,我們分享了中的基本數據類型轉換這篇文章,對許多粉絲還是有帶來幫助的,今天講一下包裝類的的由來,及自動裝箱拆箱的概念和原理。下面是基本數據類型與對應的包裝類型。 showImg(https://segmentfault.com/img/remote/1460000016537706); 前陣子,我們分享了《Java中的基本數據類型轉換》這篇文章,對許多粉絲還是有帶來幫助的,今天講...

    ytwman 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<