與while語句相比for語句更為靈活,不僅可以用于循環(huán)次數(shù)已經(jīng)確定的情況,還可以用于循環(huán)次數(shù)不確定而只給出循環(huán)結(jié)束條件的情況,for語句完全可以代替while語句。
1.for語句的一般形式為:
for(表達(dá)式1;表達(dá)式2;表達(dá)式3)
語句
3個(gè)表達(dá)式的作用:
表達(dá)式1:設(shè)置初始條件,只執(zhí)行1次??梢詾?個(gè),1個(gè)或多個(gè)變量。
表達(dá)式2:是循環(huán)條件表達(dá)式,用來判定是否繼續(xù)循環(huán)。在每次執(zhí)行循環(huán)體之前先執(zhí)行表達(dá)式2。
表達(dá)式3:作為循環(huán)的調(diào)整,例如使循環(huán)變量增值,表達(dá)式3是在執(zhí)行完循環(huán)體之后再執(zhí)行。
2.常用的for語句的形式:
for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值)
語句
例如:
for(i=1;i<100;i++)
sum=sum+i;
①"i=1"是給循環(huán)變量賦初值為1
②"i<100"是指定循環(huán)條件
③"i++"是循環(huán)變量i的值不斷增加1,以便最終滿足終止循環(huán)的條件,使循環(huán)結(jié)束,也就是:循環(huán)變量i的初值為1,循環(huán)變量增量為1,循環(huán)變量最終值是100,每執(zhí)行一次循環(huán),i加1,直到i大于100,就不再執(zhí)行了。
3.for語句的執(zhí)行過程:
(1)求解表達(dá)式1。
(2)求解表達(dá)式2。若此條件表達(dá)式的值為真(非0),則執(zhí)行for語句中的循環(huán)體,然后執(zhí)行第(3)步,若條件表達(dá)式的值為假(0),則循環(huán)結(jié)束,轉(zhuǎn)到第(5)步。
(3)求解表達(dá)式3。
(4)轉(zhuǎn)回(2)繼續(xù)執(zhí)行。
在執(zhí)行完循環(huán)體后,循環(huán)變量的值超過循環(huán)終值,循環(huán)結(jié)束。其規(guī)律為:循環(huán)變量沿著變化的方向超過循環(huán)終值,循環(huán)就結(jié)束了。
(5)循環(huán)結(jié)束,執(zhí)行for語句下面一個(gè)語句。
4.for語句與while語句的改寫
for語句:
for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語句
改寫為while語句:
表達(dá)式1;
while(表達(dá)式2)
{
語句
表達(dá)式3
}
二者無條件等價(jià)。
5.for語句的一些變化
(1)省略表達(dá)式1,即不設(shè)置處置,但是不可以省略表達(dá)式1后面的分號(hào)。
注意:因?yàn)槭÷粤吮磉_(dá)式1,沒有對(duì)循環(huán)變量賦初值,所以為了正常執(zhí)行循環(huán),應(yīng)該在for語句之前給循環(huán)變量賦初值。
int i=1;
for(;i<100;i++)
sum=sum+i;
(2)省略表達(dá)式2,不設(shè)置和檢查循環(huán)條件
此時(shí)循環(huán)將無終止地進(jìn)行下去,也就是表達(dá)式2始終為真。
for(i=1;;i++)
sum=sum+i;
就相當(dāng)于
i=1;
while(1)
{
sum=sum+i;
i++;
}
循環(huán)無終止進(jìn)行,i的值不斷加大,sum的值也不斷累積。
(3)省略表達(dá)式3,但是要另設(shè)法保證循環(huán)可以正常結(jié)束。
for(i=1;i<100;)
{
sum=sum+i;
i++;
}
i++的操作不放在表達(dá)式3的位置,而是作為循環(huán)體的一部分,效果是一樣的,都能使循環(huán)正常結(jié)束。但是如果表達(dá)式3和循環(huán)體中都無此"i++",則循環(huán)將無終止執(zhí)行下去。
(4)只有表達(dá)式2,沒有表達(dá)式1和表達(dá)式3。應(yīng)當(dāng)在for語句之前給循環(huán)變量賦初值,否則循環(huán)無法正常進(jìn)行;在循環(huán)體當(dāng)中使循環(huán)變量增值,否則循環(huán)將無終止執(zhí)行下去。
int i = 1;
for(;i<100;)
{
sum=sum+i;
i++;
}
相當(dāng)于
int i = 1;
while(i<100)
{
sum=sum+i;
i++;
}
(5)省略3個(gè)表達(dá)式
for(;;)
printf("%d",i);
相當(dāng)于
while(1)
printf("%d",i);
即不設(shè)置初值也不判斷循環(huán)條件(認(rèn)為表達(dá)式2為真),循環(huán)變量也補(bǔ)增值,無終止執(zhí)行循環(huán)體語句,顯然這樣做沒有實(shí)用價(jià)值。
(6)表達(dá)式1可以是設(shè)置循環(huán)變量初值的賦值表達(dá)式,也可以是與循環(huán)變量無關(guān)的其他表達(dá)式,表達(dá)式3也可以是與循環(huán)控制無關(guān)的任意表達(dá)式,但無論怎樣寫for語句,都必須使循環(huán)能正常執(zhí)行。
int i = i;
for(sum=0;i<100;i++)
sum=sum+i;
(7)表達(dá)式1和表達(dá)式3可以是一個(gè)簡(jiǎn)單的表達(dá)式,也可以是一個(gè)逗號(hào)表達(dá)式,即包含一個(gè)以上的簡(jiǎn)單表達(dá)式,中間用逗號(hào)隔開。
如:
for(sum=0,i=0;i<100;i++)
sum=sum+i;
for(i=0,j=100;i<=j;i++,j--)
k=i+j;
在逗號(hào)表達(dá)式內(nèi)要按照自左向右的順序求解,整個(gè)逗號(hào)表達(dá)式的值為最右邊表達(dá)式的值
例如:
for(i=1;i<100;i++,i++)
sum=sum+i;
相當(dāng)于
for(i=1;i<100;i=i+2)
sum=sum+i;
(8)表達(dá)式2一般是關(guān)系表達(dá)式(如i<100)或邏輯表達(dá)式(a<b && x<y),但也可以是數(shù)值表達(dá)式或者字符表達(dá)式,只要其值為非0,就執(zhí)行循環(huán)體
①for(i=0;(c=getchar())!='\n';i+=c)
表達(dá)式2先從終端接受一個(gè)字符給c,然后判斷此賦值表達(dá)式是否不等于’\n’(換行符),如果不等于’\n’,就執(zhí)行循環(huán)體。
這個(gè)for語句的循環(huán)體為空語句,是因?yàn)榘驯緛硪谘h(huán)體內(nèi)處理的內(nèi)容放到了表達(dá)式3中。
②for(;(c=getchar())!='\n';) printf("%c",c);
for語句只有表達(dá)式2,沒有表達(dá)式1和表達(dá)式3,作用是沒讀入一個(gè)字符后立即輸出該字符,直到輸入一個(gè)’\n’為止。
要注意的是,從終端向計(jì)算機(jī)輸入時(shí),是在按Enter鍵以后才將一批數(shù)據(jù)送到內(nèi)存緩沖區(qū)去。因此不是從終端輸入一個(gè)字符馬上輸出一個(gè)字符,而是在按下Enter鍵之后數(shù)據(jù)才送到內(nèi)存緩沖區(qū),然后每次從緩沖區(qū)讀一個(gè)字符,再輸出該字符。
(9)C99允許在for語句的表達(dá)式1中定義變量并賦初值。文章來源:http://www.zghlxwxcb.cn/news/detail-586884.html
for(int i=1;i<100;i++)
sum=sum+i;
但是要注意,在表達(dá)式1中所定義的變量的有效范圍只限于for循環(huán)中,在循環(huán)外不能使用此變量。文章來源地址http://www.zghlxwxcb.cn/news/detail-586884.html
到了這里,關(guān)于C語言用for語句實(shí)現(xiàn)循環(huán)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!