版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、C C語言程序設(shè)計語言程序設(shè)計 我能學(xué)好我能學(xué)好 C語言語言 結(jié)構(gòu)化程序設(shè)計技巧:結(jié)構(gòu)化程序設(shè)計技巧: 1.1.結(jié)構(gòu)化的流程結(jié)構(gòu):結(jié)構(gòu)化的流程結(jié)構(gòu): 從前面的學(xué)習(xí)可知,從前面的學(xué)習(xí)可知,C C語言提供了十分完備的結(jié)構(gòu)化語言提供了十分完備的結(jié)構(gòu)化 流程控制結(jié)構(gòu),與非結(jié)構(gòu)化程序設(shè)計方法相比較,采用流程控制結(jié)構(gòu),與非結(jié)構(gòu)化程序設(shè)計方法相比較,采用 結(jié)構(gòu)化程序設(shè)計能夠設(shè)計出更容易理解的程序,因此也結(jié)構(gòu)化程序設(shè)計能夠設(shè)計出更容易理解的程序,因此也 更加容易測試、調(diào)試和修改。正確使用這些結(jié)構(gòu)將有助更加容易測試、調(diào)試和修改。正確使用這些結(jié)構(gòu)將有助 于設(shè)計出高度結(jié)構(gòu)化的程序。因此在設(shè)計程序是要注意于設(shè)計出高度
2、結(jié)構(gòu)化的程序。因此在設(shè)計程序是要注意 靈活運用。結(jié)構(gòu)化的流程控制結(jié)構(gòu)的語句框圖如下:靈活運用。結(jié)構(gòu)化的流程控制結(jié)構(gòu)的語句框圖如下: 執(zhí)行語句執(zhí)行語句S1S1 執(zhí)行語句執(zhí)行語句S2S2 (1 1)順序結(jié)構(gòu))順序結(jié)構(gòu) 語句語句1 1 條件式條件式? ? 語句語句2 2 真真假假 (2 2)選擇結(jié)構(gòu))選擇結(jié)構(gòu) 語句語句1 1 條件式條件式? ? 語句語句n n語句語句2 2 casecase C.switchcase(C.switchcase(多分支多分支) )結(jié)構(gòu)結(jié)構(gòu) B.ifelse(B.ifelse(雙分支雙分支) )結(jié)構(gòu)結(jié)構(gòu) 語句語句1 1 條件式條件式? ? 真真 假假 A.if(A.if
3、(單分支單分支) )結(jié)構(gòu)結(jié)構(gòu) 結(jié)構(gòu)化程序設(shè)計技巧:結(jié)構(gòu)化程序設(shè)計技巧: 條件式條件式? ? 循環(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)結(jié)構(gòu))循環(huán)結(jié)構(gòu) 結(jié)構(gòu)化程序設(shè)計技巧:結(jié)構(gòu)化程序設(shè)計技巧: 在設(shè)計說明時在設(shè)計說明時,正確選用上述正確選用上述7 7種結(jié)構(gòu),有助于使種結(jié)構(gòu),有助于使 程序?qū)哟畏置鳌l理清楚、簡潔高效。程序?qū)哟畏置?、條理清楚、簡潔高
4、效。 【例【例1 1】 : 求和程序(不使用規(guī)范化流求和程序(不使用規(guī)范化流 程結(jié)構(gòu))程結(jié)構(gòu)) # #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ī)范化流程結(jié)構(gòu))求和程序(使用規(guī)范化流
5、程結(jié)構(gòu)) # #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)點:利用利用“右縮進(jìn)右縮進(jìn)”的書寫方式可以使用戶對于程序的各個大小的書寫方式可以使用戶對于程序的各個大小 不同的復(fù)合語句更加清楚,對各個不同的控制結(jié)構(gòu)及其相互呈遞不同的復(fù)合語句更加清楚,對各個不同的控制結(jié)構(gòu)及其相互呈遞 的嵌套的關(guān)系更加明了。的嵌套的關(guān)系更加明了?!坝铱s進(jìn)右縮進(jìn)”的長短由用戶自
6、己決定,一般的長短由用戶自己決定,一般 利用鍵盤上的利用鍵盤上的 TAB鍵進(jìn)行控制,一次縮進(jìn)鍵進(jìn)行控制,一次縮進(jìn)8 8個字符。個字符。 結(jié)構(gòu)化程序設(shè)計技巧:結(jié)構(gòu)化程序設(shè)計技巧: 優(yōu)點:優(yōu)點:在程序中簡化書寫格式、減少錯誤。方便我們快在程序中簡化書寫格式、減少錯誤。方便我們快 速替換程序中的常量和表達(dá)式。速替換程序中的常量和表達(dá)式。 4.4.靈活運用預(yù)處理程序靈活運用預(yù)處理程序 在一個在一個C C程序的開頭,既定義主函數(shù)程序的開頭,既定義主函數(shù)mainmain()()之前,之前, 一般需要用一般需要用definedefine宏定義一些經(jīng)常使用的常數(shù)(不帶參宏定義一些經(jīng)常使用的常數(shù)(不帶參 數(shù)的宏
7、定義)和表達(dá)式(帶參數(shù)的宏定義)。數(shù)的宏定義)和表達(dá)式(帶參數(shù)的宏定義)。 例如:例如: 定義符號常量定義符號常量 # #define PI 3.1415926 define PI 3.1415926 定義表達(dá)式定義表達(dá)式 # #define Fdefine F(x x)()(1/1/(1+1+(x x) 形參外有無()的結(jié)形參外有無()的結(jié) 果是不一樣的。對于帶果是不一樣的。對于帶 參宏定義是原樣展開。參宏定義是原樣展開。 宏名與()之間不應(yīng)有空格宏名與()之間不應(yīng)有空格 ,否則空格后的字符被作為,否則空格后的字符被作為 替代字符串的一部分。替代字符串的一部分。 結(jié)構(gòu)化程序設(shè)計技巧:結(jié)構(gòu)化程
8、序設(shè)計技巧: 5.5.常見錯誤與解決方案常見錯誤與解決方案 (1)混淆)混淆“=”與與“=”改變改變“=”的兩側(cè)的類型。例如:的兩側(cè)的類型。例如:100=n; (2)循環(huán)的)循環(huán)的“丟一錯誤丟一錯誤”使用最后結(jié)果值做為終止條件,或采用使用最后結(jié)果值做為終止條件,或采用 符號符號“=”. (3)變量單元存有)變量單元存有“垃圾值垃圾值”對變量賦初始值,特別地在循環(huán)中,對變量賦初始值,特別地在循環(huán)中, 要注意控制變量的初始值對結(jié)果變要注意控制變量的初始值對結(jié)果變 量單元的影響。量單元的影響。 (4)結(jié)構(gòu)體的)結(jié)構(gòu)體的“丟語句丟語句”如果多于一條語句,采用復(fù)合語句形式。如果多于一條語句,采用復(fù)合語句
9、形式。 (5)分支或循環(huán)的表達(dá)式的()外直接寫有)分支或循環(huán)的表達(dá)式的()外直接寫有“;” (6)嵌套結(jié)構(gòu)中的)嵌套結(jié)構(gòu)中的“錯誤配對錯誤配對”使用使用“ ”將對應(yīng)的層次括起來,將對應(yīng)的層次括起來, 即使只有一條語句。即使只有一條語句。 (7)標(biāo)記值使用)標(biāo)記值使用“合法數(shù)據(jù)合法數(shù)據(jù)” 選用遠(yuǎn)離合法數(shù)據(jù)的一個選用遠(yuǎn)離合法數(shù)據(jù)的一個“界外值界外值” 做標(biāo)記值。做標(biāo)記值。 結(jié)構(gòu)化程序設(shè)計技巧:結(jié)構(gòu)化程序設(shè)計技巧: 示例示例 【例【例1 1】:利用】:利用whilewhile循環(huán)和計數(shù)器變量循環(huán)和計數(shù)器變量n n打印打印120120之間之間 的所有數(shù)據(jù)。要求每行打印的所有數(shù)據(jù)。要求每行打印5 5個整
10、數(shù)。個整數(shù)。 方法方法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)和計數(shù)器變量循環(huán)和計數(shù)器變量n n打印打印120120之間之間 的所有數(shù)據(jù)。要求每行打印的所有數(shù)據(jù)。要求每行打印5 5個整數(shù)。個整數(shù)。 【例【例2 2】:編寫一個程序計算用一角、二角、五角湊成一】:編寫一個程序計算用一角、二角、五角湊成一 元,可以有多少種組合,并打印出每一種組合。元,可以有多少種組合,并打印
12、出每一種組合。 依題意:依題意: 可以用可以用a,b,ca,b,c分別表示一角、二角、五角錢幣的張數(shù),分別表示一角、二角、五角錢幣的張數(shù), 則則a a的取值范圍為的取值范圍為0 01010;b b的取值范圍為的取值范圍為0 05 5;c c的取的取 值范圍為值范圍為0 02 2。組合數(shù)由。組合數(shù)由n n來表示。采用三重循環(huán)實來表示。采用三重循環(huán)實 現(xiàn)的算法。現(xiàn)的算法。 說明說明: 這是一例這是一例“死算死算”的算法。的算法。 “死算死算”是一種重要的求解是一種重要的求解 算法。本題中可以利用三重循環(huán)的嵌套找出所有可能的算法。本題中可以利用三重循環(huán)的嵌套找出所有可能的 組合。組合。 實際上許多問
13、題的求解除了實際上許多問題的求解除了“死算死算”之外,沒有更好之外,沒有更好 的算法描述。以前需要幾年、幾十年、幾個世紀(jì)才能解的算法描述。以前需要幾年、幾十年、幾個世紀(jì)才能解 決的問題,現(xiàn)在只需要很短的時間就可以得到結(jié)果。決的問題,現(xiàn)在只需要很短的時間就可以得到結(jié)果。 示例示例 # #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組合數(shù)組合數(shù) =% =%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+) 的形式,因為省略了表達(dá)式的形式,因為省略了表達(dá)式2 2(分號不(分號不 能省略)所以它是一個無限循環(huán),必須依能省略)所以它是一個無限循環(huán),必須依 靠靠ifif語句退出循環(huán)。當(dāng)判斷語句為語句退出循環(huán)。當(dāng)判斷語句為“真真” 時時 終止循環(huán)并打印出終止循環(huán)并打印出“循環(huán)結(jié)束循環(huán)結(jié)束” ” 。 示例示例 【例【例4 4
16、】:】: (百錢買百雞):公雞(百錢買百雞):公雞5 5元一只;母雞元一只;母雞3 3元元 一只;小雞一只;小雞1 1元元3 3只;化了只;化了100100元買了元買了100100只雞,問:公雞、只雞,問:公雞、 母雞、小雞各是多少只?(只計算一種結(jié)果)母雞、小雞各是多少只?(只計算一種結(jié)果) 依題意:依題意: 以以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】編寫一個程序,對于輸入一個給定的百分?jǐn)?shù)成績,】編寫一個程序,對于輸入一個給定的百分?jǐn)?shù)成績, 輸出用相應(yīng)的輸出用相應(yīng)的“A”, “B”, “C”, “D”, “E”A”, “B”, “C”, “D”, “E”表示的表示的 等級成績。等級成績。 【例【例6 6】:】:數(shù)列算法數(shù)列算法 設(shè)有一個分?jǐn)?shù)序列:設(shè)有一個分?jǐn)?shù)序列: 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, 編程編程 求出這個數(shù)列的前求出這個數(shù)列的前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)都可)都可 以分解成兩個素數(shù)之和。以分解成兩個素數(shù)之和。 例如:例如:6=3+36=3+3;8=3+58=3+5; ;100=3+97100=3+97;
22、 /*分析分析*/ 判斷一個數(shù)判斷一個數(shù)m是否為素數(shù)的方法有三種:是否為素數(shù)的方法有三種: (1)用)用m 做被除數(shù),做被除數(shù),2m-1之間的所有數(shù)做除數(shù),進(jìn)行除法處理。之間的所有數(shù)做除數(shù),進(jìn)行除法處理。 如果其中一個除法運算的結(jié)果為如果其中一個除法運算的結(jié)果為0,(可以整除),則,(可以整除),則m不是素不是素 數(shù),否則數(shù),否則m是素數(shù)。是素數(shù)。 (2)用)用m 做被除數(shù),做被除數(shù),2int(m/2)之間的所有數(shù)做除數(shù),進(jìn)行除法之間的所有數(shù)做除數(shù),進(jìn)行除法 處理。如果其中一個除法運算的結(jié)果為處理。如果其中一個除法運算的結(jié)果為0,(可以整除),則,(可以整除),則m 不是素數(shù),否則不是素數(shù),否
23、則m是素數(shù)。是素數(shù)。 (3)用)用m 做被除數(shù),做被除數(shù),2int (sqrt(m)之間的所有數(shù)做之間的所有數(shù)做 除數(shù),進(jìn)除數(shù),進(jìn) 行除法處理。如果其中一個除法運算的結(jié)果為行除法處理。如果其中一個除法運算的結(jié)果為0,(可以整除),(可以整除) ,則,則m不是素數(shù),否則不是素數(shù),否則m是素數(shù)。是素數(shù)。 示例示例 # #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 找素數(shù)找素數(shù)ispxispx 找到素數(shù)找到素數(shù)ispx,ispx,求素數(shù)求素數(shù)ispyispy 判定判定 ispyispy 是否是否 為素為素 數(shù)數(shù) ispyispy是素數(shù)是素數(shù), ,則找到一個則找到一個 解,退出解,退出 示例示例 【例【例8 8】:】:數(shù)字分解數(shù)字分解 編程打印出所有的編程打印出所有的“水仙花水仙花” ” 數(shù)。數(shù)?!八苫ㄋ苫ā?” 數(shù)是指一個三位數(shù),數(shù)是指一個三位數(shù), 其各位數(shù)字的立方和等于該數(shù)本身。例如:其各位數(shù)字的立方和等于該數(shù)本身。例如: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; / /* *求百位數(shù)求百位數(shù)* */ / j=n/10-ij=n/10-i* *1010; / /* *求十位數(shù)求十位數(shù)* */ / k=n%10k=n%10; / /* *求個位數(shù)求個位數(shù)* */ / 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)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年鋼結(jié)構(gòu)廣告牌施工合同樣本
- 光儲一體清潔能源項目投資協(xié)議
- 2025年度個人消費類需抵押借款服務(wù)合同細(xì)則3篇
- 二零二五年度家政服務(wù)與雇主家庭法律咨詢服務(wù)合同3篇
- 2024年貸款服務(wù)費合同范本針對供應(yīng)鏈金融業(yè)務(wù)3篇
- 環(huán)保監(jiān)測設(shè)備安裝與維護(hù)服務(wù)合同
- 二零二五年度家具設(shè)計版權(quán)糾紛解決合同3篇
- 2024版專業(yè)零售店長聘任協(xié)議版B版
- 2024電子商務(wù)勞動合同書
- 2024年貨運代理及代收貨款綠色環(huán)保合同
- 五年級數(shù)學(xué)試卷分析
- 皮下注射抗凝劑相關(guān)知識試題
- 沛縣生活垃圾焚燒發(fā)電項目二期工程 環(huán)境影響報告書 報批稿
- DB44∕T 2149-2018 森林資源規(guī)劃設(shè)計調(diào)查技術(shù)規(guī)程
- 肝移植的歷史、現(xiàn)狀與展望
- 商業(yè)定價表(含各商鋪價格測算銷售回款)
- 【化學(xué)】重慶市2021-2022學(xué)年高一上學(xué)期期末聯(lián)合檢測試題
- 單位工程質(zhì)量控制程序流程圖
- 部編版小學(xué)語文三年級(下冊)學(xué)期課程綱要
- 化學(xué)工業(yè)有毒有害作業(yè)工種范圍表
- 洼田飲水試驗
評論
0/150
提交評論