版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、第第3章程序設計初步章程序設計初步 第3章 程序設計初步 3.1 面向過程的程序設計和算法面向過程的程序設計和算法 面向過程的程序設計:就是考慮程序要“做什么”, 解決“怎么做”的問題. 一個面向過程的程序應包括以下兩方面內(nèi)容: (1) 對數(shù)據(jù)的描述。在程序中要指定數(shù)據(jù)的類型和數(shù) 據(jù)的組織形式,即數(shù)據(jù)結(jié)構(gòu)(data structure)。 (2) 對操作的描述。即操作步驟,也就是算法 (algorithm)。 3.1 面向過程的程序設計和算法面向過程的程序設計和算法 面向過程的程序,可以用下面的公式表示: 程序=算法+數(shù)據(jù)結(jié)構(gòu) 算法:解決一個問題而采取的方法和步驟。(廣義) 計算機算法分兩類:
2、數(shù)值算法和非數(shù)值算法 學習面向?qū)ο蟮恼Z言依然要學習和掌握一些常用的算 法。(C+語言也是如此) 3.1 面向過程的程序設計和算法面向過程的程序設計和算法 算法的表示: 1、自然語言 2、流程圖 (特點:形象直觀,修改不方便,不適合復 雜程序,本教材多使用流程圖表示算法) 3、偽代碼(pseudo code) (一種介于自然語言和計算機語言之間的文 字和符號) 4、用計算機語言 3.2 C+程序的組成程序的組成 1. 聲明語句 如int a,b; 2. 執(zhí)行語句 通知計算機完成一定的操作。執(zhí)行語句包括: (1) 控制語句,完成一定的控制功能。C+有9種控制語句, 即 if( )else (條件語
3、句) for( ) (循環(huán)語句) while( ) (循環(huán)語句) dowhile( ) (循環(huán)語句) continue (結(jié)束本次循環(huán)語句) break (中止執(zhí)行或循環(huán)語句) switch (多分支選擇語句) goto (轉(zhuǎn)向語句) return (從函數(shù)返回語句) C+程序的語句程序的語句 (2) 函數(shù)和流對象調(diào)用語句。函數(shù)調(diào)用語句由一次函 數(shù)調(diào)用加一個分號構(gòu)成一個語句,例如 sort(x,y,z); /假設已定義了sort函數(shù),它有3個參數(shù) coutx100) z=z-100; coutz; 3.4 C+的輸入與輸出的輸入與輸出 在C+程序中可以方便的利用cout和cin進行輸出和 輸入
4、。但是cout和cin并不是C+語言中正式的輸入與輸 出語句。 cout和cin是輸入輸出流庫中的流對象,是在編譯系 統(tǒng)提供的I/O庫中定義的。 在使用cout和cin進行輸出和輸入時要使用預處理命令把 頭文件stream包含到本文件中: #include 3.4 C+的輸入與輸出的輸入與輸出 3.4 C+的輸入與輸出的輸入與輸出 cout語句的一般格式:語句的一般格式: cout表達式表達式1表達式表達式2.變量變量1變量變量2變量變量n; 一個cout語句可以分寫成若干行。如 coutThis is a simple C+ program.endl; 可以寫成 coutThis is /注
5、意行末尾無分號 a C+ program. endl; /語句最后有分號 也可寫成多個cout語句,即 coutThis is ; /語句末尾有分號 cout a C+ ; cout program.; coutendl; 比較比較printf 與與cout 在用cout輸出時,用戶不必通知計算機按何種類 型輸出,系統(tǒng)會自動判別輸出數(shù)據(jù)的類型,使輸出 的數(shù)據(jù)按相應的類型輸出。如已定義a為int型,b為 float型,c為char型,則 couta b cabcd; 可以寫成 cina /注意行末尾無分號 b /這樣寫可能看起來清晰些 c d; 也可以寫成 cina; cinb; cinc; c
6、ind; 以上3種情況均可以從鍵盤輸入: 1 2 3 4 也可以分多行輸入數(shù)據(jù): 在用cin輸入時,系統(tǒng)也會根據(jù)變量的類型從 輸入流中提取相應長度的字節(jié) char c1,c2; int a; float b; cinc1c2ab; coutc1 c2 a b acb就可以 3.4.2 在輸入流與輸出流中使用控制符在輸入流與輸出流中使用控制符 滿足輸入輸出時有一些特殊的要求 double a=123.456789012345;對a賦初值 couta;輸出: 123.456 coutsetprecision(9)a;輸出: 123.456789 coutsetiosflags(ios fixed)
7、setprecision(8)a;輸出: 123.45678901 coutsetiosflags(ios scientific)setprecision(4)a; 輸出: 1.2346e02 int b=123456; coutsetw(10)b,b; 輸出: 123456,123456 setw.:只對其后的第一個數(shù)據(jù)起作用 程序的三種基本結(jié)構(gòu)程序的三種基本結(jié)構(gòu) 1、順序結(jié)構(gòu)、順序結(jié)構(gòu) A B C #include #include /由于程序要用到由于程序要用到 /數(shù)學函數(shù)數(shù)學函數(shù)sqrt,故應包含頭文件,故應包含頭文件cmath using namespace std; int mai
8、n( ) float a,b,c,x1,x2; cinabc; x1=(-b+sqrt(b*b-4*a*c)/(2*a); x2=(-b-sqrt(b*b-4*a*c)/(2*a); coutx1=x1endl; coutx2=x2y? 真真 假假 z=xz=y 例如: if(xy) cout“x is smaller than y.”; else cout“x is larger than y or equal to y. ”; if(a=b 3.6 關系運算和邏輯運算關系運算和邏輯運算 關系表達式:用關系運算符將兩個表達式連接起來的式子; 優(yōu)先級相同 (高) (小于) (大于) = (大于
9、或等于) = (等于) != (不等于) 優(yōu)先級相同 (低) 1. 前4種關系運算符(,)的優(yōu)先級別相同, 后兩種也相同。前4種高于后兩種。例如,“”優(yōu)先于 “”。而“”與“a+b 等效于 c(a+b) ab=c 等效于(ab)=c a=bc 等效于a=(bc 等效于a=(bc) 關系表達式的值是一個邏輯值,即“真”或 “假”。例如,關系表達式“5=3”的值為“假”, “5=0”的值為“真”。 在C和C+中都用數(shù)值1代表“真”,用0代表 “假”。 如果有以下賦值表達式: d=ab 則d得到的值為1 f=abc f得到的值為0 邏輯常量和邏輯變量邏輯常量和邏輯變量 C語言沒有提供邏輯型數(shù)據(jù),關系
10、表達式的值(真或假)分 別用數(shù)值1和0代表。 C+增加了邏輯型數(shù)據(jù)。邏輯型常量只有兩個,即false(假) 和true(真)。 邏輯型變量要用類型標識符bool來定義,它的值只能是 true和false之一。如: bool found,flag=false; /定義邏輯變量found和flag,并使flag的初值為false found=true; /將邏輯常量true賦給邏輯變量found 由于邏輯變量是用關鍵字bool來定義的,因此又稱為布爾 變量。邏輯型常量又稱為布爾常量。所謂邏輯型,就是布 爾型。 設立邏輯類型的目的是為了看程序時直觀易懂。 在編譯系統(tǒng)處理邏輯型數(shù)據(jù)時,將false處理
11、為0, 將true處理為1。因此,邏輯型數(shù)據(jù)可以與數(shù)值型 數(shù)據(jù)進行算術運算。 如果將一個非零的整數(shù)賦給邏輯型變量,則按 “真”處理,如 flag=123; /賦值后flag的值為true coutb) coutb) couta; else cout500) cost=0.15; else if(number300) cost=0.10; else if(number100) cost=0.075; else if(number50) cost=0.05; else cost=0; 注意:注意:1) if 后可跟復合語句。后可跟復合語句。 2) 注意注意 ;的位置。;的位置。 3) 注意多重注意
12、多重 if else 的搭配。的搭配。 if (ab) a=1; b=0; else a=0; b=1; a=0 b=1 a=1 b=0 ab 真真假假 if (i j) i+; if (ij); i+; i+ + ij 真真假假 if 總是與它上面最近的總是與它上面最近的 else 配對,如要改變,用復合語配對,如要改變,用復合語 句句 。 注意書寫格式注意書寫格式,相互配對的語句要對齊。,相互配對的語句要對齊。 ij 真真假假 i+ + 例:輸入兩個實數(shù),按代數(shù)值由小到大次序輸出這兩個數(shù)。例:輸入兩個實數(shù),按代數(shù)值由小到大次序輸出這兩個數(shù)。 void main( void ) float
13、a,b,t; /定義變量定義變量 coutab; /給變量賦值給變量賦值 a:7, b:3 if(ab) t=a; a=b; b=t; /交換數(shù)據(jù),用中間變量交換數(shù)據(jù),用中間變量 coutatbendl; /輸出變量輸出變量 b a t 7 3 7 7 3 輸出結(jié)果:輸出結(jié)果: 3 7 3.7.2 語句的嵌套語句的嵌套 在if語句中又包含一個或多個if語句稱為if語句的嵌套。 一般形式如下: if( ) if( ) 語句1 else 語句2 else if( ) 語句3 else 語句4內(nèi)嵌if 應當注意if與else的配對關系。else總是與它上面最近 的、且未配對的if配對。 限定了內(nèi)嵌i
14、f語句的范圍,關系清楚,不易出錯 1、編寫程序計算y的值: -1 (x0) 1. #include void main() int x,y; cinx; if (x0) y=1; coutyendl; 2. #include void main() int x,y; cinx; if (x0) y=-1; else if (x=0) y=0; else y=1; coutyendl; 3. #include void main() int x,y; cinx; if (x=0) if (x=0) y=0; else y=-1; else y=1; coutyendl; 4. #include
15、void main() int x,y; y=1; cinx; if (x=0) if (x=0) y=0; else y=-1; coutyendl; 3.8 條件運算符和條件表達式條件運算符和條件表達式 條件表達式的一般形式為 表達式1 ? 表達式2 表達式3 優(yōu)先級高于賦值運算符,低于邏輯運算符 用if語句表示則為: if (表達式1 ) 表達式2 ; else 表達式3; eg. x? a b 若x=0,則條件表達式的值為字符b的ASCII碼。 例 3.7 #include using namespace std; int main() char ch; cinch; ch=(ch=A
16、 coutchendl; return 0; b=(a0?2:0); 1.#include void main() int a,b; cina; if(a0) b=2; else b=0; coutbendl; 2.#include void main() int a,b; cina; if(a) if(a0) b=2; else b=0; coutbendl; 3.#include void main() int a,b; cina; b=2; if(a) if(a0) b=1; else if(a=0) b=0; else b=2; coutbendl; 4.#include void m
17、ain() int a,b; cina; b=0; if(a=0) if(a0) b=1; else b=2; coutbendl; 格式如下: switch(表達式) case 常量表達式1:語句1 case 常量表達式2:語句2 . case 常量表達式n:語句n default:語句n+1 /可無 語義為: 根據(jù)對表達式的計 算得到的值,從第 一個case常量開始 從上到下逐個進行 匹配,若相等,則 以此為入口,順序 向下執(zhí)行各條語句 序列。 3.9 多分支選擇結(jié)構(gòu)和多分支選擇結(jié)構(gòu)和switch 語句語句 格式如下: Switch() case:; break; case:; break
18、; case:;break; default: /可無可無 通過加 break強行 跳轉(zhuǎn)語句, 在執(zhí)行完第 一個語句序 列后,就強 行跳出 switch結(jié)構(gòu) P86第11題:將百分制成績轉(zhuǎn)換成5級 switch(int(score/10) case 10: case 9: grade=A;break; case 8: grade=B;break; case 7: grade=C;break; case 6: grade=D;break; default:grade=E; 3.11 循環(huán)結(jié)構(gòu)和循環(huán)語句循環(huán)結(jié)構(gòu)和循環(huán)語句 while語句的一般形式如下: while (表達式) 語句 例3.10 求
19、1+2+3+100。 #include using namespace std; int main( ) int i=1,sum=0; while (i=100) sum=sum+i; i+; coutsum=sumendl; do-while語句構(gòu)成循環(huán)語句構(gòu)成循環(huán) do-while語句的特點是先執(zhí)行循環(huán)體,然后判斷循環(huán) 條件是否成立。其一般形式為 do 語句 while (表達式); 例3.11 用do-while語句求1+2+3+100。 #include using namespace std; int main( ) int i=1,sum=0; do sum=sum+i; i+;
20、while (i=100); coutsum=sumendl; return 0; 對同一個問題用while語句處理和用dowhile語句 處理是否等價 ? #include using namespace std; int main( ) int i,sum=0; cini; while (i=100) sum=sum+i; i+; coutsum=sumendl; return 0; #include using namespace std; int main( ) int i,sum=0; cini; do sum=sum+i; i+; while (i=100); coutsum=su
21、mendl; return 0; 格式: for(e1;e2;e3) 計算計算e2e2 執(zhí)行執(zhí)行 非非0 0 0 0 退出退出 循環(huán)循環(huán) 計算計算e1e1 計算計算e3e3 e1; while(e2) ; e3; forfor循環(huán)語句循環(huán)語句 for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值) 語句 例如 for(i=1;i=100;i+) sum=sum+i; 它的執(zhí)行過程與圖3.10完全一樣。它相當于以下語句: i=1; while(i=100) sum=sum+i; i+; for語句語句 for(; ;)表示無限循環(huán),相當于while()語句 包含逗號表達式的其它形式的for語句,如:
22、for(sum=0,i=1;i100;i+) for(i=1,j=100;i=j;i+,j+) k=k+i+j; for(i=1;i=100;i+,i+); 例例 當結(jié)束條件為和大于2000時,如何表示? while(sumn; while(n!=-1) sum=sum+n; cinn; int h=12,f=32; int count=0; while(2*h!=f) h+;f+;count+; 例例 輸入若干字母,將它們變成其后的第四個字母, AE,WA,非字母字符忽略。 思路: 1.建立循環(huán),循環(huán)結(jié)束以輸入回車符為準while (c=getchar( )!=n) 2.判斷輸入的是否是字符
23、,否則忽略 if(c=a i=1;i+) cout“1”“*”i“=”setw(2)1*i“ ”; coutendl; for(i=1;i=2;i+) cout“2”“*”i“=”setw(2)2*i“ ”;coutendl; for(i=1;i=n;i+) cout“n”“*”i“=”setw(2)n*i“ ”;coutendl; for(n=1;n=9;n+) for(i=1;i=n;i+) coutn*i=setw(2)n*i ; coutendl; 舉一反三舉一反三 for(i=1;i=;i+) cout“1”“*”i“=”setw(2)1*i“ ”; coutendl; for(i=
24、1;i=;i+) cout“2”“*”i“=”setw(2)2*i“ ”;coutendl; for(i=1;i=10-n;i+) cout“n”“*”i“=”setw(2)n*i“ ”;coutendl; for(n=1;n=9;n+) for(i=1;i=10-n;i+) coutn*i=setw(2)n*i ; coutendl; 第1行一個 第2行二個 。 第N行N個 int i,j,n; coutn; for(int i=1;i=n;i+) for(j=1;j=i;j+) cout*;/打印若干個 coutendl; /換行 for(j=1;j=n-i+1;j+) 第1行:4個,接著
25、1個,換行 第2行:3個,接著3個,換行 第3行:2個,接著5個,換行 第4行:1個,接著7個,換行 第5行:0個,接著9個,換行 每行的個數(shù):5-i 每行的個數(shù): 2*i-1 每次循環(huán)要做三件事: 先打印(5-i) 個 后,接著打 印(2*i-1)個,再換行 for(int i=1;i=5;i+) for(j=1;j=5-i;j+) cout;/打印若干個 for(k=1;k=2*i-1;k+) cout;/打印若干個 coutendl; /換行 練習練習 ia 10 21i3成立 32i3不成立 4 5 63 7 8 格式: break; 該語句在程序中只用于下列兩種情況: 1、在開關語句
26、中,其功能是退出開關語 句,執(zhí)行其后的語句; 2、在循環(huán)體中,其功能是用來退出該重 循環(huán) breakbreak語句語句 格式:格式: continue;continue; 功能:只用在循環(huán)體中,用來功能:只用在循環(huán)體中,用來結(jié)束結(jié)束 該次循環(huán)該次循環(huán)。 在循環(huán)體中遇到在循環(huán)體中遇到continuecontinue語句時,語句時, 本次循環(huán)結(jié)束,回到循環(huán)條件判斷本次循環(huán)結(jié)束,回到循環(huán)條件判斷 是否執(zhí)行下一次循環(huán)。是否執(zhí)行下一次循環(huán)。 continuecontinue語句語句 #define M 10 void main() int num,sum(0); coutinput number:; f
27、or(int i=0;inum; if(num0) break; sum+=num; coutsum=sumendl; #define M 10 void main() int num,sum(0); coutinput number:; for(int i=0;inum; if(num0) continue; sum+=num; coutsum=sumendl; 求求10個數(shù)之和,個數(shù)之和, 遇負數(shù)終止遇負數(shù)終止 求求10個中的正個中的正 數(shù)之和數(shù)之和 快速算法:判斷它能否被2到sqrt(m)sqrt(m)之間的數(shù)之間的數(shù)整除, 若不能則是素數(shù)。 int m; coutm; int sqrtm=sqrt(m); for (int i=2;i=sqrtm+1) coutmis prime.n; else coutmisnt prime.n; /輸出 如何使程序更有效如何使程序更有效
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 筒線蟲病病原變異分析-洞察分析
- 私募信貸市場研究-洞察分析
- 2025年華東師大版九年級生物上冊月考試卷含答案
- 2025年冀教新版七年級地理下冊月考試卷
- 2025年人教A版七年級科學上冊階段測試試卷含答案
- 2025年人教版七年級科學下冊階段測試試卷
- 2025年岳麓版二年級英語上冊階段測試試卷含答案
- 2025年教科新版七年級科學上冊月考試卷含答案
- 二零二五版「鴻誠擔保招聘」人才招聘行業(yè)標桿與最佳實踐合同3篇
- 2025年滬科版七年級地理下冊階段測試試卷含答案
- 非誠不找小品臺詞
- 2024年3月江蘇省考公務員面試題(B類)及參考答案
- 患者信息保密法律法規(guī)解讀
- 老年人護理風險防控PPT
- 充電樁采購安裝投標方案(技術方案)
- 醫(yī)院科室考勤表
- 鍍膜員工述職報告
- 春節(jié)期間化工企業(yè)安全生產(chǎn)注意安全生產(chǎn)
- 保險行業(yè)加強清廉文化建設
- Hive數(shù)據(jù)倉庫技術與應用
- 數(shù)字的秘密生活:最有趣的50個數(shù)學故事
評論
0/150
提交評論