C語言五PPT課件_第1頁
C語言五PPT課件_第2頁
C語言五PPT課件_第3頁
C語言五PPT課件_第4頁
C語言五PPT課件_第5頁
已閱讀5頁,還剩25頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、C C語言程序設計語言程序設計 我能學好我能學好 C語言語言 結構化程序設計技巧:結構化程序設計技巧: 1.1.結構化的流程結構:結構化的流程結構: 從前面的學習可知,從前面的學習可知,C C語言提供了十分完備的結構化語言提供了十分完備的結構化 流程控制結構,與非結構化程序設計方法相比較,采用流程控制結構,與非結構化程序設計方法相比較,采用 結構化程序設計能夠設計出更容易理解的程序,因此也結構化程序設計能夠設計出更容易理解的程序,因此也 更加容易測試、調試和修改。正確使用這些結構將有助更加容易測試、調試和修改。正確使用這些結構將有助 于設計出高度結構化的程序。因此在設計程序是要注意于設計出高度

2、結構化的程序。因此在設計程序是要注意 靈活運用。結構化的流程控制結構的語句框圖如下:靈活運用。結構化的流程控制結構的語句框圖如下: 執(zhí)行語句執(zhí)行語句S1S1 執(zhí)行語句執(zhí)行語句S2S2 (1 1)順序結構)順序結構 語句語句1 1 條件式條件式? ? 語句語句2 2 真真假假 (2 2)選擇結構)選擇結構 語句語句1 1 條件式條件式? ? 語句語句n n語句語句2 2 casecase C.switchcase(C.switchcase(多分支多分支) )結構結構 B.ifelse(B.ifelse(雙分支雙分支) )結構結構 語句語句1 1 條件式條件式? ? 真真 假假 A.if(A.if

3、(單分支單分支) )結構結構 結構化程序設計技巧:結構化程序設計技巧: 條件式條件式? ? 循環(huán)體語句循環(huán)體語句 真真 假假 B.do-whileB.do-while循環(huán)循環(huán) 條件式條件式? ? 循環(huán)體語句循環(huán)體語句 真真 假假 C.for C.for 循環(huán)循環(huán) 初始語句初始語句 條件式條件式? ? 循環(huán)體語句循環(huán)體語句 真真 假假 A.whileA.while循環(huán)循環(huán) (3 3)循環(huán)結構)循環(huán)結構 結構化程序設計技巧:結構化程序設計技巧: 在設計說明時在設計說明時,正確選用上述正確選用上述7 7種結構,有助于使種結構,有助于使 程序層次分明、條理清楚、簡潔高效。程序層次分明、條理清楚、簡潔高

4、效。 【例【例1 1】 : 求和程序(不使用規(guī)范化流求和程序(不使用規(guī)范化流 程結構)程結構) # #include include main main()() int nint n,sum;sum; n=sum=0; n=sum=0; begin: ; begin: ; scanfscanf(“%d ”, goto end; sum+=n; sum+=n; goto begin;goto begin; end: ;end: ; printf printf(“The sum is%dn”,sum“The sum is%dn”,sum); ; 求和程序(使用規(guī)范化流程結構)求和程序(使用規(guī)范化流

5、程結構) # #includeinclude main main()() int n,sum int n,sum; sum=0 sum=0; scanf scanf(“%d”,i=10;i+i=1;i=10;i+) sum+=i; sum+=i; 3.3.合理的程序書寫格式:合理的程序書寫格式: 優(yōu)點:優(yōu)點:利用利用“右縮進右縮進”的書寫方式可以使用戶對于程序的各個大小的書寫方式可以使用戶對于程序的各個大小 不同的復合語句更加清楚,對各個不同的控制結構及其相互呈遞不同的復合語句更加清楚,對各個不同的控制結構及其相互呈遞 的嵌套的關系更加明了。的嵌套的關系更加明了?!坝铱s進右縮進”的長短由用戶自

