日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

for語句

 chuanshaoke 2010-04-10

for語句是C語言所提供的功能更強,使用更廣泛的一種循環(huán)語句。其一般形式為:
for(表達式1;表達式2;表達3)
語句;
表達式1 通常用來給循環(huán)變量賦初值,一般是賦值表達式。也允許在for語句外給循環(huán)變量賦初值,此時可以省略該表達式。
表達式2 通常是循環(huán)條件,一般為關系表達式或邏輯表達式。
表達式3 通??捎脕硇薷难h(huán)變量的值,一般是賦值語句。
這三個表達式都可以是逗號表達式,即每個表達式都可由多個表達式組成。三個表達式都是任選項,都可以省略。
一般形式中的“語句”即為循環(huán)體語句。for語句的語義是:
1.首先計算表達式1的值。
2.再計算表達式2的值,若值為真(非0)則執(zhí)行循環(huán)體一次,否則跳出循環(huán)。
3.然后再計算表達式3的值,轉(zhuǎn)回第2步重復執(zhí)行。在整個for循環(huán)過程中,表達式1只計算一次,表達式2和表達式,3則可能計算多次。循環(huán)體可能多次執(zhí)行,也可能一次都不執(zhí)行。for 語句的執(zhí)行過程如圖所示。
void main(){
int n,s=0;
for(n=1;n<=100;n++)
s=s+n;
printf("s=%d\n",s);
}
用for語句計算s=1+2+3+...+99+100

int n,s=0;
for(n=1;n<=100;n++)
s=s+n;
printf("s=%d\n",s);
本例for語句中的表達式3為n++,實際上也是一種賦值語句,相當于n=n+1,以改變循環(huán)變量的值。
void main(){
int a=0,n;
printf("\n input n: ");
scanf("%d",&n);
for(;n>0;a++,n--)
printf("%d ",a*2);
}
用for語句修改例題。從0開始,輸出n個連續(xù)的偶數(shù)。
int a=0,n;
printf("\n input n: ");
scanf("%d",&n);
for(;n>0;a++,n--)
printf("%d ",a*2);
本例的for語句中,表達式1已省去,循環(huán)變量的初值在for語句之前由scanf語句取得,表達式3是一個逗號表達式,由a++,n-- 兩個表達式組成。每循環(huán)一次a自增1,n自減1。a的變化使輸出的偶數(shù)遞增,n的變化控制循次數(shù)。
在使用for語句中要注意以下幾點
1.for語句中的各表達式都可省略,但分號間隔符不能少。如:for(;表達式;表達式)省去了表達式1。for(表達式;;表達式)省去了表達式2。
for(表達式;表達式;)省去了表達式3。for(;;)省去了全部表達式。

2.在循環(huán)變量已賦初值時,可省去表達式1,如例3.27即屬于這種情形。如省去表達式2或表達式3則將造成無限循環(huán),這時應在循環(huán)體內(nèi)設法結束循環(huán)。例題即屬于此情況。
void main(){
int a=0,n;
printf("\n input n: ");
scanf("%d",&n);
for(;n>0;)
{ a++;n--;
printf("%d ",a*2);
}
}
本例中省略了表達式1和表達式3,由循環(huán)體內(nèi)的n--語句進行循環(huán)變量n的遞減,以控制循環(huán)次數(shù)。
void main(){
int a=0,n;
printf("\n input n: ");
scanf("%d",&n);
for(;;){
a++;n--;
printf("%d ",a*2);
if(n==0)break;
}
}
本例中for語句的表達式全部省去。由循環(huán)體中的語句實現(xiàn)循環(huán)變量的遞減和循環(huán)條件的判斷。當n值為0時,由break語句中止循環(huán),轉(zhuǎn)去執(zhí)行for以后的程序。在此情況下,for語句已等效于while( 1)語句。如在循環(huán)體中沒有相應的控制手段,則造成死循環(huán)。

3.循環(huán)體可以是空語句。
#include"stdio.h"
void main(){
int n=0;
printf("input a string:\n");
for(;getchar()!='\n';n++);
printf("%d",n);
}
本例中,省去了for語句的表達式1,表達式3也不是用來修改循環(huán)變量,而是用作輸入字符的計數(shù)。這樣,就把本應在循環(huán)體中完成的計數(shù)放在表達式中完成了。因此循環(huán)體是空語句。應注意的是,空語句后的分號不可少,如缺少此分號,則把后面的printf 語句當成循環(huán)體來執(zhí)行。反過來說,如循環(huán)體不為空語句時,決不能在表達式的括號后加分號,這樣又會認為循環(huán)體是空語句而不能反復執(zhí)行。這些都是編程中常見的錯誤,要十分注意。

