C語言教程版講義譚浩強第四章ppt課件_第1頁
C語言教程版講義譚浩強第四章ppt課件_第2頁
C語言教程版講義譚浩強第四章ppt課件_第3頁
C語言教程版講義譚浩強第四章ppt課件_第4頁
C語言教程版講義譚浩強第四章ppt課件_第5頁
已閱讀5頁,還剩47頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第四章 C程序流程設計4.1 C語句概述C語句:以“;”作分隔符,編譯后產生機器指令.C語句分類表達式語句:表達式加分號構成。v空語句: ;v程序控制語句(9種):if( )else switchfor( )while( )dowhile( )continuebreakgotoreturn分支循環輔助控制如 total=total+limit; a=3; func( ); printf(“Hello,world!n”);v復合語句:用 括起來的一組語句v一般形式: 數據說明部分;v 執行語句部分;v v說明:v“”后不加分號v語法上和單一語句相同v復合語句可嵌套4.2 程序的三種基本結構結構化

2、程序設計基本思想:任何程序都可以用三種基本結構表示,限制使用無條件轉移語句goto)結構化程序:由三種基本結構反復嵌套構成的程序叫優點:結構清晰,易讀,提高程序設計質量和效率三種基本結構順序結構ABAB流程圖N-S圖PAB真假PBA真假v選擇結構A1A2AiAnk=k2k=k1k=knk=ki.l二分支選擇結構l多分支選擇結構v循環結構l當型循環結構l直到型循環結構PA假真當P為真AAP真假A直到P為真注:A,B,A1.An可以是一個簡單語句,也可以是一個基本結構4.3 選擇型程序設計if語句條件選擇語句)if語句的三種形式形式一:格式:if (expression) statement執行過

3、程:exprstatement非0=0例:if (xy) printf(“%d”,x);exprstatement1statement2非0=0l形式二:l格式:if (expression) l statement1l elsel statement2l執行過程:例:if (xy) max=x; else max=y;l形式三:l格式:if ( expr1 ) statement1else if (expr2 ) statement2else if (expr3 ) statement3. else statementn expr1statemnt1非0=0expr2expr3statemn

4、tnstatemnt3statemnt2非0非0=0=0u執行過程: 例:if (salary1000) index=0.4; else if (salary800) index=0.3; else if (salary600) index=0.2; else if (salary400) index=0.1; else index=0; 如:if(a=b&x=y) printf(“a=b,x=y”); if(3) printf(“OK”); if(a) printf(“%d”,a);l說明:lif后面的表達式類型任意u語句可以是復合語句u if(x) if(x!=0)u if(!x)

5、 if(x=0)例 考慮下面程序的輸出結果: #include main() int x,y; scanf(“%d,%d”,&x,&y); if(xy) x=y; y=x; else x+; y+; printf(“%d,%dn”,x,y);Compile Error!/*ch4_1.c*/#include main() int x,y; printf(Enter an integer:); scanf(%d,&x); y=x; if(yabsolute value:%dn,x,y);例 求一個數的絕對值運行:Enter an integer:-12 integer:-

6、12-absolute value :12/*ch4_2.c*/#include main() int a,b; printf(Enter integer a:); scanf(%d,&a); printf(Enter integer b:); scanf(%d,&b); if(a=b) printf(a=bn); else printf(a!=bn);例 輸入兩個數并判斷兩數相等否運行:Enter integer a:12 Enter integer b:12 a=b 運行:Enter integer a:12 Enter integer b:9 a!=b /*ch4_3.c

7、*/#include main() char c; printf(Enter a character:); c=getchar(); if(c=0&c=A&c=a&c=z) printf(The character is a lower lettern); else printf(The character is other charactern);例 判斷輸入字符種類運行:Enter a character: The character is a control character運行:Enter a character:8 The character is a di