6、己決定,一般的長短由用戶自己決定,一般 利用鍵盤上的利用鍵盤上的 TAB鍵進行控制,一次縮進鍵進行控制,一次縮進8 8個字符。個字符。 結構化程序設計技巧:結構化程序設計技巧: 優(yōu)點:優(yōu)點:在程序中簡化書寫格式、減少錯誤。方便我們快在程序中簡化書寫格式、減少錯誤。方便我們快 速替換程序中的常量和表達式。速替換程序中的常量和表達式。 4.4.靈活運用預處理程序靈活運用預處理程序 在一個在一個C C程序的開頭,既定義主函數程序的開頭,既定義主函數mainmain()()之前,之前, 一般需要用一般需要用definedefine宏定義一些經常使用的常數(不帶參宏定義一些經常使用的常數(不帶參 數的宏

7、定義)和表達式(帶參數的宏定義)。數的宏定義)和表達式(帶參數的宏定義)。 例如:例如: 定義符號常量定義符號常量 # #define PI 3.1415926 define PI 3.1415926 定義表達式定義表達式 # #define Fdefine F(x x)()(1/1/(1+1+(x x) 形參外有無()的結形參外有無()的結 果是不一樣的。對于帶果是不一樣的。對于帶 參宏定義是原樣展開。參宏定義是原樣展開。 宏名與()之間不應有空格宏名與()之間不應有空格 ,否則空格后的字符被作為,否則空格后的字符被作為 替代字符串的一部分。替代字符串的一部分。 結構化程序設計技巧:結構化程

8、序設計技巧: 5.5.常見錯誤與解決方案常見錯誤與解決方案 (1)混淆)混淆“=”與與“=”改變改變“=”的兩側的類型。例如:的兩側的類型。例如:100=n; (2)循環(huán)的)循環(huán)的“丟一錯誤丟一錯誤”使用最后結果值做為終止條件,或采用使用最后結果值做為終止條件,或采用 符號符號“=”. (3)變量單元存有)變量單元存有“垃圾值垃圾值”對變量賦初始值,特別地在循環(huán)中,對變量賦初始值,特別地在循環(huán)中, 要注意控制變量的初始值對結果變要注意控制變量的初始值對結果變 量單元的影響。量單元的影響。 (4)結構體的)結構體的“丟語句丟語句”如果多于一條語句,采用復合語句形式。如果多于一條語句,采用復合語句

9、形式。 (5)分支或循環(huán)的表達式的()外直接寫有)分支或循環(huán)的表達式的()外直接寫有“;” (6)嵌套結構中的)嵌套結構中的“錯誤配對錯誤配對”使用使用“ ”將對應的層次括起來,將對應的層次括起來, 即使只有一條語句。即使只有一條語句。 (7)標記值使用)標記值使用“合法數據合法數據” 選用遠離合法數據的一個選用遠離合法數據的一個“界外值界外值” 做標記值。做標記值。 結構化程序設計技巧:結構化程序設計技巧: 示例示例 【例【例1 1】:利用】:利用whilewhile循環(huán)和計數器變量循環(huán)和計數器變量n n打印打印120120之間之間 的所有數據。要求每行打印的所有數據。要求每行打印5 5個整

10、數。個整數。 方法方法1: main()() int n=1; while (n=20) printf(“%d”,n); if (n%5 = 0) printf(“n”); else printf(“t”); n+; 演示j2。c 方法方法2: main()() int n; n=1; while (n=20) if (n%5 = 0) printf(“%dn”,n+); else printf(“%dt”,n+); 演示j21。C 方法方法3: main()() int n=0; while (+n=20) if (n%5 = 0) printf(“%dn”,n); else printf(

11、“%dt”,n); 演示J22。C 方法方法4: main()() int n; for (n=1;n=20;n+) if (n%5 = 0) printf(“%d n”,n); else printf(“%d t”,n); 示例示例 【例【例1 1】:利用】:利用whilewhile循環(huán)和計數器變量循環(huán)和計數器變量n n打印打印120120之間之間 的所有數據。要求每行打印的所有數據。要求每行打印5 5個整數。個整數。 【例【例2 2】:編寫一個程序計算用一角、二角、五角湊成一】:編寫一個程序計算用一角、二角、五角湊成一 元,可以有多少種組合,并打印出每一種組合。元,可以有多少種組合,并打印