4.for語句也可與while,do-while語句相互嵌套,構成多重循環(huán)。以下形成都合法的嵌套。
(1)for(){…
while()
{…}

}
(2)do{

for()
{…}

}while();
(3)while(){

for()
{…}

}
(4)for(){

for(){

}
}
void main(){
int i,j,k;
for(i=1;i<=3;i++)
{ for(j=1;j<=3-i+5;j++)
printf(" ");
for(k=1;k<=2*i-1+5;k++)
{
if(k<=5) printf(" ");
else printf("*");
}
printf("\n");
}
}
 
 
 
 
 
 
 
 
for語句是最靈活也是最常用的循環(huán)結構。Java主要提供了兩種形式的for語句:數(shù)值型for循環(huán)和基于集合的for循環(huán)。
1. 數(shù)值型for循環(huán)
數(shù)值型for循環(huán)的一般形式為:
for(表達式1;表達式2;表達式3)
語句;
在關鍵字for后的括號內(nèi)有3個表達式語句,其中表達式1和表達式3可以是任意表達式語句或空語句,甚至是逗號表達式;表達式2必須為boolean型的常量、變量或表達式。它的執(zhí)行過程如圖5-9所示,說明如下:

(1)先求解表達式1,然后求解表達式2,若其值為真(true),則執(zhí)行for語句中內(nèi)嵌的循環(huán)語句;若其值為假(false),則轉(zhuǎn)到第5步結束循環(huán)。
(2)求解表達式3。
(3)轉(zhuǎn)回上面求解表達式2,繼續(xù)執(zhí)行。
(4)循環(huán)結束,執(zhí)行for語句下面的一個語句。
在使用數(shù)值型for循環(huán)時,常把表達式1用于初始化循環(huán)變量,表達式2是循環(huán)的判定條件,表達式3常用作循環(huán)增量表達式。其形式如下:
for(初始化循環(huán)變量;循環(huán)條件;循環(huán)變量增量)
語句;
如例2.6求1×2×3×4×5,其算法實現(xiàn)如下:
【例5.8】
 
 
程序執(zhí)行結果如下:
1×2×3×4×5=120
使用注意事項:
(1)for循環(huán)中的表達式1(循環(huán)變量初始化)、表達式2(循環(huán)條件)和表達式3(循環(huán)變量增量)都是可選項, 即可為空語句,但“;”不能缺省。
省略了“表達式1(循環(huán)變量初始化)”,表示不對循環(huán)控制變量初始化。循環(huán)變量的初始化工作可置于for循環(huán)之前。
省略了“表達式2(循環(huán)條件)”,則for循環(huán)將成為死循環(huán),不停的執(zhí)行循環(huán)體。如:
for(int i=2; ;i++)
{
t= t*i;
}
相當于:
for(int i=2;true;i++)
{
t= t*i;
}
省略了“表達式3(循環(huán)變量增量)”,則不對循環(huán)控制變量進行操作,這時可在語句體中加入修改循環(huán)控制變量的語句。如:
for(int i=2;i<=5 ;i++)
{
t= t*i;
}
相當于:
for(int i=2;i<=5;)
{
t= t*i;
i++;
}
省略了“表達式1(循環(huán)變量初始化)”和“表達式3(循環(huán)變量增量)”。如:
for(int i=2;i<=5 ;i++)
{
t= t*i;
}
相當于:
int i=2;
for(;i<=5;)
{
t= t*i;
i++;
}
當然,3個表達式可以同時省略。如:
for(int i=2;i<=5 ;i++)
{
t= t*i;
}
相當于:
int i=2;
for(;;)
{
t = t*i;
i++;
if(i<=5) break; //如果i<=5,則跳出循環(huán)體。
}
(2)表達式1和表達式3可以是一個簡單表達式也可以是逗號表達式。如:
int t=1;
for(int i=2;i<=5;i++)
{
t= t*i;
}
相當于:
int t,i;
for(t=1,i=2;i<=5;t=t*i,i++); //該語句雖簡潔,但不夠清晰,建議程序中不要這么寫。
2. 基于集合的for循環(huán)
基于集合的for循環(huán)是在JDK5.0版本之后,為簡化集合類、枚舉和數(shù)組的迭代過程而提出來的。其一般形式如下:
for(類型 標識符:可迭代的表達式) 語句;
在關鍵字for后的括號中有兩個控制元素,它們之間用一個冒號“:”分隔開。第一個元素用于指定的一個類型標識符;而第二個元素指定了一個可迭代的表達式(結果通常是集合或數(shù)組)。第一個元素指定的類型標識符其類型應與集合或數(shù)組中存放的對象相兼容。它的語義可描述如下,其流程如圖5-10所示。

類型 標識符 =null;
for(int i=0; i<可迭代表達式結果長度; i++)
{
標識符 = 可迭代表達式結果.get(i);
語句;
}
集合類和枚舉將在后面章節(jié)詳細介紹,這里舉個在數(shù)組中運用的例子。如例2.9有50個學生,要求將他們之中成績在80分以上者打印出來。
【例5.9】
 
基于集合的for循環(huán),在遍歷集合對象時能使程序更加簡潔。但因其隱藏了循環(huán)變量,當執(zhí)行過程中需引用數(shù)組下標或迭代器時,將會變得復雜些。

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多