C語(yǔ)言程序的控制結(jié)構(gòu)_第1頁(yè)
C語(yǔ)言程序的控制結(jié)構(gòu)_第2頁(yè)
C語(yǔ)言程序的控制結(jié)構(gòu)_第3頁(yè)
C語(yǔ)言程序的控制結(jié)構(gòu)_第4頁(yè)
C語(yǔ)言程序的控制結(jié)構(gòu)_第5頁(yè)
已閱讀5頁(yè),還剩73頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第三章 程序的控制結(jié)構(gòu)3.1 程序的基本結(jié)構(gòu)3.2 簡(jiǎn)單語(yǔ)句與復(fù)合語(yǔ)句3.3 選擇結(jié)構(gòu)3.4 循環(huán)結(jié)構(gòu)3.5 編譯預(yù)處理3.13.1程序的基本結(jié)構(gòu)程序的基本結(jié)構(gòu)程序的基本結(jié)構(gòu)有三種:順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu) 前面的例子都是順序結(jié)構(gòu),大量的實(shí)際問題需要通過各種控制流程來解決。分支和循環(huán)結(jié)構(gòu)的控制語(yǔ)句有:條件語(yǔ)句:if語(yǔ)句開關(guān)語(yǔ)句:switch語(yǔ)句循環(huán)語(yǔ)句:for語(yǔ)句 、while語(yǔ)句、do while語(yǔ)句轉(zhuǎn)移語(yǔ)句:break、continue、goto語(yǔ)句33.1程序的基本結(jié)構(gòu)圖圖3.4 while型循環(huán)結(jié)構(gòu)型循環(huán)結(jié)構(gòu)入口入口假假出口出口SA圖圖3.5 do-while型循環(huán)結(jié)構(gòu)型循環(huán)結(jié)構(gòu)入

2、口入口假假出口出口AS真真53.2 簡(jiǎn)單語(yǔ)句和復(fù)合語(yǔ)句簡(jiǎn)單語(yǔ)句:均是以“;”結(jié)尾的語(yǔ)句 。z=x+y;c=getchar();復(fù)合語(yǔ)句:復(fù)合語(yǔ)句是用花招號(hào)“ ”把“說明”和若干個(gè)有序的簡(jiǎn)單語(yǔ)句組合在一起而構(gòu)成的語(yǔ)句集合。其一般形式是:63.2 簡(jiǎn)單語(yǔ)句和復(fù)合語(yǔ)句復(fù)合語(yǔ)句實(shí)例:int i,j,k;i=i+1;j=j*2;空語(yǔ)句:空語(yǔ)句的含義是什么動(dòng)作都不執(zhí)行,語(yǔ)句本身僅有一個(gè)分號(hào)。 while (putchar(getchar()!=n);空語(yǔ)句空語(yǔ)句問題提出:計(jì)算分段函數(shù): y=3-x x02/x x0解題的步驟:輸入xx0是 y=3-xy=2/x否 輸出y的值 C語(yǔ)言提供的選擇結(jié)構(gòu)有兩種:

3、if語(yǔ)句、switch語(yǔ)句。 3.3 選擇結(jié)構(gòu)選擇結(jié)構(gòu)3.3.1 if 3.3.1 if 語(yǔ)句語(yǔ)句ifif語(yǔ)句:對(duì)所給條件進(jìn)行判定,根據(jù)判定結(jié)果決定是語(yǔ)句:對(duì)所給條件進(jìn)行判定,根據(jù)判定結(jié)果決定是 否執(zhí)行程序段。否執(zhí)行程序段。 語(yǔ)句形式:語(yǔ)句形式: if (表達(dá)式) 語(yǔ)句; 語(yǔ)句執(zhí)行流程:語(yǔ)句執(zhí)行流程: 表達(dá)式語(yǔ)句真(非0)假(0)例例3-1:讀程序,理解數(shù)值作為讀程序,理解數(shù)值作為if 表達(dá)式表達(dá)式 #include void main() int i=10,m=3; if(i!=0) printf(“i is not 0n”); if(m) printf(“m is not 0n”);程序運(yùn)

4、行結(jié)果:i is not 0m is not 0例例3-2:讀程序,理解讀程序,理解”=”與與”=”的作用及區(qū)別的作用及區(qū)別#include void main() int m=10; if(m=100) printf(“m=%d”,m); if(m=100) printf(“m is assigned %dn”,m);程序運(yùn)行結(jié)果: m is assigned 100if (表達(dá)式) 語(yǔ)句1; else 語(yǔ)句2;表達(dá)式語(yǔ)句1真(非0)假(0)語(yǔ)句23.3.2 if-else 3.3.2 if-else 語(yǔ)句語(yǔ)句if-else 語(yǔ)句適合于解決雙分支選擇問題語(yǔ)句形式:語(yǔ)句形式:語(yǔ)句執(zhí)行流程:語(yǔ)句

5、執(zhí)行流程:例例3-3:輸入一個(gè)整數(shù),判斷該整數(shù)的奇偶性輸入一個(gè)整數(shù),判斷該整數(shù)的奇偶性#include void main() int m; printf(“input m:”); scanf(“%d”,&m); if(m%2=0) printf(“%d 是偶數(shù)n”,m); else printf(“%d 是奇數(shù)n”,m);輸入mm%2=0偶數(shù)結(jié)束真假奇數(shù)例例3-4:讀程序,理解浮點(diǎn)數(shù)的運(yùn)算與比較讀程序,理解浮點(diǎn)數(shù)的運(yùn)算與比較#include void main() float f; f=1.0; f=f/13.0; f=f*13.0; if( f=1.0) printf( “f is

6、 still 1.0n”); else printf( “f isnt still 1.0n”);程序運(yùn)行結(jié)果:f isnt 1.0注意:注意:有的有的if-else語(yǔ)句可以用語(yǔ)句可以用條件運(yùn)算符(?條件運(yùn)算符(? :):)來實(shí)現(xiàn)來實(shí)現(xiàn)if(ab) max=a;else max=b;max=(ab)?a:b;例例3-5:輸入一個(gè)英文字符,若為大寫則改為小寫,輸輸入一個(gè)英文字符,若為大寫則改為小寫,輸出得到的字符。出得到的字符。#include void main() char zm; scanf(“%c”,&zm); zm=(zm=A& zm=Z)?(zm+32):zm) ;

