目錄
1.for循環(huán)
2.循環(huán)執(zhí)行順序
3.易錯(cuò)點(diǎn)
4.思維導(dǎo)圖
前言
我們定義了一個(gè)數(shù)組以后,要使用(讀取或者修改)數(shù)組元素的話,可以一個(gè)一個(gè)的讀取,就前兩課學(xué)的那樣,代碼類似這個(gè)結(jié)構(gòu)。
int number_list[5]={1,2,3,4,5};
printf("%d\n",number_list[0]);
printf("%d\n",number_list[1]);
printf("%d\n",number_list[2]);
printf("%d\n",number_list[3]);
printf("%d\n",numebr_list[4]);
假如我們對(duì)一個(gè)有10000個(gè)元素的數(shù)組,挨個(gè)打印輸出他們的元素呢,難不成還要寫一萬(wàn)行printf()?
這顯然是不現(xiàn)實(shí)的。這種代碼太多了,很容易出錯(cuò),也很難維護(hù)。
這時(shí)候我們就要引入一種新的機(jī)制——循環(huán),它可以按照我們意愿,反復(fù)執(zhí)行同樣的代碼,直到滿足邊界條件。
循環(huán)就像是一個(gè)沒(méi)有感情的機(jī)器人,我們可以讓它執(zhí)行重復(fù)的枯燥的工作,當(dāng)然這個(gè)工作需要步驟清晰。
比如圖中1,打開抽屜;2,取出物品;3,關(guān)上抽屜。這三個(gè)動(dòng)作重復(fù)但清晰,機(jī)器人會(huì)重復(fù)執(zhí)行它們,直到取完所有抽屜里面的物品。
C語(yǔ)言中有多種循環(huán)的機(jī)制,我們今天學(xué)習(xí)第一種循環(huán)——for循環(huán)。
1.for循環(huán)
1.1
自然界中,一直重復(fù)的四季更替,晝夜交替,陰晴圓缺叫做循環(huán)。
在程序中,滿足條件的情況下,反復(fù)執(zhí)行同一段代碼就叫做循環(huán)。
下面代碼會(huì)循環(huán)打印變量a的值,一共打印五次:
for(int a=0;a<5;a=a+1)
{
printf(“變量的值是%d\n”,a);
}
1.for循環(huán)的語(yǔ)法格式——循環(huán)條件部分???for( int a = 0; a < 5; a = a + 1 )
2.for循環(huán)的代碼塊? ?{? ?printf("變量a的值是%d\n", a);? ?}
3.for循環(huán)的關(guān)鍵字——for
for(int a=0;a<5;a=a+1)
{
printf(“變量的值是%d\n”,a);
}
4.for循環(huán)中的第一部分,初始定義? ??int a = 0
5.for循環(huán)中的第二部分,循環(huán)判斷的條件? ?a<0
6.for循環(huán)中的第三部分,迭代操作? a=a+1
1.2
for(;;)
for循環(huán)的循環(huán)條件部分被兩個(gè)分號(hào)分隔成了三個(gè)部分,它們分別是:
初始定義,循環(huán)判斷條件,迭代操作。
for循環(huán)的條件中,第一部分是在第一個(gè)分號(hào)之前,我們叫做初始定義;
比如這里定義了變量a,int a = 0
?。
1.3
我們來(lái)填寫一個(gè)for循環(huán)的判斷條件中的初始定義int b = 10
:
for(int b=10;b<20;b++);
for循環(huán)的條件中,第二部分是在第一個(gè)分號(hào)之后,第二個(gè)分號(hào)之前,我們叫做循環(huán)的判斷條件;
比如這里判斷a < 5
是否為真,如果為真,就執(zhí)行循環(huán)中的代碼塊;如果為假就結(jié)束循環(huán)。
1.4
最后一部分是第二個(gè)分號(hào)之后的部分,是迭代動(dòng)作,也是決定了要循環(huán)幾次的地方;
如果沒(méi)有變量的迭代動(dòng)作,可能循環(huán)的判斷條件永遠(yuǎn)為真,這就變成了無(wú)限循環(huán)或者死循環(huán);
如果一次迭代動(dòng)作是給變量增加5,那可能循環(huán)的判斷條件只有第一次為真,迭代一次以后就為假了,也就不再執(zhí)行了。
填寫for循環(huán)中的第三部分迭代操作b++
:
for(int b=10;b<20;b++);
同樣是給變量增加1,我們一次使用了a = a + 1
;
一次使用了自增符號(hào)b++
,兩者效果是一樣的。
1.5
for循環(huán)的代碼塊,和判斷一樣,for循環(huán)的代碼塊也是被花括號(hào)括起來(lái)的,只要判斷條件符合,就會(huì)執(zhí)行這個(gè)代碼塊。
我們來(lái)填入循環(huán)的代碼塊,打印b的值printf("b的值是%d\n", b);
for(int b = 10; b < 15; b++)
{
printf("b的值是%d\n", b);
}
打印結(jié)果
10
11
12
13
14
1.6
for循環(huán)里面,第一部分是初始定義,定義變量的值;
第二部分是循環(huán)的判斷條件,為真就執(zhí)行代碼塊,為假就不執(zhí)行;
第三部分是迭代動(dòng)作,用以控制循環(huán)的執(zhí)行次數(shù)
1.7
有了for循環(huán),我們就可以讓代碼幫我們做哪些枯燥單調(diào)的重復(fù)動(dòng)作了。比如我們就可以告訴機(jī)器人:
1,從第一個(gè)格子開始;
2,格子數(shù)小于9之前,都取出格子里的東西;
3,每次格子數(shù)增加1。
同時(shí)就像判斷一樣,我們也可以看到,循環(huán)的代碼執(zhí)行順序,和順序執(zhí)行,條件執(zhí)行,也是不一樣的。
順序執(zhí)行是從上到下;
條件執(zhí)行是根據(jù)判斷條件,只執(zhí)行一部分分支的代碼,但只會(huì)執(zhí)行一次;
循環(huán)執(zhí)行則是會(huì)反復(fù)執(zhí)行同一部分的代碼。
2.循環(huán)執(zhí)行順序
2.1
計(jì)算機(jī)是個(gè)一板一眼的家伙,我們寫出來(lái)的代碼它都會(huì)默認(rèn)按照從上到下的順序執(zhí)行。
比如這里的順序執(zhí)行:
int a=1;
int b=2;
int c=3;
printf("a的值是%d\n",a);
printf("b的值是%d\n",b);
printf("c的值是%d\n",c);
1.執(zhí)行第一行??int a = 1;
2.執(zhí)行第二行??int b = 2;
3.執(zhí)行第三行??int c = 3;
int a=1;
int b=2;
int c=3;
printf("a的值是%d\n",a);
printf("b的值是%d\n",b);
printf("c的值是%d\n",c);
4.執(zhí)行第四行??printf("a的值%d\n", a);
5.執(zhí)行第五行??printf("b的值%d\n", b);
6.執(zhí)行第六行??printf("c的值%d\n", c);
2.2
以及if-else判斷語(yǔ)句中的選擇執(zhí)行,只執(zhí)行某一個(gè)判斷分支。
這里的判斷語(yǔ)句只執(zhí)行else分支:
int a=5;
if(a>5){
printf("大于五\n");
}
else{
printf("小于等于五\n");
}
然后我們來(lái)看看循環(huán)的代碼執(zhí)行順序:
循環(huán)會(huì)反復(fù)執(zhí)行代碼塊中的代碼,直到循環(huán)條件不滿足。
int number_list[5]={1,2,3,4,5};
for{int count=0;count<5;count++};{
printf("%d\n",int numbrt_list[count])
}
1.執(zhí)行的第一行,定義一個(gè)整形數(shù)組并賦值? ?int number_list[5] = {1, 2, 3, 4, 5}
2.for循環(huán)開始進(jìn)行判斷,判斷為真,執(zhí)行代碼塊的代碼??for(int count = 0; count < 5; count++)
3.第一次執(zhí)行代碼塊,用count變量直接當(dāng)做數(shù)組下標(biāo)使用??printf("%d\n", number_list[count]
4.第二次循環(huán)條件的判斷??for(int count = 0; count < 5; count++)
5.第二次執(zhí)行代碼塊,數(shù)組下標(biāo)為1??printf("%d\n", number_list[count])
………
12. 第六次判斷循環(huán)條件,count是5,判斷條件count < 5不成立,終止循環(huán)
2.3
可以看到循環(huán)的代碼執(zhí)行特點(diǎn):
循環(huán)判斷條件符合的時(shí)候,會(huì)反復(fù)執(zhí)行代碼塊中的代碼。
細(xì)到for循環(huán)里面也有小的執(zhí)行順序之分:
int number_list[5]={1,2,3,4,5};
for(int count=0;count<5;count++){
printf("%d\n",number_list[count]);
}
1.執(zhí)行到for循環(huán)
2.只有第一次才執(zhí)行初始定義,也就是這里的定義一個(gè)變量??int count = 0
3.循環(huán)開始以后,先執(zhí)行循環(huán)的判斷條件??int number_list[5] = {1, 2, 3, 4, 5};
4.再執(zhí)行代碼塊中的代碼??printf("%d\n", number_list[count])
5.最后執(zhí)行迭代操作的自增?count++
所以在for循環(huán)內(nèi)部,首先執(zhí)行初始條件的定義,這只會(huì)執(zhí)行一次;
然后進(jìn)行循環(huán)條件的判斷,判斷為真,執(zhí)行代碼塊中的代碼;
最后執(zhí)行迭代操作。
2.4
對(duì)于寫代碼和閱讀代碼的人來(lái)說(shuō),循環(huán)執(zhí)行順序的難點(diǎn)就已經(jīng)不是代碼的寫法了,
而是循環(huán)中的代碼塊到底要執(zhí)行幾次,在什么條件下終止循環(huán)?
我們?nèi)タ葱枰獔?zhí)行幾次循環(huán)中的代碼塊這件事情,一般都是自己心算一下或者用筆計(jì)算一下,有個(gè)大致的判斷,以保證代碼按照我們的需求來(lái)正確執(zhí)行。
同時(shí)循環(huán)和判斷的代碼塊也是一樣的,代碼塊中的代碼作為一個(gè)整體,統(tǒng)一順序執(zhí)行,不能夠分割出來(lái);
所以也會(huì)用到花括號(hào){}
來(lái)定義代碼塊。
同時(shí)我們這里也應(yīng)用了自增運(yùn)算符,i++
,來(lái)做迭代操作,這也是自增運(yùn)算符最重要的應(yīng)用場(chǎng)景。
2.5
同時(shí),我們用for循環(huán),對(duì)數(shù)組中的每個(gè)元素進(jìn)行了一次訪問(wèn),我們就說(shuō)完成了一次遍歷。
遍歷是指對(duì)一個(gè)數(shù)組中的所有元素進(jìn)行訪問(wèn)的操作。
3.易錯(cuò)點(diǎn)
?初始變量的定義也可以先在for循環(huán)外進(jìn)行;
for(;;)
會(huì)造成程序的死循環(huán)(無(wú)限循環(huán)),永遠(yuǎn)停不下來(lái)的循環(huán)。
4.思維導(dǎo)圖
最后我想說(shuō)的是:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-695919.html
在撰寫這篇文章時(shí),我參考了《白紙編程》這個(gè)app的觀點(diǎn)和思想,我要感謝他們對(duì)我的啟發(fā)和幫助。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-695919.html
到了這里,關(guān)于C語(yǔ)言入門 Day_14 for循環(huán)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!