1樓:匿名使用者
沒有表示式1,如果迴圈變數在前面初始化了,不會有任何問題
沒有3的話,如果也沒有在迴圈體內修改迴圈變數的值,往往是死迴圈
2樓:匿名使用者
表示式1和3是可選的 表示式2必須要有,,, 是什麼情況呢 反正就是每次迴圈結束 判斷一下表示式2 真就繼續走 假就跳出 至於你還能不能跳出來了 那就看for裡面的東西了
c語言中for(表示式1; ;表示式3)可理解為?
3樓:烏金生宣碧
for(表示式1;表示式2;表示式3)
程式執行時,先執行表示式1.
若表示式2為真,則執行for迴圈體中的語句一次,再執行表示式3。接著再繼續回去執行表示式2。再執行for迴圈體中的語句一次,再執行表示式3。。。
如此迴圈下去,直到表示式2為假時,結束迴圈,執行for語句下面的語句。
上面是一種情況。
另一種情況
程式執行時,先執行表示式1
若表示式2為假時,迴圈直接結束。執行for迴圈下面的語句。
當省略表示式2時。可能造成無限迴圈,也就是死迴圈。
舉個例子:
for(i=0;;i++)
除錯執行之後,它會無限次執行for語句。
也就是說,執行i=0,然後沒有表示式2,編譯器預設為真,就執行for語句的printf(),然後再執行i遞增一次。
本來接下去要執行表示式2,現在省略了,編譯器預設為真,直接執行for語句printf(),再執行i遞增一次。。如此迴圈下去。。
這樣就變成了死迴圈。。永不退出。。
接下來,不省略表示式2的時候。
for(i=0;i<5;i++)
除錯執行之後,可以看見,只列印出了5次「這是一個不省略表示式2的迴圈!」
因為表示式2控制了列印次的次數。所以,一般表示式2是用來設定控制迴圈的條件。
要明白,通常
表示式1是用來為變數賦初值,表示式2設定控制迴圈的條件,表示式3改變迴圈變數的值。
多動手操作就會明白了。。。
4樓:李蕊智雲
for(表達
式1;表示式2
;表示式3)
表示式1表示執行一次表示式1,
表示式2(就是表示式1後面的)為控制表示式,表示式2為空表示這個式子恆為真,既然是真,那如果迴圈體裡沒有退出的判斷條件的話這個迴圈將會永遠執行!!
然後執行迴圈體(這裡你沒寫,就是在for迴圈下面的語句或者複合語句),然後執行表示式3(一般是更新部分),
然後繼續執行迴圈體,,表示式3...
迴圈體,表示式3...
c語言for語句
5樓:倒黴熊
for中三個語句都是可以省略了
例如for(; ;)
這樣的寫法也是正確的。
你的上面是雙重迴圈,如果第二個賦初值提出來放在 第一個for迴圈上面 和 放在第二個for中賦初值是不相同的。
關鍵看你想要的是什麼?
6樓:匿名使用者
1) for迴圈中的「表
達式1(迴圈變數賦初值)」、「表示式2(迴圈條件)」和「表示式3(迴圈變數增量)」都是選擇項, 即可以預設,但「;」不能預設。
2) 省略了「表示式1(迴圈變數賦初值)」, 表示不對迴圈控制變數賦初值。
3) 省略了「表示式2(迴圈條件)」, 則不做其它處理時便成為死迴圈。
例如:for(i=1;;i++)sum=sum+i;
相當於:
i=1;
while(1)
4) 省略了「表示式3(迴圈變數增量)」, 則不對迴圈控制變數進行操作,這時可在語句體中加入修改迴圈控制變數的語句。
例如:for(i=1;i<=100;)
5) 省略了「表示式1(迴圈變數賦初值)」和「表示式3(迴圈變數增量)」。
例如:for(;i<=100;)
相當於:
while(i<=100)
6) 3個表示式都可以省略。
例如:for(;;)語句
相當於:
while(1)語句
7) 表示式1可以是設定迴圈變數的初值的賦值表示式,也可以是其他表示式。
例如:for(sum=0;i<=100;i++)sum=sum+i;
8) 表示式1和表示式3可以是一個簡單表示式也可以是逗號表示式。
for(sum=0,i=1;i<=100;i++)sum=sum+i;
或:for(i=0,j=100;i<=100;i++,j--)k=i+j;
9) 表示式2一般是關係表示式或邏輯表示式,但也可是數值表示式或字元表示式,只要其值非零,就執行迴圈體。
例如:for(i=0;(c=getchar())!=』\n』;i+=c);
又如:for(;(c=getchar())!=』\n』;)
printf(「%c」,c);
7樓:
for中的三個表示式分別表示 初始條件 終止條件 和 變化條件
三個都不一定需要,但是在你的程式中可以有。
比如for(;;)就是可以沒有的情況,和while(1)等價
8樓:擋路
可能是編譯器問題,一般來說不賦初值是可以的,如果for裡面三個都是空的話,那就是無限迴圈
c語言for(表示式1,表示式2,表示式3)語句 中表示式2為空語句則變成死迴圈,那麼這裡的空語句為真還是假
9樓:倒黴熊
這裡「表示式2為空語句則變成死迴圈」這樣說不完整正確。
例如下面這個迴圈:
int i=0;
for(i=0;;i++)
這就不是死迴圈,這裡將for的第二個表示式的判斷移至迴圈體內,藉助break來結束迴圈。
這裡的空語句可以理解為永真,因為沒有進行任何的判斷,所以可以這樣理解。
10樓:匿名使用者
你都說了變成死迴圈了。那你告訴我是真還是假呢。。
肯定只有是真,for迴圈裡面的內容才會執行啊。
11樓:匿名使用者
首先for語句中各表達
式是通過分號隔開的,通過表示式1確定迴圈初值,表示式2確定判斷迴圈條件,表示式3可用於設定增值;現表示式2為空語句,表示不做迴圈判斷直接執行迴圈體內語句,也可以認為是表示式2預設為真。
12樓:匿名使用者
糾正一個錯語: for(表示式1; 表示式2; 表示式3),裡面是分號,不是逗號。
13樓:瑞峰
給的表示式太原始,最好拿出幾個不同的例子出來
14樓:
你就好像問,這裡沒有數,那麼這個沒有的數是大於零,還是不大於零。
15樓:匿名使用者
for(;;)則變成死迴圈,空語句還有真和假?
c語言 for的多重迴圈是怎麼一回事啊 能給小弟詳細講解以下嗎?
16樓:匿名使用者
for(表示式1;表示式2;表達3)
語句:表示式1 通常用來給迴圈變數賦初值,一般是賦值表示式。也允許在for語句外給迴圈變數賦初值,此時可以省略該表示式。
表示式2 通常是迴圈條件,一般為關係表示式或邏輯表示式。
表示式3 通常可用來修改迴圈變數的值,一般是賦值語句。
這三個表示式都可以是逗號表示式, 即每個表示式都可由多個表示式組成。三個表示式都是任選項,都可以省略。
一般形式中的「語句」即為迴圈體語句。for語句的語義是:
1.首先計算表示式1的值。
2.再計算表示式2的值,若值為真(非0)則執行迴圈體一次, 否則跳出迴圈。
3.然後再計算表示式3的值,轉回第2步重複執行。在整個for迴圈過程中,表示式1只計算一次,表示式2和表示式,3則可能計算多次。
迴圈體可能多次執行,也可能一次都不執行。for 語句的執行過程如圖所示。
void main()
用for語句計算s=1+2+3+...+99+100
int n,s=0;
for(n=1;n<=100;n++)
s=s+n;
printf("s=%d\n",s);
本例for語句中的表示式3為n++,實際上也是一種賦值語句,相當於n=n+1,以改變迴圈變數的值。
void main()
用for語句修改例題。從0開始,輸出n個連續的偶數。
int a=0,n;
printf("\n input n: ");
scanf("%d",&n);
for(;n>0;a++,n--)
printf("%d ",a*2);
本例的for語句中,表示式1已省去,迴圈變數的初值在for語句之前由scanf語句取得,表示式3是一個逗號表示式,由a++,n-- 兩個表示式組成。每迴圈一次a自增1,n自減1。a的變化使輸出的偶數遞增,n的變化控制循次數。
在使用for語句中要注意以下幾點
1.for語句中的各表示式都可省略,但分號間隔符不能少。如:for(;表示式;表示式)省去了表示式1。for(表示式;;表示式)省去了表示式2。
for(表示式;表示式;)省去了表示式3。for(;;)省去了全部表示式。
2.在迴圈變數已賦初值時,可省去表示式1,如例3.27即屬於這種情形。如省去表示式2或表示式3則將造成無限迴圈, 這時應在迴圈體內設法結束迴圈。例題即屬於此情況。
void main()
} int a=0,n;
printf("\n input n: ");
scanf("%d",&n);
for(;n>0;)
本例中省略了表示式1和表示式3,由迴圈體內的n--語句進行迴圈變數n的遞減,以控制迴圈次數。
void main()
}int a=0,n;
printf("\n input n: ");
scanf("%d",&n);
for(;;)
本例中for語句的表示式全部省去。由迴圈體中的語句實現迴圈變數的遞減和迴圈條件的判斷。當n值為0時,由break語句中止迴圈,轉去執行for以後的程式。
在此情況下,for語句已等效於while( 1)語句。如在迴圈體中沒有相應的控制手段,則造成死迴圈。
3.迴圈體可以是空語句。
#include"stdio.h"
void main()
本例中,省去了for語句的表示式1,表示式3也不是用來修改迴圈變數,而是用作輸入字元的計數。這樣, 就把本應在迴圈體中完成的計數放在表示式中完成了。因此迴圈體是空語句。
應注意的是,空語句後的分號不可少,如缺少此分號,則把後面的printf 語句當成迴圈體來執行。反過來說,如迴圈體不為空語句時, 決不能在表示式的括號後加分號, 這樣又會認為迴圈體是空語句而不能反覆執行。這些都是程式設計中常見的錯誤,要十分注意。
4.for語句也可與while,do-while語句相互巢狀,構成多重迴圈。以下形成都合法的巢狀。
(1)for()…}
(2)do
…}while();
(3)while()…}
(4)for()
}void main()
printf("\n");}}
17樓:誒戈兒
巢狀嘛,從最外面的迴圈開始第一次迴圈,遇到下級for迴圈的時候,迴圈這級迴圈一次,如果該迴圈內不再有迴圈for,那麼就要把這級迴圈的次數全不迴圈完畢後跳到外迴圈中進行第二次迴圈,再執行內部for迴圈,依次迴圈完畢為止
在c語言中,if語句後面的else語句中能不能巢狀for迴圈
在c語言中,if.else分支語句與for迴圈語句和其他迴圈及分支都是可以巢狀使用的,也就是說在if語句後面和else語句後面都是可以使用for迴圈語句的,例如 給定一個整數n,判斷這個整數n是不是小於2,如果小於2則提示給定數值不在有效範圍內,否則計算從1到n的累加和。int sum 0 if n...
在c語言中在for迴圈語句中當執行到continue語
出第一次執行表示式1之外 之後的循序是 表示式2 for語句塊 遇到continue後跳出當前迴圈 表示式3 表示式2 for語句塊 遇到continue後跳出當前迴圈 表示式3 表示式2 如果執行到continue語句時是直接去執行表示式2 而不是去執行表示式3 那麼for語句就很有可能陷入死迴圈...
C語言可以再for語句中宣告變數嗎
可以的,在for語句的迴圈體的大括號之內的最前面可以宣告變數,作用域僅在大括號內,出迴圈就被捨棄,是屬於迴圈體的臨時變數。for i 0 i 10 i c語言 可以在for裡面同時定義變數嗎?可以的,比如 include void main 但是注意 在for裡面定義的區域性變數只有在for語句塊裡...