資源簡介 ?運用循環結構描述問題求解過程(下)學習目標掌握循環結構。學習內容循環嵌套的應用單獨使用for循環或while循環單循環語句,往往無法解決復雜的問題。如需要解決類似“工作要做很多遍,而每一遍工作都是需要重復做一些事情”的問題,就要用到多重循環,即“循環嵌套”。如果某一種循環語句中包含著自身或其他循環語句,就稱為循環的“嵌套”。for循環或while循環之間可以相互嵌套。問題項目小組經過討論,最后選擇購買單價分別為1.8元的筆記本、1.9元的筆、2.1元的小飾品作為活動的獎品和紀念品,每一種物品至少買100件,并且盡可能地用完1000元經費。如何設計方案,才能實現購買物品數量最多呢?如數量相同的情況下余額最小的方案為最佳,則最佳方案中每一種物品的數量是多少?余額是多少?思考如何運用循環嵌套的方法編程解決上述的最優采購方案設計問題?觀察要解決這個問題,需要用到循環嵌套的知識,下面提供了其中一種解法:(1)分析問題。設購買單價為1.8元、1.9元、2.1元的物品數量分別為x,y,z,當前余額為r元,所買物品總數量為s,根據題意有下面關系式:1.8x+1.9y+2.1z≤1000(x,y,z∈N,N為自然數),我們分別將x,y,z從100至555,526,476逐個窮舉,如果x,y,z的值滿足式子1.8x+1.9y+2.1z≤1000(x,y,z∈N,N為自然數),如x+y+z>s,則s=x+y+z,r=1000-(1.8x+1.9y+2.1z),并記錄此時x,y,z的值;如x+y+z=s,且1000-(1.8x+1.9y+2.1z)(2)設計算法根據上述的分析,可設計出如下的算法:①令x1=100,令y1=100,令z1=100,令s=300,令r=1000-(100×1.8+100×1.9+100×2.1)②x從100~555窮舉;③y從100~526窮舉;④z從100~476窮舉;⑤如果1.8x+1.9y+2.1z≤1000,若x+y+z>s,則s=x+y+z,r=1000-(1.8x+1.9y+2.1z),x1=x,y1=y,z1=x;若x+y+z=s,且1000-(1.8x+1.9y+2.1z)⑥轉步驟④;⑦轉步驟③;⑧轉步驟②;⑨輸出x1,y1,z1,s和r的值。(3)編寫程序。.Z1h)k"t8@根據上面設計的算法,編寫出解決該問題的程序如下:(4)調試運行將程序輸入計算機進行調試運行,結果如下所示:符合條件的最優方案是單價1.8元的物品的數量是單價19元的物品的數量是:106單價2.1元的物品的數量是:100共買到的禮物總數量為:余款還剩:00元循環控制的應用循環控制包含控制循環變量的變化方式和控制循環的跳轉。無論是for循環還是while循環,都需要一個控制循環的變量來控制循環的執行。但是,有些循環僅靠循環變量自身的變化難以達到想要的控制效果,因此需要用到控制循環的跳轉語句。實現控制循環的跳轉需要用到break和continue兩個關鍵字。其中,?break是中斷循環,continue是跳出本次循環體的執行。1.break語句在循環結構中,可以用break語句跳出當前循環體,從而中斷當前循環。在實際運用中,往往是在循環體中使用某一個條件來選擇是否中斷循環,即跳出當前循環,繼而執行當前循環外的下一條語句。也就是說,當某個條件成立的時候,需要立即退出循環,不再運行循環中余下的代碼,也不管循環控制變量的條件測試的結果如何。使用break語句,即可讓程序能按照要求執行要執行的代碼。2.continue語句continue語句是對break語句的補充。continue不是立即跳出循環體,而是當條件符合需要跳轉的時候,跳過該次循環結束前的語句,回到循環開頭的條件測試部分,重新開始執行循環。同理,在實際運用中,往往是在循環體中使用某一個條件來選擇是否跳轉循環。課內任務:有三個數字:1、2、3,能組成互不相同且無重復數字的兩位數,各是多少?運用循環結構描述問題求解過程(上)學習目標掌握循環結構。學習內容程序的循環結構是程序設計中常用到的基本結構之一。循環是讓計算機自動完成重復工作的常見方式。for循環、while循環、循環嵌套、循環控制等都是程序循環結構的主要內容。for循環的應用for循環語句的一般格式如下:for??循環變量??in??列表:??語句或語句組for循環依次把列表中的每個元素逐個迭代出來。冒號“:”代表下一行是循環的第一行,但是循環體在書寫時需要縮進。在for循環中,從for語句末尾的冒號開始至其下面沒有縮進的代碼之間都是其包含的需要重復執行的部分。因此,for循環所包含的語句是以縮進為標志的。具體如表4-9所示。需要注意的是,列表可以有幾種表達方式(1)直接羅列的方式。如表4-9中代碼“forvaluein[1,2,3,4,5]:”就是直接羅列的方式。(2)先定義后使用的方式,如表4-10所示。(3)使用range()函數。range()函數是讓Python從指定的第一個值開始數,并在到達所指的第二個值后停止,因此不包含第二個值。如range(1,6)其實是生成一個1~6的整數(不包含6),如表4-11所示。使用range()函數時,還可指定步長,如表4-12所示。當然,使用range()函數時,數值列表也可以是降序的,如range(10,1,-2)就是生成10至2的偶數(降序),具體如表4-13所示。問題假如項目小組經過討論,決定先網購單價為1元至10元的十種筆記本各1本,且每一種只買1本,那么該如何編程計算一共要花多少元?思考如何用for循環語句編程解決上述“網購物品累計費用計算”問題?觀察解決上述問題的方法有很多,其中一種方法步驟如下:(1)分析問題。這個問題相當于要計算從1到10的累加值。1~10的累加就是計算1+2+…+10,可以用for循環結構編程來解決這個問題。(2)設計算法。根據上述分析,可設計如下算法:需要有一個循環變量從1變化到10,將該變量命名為i;還需要另外一個臨時變量不斷和該變量進行加法運算,并記錄運算結果,將臨時變量命名為sum;變量i每增加1時,就和變量sum進行一次加法運算,變量sum記錄的是累加的結果。該算法流程圖如圖4-14所示。(3)編寫程序。根據上面設計的算法,編寫出解決該問題的程序所示:(4)調試程序。將程序輸入計算機進行調試運行,所得結果為“theresult=55”。while循環的應用while循環是當型循環,只要條件滿足,就不斷循環;否則,退岀循環。whie循環語句的格式:while??(表達式):??語句或語句組(1)表達式一般是一個關系表達式或一個邏輯表達式,表達式的值應該是一個邏輯值真(True)或假(False)。(2)當表達式的值為真時,執行循環體語句;當表達式的值為假時,退出循環,執行循環體外的下一條語句(即while后面沒有縮進的第一條語句)。(3)每次循環都是執行完循環體語句后回到表達式處重新開始判斷,重新計算表達式的值。一旦表達式的值為假就退出循環,為真時就繼續執行循環體語句。(4)循環體中必須有改變條件表達式值的語句,否則將成為死循環。(5)while循環可以用流程圖來演示執行過程,如圖4-15所示。問題項目小組為了籌集購買獎品和紀念品的費用,準備開展一次募捐活動,計劃向第一個贊助人募集20元,向第二個贊助人募集25元……后一個比前一個多募捐5元,依次下去,第幾個人募捐后募集到的總費用累計超過500元?思考如何用while循環語句編程解決上述的募集費用計算問題?觀察用while循環語句編程解決上述問題的方法有多種,編程時要注意條件表達式的構成,現給出其中一種方法的步驟如下:(1)分析問題。設所拉贊助人的數量為num(num=1,2,3,…),每次募集的費用為money,每次募集之后總費用為sum,則sum可以用如下的式子表示:sum=20+25+30+……于是這個問題就可以轉化為:當sum≥500時,求num的值。-(2)設計算法。根據上述的分析,設計算法如下:①令num=1;②令money=20;③令sum=20;④num=num+1;⑤money=money+5;⑥sum=sum+money;⑦如果sum<500,則返回步驟④;⑧輸出num的值;⑨結束。(3)編寫程序。根據上面設計的算法,編寫出解決該問題的程序如下:(4)調試程序。將程序輸入計算機進行調試運行,得出結果為12。課內任務1:假如項目小組經過討論,決定網購單價為1元至10元的十種筆記本,且每一種筆記本需要購買對應單價的本數(1元的買1本,2元的買2本,3元的買3本,……,10元的買10本),那么該如何編程計算一共要花多少元?課內任務2:項目小組為了籌集購買獎品和紀念品的費用,準備開展一次募捐活動,計劃向第一個贊助人募集20元,向第二個贊助人募集25元……后一個比前一個多募捐5元,依次下去,第幾個人募捐后募集到的總費用累計超過500元?對于上述問題的解法,如果改變幾個變量的初始值,假設令“num=0,money=20,sum=0”,那么,while循環體中的程序段應該如何編寫?它們之間的語序能改變嗎?為什么? 展開更多...... 收起↑ 資源列表 4.4 運用循環結構描述問題求解過程(上) 學案.doc 4.4 運用循環結構描述問題求解過程(下) 學案.doc 縮略圖、資源來源于二一教育資源庫