8、git運行: Enter a character: D The character is a capital letter運行: Enter a character: h The character is a lower letter運行: Enter a character:F1 The character is other charactervif語句嵌套:v一般形式:if (expr1) if (expr2) statement1 else statement2else if(expr3) statement3 else statement4內嵌if內嵌ifif (expr1) if (

9、expr2) statement1 else statement2內嵌ifif (expr1) if (expr2) statement1else statement3 內嵌ifif (expr1) statement1else if(expr3) statement3 else statement4內嵌if例 輸入兩數并判斷其大小關系/*ch4_4.c*/#include main() int x,y; printf(Enter integer x,y:); scanf(%d,%d,&x,&y); if(x!=y) if(xy) printf(XYn); else print

10、f(XYn); else printf(X=Yn);運行:Enter integer x,y:12,23 XY Enter integer x,y:12,12 X=Ylif else 配對原則:缺省 時,else總是和它上面離它最近的未配對的if配對if()if()if()else.else.else.例: if (a=b) if(b=c) printf(“a=b=c”); else printf(“a!=b”);修改: if (a=b) if(b=c) printf(“a=b=c”); else printf(“a!=b”);實現if else 正確配對方法:加 例 考慮下面程序輸出結果:

11、main() int x=100,a=10,b=20; int v1=5,v2=0; if(a60n”); break; .例 switch(score) case 5: printf(“Very good!”); case 4: printf(“Good!”); case 3: printf(“Pass!”); case 2: printf(“Fail!”); default : printf(“data error!”); 運行結果:score為5時,輸出: Very good! Good! Pass! Fail! data error!例 void main() int x=1,y=0,

12、a=0,b=0; switch(x) case 1: switch(y) case 0: a+; break; case 1: b+; break; case 2: a+;b+; break; case 3: a+;b+; printf(“na=%d,b=%d”,a,b); 運行結果:a=2,b=1/*ch4_5.c*/#include main() int c; printf(Enter m or n or h or other:); c=getchar(); switch(c) case m: printf(nGood morning!n);break; case n: printf(nG

13、ood night!n); break; case h: printf(nHello!n); break; default : printf(n?n); break; 例 根據輸入字母輸出字符串4.4 循環型程序設計概述C語言可實現循環的語句:用goto 和 if 構成循環while 語句do while 語句for 語句goto語句及用goto構成循環goto語句一般格式: goto 語句標號; .標號:語句; v功能:無條件轉移語句v說明:v不能用整數作標號v只能出現在goto所在函數內,且唯一v只能加在可執行語句前面v限制使用goto語句例 用if 和goto語句構成循環,求1001nn

14、/*ch5_1.c*/#include main() int i,sum=0; i=1;loop: if(i=100) sum+=i; i+; goto loop; printf(%d,sum);sum=0+1sum=1+2=3sum=3+3=6sum=6+4sum=4950+100=5050循環初值循環終值循環變量增值循環條件循環體例 從鍵盤輸入一組數據,以0結束輸入,求數據和/*ch5_11.c*/#include main() int number,sum=0;read_loop: scanf(%d,&number); if(!number) goto print_sum; su

15、m+=number; goto read_loop;print_sum: printf(The total sum is %dn,sum);while語句一般形式:while(表達式) 循環體語句;v執行流程:expr循環體假(0)真(非0)whilev特點:先判斷表達式,后執行循環體v說明:v循環體有可能一次也不執行v循環體可為任意類型語句v下列情況,退出while循環v條件表達式不成立為零)v循環體內遇break,return,gotov無限循環: while(1)v 循環體;例 用while循環求 1001nn/*ch5_2.c*/#include main() int i,sum=0;

16、 i=1; while(i=100) sum=sum+i; i+; printf(%d,sum);循環初值循環終值循環變量增值循環條件循環體例 顯示110的平方/*ch5_21.c*/#include main() int i=1; while(i=10) printf(%d*%d=%dn,i,i,i*i); i+; 運行結果:1*1=12*2=43*3=94*4=165*5=256*6=367*7=498*8=649*9=8110*10=100dowhile語句一般形式:do 循環體語句; while(表達式);v執行流程:do循環體expr假(0)真(非0)whilev特點:先執行循環體,

