国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

lei___ / 3707人閱讀

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

目錄

3.2 for循環

3.2.1?語法

3.2.2 break與continue在for循環中

3.2.3 for語句的循環控制變量

3.2.4 一些for循環的變種

(1)死循環

(2)兩段有趣的代碼

(3) 多個變量控制循環

注意:


3.2 for循環

我們已經知道了while循環,但是我們為什么還要一個for循環呢?

首先來看看for循環的語法:

3.2.1?語法

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

表達式1

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

表達式2

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

表達式3

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

循環語句

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

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

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

使用for循環在屏幕上打印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循環中

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

3.2.3 for語句的循環控制變量

建議:

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

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

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

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

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

3.2.4 一些for循環的變種

(1)死循環

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

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

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

(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輸出的次數,執行程序,程序的執行結果分別是100、10。為什么會發生這種結果呢?下面我來給大家簡單分析一下!

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

此時已經輸出了10個hehe,然后進入了外層循環的條件更新,i++,i變為1,i<10,進入了第二次的內層循環。

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

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

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

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

(3) 多個變量控制循環

#includeint main(){	//代碼4-使用多余一個變量控制循環	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)了,就跳出了循環,此時只進行了2次循環,打印出了兩個hehe。

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

注意:

很多同學喜歡這樣寫for循環語句:

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

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

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

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

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

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/123079.html

相關文章

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

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

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

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

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

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

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

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

    ytwman 評論0 收藏0

發表評論

0條評論

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