劉彥戎
摘要:在C語言循環(huán)結(jié)構(gòu)設(shè)計(jì)中,除了可以用while和do-while語句實(shí)現(xiàn)循環(huán)外,C語言還提供了for語句可以實(shí)現(xiàn)循環(huán),for語句不僅比以上兩種語句實(shí)現(xiàn)起來靈活,而且可以用于循環(huán)次數(shù)確定的情況??偟膩碚f完全可以代替while和do-while.
關(guān)鍵詞:For語句循環(huán)結(jié)構(gòu)條件表達(dá)式
1、for語句的表達(dá)形式
for(表達(dá)式1;表達(dá)式2;表達(dá)式3),3個(gè)表達(dá)式的主要作用:表達(dá)式1設(shè)置初始條件,只執(zhí)行一次;表達(dá)式2循環(huán)條件表達(dá)式,用來判斷程序是否繼續(xù)執(zhí)行,在每次執(zhí)行循環(huán)體前先執(zhí)行此表達(dá)式,決定是否繼續(xù)執(zhí)行循環(huán)體;表達(dá)式3是對循環(huán)的調(diào)整,是在執(zhí)行完循環(huán)體后才進(jìn)行的。所以我們可以對for語句這樣理解 for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量自增或自減)例如:
for(i=1;i<50;i++)
sum=sum+i;
其中i=1是給循環(huán)變量賦初值1,i<50是指定循環(huán)條件(當(dāng)i的值小于50時(shí)循環(huán)繼續(xù)執(zhí)行)i++的作用是使循環(huán)變量i的值不斷變化,以便最終滿足終止循環(huán)的條件,使循環(huán)結(jié)束。
(1)for語句表達(dá)形式中的表達(dá)式1可以省略,但表達(dá)式1后邊的分號不能省略。例如:
for(;i<50;i++)sum=sum+i; (由于省略了表達(dá)式1,也即是沒給循環(huán)變量賦初值,因此,為了程序能正常運(yùn)行,應(yīng)該在FOR語句之前給循環(huán)變量賦初值。即:i=1; for(;i<50;i++) sum=sum+i;執(zhí)行for 語句時(shí),跳過表達(dá)式1這一步,由于在For之前加了語句i=1,因此其作用仍然不變。)
(2)for語句表達(dá)形式中的表達(dá)式2也可以省略,但表達(dá)式2后邊的分號不能省略。即不設(shè)置和檢查循環(huán)結(jié)束的條件。例如:for(i=1; ;i++) sum=sum+i;此時(shí)循環(huán)無終止的進(jìn)行下去,也就說表達(dá)式2一直為真.
(3)表達(dá)式3也可以省略,但此時(shí)程序設(shè)計(jì)者應(yīng)另外設(shè)法保證循環(huán)能正常結(jié)束。
(4)表達(dá)式1和表達(dá)式3都沒有,只有表達(dá)式2,即只給出循環(huán)結(jié)束條件。對于沒有表達(dá)式1和表達(dá)式3的for循環(huán)語句,為了讓循環(huán)正常執(zhí)行,應(yīng)當(dāng)在for語句前給循環(huán)變量賦初值。 從此處我們可以看出for語句比while語句功能更強(qiáng)大,除了可以給出循環(huán)條件外,還可以賦初值,使循環(huán)變量自動增減等。
(5)表達(dá)式1、表達(dá)式2和表達(dá)式3都可以省略。例如:for(; ;) printf(“%d\n”,i);
相當(dāng)于 while(1) printf(“%d\n”,i);即就是不設(shè)初值,不判斷表達(dá)式2的條件(表達(dá)式2始終為真),不改變循環(huán)變量。這樣程序就無終止的執(zhí)行循環(huán)體語句。顯然這樣的程序是沒有任何價(jià)值的。
(6)表達(dá)式1可以是設(shè)置循環(huán)變量初值的賦值表達(dá)式,也可以是與循環(huán)變量無關(guān)的其他表達(dá)式。
例如:for(sum=0;i<50;i++) sum=sum+i;總之,表達(dá)式3可以是與循環(huán)控制無關(guān)的任意表達(dá)式。但是不論如何寫for語句,都必須是循環(huán)能正常執(zhí)行,防止死循環(huán)。
(7)表達(dá)式1和表達(dá)式3可以是一個(gè)簡單的表達(dá)式,也可以是逗號表達(dá)式,即就是包含一個(gè)以上的簡單表達(dá)式,中間用逗號隔開。
如:for(sum=0,i=1,i<50;i++) sum=sum+i ;或 for(i=0,j=50;i ①for(i=0;(ch1=getchar())!=\n;i+=ch1);在表達(dá)式2中先從終端接收一個(gè)字符賦給ch1,然后判斷這個(gè)賦值表達(dá)式的值是否不等于‘\n(轉(zhuǎn)移字符 換行),如果不等于\n,就執(zhí)行這個(gè)循環(huán)體,它完成的作用是不斷輸入字符,將他們的ASCⅡ碼相加,直到輸入一個(gè)“換行”符為止,程序結(jié)束執(zhí)行。這里我們要注意的是:此時(shí)for語句的循環(huán)語句為空語句,把本來要在循環(huán)體內(nèi)處理的內(nèi)容放在表達(dá)式3中,作用是一樣的,可見for語句功能的強(qiáng)大,可以再表達(dá)式中完成本來應(yīng)在循環(huán)體內(nèi)完成的操作。 ②for(;((ch1=getchar())!=\n;)printf(“%c”,ch1);這個(gè)for語句中只有表達(dá)式2,而無表達(dá)式1和表達(dá)式3.它的作用是每讀入一個(gè)字符后立即輸出該字符,直到輸入一個(gè)“換行”為止。 運(yùn)行情況: Computer((輸入) Computer(輸出)。這里我們要注意的是:從終端鍵盤向計(jì)算機(jī)輸入時(shí),是在按Enter鍵以后將一批數(shù)據(jù)一起送到內(nèi)存緩沖區(qū)去的。因此輸出結(jié)果不是CCoommppuutteerr,即不是從終端輸入一個(gè)字符馬上輸出一個(gè)字符,而是在按Enter鍵后數(shù)據(jù)才送入內(nèi)存緩沖,然后每次從緩沖區(qū)讀一個(gè)字符,再輸出該字符。 從上面的介紹我們可以看到,C語言的FOR語句使用非常靈活,變化多端。C語言的FOR語句比其他語言中的for語句靈活和強(qiáng)大的多。可以把循環(huán)體和一些循環(huán)控制無關(guān)的操作也作為表達(dá)式1和表達(dá)式3的出現(xiàn),這樣程序可以比較簡潔。 2、for語句的執(zhí)行過程 (1)先求解表達(dá)式1. (2)再求解表達(dá)式2,如果表達(dá)式2為真,則執(zhí)行FOR語句中的循環(huán)體,然后執(zhí)行(3),如果為假,則循環(huán)結(jié)束,轉(zhuǎn)到第(5)步。 (3)求解表達(dá)式3. (4)轉(zhuǎn)回步驟(2)繼續(xù)執(zhí)行。 (5)循環(huán)結(jié)束,執(zhí)行for語句下面的一個(gè)語句。 3.種循環(huán)的比較 (1) 在處理循環(huán)語句中,while、do-while和for 都可以用來處理同一個(gè)問題,一般情況下他們3個(gè)可以互換。 (2)在while循環(huán)和do-while循環(huán)中,只在while后面的括號內(nèi)指定循環(huán)條件,因此為了使循環(huán)能正常結(jié)束,應(yīng)在循環(huán)中包含使循環(huán)區(qū)域結(jié)束的語句。For循環(huán)可以在表達(dá)式3中包含使循環(huán)趨于結(jié)束的操作,甚至可以將循環(huán)體重的操作全部放到表達(dá)式3中。因此for語句的功能更強(qiáng),凡是while循環(huán)能完成的,用for循環(huán)都能實(shí)現(xiàn)。 (3)用while和do-while循環(huán)時(shí),循環(huán)變量初始化的操作應(yīng)在while和do-while語句之間完成。而for語句可以在表達(dá)式1中實(shí)現(xiàn)循環(huán)變量的初始化。 (4)while、do-while和for循環(huán),都可以用break語句跳出循環(huán),用continue語句結(jié)束本次循環(huán)。 4.種循環(huán)舉例:求1+2+3+……+100,即∑100n=1n (作者單位:陜西國際商貿(mào)學(xué)院) 參考文獻(xiàn): [1]《電腦知識與技術(shù)》2009年第24期。 [2]《家教世界》2012年04期。 [3]《C語言程序設(shè)計(jì)實(shí)例教程》涂玉芬主編北京郵電出版社 2011年第一版。