7、printf(“%c”,zm);程序運(yùn)行結(jié)果:程序運(yùn)行結(jié)果:B Bb bif (表達(dá)式1) 語(yǔ)句1;else if (表達(dá)式2)語(yǔ)句2; else if (表達(dá)式n)語(yǔ)句n; else 語(yǔ)句n+1;3.3.3 3.3.3 嵌套的嵌套的if-else if-else 語(yǔ)句語(yǔ)句語(yǔ)句形式:語(yǔ)句形式:表達(dá)式1語(yǔ)句1真(非0)假(0)語(yǔ)句2表達(dá)式2真(非0)表達(dá)式2語(yǔ)句n語(yǔ)句n+1假(0)假(0)語(yǔ)句執(zhí)行流程:語(yǔ)句執(zhí)行流程:例例3-6:將將0100分的百分制換算成分的百分制換算成AE的五級(jí)學(xué)分制。的五級(jí)學(xué)分制。#include void main() int s; scanf(“%d”,&s);

8、 if(s=90) printf(“score is An”); else if(s=80) printf(“score is Bn”); 程序運(yùn)行結(jié)果:84Belse if(s=70) printf(“score is Cn”); else if(s=60) printf(“score is Dn”);else printf(“score is en”);例例3.7:計(jì)算分段函數(shù)計(jì)算分段函數(shù):假輸入xX0真X=0y=1y=0y=-1假真 y=-1 (x0)#include void main() int x,y; scanf( %f ,&x); if (x0) y=-1; else