12、出每一種組合。 依題意:依題意: 可以用可以用a,b,ca,b,c分別表示一角、二角、五角錢幣的張數,分別表示一角、二角、五角錢幣的張數, 則則a a的取值范圍為的取值范圍為0 01010;b b的取值范圍為的取值范圍為0 05 5;c c的取的取 值范圍為值范圍為0 02 2。組合數由。組合數由n n來表示。采用三重循環(huán)實來表示。采用三重循環(huán)實 現(xiàn)的算法。現(xiàn)的算法。 說明說明: 這是一例這是一例“死算死算”的算法。的算法。 “死算死算”是一種重要的求解是一種重要的求解 算法。本題中可以利用三重循環(huán)的嵌套找出所有可能的算法。本題中可以利用三重循環(huán)的嵌套找出所有可能的 組合。組合。 實際上許多問

13、題的求解除了實際上許多問題的求解除了“死算死算”之外,沒有更好之外,沒有更好 的算法描述。以前需要幾年、幾十年、幾個世紀才能解的算法描述。以前需要幾年、幾十年、幾個世紀才能解 決的問題,現(xiàn)在只需要很短的時間就可以得到結果。決的問題,現(xiàn)在只需要很短的時間就可以得到結果。 示例示例 # #include include mainmain()() int a,b,c,n=0int a,b,c,n=0; printf( “ 1jiaobi 2jiaobi 5jiaobin” printf( “ 1jiaobi 2jiaobi 5jiaobin” );); for for(a=0a=0;a=10a=10

14、;a+a+) for for(b=0b=0;b=5b=5;b+b+) for for(c=0c=0;c=2c=2;c+c+) if if(a+2a+2* *b+5b+5* *c = 10c = 10) n=n+1; n=n+1; printf printf (“%5d%7d%9dn”,a,b,c“%5d%7d%9dn”,a,b,c);); printf printf(“t“t組合數組合數 =% =%dn”,ndn”,n);); 演示J3.C 示例示例 【例【例2 2】:編寫一個程序計算用一角、二角、五角湊成一】:編寫一個程序計算用一角、二角、五角湊成一 元,可以有多少種組合,并打印出每一種組合

15、。元,可以有多少種組合,并打印出每一種組合。 # #includeinclude mainmain()() int iint i; char number char number; forfor(i=1i=1; ;i+i+) scanf scanf(“%c”, ;i+i=1; ;i+) 的形式,因為省略了表達式的形式,因為省略了表達式2 2(分號不(分號不 能省略)所以它是一個無限循環(huán),必須依能省略)所以它是一個無限循環(huán),必須依 靠靠ifif語句退出循環(huán)。當判斷語句為語句退出循環(huán)。當判斷語句為“真真” 時時 終止循環(huán)并打印出終止循環(huán)并打印出“循環(huán)結束循環(huán)結束” ” 。 示例示例 【例【例4 4

16、】:】: (百錢買百雞):公雞(百錢買百雞):公雞5 5元一只;母雞元一只;母雞3 3元元 一只;小雞一只;小雞1 1元元3 3只;化了只;化了100100元買了元買了100100只雞,問:公雞、只雞,問:公雞、 母雞、小雞各是多少只?(只計算一種結果)母雞、小雞各是多少只?(只計算一種結果) 依題意:依題意: 以以cockcock、henhen、chickenchicken分別表示公雞、母雞、小雞,則分別表示公雞、母雞、小雞,則 有不定方程式:有不定方程式: (1 1)cock+hen+chicken=100cock+hen+chicken=100; (2 2)5 5* *cock+3coc

17、k+3* *hen+1/3hen+1/3* *chicken=100chicken=100; 程序如下所示:程序如下所示: 示例示例 mainmain()() int cock,hen,chicken;int cock,hen,chicken; for for(cock=0;cock=100/5;cock+cock=0;cock=100/5;cock+) for for(hen=0;hen=100/3;hen+hen=0;hen=100/3;hen+) chicken=100-cock-hen; chicken=100-cock-hen; if if( chicken%3= =0 chicke

18、n%3= =0 )int cock,hen,chicken; for for(cock=0;cock=100/5;cock+cock=0;cock=100/5;cock+) for for(hen=0;hen=100/6;hen+hen=0;hen=100 score=100 )|(score0score0) printf printf(“n Error Enter again!n”“n Error Enter again!n”);); else else flag=0; flag=0; 示例示例 switchswitch(numnum) case 9 case 9:grade=A grade

