循環(huán)語句有三種颤陶,for
循環(huán)颗管,while
循環(huán),do_while
循環(huán)
for( )
先從for循環(huán)講起滓走,下面是一個輸出1~5的程序
#include<stdio.h>
int main()
{
int i;
for(i=1;i<=5;i+=1)
{
printf("%d ",i);
}
return 0;
}
輸出
>>> 1 2 3 4 5
分析這個程序垦江,for()
小括號里面有兩個;
,把小括號分為3個部分搅方,第一個部分i=1
是圖片中的“循環(huán)變量賦初值”比吭,第二部分i<=5
是“判斷條件”,i+=1
是i=i+1
的縮寫姨涡,是第三個“循環(huán)變量增值”
嗯我們用白話解釋一下衩藤,for
循環(huán)開始時,i是1涛漂,判斷i<=5
成立慷彤,執(zhí)行大括號里的語句(和if一樣,如果只有一句話可以不寫大括號)輸出i怖喻,然后i加1變成2底哗,繼續(xù)判斷i<=5
成立,執(zhí)行大括號里的語句锚沸,輸出i跋选,然后i加1變成3,繼續(xù)判斷i<=5
成立······直到當(dāng)i是5時哗蜈,輸出5后前标,i加1變成6,發(fā)現(xiàn)i<=5
不成立距潘,退出循環(huán)炼列,然后該干嘛干嘛。音比。
然后根據(jù)for
循環(huán)來學(xué)習(xí)while
循環(huán)
while( )
仿照上一個程序俭尖,我們用while
循環(huán)寫一個輸出5~1的程序
#include<stdio.h>
int main()
{
int i=5 ;
while(i>=1)
{
printf("%d ",i);
i-=1;
}
}
輸出
>>> 5 4 3 2 1
相對于for
循環(huán)小括號的要求,while
的小括號里只有“判斷條件”洞翩,循環(huán)的‘初值變量’放到了循環(huán)開始之前稽犁,‘變量的改變’放到了‘循環(huán)語句’中 ,只要滿足循環(huán)條件骚亿,該循環(huán)就不會退出已亥。
do while()
再來一個程序,這個程序會輸出所有偶數(shù)来屠,因?yàn)榕紨?shù)時是無限的虑椎,所以理論上它不會退出震鹉。。直到捆姜。传趾。你覺得它該停了就關(guān)了吧。娇未。
#include<stdio.h>
int main()
{
int i=2 ;
do{
printf("%d ",i);
i=i+2;
} while(1);
}
不同于while
的先判斷條件再執(zhí)行循環(huán)語句墨缘,do while
是先執(zhí)行循環(huán)語句再判斷星虹,如果判斷不成立直接跳出循環(huán)零抬。
循環(huán)控制break和continue
我們現(xiàn)在假如輸出一個這樣的表:
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
.。宽涌。平夜。。
很顯然的卸亮,以現(xiàn)在我們學(xué)到的是能做到的
#include<stdio.h>
main()
{
for(int i=1;i<=5;i++)
{
for(int j=1;j<=i;j++)
printf("%d ",j);
printf("\n");
}
}
那么現(xiàn)在你能理解這個程序做了什么嘛忽妒?
我們把i
,j
定義在了for
循環(huán)的第一個小括號內(nèi)兼贸,是局部變量段直。
要注意,這里的j循環(huán)里因?yàn)閳?zhí)行語句只有一次溶诞,所以沒有加大括號鸯檬。然后j
是一個叫“局部變量”的東西,它只在這一句話中有效螺垢,比如你在其他位置調(diào)用j
會報錯喧务。同理,在i
循環(huán)外調(diào)用i
也是會報錯的枉圃。
那么換一種方式呢功茴?同樣是輸出這個表:
#include<stdio.h>
main()
{
for(int i=1;i<=5;i++)
{
for(int j=1;j<=100;j++)
{
printf("%d ",j);
if(j==i)
break;
}
printf("\n");
}
}
先看看我們改了哪里,(→v→)
break;
語句的意義是直接結(jié)束當(dāng)前循環(huán)孽亲,在這個程序里坎穿,它只結(jié)束了 j 循環(huán), 并沒有結(jié)束 i 循環(huán)返劲。
再考慮赁酝,如果對于這個表,我們不輸出3 和 3 的倍數(shù):
1
1 2
1 2
1 2 4
1 2 4 5
1 2 4 5
.....
下面是輸出這個表的程序:
#include<stdio.h>
main()
{
for(int i=1;i<=10;i++)
{
for(int j=1;j<=100;j++)
{
if(j==i)
break;
if(j%3==0)continue;
else
printf("%d ",j);
}
printf("\n");
}
}
上圖:
我們更改了執(zhí)行循環(huán)語句的邏輯順序:
根據(jù)這個程序來解釋一下break和continue的意義
break:直接執(zhí)行“for語句的下一語句”
continue : 跳過之后的“循環(huán)語句”并直接執(zhí)行“循環(huán)變量增值”
那么你可以去拿上邊的程序?qū)嵤┛﹡~~