9、if (x=0) y=0; else y=1; printf(x=%d,y=%dn,x,y); 語(yǔ)句形式:語(yǔ)句形式: switch (表達(dá)式) case 常量1: 語(yǔ)句 1; case 常量2: 語(yǔ)句2; case 常量3: 語(yǔ)句3; . case 常量n: 語(yǔ)句n; default : 語(yǔ)句n+1; 。整型或字符型常量表達(dá)式的值必須互不相同,否則執(zhí)行時(shí)將出現(xiàn)矛盾,即同一個(gè)開關(guān)值,將對(duì)應(yīng)多種執(zhí)行方案。千萬不能接(;)號(hào)3.3.4 switch 3.3.4 switch 語(yǔ)句語(yǔ)句語(yǔ)句執(zhí)行流程:語(yǔ)句執(zhí)行流程:指語(yǔ)句的最指語(yǔ)句的最后一條是否后一條是否為為breakbreak簡(jiǎn)單語(yǔ)句或簡(jiǎn)單語(yǔ)句或復(fù)合語(yǔ)

10、句復(fù)合語(yǔ)句breakbreakbreakbreak有有無breakbreak有無有計(jì)算表達(dá)式計(jì)算表達(dá)式常量常量1 1常量常量2 2常量常量n n=語(yǔ)句語(yǔ)句1 1=語(yǔ)句語(yǔ)句2 2語(yǔ)句語(yǔ)句n n其它其它=語(yǔ)句語(yǔ)句n+1n+1無值值casecase語(yǔ)句出語(yǔ)句出現(xiàn)的次序并現(xiàn)的次序并不影響執(zhí)行不影響執(zhí)行結(jié)果。結(jié)果。例例3-8: 按照考試成績(jī)等級(jí)打印出百分制分?jǐn)?shù)段。按照考試成績(jī)等級(jí)打印出百分制分?jǐn)?shù)段。程序運(yùn)行結(jié)果:B8089#include void main() char grade; scanf( %c ,&grade); switch(grade) case A printf(”90100n

11、”);break; case B printf (”8089n”); break; case C printf (”7079n”); break; case D printf (”6069n”); break; case E printf (”059n”); break; default printf (“errorn”); switch 的嵌套的嵌套:switch語(yǔ)句允許嵌套,即語(yǔ)句允許嵌套,即switch本本身可以作為另一個(gè)層身可以作為另一個(gè)層switch語(yǔ)句的一部分語(yǔ)句的一部分switch( i ) case 0: switch ( j ) case 0:printf( “i= =j”)

12、;break; case 1:printf(“ij”); break;case 1:.switch幾個(gè)注意點(diǎn)幾個(gè)注意點(diǎn)1、if語(yǔ)句能測(cè)試關(guān)系和邏輯表達(dá)式,而switch只能測(cè)試相等。2、switch語(yǔ)句的每個(gè)case后面的常數(shù)必須是整型或字符型,在使用字符常量時(shí),自動(dòng)轉(zhuǎn)換成整數(shù)。3、switch語(yǔ)句中每個(gè)case常數(shù)必須不同。已知:int a,b;下列switch語(yǔ)句中,( )是正確的。(A)switch(a) (B)switch(a+b) case a: a+;break; case 1: a+; case b: b+;break; case 2: b+; (C)switch(a*b) (D

13、)switch(a/10+b) case 1,2: a+b; case a+b: +a;break; case 3,4: a-b; case a-b: -b; B# include void main() int a=2,b=-1,c=2; if(ab) if(by); (B) if(x=y) x+=y; (C) if(x!=y) x=x*x else x+=1; (D) if(xy) x+;y+;C 在C語(yǔ)言中有三種循環(huán)結(jié)構(gòu):while,do-while和for循環(huán),利用 有關(guān)的運(yùn)算符構(gòu)造表達(dá)式,以控制循環(huán)的執(zhí)行。3.4 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu) 循環(huán): 就是在給定的條件成立時(shí)反復(fù)執(zhí)行某一程序段,被