19、=A ;breakbreak; case 8 case 8:grade=B grade=B ;breakbreak; case 7 case 7:grade=C grade=C ;breakbreak; case 6 case 6:grade=D grade=D ;breakbreak; case 5 case 5: default default:grade=E grade=E ;breakbreak; printfprintf(“the score is“the score is:%d%d,the grade is %c.n” the grade is %c.n” , score scor

20、e,gradegrade);); 演示J6。C if if (score = 100score = 100) num=9 num=9; else num= else num=(score-score%10score-score%10)/10/10; 示例示例 【例【例5 5】編寫一個程序,對于輸入一個給定的百分數成績,】編寫一個程序,對于輸入一個給定的百分數成績, 輸出用相應的輸出用相應的“A”, “B”, “C”, “D”, “E”A”, “B”, “C”, “D”, “E”表示的表示的 等級成績。等級成績。 【例【例6 6】:】:數列算法數列算法 設有一個分數序列:設有一個分數序列: 2/

21、1,3/2,5/3,8/5,13/8,21/13, 2/1,3/2,5/3,8/5,13/8,21/13, 編程編程 求出這個數列的前求出這個數列的前1010項之和。項之和。 # #includeinclude main main()() int n int n,m m,number=10number=10; float a=2 float a=2,b=1b=1,sum=0sum=0, for for(n=1n=1;n=numbern=6=6)都可)都可 以分解成兩個素數之和。以分解成兩個素數之和。 例如:例如:6=3+36=3+3;8=3+58=3+5; ;100=3+97100=3+97;

22、 /*分析分析*/ 判斷一個數判斷一個數m是否為素數的方法有三種:是否為素數的方法有三種: (1)用)用m 做被除數,做被除數,2m-1之間的所有數做除數,進行除法處理。之間的所有數做除數,進行除法處理。 如果其中一個除法運算的結果為如果其中一個除法運算的結果為0,(可以整除),則,(可以整除),則m不是素不是素 數,否則數,否則m是素數。是素數。 (2)用)用m 做被除數,做被除數,2int(m/2)之間的所有數做除數,進行除法之間的所有數做除數,進行除法 處理。如果其中一個除法運算的結果為處理。如果其中一個除法運算的結果為0,(可以整除),則,(可以整除),則m 不是素數,否則不是素數,否

23、則m是素數。是素數。 (3)用)用m 做被除數,做被除數,2int (sqrt(m)之間的所有數做之間的所有數做 除數,進除數,進 行除法處理。如果其中一個除法運算的結果為行除法處理。如果其中一個除法運算的結果為0,(可以整除),(可以整除) ,則,則m不是素數,否則不是素數,否則m是素數。是素數。 示例示例 # #includeinclude #include#include mainmain()() int number int number,ispxispx,ispyispy,temptemp; scanf scanf(“%d”“%d”,&number&number);); for fo

24、r(ispx=3ispx=3;ispx=number/2ispx=number/2;ispx+=2ispx+=2) for for(temp=2temp=2;temp=sqrttemp sqrttemp sqrt(ispxispx) ispy=number-ispx ispy=number-ispx; for for(temp=2temp=2;temp=sqrttempsqrttempsqrt(ispyispy) printf printf(“%d=%d+%dn”“%d=%d+%dn”,numbernumber,ispxispx,ispyispy);); breakbreak; 演示演示 j7

25、.cj7.c 找素數找素數ispxispx 找到素數找到素數ispx,ispx,求素數求素數ispyispy 判定判定 ispyispy 是否是否 為素為素 數數 ispyispy是素數是素數, ,則找到一個則找到一個 解,退出解,退出 示例示例 【例【例8 8】:】:數字分解數字分解 編程打印出所有的編程打印出所有的“水仙花水仙花” ” 數。數。“水仙花水仙花” ” 數是指一個三位數,數是指一個三位數, 其各位數字的立方和等于該數本身。例如:其各位數字的立方和等于該數本身。例如:153=1153=13 3+5+53 3+3+33 3; # #includeinclude main main()() int i int i,j j,k k,n n; for for (n=100n=100;n1000n1000;n+n+) i=n/100 i=n/100; / /* *求百位數求百位數* */ / j=n/10-ij=n/10-i* *1010; / /* *求十位數求十位數* */ / k=n%10k=n%10; / /* *求個位數求個位數* */ / if if (n = in = i* *i i* *i+ji+j* *j j* *j+kj+k* *k k* *k k) printf printf(“%4d”,n“%4d”

溫馨提示

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

評論

0/150

提交評論