




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
SimpRead我們在上一講提到程序有順序、選擇、循環的一種結構。循環結構可以用短短幾行代碼,執行成千上萬次的運算。從計算機編程的視角來看,循環結構又有三種實現方法,分別是forSimpRead我們在上一講提到程序有順序、選擇、循環的一種結構。循環結構可以用短短幾行代碼,執行成千上萬次的運算。從計算機編程的視角來看,循環結構又有三種實現方法,分別是for循環、while循環和dowhile循環;而從數學視角來看,循環結構很像是納法。牌還會撞倒第三個骨牌。以此類推,即使骨牌數量再多,也會逐一被放倒。第一,對于任意第i個骨牌而言,它的倒下能帶動第i+1個骨牌倒下;“循環”的思想也存在我們的古文化中,《愚公移山》的“又有子,子又有孫;子子孫孫無窮匱也。”簡而言之就是,我有兒子,我兒子也有兒子,我兒子的兒子也會有兒子。以此類推,子子孫孫無窮盡。第一,任意一代男子(或者說是兒子),第二,愚公有個兒子。一下。最簡單常見的數學歸納法是,用來證明當n等于任意一個自然數時某個命題成立,其證明步驟可以分下第一,當n=1第二,假設對于任意一個數字i命題成立,可以推導出在對于i+1后代,至少有一個兒子。【例1】證明對于任意一個正整數n,它的2n是偶數。第一步,當n=1時,2n=2×1=2是偶數。第二步,假設對于某個正整數i而言,2i是偶數,則2(i+1)=2i+2。其中2i為偶數,2為偶數,兩個偶數之和也是偶數,因此2(i+1)也是偶數。根據數學歸納法可以知道,對于任意一個正整數n,2n【例2】求證1+3+5+...+(2k-1)=k2第一步,當k=1時,根據數學歸納法可以知道,對于任意一個正整數n,2n【例2】求證1+3+5+...+(2k-1)=k2第一步,當k=1時,1=12第二步,假設對于任意一個正整數i而言,1+3+5+...+(2i-1)=i2,則1+3+5+...+(2i-1)+[2(i+1)-1]=i2+[2(i+1)-1]=i2+2i+2-1=i2+2i+1=(i+1)2原命題依然成立。因此1+3+5+...+(2k-1)=k2綜上這兩個例子,你會發現它們都是要證明“下一張多米諾骨牌”能夠倒下,也就是在證明“i推進到i+1的過程”。具體而言,這兩個例子的第二步都分別在求證2(i+1)是偶數,以及(i+1)2成立,這種數學歸到一個循環結構的程序中。我們在大學C語言的課程中曾經學過,循環結構的實現方法有三種,分別是for循環、while循環和do-while循環。為了簡潔,下面我們定義s1是初始表達式,s2是條件表達式,s3叫作末尾循環體,s4是中間循環體,并將其代入這三個循環結構中,對比學習它們之間的聯系與不同。for如剛剛所定義的,s1是初始表達式,s2是條件表達式,s3叫作末尾循環體,s4for循環的執行順序是s1、(s2,s4,s3)、(s2,s4,s3)、...、(s2,s4,s3)、s2例如,求解1到50所有整數之和,可以用forintresult=for(inti=1;i<=50;result+=體,最后第4行運算對應的是s4中間循環體。先執行i=1,再判斷i≤50與否,如果為真,則執行第4行的運算,最后執行i++;接著循環,再判斷i≤50與否,如果為真,則執行第4行的運算,最后執行i++;經過多次循環后,再判斷i≤50與否,直到結果為假,跳出循環結束。for循環還有很多變種,具體而言就是s1、s2和s4都可以被省略或部分省略。圍繞上面的例子,s1的2fors1的部分,這樣新的代碼可以寫作:intresult=inti=for(;i<=50;result+=intresult=inti=for(;i<=50;result+=根據代碼執行的順序,可以發現s3的執行永遠是在s4之后。因此,可以把s3和s4s4intresult=inti=for(;i<=50;result+=同樣,s2的執行永遠在s4之前,也就意味著s2可以被放在循環體中的s4之前,而把for語句中s2的位置空閑出來。但最后一次的s2執行,還肩負著結束循環的任務,因此需要結合if條件判斷語句和break語句,完成最后跳出循環的實現,這樣新的代碼可以寫作:intresult=inti=for(;;if(i>result+=2.whileif(i>result+=2.while循環的另外一個實現方式是while循環,while循環的代碼結構如下:如剛剛所定義的,s2是條件表達式,s4是中間循環體。真,則執行s4;繼續循環判斷s2是否成立,如果為真,則執行s4;如此循環多次后,直到s2不再成我們繼續使用while循環來實現1~50inti=intresult=while(i<result+=同樣地,如for循環一樣,while循環也有一些變種。具體而言,s2也是可以被省略而用其他方法實現。從循環執行的順序可以發現,s2的執行總是在s4之前;而最后一次s2循環的任務。這就需要if條件語句和breakinti=intresult=whileif(i>resultintresult=whileif(i>result+=3.dowhile最后一種循環實現的方法是dowhile循環,dowhile循環的基本結構如下:如剛剛所定義的,s2是條件表達式,s4是中間循環體。dowhile循環與while循環相比,區別就是執行順序的調整。dowhile循環中,無論s2是真是假,都會至少執行一次s4。這樣它的執行順序就是(s4,s2)、(s4,s2)...(s4,s2)。具體而言就是:先執行s4,再來判斷s2是真是假,如果為真,則執行s4;再來判斷s2是真是假,如果為真,則執行s4;再來判斷s2是真是假……如此循環多次之后,直到s2為假,跳出循環結束。我們仍以1~50所有整數求和為例,看一下dowhileinti=intresult=doresult+=}while(i<=dowhile循環也有一些變種,其s2語句也可以被調整到其循環體中,可以考慮用if條件語句和inti=intresult=inti=intresult=doresult+=if(i>從代碼執行的順序來看,while循環與for循環都是先判斷條件,再執行循環體。在極端情況下,第一次判斷條件就不成功,循環體就有可能一次也不被執行;而dowhile循環則相反,它先執行循環體,從編碼的視角來看,while循環和dowhile循環,在條件判斷的括號中只需要寫循環條件;而for循環while循環至少會執行一次循環體,它如何能被其他循環結構替代呢?這就要借助break語句提前跳出在不考慮代碼結構的美觀時,這三種循環語句可以在功能上實現彼此之間的切換,我們以for向dowhile如下是任意一個for循環其執行順序為s1、(s2,s4,s3)、(s2,s4,s3)...(s2,s4,s3)、s2它可以用下面的while循環根據其執行順序為s1、(s2,s4,s3)、(s2,s4,s3)...(s2,s4,s3)、s2它可以用下面的while循環根據while語句的執行順序可知,這段代碼的執行順序為s1、(s2,s4,s3)、(s2,s4,s3)...(s2,s4,s3)、因此可以得知,兩段代碼的功能結果完全一致。而如果非要采用dowhile循環do在這里,我們補充一下break語句的知識。break語句的作用是,終止并跳出循環,繼續執行循環語句以上面的代碼為例,一旦第3行的條件判斷通過,則需要執行beak語句。b以上面的代碼為例,一旦第3行的條件判斷通過,則需要執行beak語句。beak當前循環,這樣程序就會從第4行跳轉至第10行繼續執行。基于beak語句,再根據dowhile語句的執行順序可知,這段代碼的執行順序為s1、(s2,s4,s3)、(s2,s4,s3)...(s2,s4,s3)、s2,因此可以得知兩段代碼的功能結果完全一致。這里要給大家提個醒:如果是在技術面試時,千萬不要說某某功能的開發,只能用for循環、while循環或dowhile循環,這一定是錯的。因為,功能上這三種循環的實現是完全可以實現互換的;只不數學歸納法和循環結構有很多相似之處,它們都是動作集合。數學歸納法不關注歸納過程的結束而循環結構作為一種程序開發邏輯,則必須要關注循環過程的結束或死機。歸納法的問題增加一個截止條件的限制,那就是k小于100時。這道例題是:證明在k<100時,1+3+5+...+(2k-1)=k2證明k=1假設k=i時等式成立后,k=i+1令s1為k=,s4為等式成立,s3為k=i或k=i+1,再補充題目的終止條件k<100為s2。這樣,根據for循環執行的邏輯,把這些動作按照s1、(s2,s4,s3)、(s2,s4,s3)...(s2,s4,s3)、s2基本的for循環代碼框架。在這個框架中,最開始的s1、s2、s4,即為當k=1在這個框架中,任意相鄰的兩組(s2,s4,s3)、(s2,s4,s3),就是假設k=i時等式成立后,k=i+1等式也就是說,此時的數學歸納法證明和for循環實現,在功能上是等價的,我們給出for循環的代碼如intleft=intleft_temp=intright=for(intk=1;k<100;left_temp=2*k-leftrightk*if(leftprintf("%disleftrightk*if(leftprintf("%dis代碼的前三行定義了3個變量,分別是left、left_temp和right,其中left和right分別用來存儲等式兩邊的結果,left_temp用來存儲公式中每輪增加的一項;第4行,進入for循環,得到對應的s1、s2和s3;第6行,計算出當前一輪的left_temp值;第7行,把left_temp作為增量,增
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- NB/T 11528-2024礦用無線隨鉆測量及裝置檢修技術規程
- 解除船舶租賃合同協議
- 訂餐合同協議書范本
- 超市臨時員工合同協議
- 計件合同協議標準版
- 2025年口腔醫學專業考試試卷及答案
- 品牌顧問合同協議書范本
- 檳榔園出租合同協議
- 員工聘用合同協議模板
- 母女關系互換協議書模板
- 環境藝術設計職業生涯規劃書
- 2025年java開發面試題及答案
- (完整版)公司的代賬協議模板合同7篇
- 全過程工程咨詢投標方案(技術方案)
- 自然辯證法概論(視頻課)知到課后答案智慧樹章節測試答案2025年春安徽農業大學
- 第六單元“保護環境”(主題閱讀)-六年級語文上冊閱讀理解(統編版)
- 北京市城市管理委員會直屬事業單位公開招聘10人高頻重點提升(共500題)附帶答案詳解
- 石化工程質量管理培訓
- 審計訪談系列之訪談提綱2021年
- 律師案件評估報告范文
- 文創產品的設計
評論
0/150
提交評論