14、反復(fù)執(zhí)行的程序段稱為循環(huán)體。1、while 語(yǔ)句的形式: while (表達(dá)式) 循環(huán)體; 3.4.1 while3.4.1 while語(yǔ)句語(yǔ)句2 、 while 語(yǔ)句 常稱為“當(dāng)型”循環(huán)語(yǔ)句。真(非零)循環(huán)體假(零)表達(dá)式3、說明:先判斷表達(dá)式,后執(zhí)行語(yǔ)句。表達(dá)式同if語(yǔ)句后的表達(dá)式一樣,可以是任何類型的表達(dá)式。 循環(huán)體多于一句時(shí),用一對(duì) 括起。while循環(huán)結(jié)構(gòu)常用于循環(huán)次數(shù)不固定,根據(jù)是否滿足某個(gè)條件決定循環(huán)與否的情況。 例:分析下列程序段的循環(huán)次數(shù)例:分析下列程序段的循環(huán)次數(shù)i=1; while (i=100) putchar(*); i+; i=1; while (i=100) pu

15、tchar(*); i+; 例例3- 9:用用while編程實(shí)現(xiàn)編程實(shí)現(xiàn)1100的和。的和。#include void main() int i,sum; i=1; sum=0 ; while (i=100) sum=sum+i; i+; printf(%dn,sum); 程序運(yùn)行結(jié)果: 5050例例3-10:用用while語(yǔ)句語(yǔ)句 計(jì)算計(jì)算n!。#include void main() int n,m,temp; scanf(“%d”,&n); m=1; temp=n; while (n=1) m=m*n; n-; printf(“%d!=%dn”,temp,m); 程序運(yùn)行結(jié)果:

16、55!=120注意表達(dá)式在判斷前,必須要有明確的值。 循環(huán)體中一般有改變條件表達(dá)式的語(yǔ)句。 while (表達(dá)式)后面沒有分號(hào)。 3.4.2 3.4.2 do-do-while-while語(yǔ)句語(yǔ)句1、 do-while的形式: do 循環(huán)體; while (表達(dá)式);2、 do-while語(yǔ)句 常稱為“直到型”循環(huán)語(yǔ)句。真(非零)表達(dá)式 循環(huán)體假(零)例例3-10:用用do-while編程實(shí)現(xiàn)編程實(shí)現(xiàn)1100的和。的和。#include void main() int i, sum=0 ; i=1; do sum=sum+i; i+; while (i=100); printf(%dn,sum

17、); 程序運(yùn)行結(jié)果: 5050例例3-11:用用while語(yǔ)句語(yǔ)句 計(jì)算計(jì)算5!。#include void main() int t=1,i=2; do t=t*i; i+; while (i=5); printf(“5!=%dn”,t); 程序運(yùn)行結(jié)果: 55!=1203、說明:do-while語(yǔ)句先執(zhí)行語(yǔ)句,后判斷表達(dá)式。第一次條件為真時(shí),while,do-while等價(jià);第一次條件為假時(shí),二者不同。void main() int i,sum=0; scanf(%d,&i); do sum += i;i+; while(i=10); printf(%d,sum);void mai