17、后判斷表達式v說明:v至少執行一次循環體vdowhile可轉化成while結構expr循環體假(0)真(非0)循環體While循環例 用dowhile循環求 1001nn/*ch5_3.c*/#include main() int i,sum=0; i=1; do sum+=i;i+; while(i=100); printf(%d,sum);例 while和dowhile比較/*ch5_4.c*/#include main() int i,sum=0; scanf(%d,&i); do sum+=i;i+; while(i=10); printf(%d,sum);main() int

18、 i,sum=0; scanf(%d,&i); while(i=10) sum+=i;i+; printf(%d,sum);for語句一般形式:for(expr1 ; expr2 ; expr3) 循環體語句;v執行流程:expr2循環體假(0)真(非0)forexpr1expr3vfor語句一般應用形式:for(循環變量賦初值;循環條件;循環變量增值)循環體語句;v說明:vfor語句中expr1, expr2 ,expr3 類型任意,都可省略,但分號;不可省v無限循環: for(;)vfor語句可以轉換成while結構expr1;while(expr2)循環體語句;expr3;例 用

19、for循環求 1001nn#include main() int i,sum=0; for(i=1;i=100;i+) sum+=i; printf(%d,sum);例:#include main( ) int i=0; for(i=0;i10;i+) putchar(a+i); 運行結果:abcdefghij例:#include main( ) int i=0; for(;i10;i+) putchar(a+i); 例:#include main( ) int i=0; for(;i10;) putchar(a+(i+); 例:#include main( ) int i=0; for(;i

20、10;putchar(a+i),i+) ; main() int i,j,k; for(i=0,j=100;i=j;i+,j-) k=i+j; printf(%d+%d=%dn,i,j,k); #includemain() char c; for(;(c=getchar()!=n;) printf(%c ,c);#include main() int i,c; for(i=0;(c=getchar()!=n;i+=3)printf(%c ,i+c);例 (f0r)梯形法求數值積分); 1; 1()*(*)()(*5 . 0)()()(2) 1()(2) 1()(21110iniihiafhss

21、bfafhsihafhbfafhhiafihafhShiafihafhsnabhninii迭代:0yxa a+ha+ih a+(i+1)hbf(x)dxxxfba24)(循環的嵌套三種循環可互相嵌套,層數不限外層循環可包含兩個以上內循環,但不能相互交叉嵌套循環的執行流程(1) while() while() . (2) do do while( ); . while( );(3) while() do while( ); . (4) for( ; ;) do while(); while() .內循環外循環內循環v嵌套循環的跳轉v制止:v從外層跳入內層v跳入同層的另一循環v向上跳轉例 循環嵌套

22、,輸出九九表1234567891234567892468101214161836912151821242791827364554637281.ij/*ch5_5.c*/#include main() int i,j; for(i=1;i10;i+) printf(%4d,i); printf(n-n); for(i=1;i10;i+) for(j=1;j10;j+) printf(j=9)?%4dn:%4d,i*j);i10printf假(0)真(非0)i=1j+j=1j10真(非0)假(0)i+for(i=1;i10;i+) for(j=1;j10;j+) printf(j=9)?%4dn:

23、%4d,i*j);外循環內循環 4.5 輔助控制語句break語句功能:在循環語句和switch語句中,終止并跳出循環體或開關體說明:break只能終止并跳出最近一層的結構break不能用于循環語句和switch語句之外的任何其它語句之中exprbreak;假(0)真(非0)whiledobreak;.expr假(0)真(非0)whileexpr2break;.假(0)真(非0)forexpr1expr3switchexpr語句組1break;語句組2break;語句組nbreak;語句組break;.const 1const 2const ndefaultcase 例 break舉例:輸出圓

24、面積,面積大于100時停止#define PI 3.14159main() int r; float area; for(r=1;r100) break; printf(r=%d,area=%.2fn,r,area); 例 break舉例:小寫字母轉換成大寫字母,直至輸入非字母字符#include main() int i,j; char c; while(1) c=getchar(); if(c=a & c=z) putchar(c-a+A); else break; continue語句功能:結束本次循環,跳過循環體中尚未執行的語句,進行下一次是否執行循環體的判斷僅用于循環語句中exprcontinue;假(0)真(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論