c語言中for與for有什麼不同

時間 2021-10-17 04:47:57

1樓:匿名使用者

對於問題1

我們只討論迴圈:

開始 for (i=0; i<2; i++)

i=0 往下執行 for(j=0; j<2; j++)

j=0往下執行 for(k=0; k<2; k++)

k=0 往下執行 printf(“%d %d %d\n", i, j, k);

輸出 i j k 顯然輸出的是 0 0 0

輸出後執行 k++, k值變為1 與2比較 顯然 k<2 繼續執行 輸出

此時 i=0 j=0 k=1 輸出為 0 0 1

輸出後執行 k++, k值變為2 與2比較 顯然 2<2 為假,跳出k迴圈回到上一級迴圈執行 j++

j=1與2比較 顯然1<2 往下執行(此時i=0 , j=1)再次執行k迴圈int k=0

將k值重新賦值為0 執行輸出 此時 i=0 j=1 k=0 輸出 0 1 0

執行輸出後k++,k值為1與2比較 顯然1<2 繼續 k的迴圈 此時k=2,j=1 i=0

執行輸出為 0 1 1

輸出後k++ ,k值為2與2比較 2<2為假跳出k迴圈 返回j迴圈 返回時k=2,j=1 i=0 執行j++ ,j的值為 2顯然 2<2為假 ,跳出j迴圈 返回i迴圈 此時k=2,j=2 i=0, 執行i++,i值為1 與2比較 顯然1<2 往下執行

i=1,執行 j 迴圈 int j=0 j值變為0

j=0 向下執行 k迴圈 int jk=0 k值變為0

k=0 向下執行輸出 此時 i=1 j=0 k=0 輸出 1 0 0

(此時回到了i=0的開始情況 )

參照前面的分析繼續執行 依次會 輸出 1 0 1

1 1 0

1 1 1

當輸出到 1 1 1 的 時候繼續想下執行k++,k值變為2 與2比較 結果為假回到j迴圈此時 i=1,j=1 ,k=2 ;執行j 迴圈中的j++,j值為2與2比較 結果為假回到i迴圈此時 i=1,j=2 ,k=2 ;執行i 迴圈中的i++,i值為2與2比較 結果為假退出迴圈 此時i=2,j=2 ,k=2;退出迴圈後下下執行結束程式

對於問題2 while(1)就是條件為永真 你用while(3) while(2) 都可以 就是while()函式的語句不停的執行 ,此時只能用跳轉或者break 語句來跳出迴圈

但是while(0)表示永假 即while()裡面的不執行 當然do while()除外 它是先執行後判斷,但是也僅僅執行席次就不在執行了for(;;)裡面空的意思就是條件為永真,沒有退出的判別條件也就是相當於while(1)(習慣用 1 0 表示真假) 當然也可以用break或者跳轉退出迴圈,但是那和for(;;)的判斷無關。 所以for(;;)簡單的講就是條件為永真 迴圈不斷的執行 除非遇到函式內部的跳轉 或者函式裡面巢狀的判斷退出為止

eg : 1>

int i=0;

int j=0;

for(;;) //不停的死迴圈

2>int i=0;

int j=0;

for(;;)

不停的迴圈直到i>10由內部判斷退出迴圈

對於問題3 你只要將 1維理解 和for語句的一維理解透徹 再在此基礎上擴充套件就行了

多維陣列可以分解為多個一維陣列的 多個for的巢狀同樣可以分解為一個一個的迴圈

只要很清晰的知道 陣列下標 與判斷時候條件值的狀態 就好分析了

對於初學者來數 陣列畫圖分析 以**的形式在紙上分析,而迴圈語句同樣的將判斷的條件分解來 在紙上模擬,一步一步的跟進狀態 從簡單的開始慢慢深入 ,不怕麻煩 仔細研究很如意理解的.

2樓:怕用飾訟

for();證明該語句已經結束。for()不是一個完整的表示式,後面還有內容。c語言中用分號來標示表示式的結束。

3樓:匿名使用者

注意:“;”在c語言中代表一條語句,只是這條語句是空語句,不執行任何動作;

有時候寫成for();會造成誤解甚至形成死迴圈for()

for();等價於

for()

4樓:匿名使用者

一般情況下,for()後面必須有;,但如果()中的內容是表示式語句時,如for(n=1,n<100,n++)則後面;就必須去掉;

5樓:邦

你分別除錯下面兩個程式就知道了,輸出sum:

sum=0;

for(i=1;i<=100;i++);

sum=0;

for(i=1;i<=100;i++)

6樓:劉小禎

for()表示迴圈、

for();表示這個語句結束、、

c語言中for(;;)是什麼意思?

7樓:a羅網天下

在c語言中,for語句使用最為靈活,它的一般形式為:

for(表示式1; 表示式2; 表示式3)  語句它的執行過程如下:

先求解表示式1。

求解表示式2,若其值為真(非0),則執行for語句中指定的內嵌語句,然後執行下面第3)步;若其值為假(0),則結束迴圈,轉到第5)步。