18、n() int i,sum=0; scanf(%d,&i); while(i=10) sum += i;i+; printf(%d,sum);在if、while語(yǔ)句中,表達(dá)式后面都沒有分號(hào),而在do-while語(yǔ)句的表達(dá)式后面則必須加分號(hào)。do-while和while語(yǔ)句相互替換時(shí),要注意修改循環(huán)控制條件 。3.4.3 for語(yǔ)句1 1、forfor的形式:的形式:for (for (初始表達(dá)式初始表達(dá)式1 1;條件表達(dá)式;條件表達(dá)式2 2;循環(huán)表達(dá)式;循環(huán)表達(dá)式3 3) 循環(huán)體循環(huán)體 ; ; 表達(dá)式1:用于循環(huán)開始前為循環(huán)變量設(shè)置初始值。表達(dá)式2:控制循環(huán)執(zhí)行的條件,決定循環(huán)次數(shù)表達(dá)

19、式3:循環(huán)控制變量修改表達(dá)式。循環(huán)體語(yǔ)句: 被重復(fù)執(zhí)行的語(yǔ)句。表達(dá)式3計(jì)算表達(dá)式1循環(huán)體判斷表達(dá)式2零非零非零for的下一條語(yǔ)句2 2、執(zhí)行過程、執(zhí)行過程例例3- 13:用用for語(yǔ)句編程實(shí)現(xiàn)語(yǔ)句編程實(shí)現(xiàn)1100的和。的和。#include void main() int i,sum=0; for(i=1;i=100;i+) sum=sum+i ;printf(“%dn”,sum); 程序運(yùn)行結(jié)果: 5050例例3- 14:用用for語(yǔ)句編程計(jì)算語(yǔ)句編程計(jì)算19的乘法表。的乘法表。#include void main() int i,j; for(i=1,j=1;i10;i+,j+) prin

20、tf(%d*%d=%4dn,i,j,i*j); 注意:三個(gè)表達(dá)式都可以是逗號(hào)表達(dá)式。 三個(gè)表達(dá)式都是任選項(xiàng),都可以省略,但要注意省略表達(dá)式后,分號(hào)間隔符不能省略。(1)表達(dá)式表達(dá)式1可以省略可以省略 for(;i100;i+) /分號(hào)不能省略分號(hào)不能省略 sum+=i; (2)表達(dá)式表達(dá)式2可以省略可以省略 for (i=1;i+) /等效于等效于for(i=1;1;i+) sum+=i; (3)表達(dá)式表達(dá)式3可以省略可以省略 for(i=1;i=100;) sum+=i+; (4)表達(dá)式表達(dá)式1和表達(dá)式和表達(dá)式3可以同時(shí)省略可以同時(shí)省略 for(;i100) break; sum+=i+;i

21、f(i100) break;(1)在進(jìn)入累加前先給累加器賦初值(一般為0);(2)用循環(huán)語(yǔ)句實(shí)現(xiàn)累加;for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量改變規(guī)律)(3)循環(huán)體語(yǔ)句的設(shè)計(jì)。 累加器當(dāng)前值=累加器原值+循環(huán)變量當(dāng)前值 ;典型例題分析【例】 求累加和1+2+3+1000基本方法:屬于“累加器”類型問題。 累加器賦初值思考:求偶數(shù)和2+4+6+100參考程序:void main() long int k,s; s=0; for(k=1;k=1000;k+) s=s+k; printf( s=%ld ,s); 累加(1)給累乘器賦初值,一般為1;(2)用循環(huán)語(yǔ)句實(shí)現(xiàn)累乘; for(循環(huán)變量賦初值

22、;循環(huán)條件;循環(huán)變量改變規(guī)律)(3)循環(huán)體設(shè)計(jì)。 累乘器當(dāng)前值=累乘器原值*循環(huán)變量當(dāng)前值; 例: 求累乘積。 如:123.100基本方法:屬于“累乘器”類型問題。 累乘器賦初值思考:求n!=1 2 3 n參考程序:void main() double s=1; int k; for(k=1;k=100;k+) s=s*k; printf( s=%lf ,s);累乘 整數(shù)連乘結(jié)果一定是整數(shù),而本例中結(jié)果數(shù)值相當(dāng)大,用long型都無法存放,因此將存放累乘結(jié)果的變量s定義為double型。 在循環(huán)體語(yǔ)句中又包含有另一個(gè)完整的循環(huán)結(jié)構(gòu)的形式,稱為循環(huán)的嵌套。如果內(nèi)循環(huán)體中又有嵌套的循環(huán)語(yǔ)句,則構(gòu)成多

23、重循環(huán)。3.4.4 3.4.4 循環(huán)的嵌套循環(huán)的嵌套嵌套在循環(huán)體內(nèi)的循環(huán)體稱為內(nèi)循環(huán),外面的循環(huán)稱為外循環(huán)。while 、do-while、for三種循環(huán)都可以互相嵌套。下面幾種都是合法的形式:(1) while( ) (2) do (3) for(;) while( ) do for(;) while( ); while( ); (4) while( ) (5) for(;) (6) do do while( ) for(;) while( ); while( ); 循環(huán)語(yǔ)句之間的關(guān)系循環(huán)語(yǔ)句之間的關(guān)系for(.).for(.).內(nèi)循環(huán)外循環(huán)for(.).for(.). 并列循環(huán)嵌套循環(huán)真真

