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位元組 ...