求解表示式3。

轉回上面第2)步繼續執行。

迴圈結束,執行for語句下面的一個語句。

程式執行過程如下圖所示:

8樓:

當然會死迴圈了。

for後的圓括號中,第一個分號前的內容是執行第一次迴圈前執行的,第二個分號前的內容是每次執行前都要判斷的(如果該處表示式的值為真,那麼執行迴圈體,如果為假,那麼就跳出迴圈體),第二個分號後的內容是每執行完一次迴圈體後執行的

你這裡中間沒有限制條件(第2個分號前)(有限制條件也要該條件必然會變成真,迴圈才會停止),所以不會停。另一種停止的方法在迴圈體中使用break跳出迴圈體。

9樓:匿名使用者

for(;;)

相當於while(1)

即不設初值,不判斷條件,迴圈變數不增值,無終止的迴圈。

那個程式會死迴圈

10樓:匿名使用者

for(;;)語句相當於

while(1)語句

即不設初值,不判斷條件,迴圈變數不增值。無終止地執行迴圈體。

也就是一直輸出a.

11樓:安徽新華電腦專修學院

for 是迴圈的一種 ...

用來執行限制次數的迴圈 ...

12樓:季茉お豳煜

分號前後可以沒有引數,但是必須要定義並且有條件控制它不然就是死迴圈

13樓:識得秋風面

死迴圈,不過在一些競賽的程式中經常出現

c語言裡for(;1;)是什麼意思?

14樓:學雅思

永遠為真的for迴圈語句。

迴圈語句由迴圈體及迴圈的判定條件兩部分組成,其表示式為:for(單次表示式;條件表示式;末尾迴圈體)。

表示式皆可以省略,但分號不可省略,因為“;”可以代表一個空語句,省略了之後語句減少,即為語句格式發生變化,則編譯器不能識別而無法進行編譯。

擴充套件資料

for迴圈小括號裡第一個“;”號前為一個為不參與迴圈的單次表示式,其可作為某一變數的初始化賦值語句, 用來給迴圈控制變數賦初值; 也可用來計算其它與for迴圈無關但先於迴圈部分處理的一個表示式。

“;”號之間的條件表示式是一個關係表示式,其為迴圈的正式開端,當條件表示式成立時執行中間迴圈體。

執行的中間迴圈體可以為一個語句,也可以為多個語句,當中間迴圈體只有一個語句時,其大括號{}可以省略,執行完中間迴圈體後接著執行末尾迴圈體。

執行末尾迴圈體後將再次進行條件判斷,若條件還成立,則繼續重複上述迴圈,當條件不成立時則跳出當下for迴圈。

15樓:一口沒水的枯井

1 這是一個省略了初始化表示式和更新表示式,而測試表示式永遠為真的for迴圈

2 在c語言中,for迴圈的一般形式如下

for(初始化表示式;測試表示式;更新表示式)其中初始化表示式可以省略,其後的分號不可省略,其用來初始化一個或多個變數

測試表示式可以省略,其後的分號不可省略,其返回值為布林型,用來判定迴圈是否終止

更新表示式可以省略,其後的分號不可省略,其用來更新變數3 在c語言中,整型和布林型可以相互轉化

任何不為0的整型強制轉換成布林型為true而0強制轉換成布林型為false

因此在本題中的測試表示式的返回值1轉換為布林型為true4 擴充套件