24、外循環(huán)初始條件內(nèi)循環(huán)初始條件內(nèi)循環(huán)體外循環(huán)條件假內(nèi)循環(huán)條件假內(nèi)循環(huán)循環(huán)條件外循環(huán)循環(huán)條件循環(huán)結(jié)束二重循環(huán)嵌套結(jié)構(gòu)執(zhí)行流程 例例3-15 編程輸出如下形式的九九乘法表編程輸出如下形式的九九乘法表1 2 3 4 5 6 7 8 91 2 3 4 5 6 7 8 92 4 6 810121416183 6 91215182124274 8121620242832365101520253035404561218243036424854714212835424956638162432404856647291827364554637281#include void main() int i,j; for

25、(i=1;i=9;i+) printf(%4d,i); /*打印表頭,第一行打印表頭,第一行*/ printf(n); for(i=1;i=36;i+) printf (%c,-); printf (n); for (i=1;i=9; i+) /*被乘數(shù)被乘數(shù)i從從1變到變到9*/ for (j=1;j=9;j+) /*乘數(shù)乘數(shù)j從從1變到變到9*/ printf (%4d,i*j); /*輸出第輸出第i行行j列的值列的值i*j*/ printf (n); /*換行,打印下一行換行,打印下一行*/ main() int i,j,k,m=0; for(i=1;i4;i+) for(j=1;j4;

26、j+) for(k=1;k4;k+) m+; printf(M=%d,m); (1) 以上程序輸出M=( )。 (A) 3 (B) 6(C) 9(D) 27(2) 如果在以上程序中語(yǔ)句m+; 之前增加一條語(yǔ)句:if(!(i=j|i=k|j=k),則輸出M=( )。 (A) 3 (B) 6 (C) 9 (D) 27 1.break1.break語(yǔ)句語(yǔ)句3.4.5 break3.4.5 break語(yǔ)句和語(yǔ)句和continuecontinue語(yǔ)句語(yǔ)句(1) 語(yǔ)句形式: break;(2)作用: 結(jié)束break所在的 switch語(yǔ)句。 結(jié)束當(dāng)前循環(huán),跳出break所在的循環(huán)結(jié)構(gòu)。 例例3-16:計(jì)算

27、半徑為計(jì)算半徑為1,28的圓面積,但當(dāng)面積大于的圓面積,但當(dāng)面積大于100時(shí)結(jié)束計(jì)算。時(shí)結(jié)束計(jì)算。#include void main() int r; float area; for(r=1;r100) break; printf(“%n”,area); 程序運(yùn)行結(jié)果: 3.14000012.56000028.26000050.24000278.500000例例3-17:break語(yǔ)句用法示例語(yǔ)句用法示例#include void main() int i; for(i=0;i=6;i+) printf(“%dn”,i); if(i=5) break; 程序運(yùn)行結(jié)果: 012345思考:為什

28、么不輸出6(1)語(yǔ)句形式: continue;(2)語(yǔ)句作用: 結(jié)束本次循環(huán)。2 2、continue continue 語(yǔ)句語(yǔ)句(3)語(yǔ)句執(zhí)行流程: continue語(yǔ)句可以結(jié)束本次循環(huán),即不再執(zhí)行循環(huán)體中continue 語(yǔ)句之后的語(yǔ)句,轉(zhuǎn)入下一次循環(huán)條件的判斷與執(zhí)行。 例例3-18:continue語(yǔ)句用法示例語(yǔ)句用法示例#include void main() int i; for(i=0;i=6;i+) if(i=5) continue; printf(“%dn”,i); 程序運(yùn)行結(jié)果: 012346例例3-193-19:輸出輸出150150之間不能被之間不能被3 3整除的數(shù)。整除的

29、數(shù)。 #include void main()int n; for(n=1;n=50;n+) if(n%3=0) continue; printf(“%d”,n); while(條件) 語(yǔ)句A; break; 語(yǔ)句 B; 真語(yǔ)句B條件語(yǔ)句Abreak假結(jié)束循環(huán)3、break語(yǔ)句與continue語(yǔ)句的區(qū)別至此位置while(條件) 語(yǔ)句A; continue; 語(yǔ)句 B; 真語(yǔ)句B條件語(yǔ)句Acontinue假結(jié)束循環(huán)至此位置#include stdio.hvoid main()int a, b; for(a=1,b=1; a=10) break; if(b%3=1) b+=3; continu

30、e; printf(%dn,a);【例例】 分析以下程序的運(yùn)行結(jié)果。分析以下程序的運(yùn)行結(jié)果。 44、goto語(yǔ)句的使用 語(yǔ)法結(jié)構(gòu): goto 標(biāo)識(shí)符; 作用:無條件轉(zhuǎn)向,常用于跳出某種嵌套較深的結(jié)構(gòu),比如一次跳出二層甚至更多層嵌套循環(huán),而break語(yǔ)句只能跳出最里一層循環(huán)。 注意:goto語(yǔ)句是一種可以讓程序員任意控制流程的有效工具,使得程序很靈活,但對(duì)結(jié)構(gòu)化的程序設(shè)計(jì)而言,goto語(yǔ)句的使用會(huì)使得 程序無規(guī)律,可讀性差,所以我們主張但是不是絕對(duì)禁止地 限制使用goto語(yǔ)句。標(biāo)識(shí)符是指標(biāo)識(shí)符是指goto語(yǔ)句的轉(zhuǎn)語(yǔ)句的轉(zhuǎn)移目標(biāo),它必須是局限于移目標(biāo),它必須是局限于當(dāng)前函數(shù)的標(biāo)號(hào),命名格當(dāng)前函數(shù)的

31、標(biāo)號(hào),命名格式與變量名相同。式與變量名相同。#include stdio.hvoid main()int i,j;for(i=2;i=500;i+) for(j=2;j=i/2;j+) if(i%j=0) goto ll; printf(“%4d”,i); ll:;【例例】 用逐個(gè)判別法輸出用逐個(gè)判別法輸出25002500以內(nèi)的所有素?cái)?shù)。以內(nèi)的所有素?cái)?shù)。 3.5 編譯預(yù)處理編譯預(yù)處理作用:對(duì)源程序編譯之前做一些處理,生成擴(kuò)展C源程序種類 宏替換 #define 文件包含 #include 條件編譯 #if-#else-#endif等格式: “#”開頭 占單獨(dú)書寫行 語(yǔ)句尾不加分號(hào)不帶參數(shù)宏定義

32、 一般形式: #define 宏名 宏體 功能:用指定標(biāo)識(shí)符(宏名)代替字符序列(宏體) 宏展開:預(yù)編譯時(shí),用宏體替換宏名-不作語(yǔ)法檢查#include #define PI 3.1415926 void main() float l,s,r,v; printf(input radius:); scanf(%f,&r); l=2.0*PI*r; s=PI*r*r; v=4.0/3*PI*r*r*r;printf(l=%10.4fns=%10.4fnv=%10.4fn,l,s,v);程序運(yùn)行結(jié)果: l= 25.1327s= 50.2655v= 150.7964帶參數(shù)宏定義 一般形式: #

33、define 宏名(參數(shù)表) 宏體例 #define S (r) PI*r*r相當(dāng)于定義了不帶參宏S,代表字符串“(r) PI*r*r” 宏展開:形參用實(shí)參換,其它字符保留 宏體及各形參外一般應(yīng)加括號(hào)()例 #define S(a,b) a*b . area = S(3,2);宏展開: area = 3*2;不能加空格例如:下面程序運(yùn)行的結(jié)果是( )。#define f(x) 1+x+x*x#includevoid main() int a=2,b=3; printf(%dn,f(a+b); (A)17 (B)31 (C)13 (D)7#include #define PI 3.1415926

34、#define S(r) PI*r*rvoid main() float a,Area; scanf(“a=%f”,&a); Area=S(a); printf(Area=%fn, Area);運(yùn)行情況如下:a=3.6Area=40.715038例例3-213-21 用帶參數(shù)宏實(shí)現(xiàn)圓面積的計(jì)算用帶參數(shù)宏實(shí)現(xiàn)圓面積的計(jì)算賦值語(yǔ)句“area=S(a); ” 經(jīng)宏展開后為:area=3.1415926*; 例如:下面程序運(yùn)行的結(jié)果是( )。#define f(x) 1+x+x*x#includevoid main() int a=2,b=3; printf(%dn,f(a+b); (A)17 (B)31 (C)13 (D

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論