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