如果不在迴圈體中終止該迴圈的話,那麼該迴圈就是一個死迴圈在迴圈體中終止該迴圈的方法是使用break;語句

16樓:匿名使用者

for 是迴圈語句

例如for(int a=1;a<=10;a++)

/* 先定義一個變數且初始化, 然後定義表示式 a<=10(a小於等於10), a++是a自加相當於a=a+1 這句語句的意思就是 定義整型a=1 當a小於等於10時 for執行迴圈 並且a自加 當a=10時迴圈停止*/

17樓:匿名使用者

這是死迴圈,,

for(;;)

兩個分號直接的表示式是判斷條件,1 為真,所以是死迴圈

18樓:匿名使用者

就是一個無限迴圈語句,在c裡面,只要不為0就是true,0就是false,因此你給了一個1,就是一直為true的去做迴圈~

19樓:匿名使用者

中間沒有break就是死迴圈了,1是條件恆為真

20樓:匿名使用者

哈哈,這簡單!就是代表一直執行迴圈,直到用break;等中斷;用法和while(1)相同

c語言中for(i=0;i<5;i++)與for(i=0;i<5;++i)有區別嗎?

21樓:天枰非官

沒有區別,i++和++i返回值並不同但這樣迴圈不使用這個返回值

22樓:gta小雞

效果上沒有區別,速度上字首++比字尾++快一點

23樓:匿名使用者

你把兩個迴圈執行一下就知道了

24樓:吾不告訴你

有區別,i++的話先迴圈再加一,++i的話先加一再迴圈

25樓:巧逸美祁白

i++是先使用變數的值,後加1;

++i是先自加1,然後使用變數的值。

本例中:

str[j++]=str[i];

相當於:先賦值,後自加。

str[j]=str[i];

j++;

在c語言中,for語句的後面加分號和不加分號有何不同?

26樓:種完太陽吃牛大

for迴圈後面加分號,表示這個迴圈是空語句,除了執行for()括號裡的,什麼都不幹。然後就執行下一行,也就是你的prinf,printf和for迴圈沒關係。

如果不加分號,那for迴圈後面的printf語句就是for迴圈的一部分,跟著for一起執行,但前提是for迴圈裡的條件要滿足。執行到第二個for時a已經等於3了,你要b=a,那b怎麼可能小於3 。所以後面的for迴圈不滿足條件,不執行,同時for裡面的**也不執行。

使用for語句應該注意:

1) for迴圈中的“表示式1(迴圈變數賦初值)”、“表示式2(迴圈條件)”和“表示式3(迴圈變數增量)”都是選擇項,即可以預設,但分號(;)不能預設。

2) 省略了“表示式1(迴圈變數賦初值)”,表示不對迴圈控制變數賦初值。

3) 省略了“表示式2(迴圈條件)”,則不做其它處理時便成為死迴圈。

例如:for( i=1; ; i++ )  sum=sum+i;

c語言中c與s的區別,c語言中 c與 s的有什麼區別?

mxx米小夕 c語言中 c格式符表示輸出的是字元 s格式符表示輸出的是字串。c語言基本構成 1.資料型別 c的資料型別包括 整型 字元型 實型或浮點型 單精度和雙精度 列舉型別 陣列型別 結構體型別 共用體型別 指標型別和空型別。2.常量與變數 常量其值不可改變,符號常量名通常用大寫。變數是以某識別...

c語言中strlen與sizeof有什麼區別

strlen 是返回所定義字串的長度,而sizeof是用來取得變數或型別所占用的記憶體空間大小的。 strlen 是返回字串的長度。而sizeof,卻是用來取得變數或型別所占用的記憶體大小的。這個a陣列的字串長度為4 末尾的 0是不計入字串長度的 但a是10個單位的char型,它占用的記憶體空間是1...

C語言中的0與0有什麼區別,c語言中“!0”和“!!0”是什麼意思?

蒼飛陽帛蒼 型別不一樣 0是整形 用 d輸入輸出 0 是字元型 用 c輸入輸出 再應用的時候具體運算也不一樣 例如十進位制運算a 10 0 10 自負運算的話b 0 10 58 按 0 的ascii碼值48計算 包昊碩紅藝 在c語言中,0和 0 的區別,有很多.儲存空間方面,整數0可以佔,2位元組 ...