




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
語言循環(huán)結(jié)構(gòu)語言循環(huán)結(jié)構(gòu)1(優(yōu)選)語言循環(huán)結(jié)構(gòu)(優(yōu)選)語言循環(huán)結(jié)構(gòu)C語言的重復(fù)語句用于設(shè)置循環(huán)。循環(huán)是重復(fù)執(zhí)行其他語句的一種語句,循環(huán)中重復(fù)執(zhí)行的語句就是循環(huán)體
C語句中,每個(gè)循環(huán)都有一個(gè)控制表達(dá)式。每次執(zhí)行循環(huán)體時(shí)都要對(duì)控制表達(dá)式進(jìn)行計(jì)算。如果表達(dá)式為真,也就是不為零,那么繼續(xù)執(zhí)行循環(huán)。重復(fù)語句C語言的重復(fù)語句用于設(shè)置循環(huán)。重復(fù)語句C提供三種循環(huán)語句:while語句用于判定控制表達(dá)式在循環(huán)體執(zhí)行之前的循環(huán)。do語句用于判定控制表達(dá)式在循環(huán)體執(zhí)行之后的循環(huán)。for語句對(duì)于自增或自減計(jì)數(shù)變量的循環(huán)十分方便。重復(fù)語句C提供三種循環(huán)語句:重復(fù)語句使用while語句是最簡(jiǎn)單、最基本的設(shè)置循環(huán)方法。While語句格式如下 while(表達(dá)式)語句表達(dá)式即為控制表達(dá)式;語句則是循環(huán)體。while語句使用while語句是最簡(jiǎn)單、最基本的設(shè)置循環(huán)方法。whilwhile語句示例 while(i<n)/*控制表達(dá)式*/ i=i*2;/*循環(huán)體*/執(zhí)行while語句時(shí),首先計(jì)算控制表達(dá)式的值。如果值不為零(真),那么執(zhí)行循環(huán)體,接著再次判定表達(dá)式。這個(gè)過程持續(xù)進(jìn)行直到最終控制表達(dá)式的值變?yōu)榱?。while語句while語句示例while語句while語句示例計(jì)算大于或等于數(shù)n的最小的2次冪 i=1; while(i<n) i=i*2;設(shè)n為10時(shí),下面跟蹤顯示了while語句執(zhí)行情況 i=1; i現(xiàn)在值為1. i<n成立嗎? 是,繼續(xù)。 i=i*2; i現(xiàn)在為2. i<n成立嗎? 是,繼續(xù)。 i=i*2; i現(xiàn)在為4。 i<n成立嗎? 是,繼續(xù)。 i=i*2; i現(xiàn)在為8。 i<n成立嗎? 是,繼續(xù)。 i=i*2; i現(xiàn)在為16。 i<n成立嗎? 不成立,退出循環(huán)。while語句while語句示例計(jì)算大于或等于數(shù)n的最小的2次冪while雖然循環(huán)體必須是單獨(dú)的一條語句,但這只是個(gè)技術(shù)問題。如果需要多條語句,那么只要用一對(duì)大括號(hào)構(gòu)造成單獨(dú)一條復(fù)合語句就可以了 while(i>0){ printf("Tminus%dandcounting\n",i); i; }即使沒有嚴(yán)格要求的時(shí)候,一些程序員始終使用大括號(hào)括住循環(huán)體 while(i<n){ i=i*2; }while語句雖然循環(huán)體必須是單獨(dú)的一條語句,但這只是個(gè)技術(shù)問題。whil下面的語句顯示一串“倒數(shù)計(jì)數(shù)”信息 i=10; while(i>0){ printf("Tminus%dandcounting\n",i); i; }整個(gè)過程持續(xù)到顯示信息為“Tminus1andcounting”。while語句下面的語句顯示一串“倒數(shù)計(jì)數(shù)”信息while語句關(guān)于while語句的一些討論在while循環(huán)終止時(shí),控制表達(dá)式的值為假。因此,當(dāng)通過表達(dá)式i>0控制循環(huán)終止時(shí),i必須是小于或等于0的??赡芨静粓?zhí)行while循環(huán)體。因?yàn)榭刂票磉_(dá)式是在循環(huán)體執(zhí)行之前進(jìn)行判定。while語句常常可以有多重寫法。更加簡(jiǎn)明的遞減計(jì)數(shù)循環(huán)如下 while(i>0) printf("Tminus%dandcounting\n",i);while語句關(guān)于while語句的一些討論while語句printf("%disprime\n",n);}while();}intmain(void)scanf("%f",&credit);從1向上加到n for(i=1;i<=n;i++)…loop_done:…/*emptyloopbody*/;printf("Tminus%dandcounting\n",i);for(d=2;d<n;d++)case4:break語句不會(huì)產(chǎn)生期望的效果它可以跳出switch語句,但是無法跳出循環(huán)。printf("Thisprogramprintsatableofsquares.“0”代表當(dāng)前掃描器“位于空格串中”這一狀態(tài)。for(d=2;d<n&&n%d!=0;d++)for(;;){i<n成立嗎? 不成立,退出循環(huán)。如果控制表達(dá)式的值始終是非零值的話,while語句將無法終止。C語句程序員有時(shí)故意用非零常量作為控制表達(dá)式來構(gòu)造無限循環(huán) while(1)…除非循環(huán)體含有跳出循環(huán)控制的語句(break,goto,return)或調(diào)用了導(dǎo)致程序終止的函數(shù),否則上述這種形式的while語句將永遠(yuǎn)執(zhí)行下去。無限循環(huán)printf("%disprime\n",n);如果控程序square.c用一個(gè)while語句顯示平方值表格。用戶指定平方值表格的行數(shù) Thisprogramprintsatableofsquares. Enternumberofentriesintable:5 11 24 39 416 525程序顯示平方值的表格程序square.c用一個(gè)while語句顯示平方值表格。程序square.c
/*Printsatableofsquaresusingawhilestatement*/
#include<stdio.h>
intmain(void){inti,n;
printf("Thisprogramprintsatableofsquares.\n");printf("Enternumberofentriesintable:");scanf("%d",&n);
i=1;while(i<=n){printf("%10d%10d\n",i,i*i);i++;}
return0;}square.c程序sum.c對(duì)用戶輸入的整數(shù)數(shù)列求和 Thisprogramsumsaseriesofintegers. Enterintegers(0toterminate):8237150 Thesumis:107程序需要使用循環(huán),循環(huán)采用scanf函數(shù)讀取用戶輸入數(shù),然后再把這個(gè)數(shù)加到運(yùn)算的總和中。程序數(shù)列求和程序sum.c對(duì)用戶輸入的整數(shù)數(shù)列求和程序數(shù)列求和sum.c
/*Sumsaseriesofnumbers*/
#include<stdio.h>
intmain(void){intn,sum=0;
printf("Thisprogramsumsaseriesofintegers.\n");printf("Enterintegers(0toterminate):");
scanf("%d",&n);while(n!=0){sum+=n;scanf("%d",&n);}printf("Thesumis:%d\n",sum);
return0;}sum.c例6.3求1到100的和
學(xué)生練習(xí)運(yùn)行結(jié)果:5050例6.3求1到100的和
學(xué)生練習(xí)運(yùn)行結(jié)果:5050第二,計(jì)算表達(dá)式2并將計(jì)算結(jié)果作為整個(gè)逗號(hào)表達(dá)式的結(jié)果。如果需要多條語句,那么只要用一對(duì)大括號(hào)構(gòu)造成單獨(dú)一條復(fù)合語句就可以了除非循環(huán)體含有跳出循環(huán)控制的語句(break,goto,return)或調(diào)用了導(dǎo)致程序終止的函數(shù),否則上述這種形式的while語句將永遠(yuǎn)執(zhí)行下去。表達(dá)式1、表達(dá)式2和表達(dá)式3全都是表達(dá)式?!跋蛳聹p使用>或〉=運(yùn)算符。return0;scanf("%d",&n);printf("%10d%10d\n",i,square);通常循環(huán)的退出點(diǎn)是在while或for循環(huán)體之前,或do循環(huán)體之后。Enterintegers(0toterminate):8237150while(i>0){說明:當(dāng)n能被3整除時(shí),執(zhí)行continue語句,結(jié)束本次循環(huán)(即跳過printf函數(shù)語句),只有n不能被3整除時(shí)才執(zhí)行printf函數(shù)。在for語句中省略表達(dá)式case2:printf("***ACMEcheckbookbalancingprogram***\n");如果值不為零(真),那么執(zhí)行循環(huán)體,接著再次判定表達(dá)式。scanf("%d",&n);如果把條件n%d==0移到循環(huán)控制表達(dá)式中,那么循環(huán)體將會(huì)為空使用break語句可以在循環(huán)體中間設(shè)置退出點(diǎn),甚至設(shè)置多個(gè)退出點(diǎn)。例6.2求1到100的和
#include<stdio.h>
voidmain()
{inti,sum=0;
i=1;
while(i<=100)
{sum=sum+i;
i++;
}
printf(″%d\\n″,sum);
}說明:(1)循環(huán)體如果包含一個(gè)以上的語句,應(yīng)該用花括弧括起來,以復(fù)合語句形式出現(xiàn).(2)在循環(huán)體中應(yīng)有使循環(huán)趨向于結(jié)束的語句。
運(yùn)行結(jié)果:5050第二,計(jì)算表達(dá)式2并將計(jì)算結(jié)果作為整個(gè)逗號(hào)表達(dá)式的結(jié)果。例6do語句的一般格式如下 do語句while(表達(dá)式);執(zhí)行do語句時(shí),先執(zhí)行循環(huán)體,再計(jì)算控制表達(dá)式的值。如果表達(dá)式的值非零,那么再次執(zhí)行循環(huán)體,然后再次計(jì)算表達(dá)式的值。do語句do語句的一般格式如下do語句使用do語句重寫前面的“倒數(shù)計(jì)數(shù)”程序 i=10; do{ printf("Tminus%dandcounting\n",i); i; }while(i>0);do語句和while語句沒有本質(zhì)的區(qū)別。唯一的不同在于do語句的循環(huán)體至少會(huì)被執(zhí)行一次。do語句使用do語句重寫前面的“倒數(shù)計(jì)數(shù)”程序do語句最好對(duì)所有的do語句都使用大括號(hào)包括循環(huán)體,因?yàn)闆]有大括號(hào)的do語句很容易被誤認(rèn)為是while語句 do printf("Tminus%dandcounting\n",i); while(i>0);粗心的讀者可能會(huì)把單詞while誤認(rèn)為是while語句的開始。do語句while(i<=100)最好對(duì)所有的do語句都使用大括號(hào)包括循環(huán)體,因?yàn)闆]有大括號(hào)的例6.3求1到100的和
運(yùn)行結(jié)果:5050例6.3求1到100的和
運(yùn)行結(jié)果:5050例6.3求1到100的和
#include<stdio.h>
voidmain()
{inti,sum=0;
i=1;
do
{sum=sum+i;
i++;
}
while(i<=100);
printf("%d\\n″,sum);
}運(yùn)行結(jié)果:5050例6.3求1到100的和
#include<stdio程序numdigits.c計(jì)算用戶輸入的整數(shù)的位數(shù) Enteranonnegativeinteger:60 Thenumberhas2digit(s).方法是將將用戶輸入的整數(shù)反復(fù)除以10,直到結(jié)果變?yōu)?,除的次數(shù)就是用戶輸入整數(shù)的位數(shù)。do語句比while語句更適合,因?yàn)槊總€(gè)整數(shù),即便是0都至少有一位數(shù)字。程序計(jì)算整數(shù)的位數(shù)程序numdigits.c計(jì)算用戶輸入的整數(shù)的位數(shù)程序計(jì)算numdigits.c
/*Calculatesthenumberofdigitsinaninteger*/
#include<stdio.h>
intmain(void){intdigits=0,n;
printf("Enteranonnegativeinteger:");scanf("%d",&n);
do{n/=10;digits++;}while(n>0);
printf("Thenumberhas%ddigit(s).\n",digits);
return0;}numdigits.cfor語句對(duì)于“向上加”(變量自增)或“向下減”(變量自減)的循環(huán)來說是最好的選擇。for語句和while語句關(guān)系緊密。同樣,循環(huán)體只執(zhí)行一次,并顯示相同的信息。return0;break;while(n<10){case3:while(i>0){for(k=1;k<=i;k++)“0”代表當(dāng)前掃描器“位于空格串中”這一狀態(tài)。程序numdigits.i=i*2; i現(xiàn)在為8。表達(dá)式2控制用于控制循環(huán)的終止(循環(huán)持續(xù)執(zhí)行,只要表達(dá)式2的值非零)。scanf("%d",&i);Entercommand:4在控制表達(dá)式中使用==代替<,<=,>,或>=。sum+=i;for(i=10;i>0;i);/***WRONG***/用數(shù)學(xué)不等式來描述打印星號(hào)區(qū)域:說明:當(dāng)n能被3整除時(shí),執(zhí)行continue語句,結(jié)束本次循環(huán)(即跳過printf函數(shù)語句),只有n不能被3整除時(shí)才執(zhí)行printf函數(shù)。goto語句能跳轉(zhuǎn)到函數(shù)中任何有標(biāo)號(hào)的語句處。for語句適合應(yīng)用在使用“計(jì)數(shù)”變量的循環(huán)中,然而它也靈活用于許多其他類型的循環(huán)中。for語句的一般格式如下 for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語句 表達(dá)式1、表達(dá)式2和表達(dá)式3全都是表達(dá)式。示例 for(i=10;i>0;i) printf("Tminus%dandcounting\n",i);for語句for語句對(duì)于“向上加”(變量自增)或“向下減”(變量自減)for語句的執(zhí)行流程for(表達(dá)式1;表達(dá)式2;表達(dá)式3)
語句;for語句for語句的執(zhí)行流程for語句for語句和while語句關(guān)系緊密。除了極少數(shù)情況,for循環(huán)總可以等價(jià)替換為while循環(huán) 表達(dá)式1; while(表達(dá)式2){ 語句 表達(dá)式3; }表達(dá)式1是在循環(huán)開始執(zhí)行前,只執(zhí)行一次的初始化步驟。for語句for語句和while語句關(guān)系緊密。for語句表達(dá)式2控制用于控制循環(huán)的終止(循環(huán)持續(xù)執(zhí)行,只要表達(dá)式2的值非零)。表達(dá)式3是在每次循環(huán)的最后被執(zhí)行的一個(gè)操作。按照這種模式,上面的for循環(huán)可以改寫為如下的while循環(huán) i=10; while(i>0){ printf("Tminus%dandcounting\n",i); i; }for語句表達(dá)式2控制用于控制循環(huán)的終止(循環(huán)持續(xù)執(zhí)行,只要表達(dá)式2的研究等價(jià)的while語句有助于更好地理解for語句。例如,假設(shè)把先前for循環(huán)示例中的i替換為i for(i=10;i>0;i) printf("Tminus%dandcounting\n",i);等價(jià)的while循環(huán)顯示上述的替換對(duì)循環(huán)沒有任何影響 i=10; while(i>0){ printf("Tminus%dandcounting\n",i); i; }for語句研究等價(jià)的while語句有助于更好地理解for語句。for語由于for語句中的第一和第三表達(dá)式都是以語句的方式執(zhí)行的,所以它們的值互不相關(guān)——它們有用僅僅是因?yàn)橛懈弊饔谩?/p>
所以,這兩個(gè)表達(dá)式常常是賦值表達(dá)式或自增/自減表達(dá)式。for語句由于for語句中的第一和第三表達(dá)式都是以語句的方式執(zhí)行的,所for語句對(duì)于“向上加”(變量自增)或“向下減”(變量自減)的循環(huán)來說是最好的選擇。對(duì)于向上加或向下減共有n次的情況,for語句經(jīng)常會(huì)采用下列形式中的一種。從0向上加到n–1 for(i=0;i<n;i++)…從1向上加到n for(i=1;i<=n;i++)…從n1向下減到0 for(i=n1;i>=0;i)…從n向下減到1 for(i=n;i>0;i)…for語句慣用法for語句對(duì)于“向上加”(變量自增)或“向下減”(變量自減)常見語句錯(cuò)誤在控制表達(dá)式中用<(大于)代替>(反之亦然)?!跋蛏霞印笔褂?lt;或<=運(yùn)算符;“向下減使用>或〉=運(yùn)算符。在控制表達(dá)式中使用==代替<,<=,>,或>=。編寫的控制表達(dá)式用i<=n代替i<n,會(huì)產(chǎn)生“循環(huán)次數(shù)差一次”錯(cuò)誤。for語句慣用法常見語句錯(cuò)誤for語句慣用法C語言允許省略任意或全部的表達(dá)式。如果省略第一個(gè)表達(dá)式,那么在執(zhí)行循環(huán)前沒有初始化的操作 i=10; for(;i>0;i) printf("Tminus%dandcounting\n",i);如果省略第三個(gè)表達(dá)式,那么循環(huán)體需確保第二個(gè)表達(dá)式的值最終會(huì)變?yōu)榧?for(i=10;i>0;) printf("Tminus%dandcounting\n",i);在for語句中省略表達(dá)式C語言允許省略任意或全部的表達(dá)式。在for語句中省略表達(dá)式當(dāng)?shù)谝缓偷谌磉_(dá)式都省略時(shí),for循環(huán)與while循環(huán)沒有任何區(qū)別 for(;i>0;) printf("Tminus%dandcounting\n",i); 等價(jià)于 while(i>0) printf("Tminus%dandcounting\n",i);while語句的形式更清楚,因此更可取。在for語句中省略表達(dá)式當(dāng)?shù)谝缓偷谌磉_(dá)式都省略時(shí),for循環(huán)與while循環(huán)沒有任如果省略第二個(gè)表達(dá)式,那么它默認(rèn)為真,因此for語句不會(huì)終止(除非以某種其他形式停止)。例如某些程序員用下列的for語句建立無限循環(huán) for(;;)…在for語句中省略表達(dá)式如果省略第二個(gè)表達(dá)式,那么它默認(rèn)為真,因此for語句不會(huì)終止C99中,for語句的第一個(gè)表達(dá)式能被替換為一個(gè)聲明(定義)。這個(gè)特性允許程序員在for循環(huán)中定義變量 for(inti=0;i<n;i++) …這樣,變量i不需要在for循環(huán)前定義。C99中的for語句C99中,for語句的第一個(gè)表達(dá)式能被替換為一個(gè)聲明(定義)在for語句中定義的變量不能在循環(huán)體外訪問,即在循環(huán)外不可見) for(inti=0;i<n;i++){ … printf("%d",i);/*legal;iisvisibleinsideloop*/ … } printf("%d",i);/***WRONG***/C99中的for語句在for語句中定義的變量不能在循環(huán)體外訪問,即在循環(huán)外不可見讓for語句定義自己的循環(huán)控制變量通常是個(gè)好的做法,方便且讓程序易于理解。當(dāng)然,如果程序需要在循環(huán)結(jié)束后訪問這樣的變量,那么就需要采用for語句常規(guī)的方式。for語句可以定義多個(gè)相同類型的變量 for(inti=0,j=0;i<n;i++) …C99中的for語句讓for語句定義自己的循環(huán)控制變量通常是個(gè)好的做法,方便且讓有時(shí),for語句可能需要多個(gè)初始表達(dá)式,或在每次循環(huán)時(shí)一次對(duì)幾個(gè)變量進(jìn)行自增(減)操作??梢栽趂or語句的第一和第三表達(dá)式中使用逗號(hào)表達(dá)式實(shí)現(xiàn)這些想法。逗號(hào)表達(dá)式具有如下形式 表達(dá)式1,表達(dá)式2 這里表達(dá)式1和表達(dá)式2可以是任意兩個(gè)表達(dá)式。逗號(hào)運(yùn)算符有時(shí),for語句可能需要多個(gè)初始表達(dá)式,或在每次循環(huán)時(shí)一次對(duì)逗號(hào)表達(dá)式的計(jì)算分兩步實(shí)現(xiàn)第一,計(jì)算表達(dá)式1并丟棄計(jì)算結(jié)果。第二,計(jì)算表達(dá)式2并將計(jì)算結(jié)果作為整個(gè)逗號(hào)表達(dá)式的結(jié)果。計(jì)算表達(dá)式1始終是有意義的。當(dāng)計(jì)算逗號(hào)表達(dá)式++i,i+j,i先自增,然后計(jì)算i+j假設(shè),變量i和j的值分別為1和5,那么上面逗號(hào)表達(dá)式的值為7,而i的值將自增為2。逗號(hào)運(yùn)算符逗號(hào)表達(dá)式的計(jì)算分兩步實(shí)現(xiàn)逗號(hào)運(yùn)算符逗號(hào)運(yùn)算符是左結(jié)合性的,所以編譯器把下列表達(dá)式 i=1,j=2,k=i+j 解釋為 ((i=1),(j=2)),(k=(i+j))即左邊的操作先于右邊的執(zhí)行,這樣表達(dá)式i=1,j=2,和k=i+j將從左到右執(zhí)行。逗號(hào)運(yùn)算符逗號(hào)運(yùn)算符是左結(jié)合性的,所以編譯器把下列表達(dá)式逗號(hào)運(yùn)算符逗號(hào)運(yùn)算符允許將兩個(gè)或多個(gè)表達(dá)式黏貼成一個(gè)表達(dá)式。在后面章節(jié)中我們會(huì)看到某些定義將從逗號(hào)運(yùn)算符中受益。for語句是唯一除上述之外還可以發(fā)現(xiàn)逗號(hào)運(yùn)算符的地方。例如 for(sum=0,i=1;i<=N;i++) sum+=i;利用附加的逗號(hào)運(yùn)算符,for語句可以初始化兩個(gè)及以上的變量。逗號(hào)運(yùn)算符逗號(hào)運(yùn)算符允許將兩個(gè)或多個(gè)表達(dá)式黏貼成一個(gè)表達(dá)式。逗號(hào)運(yùn)算符程序square.c(Section6.1)可以通過將while循環(huán)轉(zhuǎn)化為for循環(huán)的方式進(jìn)行改進(jìn)程序顯示平方值表格(改進(jìn)版)程序square.c(Section6.1)可以通過將whsquare2.c
/*Printsatableofsquaresusingaforstatement*/
#include<stdio.h>
intmain(void){inti,n;
printf("Thisprogramprintsatableofsquares.\n");printf("Enternumberofentriesintable:");scanf("%d",&n);
for(i=1;i<=n;i++)printf("%10d%10d\n",i,i*i);
return0;}square2.cbreak語句從switch語句中轉(zhuǎn)移出程序控制,但沒有從while循環(huán)中轉(zhuǎn)移出來。printf("Tminus%dandcounting\n",i);for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語句for(i=10;i>0;i);/***WRONG***/c(Section6.Thisprogramprintsatableofsquares.printf("Thesumis:%d\n",sum);i<n成立嗎? 是,繼續(xù)。for(i=10;i>0;i);/***WRONG***/break語句把程序控制轉(zhuǎn)出循環(huán)體。printf("Thenumberhas%ddigit(s).goto語句能跳轉(zhuǎn)到函數(shù)中任何有標(biāo)號(hào)的語句處。}while();}/*emptyloopbody*/;while(…){intmain(void)printf("Error:Divisionbyzero\n");Enterintegers(0toterminate):8237150sum+=i;下面幾種都是合法的形式:C語言對(duì)控制循環(huán)行為的三個(gè)表達(dá)式?jīng)]有加任何限制。
雖然這些表達(dá)式通常對(duì)同一個(gè)變量進(jìn)行初始化、判定和更新,但是不要求它們之間以任何方式進(jìn)行相互關(guān)聯(lián)。程序square3.c
等價(jià)于square2.c,但是包含一個(gè)for語句,它初始化一個(gè)變量(square),判定另一個(gè)變量(i),并對(duì)第三個(gè)變量(odd)進(jìn)行自增操作。
for語句這種極大的靈活性有時(shí)是十分有用的,但是原始的程序無疑更加清晰。程序顯示平方值表格(改進(jìn)版)break語句從switch語句中轉(zhuǎn)移出程序控制,但沒有從wsquare3.c
/*Printsatableofsquaresusinganoddmethod*/
#include<stdio.h>
intmain(void){inti,n,odd,square;
printf("Thisprogramprintsatableofsquares.\n");printf("Enternumberofentriesintable:");scanf("%d",&n);
i=1;odd=3;for(square=1;i<=n;odd+=2){printf("%10d%10d\n",i,square);++i;square+=odd;}
return0;}square3.c通常循環(huán)的退出點(diǎn)是在while或for循環(huán)體之前,或do循環(huán)體之后。使用break語句可以在循環(huán)體中間設(shè)置退出點(diǎn),甚至設(shè)置多個(gè)退出點(diǎn)。退出循環(huán)通常循環(huán)的退出點(diǎn)是在while或for循環(huán)體之前,或do循環(huán)break語句能夠把程序控制從switch語句中轉(zhuǎn)移出來,而且還可以用于跳出while、do或for循環(huán)??梢跃帉懸粋€(gè)循環(huán)用于測(cè)試一個(gè)數(shù)是否是素?cái)?shù),只要發(fā)現(xiàn)一個(gè)約數(shù)就用break語句終止循環(huán) for(d=2;d<n;d++) if(n%d==0) break;break語句break語句能夠把程序控制從switch語句中轉(zhuǎn)移出來,而在循環(huán)終止后,可以用if語句來確定是提前終止(即n不是素?cái)?shù))還是正常終止(n是素?cái)?shù)) if(d<n) printf("%disdivisibleby%d\n",n,d); else printf("%disprime\n",n);break語句在循環(huán)終止后,可以用if語句來確定是提前終止(即n不是素?cái)?shù))break語句特別適合退出點(diǎn)在循環(huán)體中間,而不是循環(huán)體之前或之后的循環(huán)。例如,用于讀入用戶輸入并且在遇到特殊輸入值時(shí)終止的循環(huán) for(;;){ printf("Enteranumber(enter0tostop):"); scanf("%d",&n); if(n==0) break; printf("%dcubedis%d\n",n,n*n*n); }break語句break語句特別適合退出點(diǎn)在循環(huán)體中間,而不是循環(huán)體之前或break語句把程序控制從最內(nèi)層封閉的while、do、for或switch語句中轉(zhuǎn)移出來。當(dāng)這些語句出現(xiàn)嵌套時(shí),break語句只能跳出一層嵌套 while(…){ switch(…){ … break; … } }break語句從switch語句中轉(zhuǎn)移出程序控制,但沒有從while循環(huán)中轉(zhuǎn)移出來。break語句break語句把程序控制從最內(nèi)層封閉的while、do、focontinue語句與break語句類似break語句把程序控制轉(zhuǎn)出循環(huán)體。continue語句把程序控制轉(zhuǎn)移到循環(huán)體結(jié)束之前的一點(diǎn)。break語句使程序控制跳出循環(huán),continue語句把程序控制留在循環(huán)體內(nèi)。break語句和continue語句的另一個(gè)區(qū)別break語句可以在用于switch語句和循環(huán)中,而continue語句則只能用在循環(huán)中。continue語句continue語句與break語句類似continue語句使用continue語句的循環(huán)示例 n=0; sum=0; while(n<10){ scanf("%d",&i); if(i==0) continue; sum+=i; n++; /*continuejumpstohere*/ }continue語句使用continue語句的循環(huán)示例continue語句不用continue語句的相同循環(huán)示例 n=0; sum=0; while(n<10){ scanf("%d",&i); if(i!=0){ sum+=i; n++; } }continue語句不用continue語句的相同循環(huán)示例continue語句例6.5學(xué)生讀程
#include<stdio.h>
voidmain()
{intn;
for(n=100;n<=200;n++)
{if(n%3==0)
continue;
printf("%d″,n);
}
}說明:當(dāng)n能被3整除時(shí),執(zhí)行continue語句,結(jié)束本次循環(huán)(即跳過printf函數(shù)語句),只有n不能被3整除時(shí)才執(zhí)行printf函數(shù)。例6.5學(xué)生讀程
#include<stdio.h>
vo例6.5把100~200之間的不能被3整除的數(shù)輸出。
#include<stdio.h>
voidmain()
{intn;
for(n=100;n<=200;n++)
{if(n%3==0)
continue;
printf("%d″,n);
}
}說明:當(dāng)n能被3整除時(shí),執(zhí)行continue語句,結(jié)束本次循環(huán)(即跳過printf函數(shù)語句),只有n不能被3整除時(shí)才執(zhí)行printf函數(shù)。例6.5把100~200之間的不能被3整除的數(shù)輸出。
#goto語句能跳轉(zhuǎn)到函數(shù)中任何有標(biāo)號(hào)的語句處。標(biāo)號(hào)是放置在語句開始處的標(biāo)識(shí)符 標(biāo)識(shí)符語句一條語句可以有多個(gè)標(biāo)號(hào)。goto語句格式如下 goto標(biāo)識(shí)符;執(zhí)行語句gotoL,把程序控制轉(zhuǎn)移到標(biāo)號(hào)L后的語句上,轉(zhuǎn)移目標(biāo)語句必須與goto語句在同一個(gè)函數(shù)中。goto語句goto語句能跳轉(zhuǎn)到函數(shù)中任何有標(biāo)號(hào)的語句處。goto語句Entercommand:1例如,用于讀入用戶輸入并且在遇到特殊輸入值時(shí)終止的循環(huán)C99中,for語句的第一個(gè)表達(dá)式能被替換為一個(gè)聲明(定義)。loop_done:…gotoloop_done;/*breakwon'tworkhere*/scanf("%d",&n);“0”代表當(dāng)前掃描器“位于空格串中”這一狀態(tài)。程序顯示平方值表格(改進(jìn)版)printf("%disdivisibleby%d\n",n,d);當(dāng)這些語句出現(xiàn)嵌套時(shí),break語句只能跳出一層嵌套printf("Thesumis:%d\n",sum);printf("***ACMEcheckbookbalancingprogram***\n");do語句和while語句沒有本質(zhì)的區(qū)別。case3:如果表達(dá)式為真,也就是不為零,那么繼續(xù)執(zhí)行循環(huán)。break語句從switch語句中轉(zhuǎn)移出程序控制,但沒有從while循環(huán)中轉(zhuǎn)移出來。scanf("%d",&n);printf("*");循環(huán)嵌套中,每層循環(huán)的進(jìn)行都有相應(yīng)的控制機(jī)制(比如循環(huán)變量)。在控制表達(dá)式中使用==代替<,<=,>,或>=。從n1向下減到0 for(i=n1;i>=0;i)…如果C語言沒有break語句,goto語句可以用于退出循環(huán) for(d=2;d<n;d++) if(n%d==0) gotodone; done: if(d<n) printf("%disdivisibleby%d\n",n,d); else printf("%disprime\n",n);goto語句Entercommand:1如果C語言沒有break語句goto語句在日常的C語言編程中很少用到。break、continue和return
等語句本質(zhì)上都是受限制的goto語句,它們和exit函數(shù)一起足夠應(yīng)付其他編程語言中大多數(shù)goto語句的情況。盡管如此,goto語句偶爾還是很有用的。goto語句goto語句在日常的C語言編程中很少用到。goto語句考慮從包含switch語句的循環(huán)中退出的問題。break語句不會(huì)產(chǎn)生期望的效果它可以跳出switch語句,但是無法跳出循環(huán)。goto語句可以解決這個(gè)問題 while(…){ switch(…){ … gotoloop_done;/*breakwon'tworkhere*/ … } } loop_done:…goto語句在需要從嵌套的多層循環(huán)中轉(zhuǎn)出時(shí)還是很有用。goto語句考慮從包含switch語句的循環(huán)中退出的問題。goto語句例6.1用if語句和goto語句構(gòu)成循環(huán)
voidmain()
{inti,sum=0;
i=1;
loop:if(i<=100)
{sum=sum+i;
i++;
gotoloop;
}
printf("%d\\n″,sum);
}說明:這里用的是“當(dāng)型”循環(huán)結(jié)構(gòu),當(dāng)滿足“i<=100”時(shí)執(zhí)行花括弧內(nèi)的循環(huán)體。運(yùn)行結(jié)果:5050例6.1用if語句和goto語句構(gòu)成循環(huán)
voidma許多簡(jiǎn)單的交互式程序都是基于菜單的,它們向用戶顯示可供選擇的命令列表。一旦用戶選擇了某條命令,程序就執(zhí)行相應(yīng)的操作,然后提示用戶輸入下一條命令。這個(gè)過程一直會(huì)持續(xù)到用戶選擇“退出”或“停止”命令。這類程序的核心顯然是循環(huán)。 for(;;){
提示用戶輸入命令;
讀入命令;
執(zhí)行命令; }程序賬本結(jié)算許多簡(jiǎn)單的交互式程序都是基于菜單的,它們向用戶顯示可供選擇的執(zhí)行這個(gè)命令將需要switch語句(或級(jí)聯(lián)式if語句) for(;;){
提示用戶輸入命令;
讀入命令; switch(command){ case命令1:執(zhí)行操作1;break; case命令2:
執(zhí)行操作2;break; . . . case命令n:
執(zhí)行操作n;break; default:顯示錯(cuò)誤信息;break; } }程序賬本結(jié)算執(zhí)行這個(gè)命令將需要switch語句(或級(jí)聯(lián)式if語句)程序賬程序checking.c用這種循環(huán)來維護(hù)賬本的余額程序?qū)橛脩籼峁┻x擇菜單刷新帳戶余額,往帳戶上存錢,從帳戶上取錢,顯示當(dāng)前余額,退出程序。程序賬本結(jié)算程序checking.c用這種循環(huán)來維護(hù)賬本的余額程序賬本結(jié)***ACMEcheckbookbalancingprogram***Commands:0=clear,1=credit,2=debit,3=balance,4=exit
Entercommand:1Enteramountofcredit:1042.56Entercommand:2Enteramountofdebit:133.79Entercommand:1Enteramountofcredit:1754.32Entercommand:2Enteramountofdebit:1400Entercommand:2Enteramountofdebit:68Entercommand:2Enteramountofdebit:50Entercommand:3Currentbalance:$1145.09Entercommand:4程序賬本結(jié)算***ACMEcheckbookbalancingprchecking.c
/*Balancesacheckbook*/
#include<stdio.h>
intmain(void){intcmd;floatbalance=0.0f,credit,debit;
printf("***ACMEcheckbookbalancingprogram***\n");printf("Commands:0=clear,1=credit,2=debit,");printf("3=balance,4=exit\n\n");for(;;){printf("Entercommand:");scanf("%d",&cmd);switch(cmd){case0:balance=0.0f;break;checking.ccase1:printf("Enteramountofcredit:");scanf("%f",&credit);balance+=credit;break;case2:printf("Enteramountofdebit:");scanf("%f",&debit);balance=debit;break;case3:printf("Currentbalance:$%.2f\n",balance);break;case4:return0;default:printf("Commands:0=clear,1=credit,2=debit,");printf("3=balance,4=exit\n\n");break;}}}case1:語句可以為空,即除了末尾的分號(hào)外什么符號(hào)也沒有。下面一行代碼包含三條語句 i=0;;j=1;空語句主要有一個(gè)好處編寫空循環(huán)體的循環(huán)??照Z句語句可以為空,即除了末尾的分號(hào)外什么符號(hào)也沒有??照Z句“1”代表當(dāng)前掃描頭“位于字母串中”這一狀態(tài);continue語句把程序控制轉(zhuǎn)移到循環(huán)體結(jié)束之前的一點(diǎn)。雖然循環(huán)體必須是單獨(dú)的一條語句,但這只是個(gè)技術(shù)問題。這個(gè)過程持續(xù)進(jìn)行直到最終控制表達(dá)式的值變?yōu)榱?。Enterintegers(0toterminate):8237150return0;#include<stdio.1用if語句和goto語句構(gòu)成循環(huán)
voidmain()
{inti,sum=0;
i=1;
loop:if(i<=100)
{sum=sum+i;
i++;
gotoloop;
}
printf("%d\\n″,sum);
}i=1,j=2,k=i+j因?yàn)榭刂票磉_(dá)式是在循環(huán)體執(zhí)行之前進(jìn)行判定。執(zhí)行語句gotoL,把程序控制轉(zhuǎn)移到標(biāo)號(hào)L后的語句上,轉(zhuǎn)移目標(biāo)語句必須與goto語句在同一個(gè)函數(shù)中。/*Printsatableofsquaresusingawhilestatement*/gotoloop_done;/*breakwon'tworkhere*/Enterintegers(0toterminate):8237150使用do語句重寫前面的“倒數(shù)計(jì)數(shù)”程序do語句比while語句更適合,因?yàn)槊總€(gè)整數(shù),即便是0都至少有一位數(shù)字。scanf("%d",&n);{…}…}但是在某一層x中,可能會(huì)使用甚至改變另一層y的控制機(jī)制(比如在x層中引用甚至修改y層的循環(huán)變量的值),這是造成多層循環(huán)難以理解的重要原因??紤]下面尋找素?cái)?shù)的循環(huán) for(d=2;d<n;d++) if(n%d==0) break;如果把條件n%d==0移到循環(huán)控制表達(dá)式中,那么循環(huán)體將會(huì)為空 for(d=2;d<n&&n%d!=0;d++) /*emptyloopbody*/;為了避免混淆,C程序員習(xí)慣性地把空語句單獨(dú)放置一行??照Z句“1”代表當(dāng)前掃描頭“位于字母串中”這一狀態(tài);考慮下面尋找素不小心在if、while或for語句放置了分號(hào)形成空語句會(huì)造成上述語句的提前結(jié)束。例1: if(d==0);/***WRONG***/ printf("Error:Divisionbyzero\n"); 函數(shù)調(diào)用printf不在if語句中,所以無論d的值是否等于0都會(huì)執(zhí)行該函數(shù)。例2: i=10; while(i>0);/***WRONG***/ { printf("Tminus%dandcounting\n",i); i; } while圓括號(hào)后多余的分號(hào)(空語句)造成無限循環(huán)。
空語句不小心在if、while或for語句放置了分號(hào)形成空語句會(huì)造例3: i=11; while(i>0);/***WRONG***/ printf("Tminus%dandcounting\n",i); 循環(huán)體在循環(huán)終止后只執(zhí)行一次;顯示信息如下 Tminus0andcounting例4: for(i=10;i>0;i);/***WRONG***/ printf("Tminus%dandcounting\n",i); 同樣,循環(huán)體只執(zhí)行一次,并顯示相同的信息??照Z句例3:空語句循環(huán)的嵌套一個(gè)循環(huán)體內(nèi)又包含另一個(gè)完整的循環(huán)結(jié)構(gòu)稱為循環(huán)的嵌套。內(nèi)嵌的循環(huán)中還可以嵌套循環(huán),這就是多層循環(huán)。三種循環(huán)(while循環(huán)、do-while循環(huán)和for循環(huán))可以互相嵌套。循環(huán)的嵌套循環(huán)的嵌套下面幾種都是合法的形式:(1)
while()(2)do(3)for(;;){…{…{while()dofor(;;){…}{…}{…}}while();}}while();
循環(huán)的嵌套循環(huán)的嵌套(4)
while()(5)for(;;)(6)do{…{…{…do{…}while()for(;;){}while(){}…{…}…}}}while()
循環(huán)的嵌套循環(huán)嵌套的難點(diǎn)循環(huán)嵌套中,每層循環(huán)的進(jìn)行都有相應(yīng)的控制機(jī)制(比如循環(huán)變量)。但是在某一層x中,可能會(huì)使用甚至改變另一層y的控制機(jī)制(比如在x層中引用甚至修改y層的循環(huán)變量的值),這是造成多層循環(huán)難以理解的重要原因。循環(huán)嵌套的難點(diǎn)循環(huán)嵌套中,每層循環(huán)的進(jìn)行都有相應(yīng)的控制機(jī)循環(huán)嵌套的難點(diǎn)例:intmain(){inti,k,s=0;for(i=1;i<=10;i++) for(k=1;k<=i;k++) s+=k;printf("%d",s);}此程序的作用是什么?打印的結(jié)果是?循環(huán)嵌套的難點(diǎn)例:循環(huán)嵌套的難點(diǎn)例:intmain(){inti,k,s=0;for(i=1;i<=10;i++) for(k=1;k<=i;k++) { if(k%2==0) i++; s+=k;}printf("%d",s);}}此程序的作用是什么?打印的結(jié)果是?循環(huán)嵌套的難點(diǎn)例:程序設(shè)計(jì)算法vs數(shù)學(xué)建模例:使用循環(huán),在屏幕上打印如下圖案:*************************效果:程序設(shè)計(jì)算法vs數(shù)學(xué)建模例:使用循環(huán),在屏幕上打印如下圖程序設(shè)計(jì)算法vs數(shù)學(xué)建模分析:1.將圖形放入笛卡爾坐標(biāo)系(即建模)
**************************************************坐標(biāo)平移程序設(shè)計(jì)算法vs數(shù)學(xué)建模分析:1.將圖形放入笛卡爾坐標(biāo)程序設(shè)計(jì)算法vs數(shù)學(xué)建模2.得到數(shù)學(xué)模型:
0123456-1-2-3-4-5-6打印空格打印空格打印空格打印空格打印星號(hào)程序設(shè)計(jì)算法vs數(shù)學(xué)建模2.得到數(shù)學(xué)模型:012345程序設(shè)計(jì)算法vs數(shù)學(xué)建模3.用數(shù)學(xué)不等式來描述打印星號(hào)區(qū)域:(1)寫出四條邊線的方程(也可先不平移坐標(biāo),寫出原方程后再平移):(x-3)+(y+3)=3,-(x-3)+(y+3)=3,-(x-3)-(y+3)=3,(x-3)-(y+3)=3(2)統(tǒng)一描述為:|x-3|+|y+3|=3(3)故可描述打印星號(hào)區(qū)域?yàn)椋?/p>
|x-3|+|y+3|≤30123456-1-2-3-4-5-6打印星號(hào)yx程序設(shè)計(jì)算法vs數(shù)學(xué)建模3.用數(shù)學(xué)不等式來描述打印星號(hào)程序設(shè)計(jì)算法vs數(shù)學(xué)建模由此得到本程序核心算法的描述:if(當(dāng)前光標(biāo)處于|x-3|+|y+3|≤3的區(qū)域中)
打印*;else打印空格;程序設(shè)計(jì)算法vs數(shù)學(xué)建模由此得到本程序核心算法的描述:程序設(shè)計(jì)算法vs數(shù)學(xué)建模完整程序如下#include<math.h>/*程序中要使用求絕對(duì)值函數(shù)fabs(),需包含此頭文件*/intmain(){intx,y;for(y=0;y>=-6;y--)/*此循環(huán)用于處理行*/{for(x=0;x<=6;x++)/*此循環(huán)用于處理某行中的各列*/if(fabs(x-3)+fabs(y+3)<=3)/*在y行x列中,坐標(biāo)滿足本條件則打印星號(hào),否則打空格*/printf("*");elseprintf(“”);/*可嘗試將此處換成打印減號(hào),結(jié)果更直觀*/printf("\n");/*每處理完一行,需換行*/}}程序設(shè)計(jì)算法vs數(shù)學(xué)建模完整程序如下程序設(shè)計(jì)算法思想描述*例:輸入一個(gè)英文句子,以句號(hào).結(jié)束,計(jì)算其中包含多少單詞(假設(shè)除句號(hào)外輸入的字符均為英文字母或者空格)。分析:把句子看成是由字母序列和空格序列(單詞間可能有多個(gè)空格)交替組成的一個(gè)字符串。程序處理的方式,是對(duì)句子中的所有字符進(jìn)行逐一掃描(可以想象成有一個(gè)掃描頭,不斷地掃描句子中的每個(gè)字符),然后在這個(gè)過程中判定單詞的出現(xiàn),如出現(xiàn)則把計(jì)數(shù)變量加1。
在編制程序前,先思考如何描述這個(gè)掃描的過程??方法:使用狀態(tài)轉(zhuǎn)移圖(或稱狀態(tài)機(jī)):程序設(shè)計(jì)算法思想描述*例:輸入一個(gè)英文句子,以句號(hào).結(jié)束,“1”代表當(dāng)前掃描頭“位于字母串中”這一狀態(tài);“0”代表當(dāng)前掃描器“位于空格串中”這一狀態(tài)。當(dāng)“掃描到字母”事件或者“掃描到空格”事件發(fā)生時(shí),掃描頭的狀態(tài)會(huì)被改變,如圖箭頭所示。程序設(shè)計(jì)算法思想描述*01掃描到空格掃描到字母掃描到空格掃描到字母“1”代表當(dāng)前掃描頭“位于字母串中”這一狀態(tài);程序設(shè)計(jì)算法思我們關(guān)心的是當(dāng)處于狀態(tài)0時(shí),“掃描到字母”事件發(fā)生的情況。這個(gè)時(shí)候意味著什么?——之前掃描到的是空格,現(xiàn)在是個(gè)字母,即意味著掃描到了一個(gè)單詞的開頭!所以此時(shí),計(jì)數(shù)變量加1。程序設(shè)計(jì)算法思想描述*01掃描到空格掃描到字母掃描到空格掃描到字母我們關(guān)心的是當(dāng)處于狀態(tài)0時(shí),“掃描到字母”事件發(fā)生的情況。這語言循環(huán)結(jié)構(gòu)語言循環(huán)結(jié)構(gòu)87(優(yōu)選)語言循環(huán)結(jié)構(gòu)(優(yōu)選)語言循環(huán)結(jié)構(gòu)C語言的重復(fù)語句用于設(shè)置循環(huán)。循環(huán)是重復(fù)執(zhí)行其他語句的一種語句,循環(huán)中重復(fù)執(zhí)行的語句就是循環(huán)體
C語句中,每個(gè)循環(huán)都有一個(gè)控制表達(dá)式。每次執(zhí)行循環(huán)體時(shí)都要對(duì)控制表達(dá)式進(jìn)行計(jì)算。如果表達(dá)式為真,也就是不為零,那么繼續(xù)執(zhí)行循環(huán)。重復(fù)語句C語言的重復(fù)語句用于設(shè)置循環(huán)。重復(fù)語句C提供三種循環(huán)語句:while語句用于判定控制表達(dá)式在循環(huán)體執(zhí)行之前的循環(huán)。do語句用于判定控制表達(dá)式在循環(huán)體執(zhí)行之后的循環(huán)。for語句對(duì)于自增或自減計(jì)數(shù)變量的循環(huán)十分方便。重復(fù)語句C提供三種循環(huán)語句:重復(fù)語句使用while語句是最簡(jiǎn)單、最基本的設(shè)置循環(huán)方法。While語句格式如下 while(表達(dá)式)語句表達(dá)式即為控制表達(dá)式;語句則是循環(huán)體。while語句使用while語句是最簡(jiǎn)單、最基本的設(shè)置循環(huán)方法。whilwhile語句示例 while(i<n)/*控制表達(dá)式*/ i=i*2;/*循環(huán)體*/執(zhí)行while語句時(shí),首先計(jì)算控制表達(dá)式的值。如果值不為零(真),那么執(zhí)行循環(huán)體,接著再次判定表達(dá)式。這個(gè)過程持續(xù)進(jìn)行直到最終控制表達(dá)式的值變?yōu)榱?。while語句while語句示例while語句while語句示例計(jì)算大于或等于數(shù)n的最小的2次冪 i=1; while(i<n) i=i*2;設(shè)n為10時(shí),下面跟蹤顯示了while語句執(zhí)行情況 i=1; i現(xiàn)在值為1. i<n成立嗎? 是,繼續(xù)。 i=i*2; i現(xiàn)在為2. i<n成立嗎? 是,繼續(xù)。 i=i*2; i現(xiàn)在為4。 i<n成立嗎? 是,繼續(xù)。 i=i*2; i現(xiàn)在為8。 i<n成立嗎? 是,繼續(xù)。 i=i*2; i現(xiàn)在為16。 i<n成立嗎? 不成立,退出循環(huán)。while語句while語句示例計(jì)算大于或等于數(shù)n的最小的2次冪while雖然循環(huán)體必須是單獨(dú)的一條語句,但這只是個(gè)技術(shù)問題。如果需要多條語句,那么只要用一對(duì)大括號(hào)構(gòu)造成單獨(dú)一條復(fù)合語句就可以了 while(i>0){ printf("Tminus%dandcounting\n",i); i; }即使沒有嚴(yán)格要求的時(shí)候,一些程序員始終使用大括號(hào)括住循環(huán)體 while(i<n){ i=i*2; }while語句雖然循環(huán)體必須是單獨(dú)的一條語句,但這只是個(gè)技術(shù)問題。whil下面的語句顯示一串“倒數(shù)計(jì)數(shù)”信息 i=10; while(i>0){ printf("Tminus%dandcounting\n",i); i; }整個(gè)過程持續(xù)到顯示信息為“Tminus1andcounting”。while語句下面的語句顯示一串“倒數(shù)計(jì)數(shù)”信息while語句關(guān)于while語句的一些討論在while循環(huán)終止時(shí),控制表達(dá)式的值為假。因此,當(dāng)通過表達(dá)式i>0控制循環(huán)終止時(shí),i必須是小于或等于0的??赡芨静粓?zhí)行while循環(huán)體。因?yàn)榭刂票磉_(dá)式是在循環(huán)體執(zhí)行之前進(jìn)行判定。while語句常常可以有多重寫法。更加簡(jiǎn)明的遞減計(jì)數(shù)循環(huán)如下 while(i>0) printf("Tminus%dandcounting\n",i);while語句關(guān)于while語句的一些討論while語句printf("%disprime\n",n);}while();}intmain(void)scanf("%f",&credit);從1向上加到n for(i=1;i<=n;i++)…loop_done:…/*emptyloopbody*/;printf("Tminus%dandcounting\n",i);for(d=2;d<n;d++)case4:break語句不會(huì)產(chǎn)生期望的效果它可以跳出switch語句,但是無法跳出循環(huán)。printf("Thisprogramprintsatableofsquares.“0”代表當(dāng)前掃描器“位于空格串中”這一狀態(tài)。for(d=2;d<n&&n%d!=0;d++)for(;;){i<n成立嗎? 不成立,退出循環(huán)。如果控制表達(dá)式的值始終是非零值的話,while語句將無法終止。C語句程序員有時(shí)故意用非零常量作為控制表達(dá)式來構(gòu)造無限循環(huán) while(1)…除非循環(huán)體含有跳出循環(huán)控制的語句(break,goto,return)或調(diào)用了導(dǎo)致程序終止的函數(shù),否則上述這種形式的while語句將永遠(yuǎn)執(zhí)行下去。無限循環(huán)printf("%disprime\n",n);如果控程序square.c用一個(gè)while語句顯示平方值表格。用戶指定平方值表格的行數(shù) Thisprogramprintsatableofsquares. Enternumberofentriesintable:5 11 24 39 416 525程序顯示平方值的表格程序square.c用一個(gè)while語句顯示平方值表格。程序square.c
/*Printsatableofsquaresusingawhilestatement*/
#include<stdio.h>
intmain(void){inti,n;
printf("Thisprogramprintsatableofsquares.\n");printf("Enternumberofentriesintable:");scanf("%d",&n);
i=1;while(i<=n){printf("%10d%10d\n",i,i*i);i++;}
return0;}square.c程序sum.c對(duì)用戶輸入的整數(shù)數(shù)列求和 Thisprogramsumsaseriesofintegers. Enterintegers(0toterminate):8237150 Thesumis:107程序需要使用循環(huán),循環(huán)采用scanf函數(shù)讀取用戶輸入數(shù),然后再把這個(gè)數(shù)加到運(yùn)算的總和中。程序數(shù)列求和程序sum.c對(duì)用戶輸入的整數(shù)數(shù)列求和程序數(shù)列求和sum.c
/*Sumsaseriesofnumbers*/
#include<stdio.h>
intmain(void){intn,sum=0;
printf("Thisprogramsumsaseriesofintegers.\n");printf("Enterintegers(0toterminate):");
scanf("%d",&n);while(n!=0){sum+=n;scanf("%d",&n);}printf("Thesumis:%d\n",sum);
return0;}sum.c例6.3求1到100的和
學(xué)生練習(xí)運(yùn)行結(jié)果:5050例6.3求1到100的和
學(xué)生練習(xí)運(yùn)行結(jié)果:5050第二,計(jì)算表達(dá)式2并將計(jì)算結(jié)果作為整個(gè)逗號(hào)表達(dá)式的結(jié)果。如果需要多條語句,那么只要用一對(duì)大括號(hào)構(gòu)造成單獨(dú)一條復(fù)合語句就可以了除非循環(huán)體含有跳出循環(huán)控制的語句(break,goto,return)或調(diào)用了導(dǎo)致程序終止的函數(shù),否則上述這種形式的while語句將永遠(yuǎn)執(zhí)行下去。表達(dá)式1、表達(dá)式2和表達(dá)式3全都是表達(dá)式?!跋蛳聹p使用>或〉=運(yùn)算符。return0;scanf("%d",&n);printf("%10d%10d\n",i,square);通常循環(huán)的退出點(diǎn)是在while或for循環(huán)體之前,或do循環(huán)體之后。Enterintegers(0toterminate):8237150while(i>0){說明:當(dāng)n能被3整除時(shí),執(zhí)行continue語句,結(jié)束本次循環(huán)(即跳過printf函數(shù)語句),只有n不能被3整除時(shí)才執(zhí)行printf函數(shù)。在for語句中省略表達(dá)式case2:printf("***ACMEcheckbookbalancingprogram***\n");如果值不為零(真),那么執(zhí)行循環(huán)體,接著再次判定表達(dá)式。scanf("%d",&n);如果把條件n%d==0移到循環(huán)控制表達(dá)式中,那么循環(huán)體將會(huì)為空使用break語句可以在循環(huán)體中間設(shè)置退出點(diǎn),甚至設(shè)置多個(gè)退出點(diǎn)。例6.2求1到100的和
#include<stdio.h>
voidmain()
{inti,sum=0;
i=1;
while(i<=100)
{sum=sum+i;
i++;
}
printf(″%d\\n″,sum);
}說明:(1)循環(huán)體如果包含一個(gè)以上的語句,應(yīng)該用花括弧括起來,以復(fù)合語句形式出現(xiàn).(2)在循環(huán)體中應(yīng)有使循環(huán)趨向于結(jié)束的語句。
運(yùn)行結(jié)果:5050第二,計(jì)算表達(dá)式2并將計(jì)算結(jié)果作為整個(gè)逗號(hào)表達(dá)式的結(jié)果。例6do語句的一般格式如下 do語句while(表達(dá)式);執(zhí)行do語句時(shí),先執(zhí)行循環(huán)體,再計(jì)算控制表達(dá)式的值。如果表達(dá)式的值非零,那么再次執(zhí)行循環(huán)體,然后再次計(jì)算表達(dá)式的值。do語句do語句的一般格式如下do語句使用do語句重寫前面的“倒數(shù)計(jì)數(shù)”程序 i=10; do{ printf("Tminus%dandcounting\n",i); i; }while(i>0);do語句和while語句沒有本質(zhì)的區(qū)別。唯一的不同在于do語句的循環(huán)體至少會(huì)被執(zhí)行一次。do語句使用do語句重寫前面的“倒數(shù)計(jì)數(shù)”程序do語句最好對(duì)所有的do語句都使用大括號(hào)包括循環(huán)體,因?yàn)闆]有大括號(hào)的do語句很容易被誤認(rèn)為是while語句 do printf("Tminus%dandcounting\n",i); while(i>0);粗心的讀者可能會(huì)把單詞while誤認(rèn)為是while語句的開始。do語句while(i<=100)最好對(duì)所有的do語句都使用大括號(hào)包括循環(huán)體,因?yàn)闆]有大括號(hào)的例6.3求1到100的和
運(yùn)行結(jié)果:5050例6.3求1到100的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)村材料合同范本
- 動(dòng)產(chǎn)汽車互易合同范本
- 企業(yè)投資期權(quán)合同范本
- 2024年徐州市凱信電子設(shè)備有限公司招聘考試真題
- 勞動(dòng)關(guān)系合同范本
- 2024年西安醫(yī)學(xué)院第一附屬醫(yī)院灃東醫(yī)院招聘筆試真題
- 2024年臺(tái)州仙居縣人民醫(yī)院醫(yī)共體招聘工作人員筆試真題
- 2024鞍鋼資本金融管理業(yè)務(wù)人才招聘4人筆試參考題庫(kù)附帶答案詳解
- 第16課《誡子書》教學(xué)設(shè)計(jì) 2024-2025學(xué)年統(tǒng)編版語文七年級(jí)上冊(cè)
- 出售環(huán)衛(wèi)用車合同范本
- 2025年湖南城建職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)新版
- 《中國(guó)古代文學(xué)史及作品選II》教學(xué)大綱
- 代工生產(chǎn)合同范本
- 瑜伽課程合同轉(zhuǎn)讓協(xié)議書范本
- 個(gè)人經(jīng)營(yíng)性貸款合同模板
- 人教版英語2025七年級(jí)下冊(cè) Unit1Animal Friends教師版 語法講解+練習(xí)
- DeepSeek新手入門教程
- 課件:《教育強(qiáng)國(guó)建設(shè)規(guī)劃綱要(2024-2035年)》學(xué)習(xí)宣講
- 2025年山東化工職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
- 2025年全國(guó)幼兒園教師資格證考試教育理論知識(shí)押題試題庫(kù)及答案(共九套)
- 2024年鄭州電力高等??茖W(xué)校高職單招職業(yè)適應(yīng)性測(cè)試歷年參考題庫(kù)含答案解析
評(píng)論
0/150
提交評(píng)論