




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、1循環(huán)結構與數組2循環(huán)結構 循環(huán)控制結構為計算機程序描述重復計算提供控制手段。一個循環(huán)控制結構需指明以下三件事情中的兩件: 被循環(huán)執(zhí)行的語句; 是否循環(huán)的條件; 詳細指明循環(huán)方式。 在PASCAL語言,用while,repeat和for三種語句描述循環(huán)控制結構3例:求S=1+2+3+100的值S:=S+1S:=S+2S:=S+100S:=S+i (i=1,2,100)分析:用S統(tǒng)計所有的和,如果每次加一個數值,需要做100次賦值。從上面的語句可以看出:上述這100個賦值語句有一個共同的特點,都可以抽象成S:=S+i的形式。其中i從1變化到100。為了簡化程序設計,因此有必要采用可以用來重復運行
2、某些語句段的程序結構這就是循環(huán)結構。4計數循環(huán)For 語句For For 語句有兩種形式,它們的格式分別是:語句有兩種形式,它們的格式分別是:(1)遞增循環(huán):for 控制變量 := to do (2)遞減循環(huán):for 控制變量 := downto do 5For循環(huán)語句使用說明:(1)我們一般把表達式1稱為記數循環(huán)的初值,表達式2稱為記數循環(huán)的終值。(2)for語句中的初值、終值、控制變量的數據都必須是順序類型,且類型賦值相容。(3)當初值和終值確定后,循環(huán)的次數就確定不變了,并且在重復語句內不能對控制變量施加任何賦值操作。(4)Do后面的語句可以是任何一種語句,我們一般稱其為循環(huán)體。6例:求
3、S=1+2+3+100的值 程序代碼段:Var i,s:integer;begin S:=0; For i:=1 to 100 do s:=s+i; Writeln(s=,s);End.S:=S+1S:=S+2S:=S+100S:=S+i (i=1,2,100)分析:用S統(tǒng)計所有的和,如果每次加一個數值,需要做100次賦值。從上面的語句可以看出:上述這100個賦值語句有一個共同的特點,都可以抽象成S:=S+i的形式。其中i從1變化到100。為了簡化程序設計,因此有必要采用可以用來重復運行某些語句段的程序結構這就是循環(huán)結構。7 例:按正、反兩種順序輸出26個大寫英文字母var ch:char;b
4、egin for ch:= A to Z do write(ch); writeln; for ch:=Z downto A do write(ch);end.8例:例:NocomachnsNocomachns定理定理任何一個n3一定可以表示成n個連續(xù)的奇數和。輸入n(n100),輸出n3對應的表達式。題解題解 設表達式中的最小奇數為x。 當n=1時,最小奇數x=1,1個奇數;n=2時,最小奇數x=3,2個奇數;n=3時,最小奇數x=7,3個奇數;當n=k時,最小奇數x前已有1+2+k-1個奇數,第k個奇數x=12*2)1(*kk=k*(k-1)+1=n*(n-1)+1。var i,n,a:l
5、ongint; 循環(huán)變量,連續(xù)的奇數個數,當前項,類型為長整型begin readln(n); 輸入連續(xù)的奇數個數 a:=(n*(n-1)+1; 計算最小奇數 for i:=1 to n-1 do 輸出表達式的前n-1項begin write(a,+);a:=a+2; end; writeln(a); 輸出第n項 readln;end.main9例:百雞問題例:百雞問題 一只公雞值5錢,一只母雞值3錢,而1錢可買3只小雞?,F有100錢,想買100只雞。問可買公雞、母雞、小雞各幾只? 我們通過兩重for循環(huán)枚舉出公雞和母雞的所有可能只數。在確定當前公雞只數為i、母雞只數為j的情況下, 計算小雞只
6、數k=100-i-j。然后通過下述布爾表達式i*5+j*3+k/3=100判斷當前100只雞的總價值是否為100錢。如果是,則輸出i、j和k。var i,j,k:integer;beginfor i:=1 to 20 do for j:=1 to 33 do begin k:=100-i-j; if i*5+j*3+k/3=100 then writeln(i:5,j:5,k:5); end;for readln;end.main10FOR循環(huán)上機練習題 1.求N!=1*2*3*N。(N7) 2.找出100以內所有被2、3、5除余數均為1的數 3.求100999之間的所有水仙花數。所謂水仙花數
7、,是該數等于它各位數字的立方和。例如:153=13+53+33。習題一參考程序var i,n:integer; sum:integer;begin write(input n:); readln(n); sum:=1; for i:=1 to n do sum:=sum*i; writeln(n,!=,sum);end.習題2參考程序vari,n,s:integer;beginfor i:=1 to 100 do if (i mod 2=1) and (i mod 3=1) and (i mod 5=1) then writeln(i);end.var m,a,b,c:integer;begi
8、nfor m:=100 to 999 do begin a := m div 100; b := (m-a*100) div 10; c := m mod 10; if a*a*a + b*b*b + c*c*c = m then writeln(m) endend.11條件循環(huán) For循環(huán)語句適用于已知次數的循環(huán)結構,但有時我們判斷是否結束循環(huán)的依據是某個條件是否滿足,比如“當時就做”,或者是“一直做到時為止”,這種循環(huán)我們稱之為條件循環(huán)。在Pascal中條件循環(huán)語句有兩種,分別是While循環(huán)語句和Repeat循環(huán)語句。接下來我們就分別介紹這兩種語句的使用方法。12while語句 whil
9、e語句用于“當滿足某一條件時進行循環(huán)”的情況,因此它也被稱為“當型循環(huán)”。while語句的語法格式如下: while do while循環(huán)語句的執(zhí)行流程如圖。布爾表達式循環(huán)體falsetruewhile循環(huán)語句執(zhí)行流程While語句使用說明:(1)當布爾表達式為true則執(zhí)行循環(huán)體,若為false,則根本不進入循環(huán)體。(2)如果一開始布爾表達式的值就為假時,while循環(huán)就會一次循環(huán)體都不執(zhí)行。(3)相反的,如果布爾表達式永遠是真的,那么循環(huán)就無法結束,從而成為“死循環(huán)”。為了避免這種情況的發(fā)生,在循環(huán)體中就一定要有能改變布爾表達式結果的操作。13repeat語句Repeat 語句用于“重復執(zhí)
10、行循環(huán)體,一直到指定的條件為真時為止”的循環(huán)結構,它又被稱為“直到型循環(huán)”。Repeat語句的語法格式為: repeat 循環(huán)體語句 until 布爾表達式repeat循環(huán)語句的執(zhí)行流程見圖。布爾表達式循環(huán)體truefalse圖 repeat循環(huán)語句執(zhí)行流程Repeat語句使用說明:(1)先執(zhí)行循環(huán)體,然后判斷當布爾表達式的值,為false,則繼續(xù)循環(huán),為true則終止循環(huán)。(2)為了能使repeat循環(huán)重復能終止,與while循環(huán)一樣,循環(huán)體中一定要有影響布爾表達式的操作,否則該循就是一個死循環(huán)。(3)與while循環(huán)不一樣的是,repeat循環(huán)不管布爾表達式是否成立,都會至少執(zhí)行一次循環(huán)體
11、。另外需要說明的是,由于while循環(huán)與repeat語句都屬于條件循環(huán)語句,因此一般可以將這兩種語句互相轉換,而具體使用哪條語句時要看實際情況決定。14例:求某年后的第例:求某年后的第n(nn(n1)1)個閏個閏年年 輸入y和n 輸出y年后第n個閏年的年號題解題解 若y能被4整除但不能被100整除或y能被400整除,則y是閏年。由此得出判斷y是閏年的布爾表達式 (y mod 4=0) and (y mod 1000) or (r mod 400=0)開始時逐年判斷。一旦確定y年為閏年的話,則下一個閏年為y+4*s(s1),即每相隔4年后才可能有一個閏年。因此設步長變量s。初值為1;當找到第一個
12、閏年后,s改為4。15var y,n,s:integer; 年號、間隔的閏年數、布長值begin write(begining year and numbers:); readln (y,n); 輸入年號和間隔的閏年數 s:=1; 步長值初始化 repeat if (y mod 4=0)and (y mod 1000)or (y mod 400=0) then begin 若y是閏年,則輸出年號 writeln (y,year); _ s:=4; 步長值設為4 end;then _Until _end. mainvar y,n,s:integer; begin write(begining y
13、ear and numbers:); readln (y,n); s:=1; while n0 do begin if (y mod 4=0)and (y mod 1000) or (y mod 400=0) then begin writeln (y,year); n:=n-1; s:=4; end;then y:=y+s; endEnd.n:=n-1; 間隔的閏年數-1y:=y+s; 移至s年后n=0; 直至輸出了n個閏年為止16例:計算Sum=1+3+5+n(n為大于1的奇數),求當Sum10000時,n的最大值Var n,sum,:integer;begin write(input a
14、 odd data:); sum:=0; n:=1; writeln(sum) end.while sum10000 dowhile sum=10000拓展:若求當SUMM時,n的最大取值呢17循環(huán)使用的一些說明循環(huán)的強制終止循環(huán)的強制終止一般來說,只要循環(huán)的條件及循環(huán)體描述得當,循環(huán)都能順利結束,不會產生死循環(huán)的。有時在程序運行中會有一些特殊的情況,需要終止當前循環(huán)的執(zhí)行,如果將這個條件寫到循環(huán)體外有不太方便,這時可以使用break來強制終止當前循環(huán)的執(zhí)行。WhileWhile與與RepeatRepeat語句對比語句對比while和repeat語句一般情況下可以相互替換。它們的主要區(qū)別是:w
15、hile是先判斷后執(zhí)行,而repeat是先執(zhí)行后判斷,因此while語句的循環(huán)體有可能一次也不執(zhí)行,而repeat語句至少執(zhí)行一次;前者是當條件滿足時執(zhí)行,而后者是當條件不滿足時執(zhí)行;前者的循環(huán)體是復合語句時要用begin、end,而后者卻不一定要用。18條件控制循環(huán)練習1、輸入一串字符,以“?”結束,輸出其中小寫字母個數與數字個數。2、從2開始,輸出50個素數3、利用泰勒公式求e的值,直到最后一項小于10-7為止。泰勒公式如下e=1+1/1!+1/2!+1/3!+1/n!var ch:char; n1,n2:integer;begin n1:=0;n2:=0; read(ch); while
16、 ch ? do begin if (ch=a) and (ch= 0) and (ch= 9) then n2:=n2+1; read(ch) end; writeln(number of letter:,n1); writeln(number of digit:,n2)end.Var n,I,j:integer; flag:boolean;Begin n:=2;i:=1; while i=50 do begin flag:=false; j:=2; while j=trunc(sqrt(n) do beginend; if n mod j=0 then begin flag:=true;
17、break; j:=j+1; end ; if flag=false then begin write(n:4); if (I mod 10=0) then writeln; i:=i+1; end; n:=n+1; end;End.var e,p:real; i:integer;begin e:=1;p:=1;i:=1; repeat p:=p/i; e:=e+p; i:=i+1 until p1e-7; writeln(e=,e)end.19利用循環(huán)輸出各種規(guī)則圖形任意輸入一個大寫的英文字母,按菱形的方式輸出。圖為輸入D時的顯示結果AABAABCBAABCDCBAABCBA ABAA20利
18、用循環(huán)輸出各種規(guī)則圖形 對于平面規(guī)則圖案的輸出,一般用一個兩重循環(huán)來實現,在實現時我們主要從以下幾個方面來考慮: 有多少行,一般用外循環(huán)來控制;1.每一行的起始位置跟行有什么關系,通常是用write(:有關行的表達式)的形式來控制輸出的空格數;2.每一行有多少個輸出項(列),用內循環(huán)來控制輸出;3.具體一個輸出項跟行、列有什么關系,直接輸出相關輸出項有關行和列的表達式。21數組在代數上我們常常這樣寫:a1,a2.ai.a100(0i101),通過i來指明具體的ai,如i=10時代表a10,在pascal語言里我們也希望能夠類似地描述。從前面的變量名里我們已經知道,a1,a2.ai彼此之間是相互
19、獨立的,并沒有必然的聯系。如要象代數上那樣,可以使用數組。數組其實是一組相同值類型的變量的集合,這些變量共用一個名,彼此之間通過下標來區(qū)別。如定義了數組a,它的下標可以從1到100,那么就可以直接通過ai來指明第i個量,如i=10,ai指的是a10。數組的說明數組的說明可以先通過 type 標識符=array下標范圍 of 值類型;然后再在變量說明里引用。 如:type array1=array1.100 of integer; var a,b:array1;也可以直接在變量說明里說明:變量名:array下標范圍 of 值類型; 如:var a,b:array1.100 of integer;
20、 描述下標范圍一般通過離散(有序)類型,如從一個整數到另一個整數,或者從一個字符到另一個字符等。如: var a:array-5.5 of integer; c:array1.20 of char;d:arraya.z of integer;數組元素值類型本身也可以是復雜的自定義類型,如子界類型,數組類型,記錄等22例:用篩法求100以內的素數分析:素數是除了1和它本身以外沒有其它約數的數。用篩法求素數的方法是:用質數篩去合數:從第一個素數2開始,把它的倍數去掉;這樣2以后的第一個非0數就一定也是素數,把它的倍數也刪了重復這個刪數過程,直到在所找到的素數后再也找不到一個非0數。把所有非0數輸出
21、。23例:計算燈的開關狀態(tài)例:計算燈的開關狀態(tài) 有N個燈放在一排,從1到N依次順序編號。有N個人也從1到N依次編號。1號將燈全部關閉,2將凡是2的倍數的燈打開;3號將凡是3的倍數的燈作相反處理(該燈如為打開的, 則將它關閉;如關閉的,則將它打開)。以后的人都和3號一樣,將凡是自己編號倍數的燈作相反處理。試計算第N個操作后,哪幾盞燈是點亮的。(0-表示燈打開,1-表示燈關閉)題解題解 設布爾數組a為n盞燈的狀態(tài)。初始時,所有的燈打開,即a數組的每一個元素設為false。然后依次將每盞燈序號的倍數作取反處理,由此得出的a數組元素的序數值即為最后的燈狀態(tài)。var k,n,i,j:integer;a:
22、array1.100of boolean; N盞燈的狀態(tài)begin readln (n); 讀入燈的數目 for i:=1 to n do ai:=false; 初始時所有燈打開 for i:=1 to n do 依次進行n次操作 begin j:=i; 從第i號隊員出發(fā)進行第i次操作 while j=n do begin aj:=not(aj);j:=j+i; 將凡是i的倍數的燈作取反處理 end;while end;for for i:=1 to n do write(ord(ai); 輸出n次操作后的結果 writeln;end.main24字符串在Pascal中,字符類型只可以處理一個字符的內容,而實際生活中我們經常要處理到的是大量的字、詞、句等文字信息。為了使程序能夠處理這些文字信息,Turbo Pascal特別引入了字符串類型,即一組具有可變長度的字符序列。 字符串類型定義形式為: stringn或者string字符串可以參加的運算有:連接運算、關系運算和賦值運算三種。連接運算是用“+”符號將兩個字符串連接成一個字符串,如:“Turbo”+“Pascal”的結果為“TurboPascal”。字符串的關系運算用于字符串的比較,字符串的比較是按字典順序進行的,其結果是一個布爾值。以下字符串的關系運算結果
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 農業(yè)面源污染控制-第5篇-洞察及研究
- 機房參觀管理辦法細則
- 農戶生計決策管理辦法
- 工業(yè)自動化系統(tǒng)設計優(yōu)化研究
- 華為應用限制管理辦法
- 協會業(yè)余球員管理辦法
- 生產經營單位安全主體責任規(guī)定
- 導電水凝膠對神經肌肉組織修復的研究進展
- 內部職務異動管理辦法
- 微短劇原汁原味傳統(tǒng)文化策略探析
- 模型優(yōu)化與參數敏感性分析-全面剖析
- 精神科護理安全警示教育
- 人力核心指標 行業(yè)報告系列 2025年Q1精細化工行業(yè)薪酬報告
- 2025年中央一號文件參考試題庫100題(含答案)
- 基于深度學習的動態(tài)差分隱私保護算法
- 水上鉆探施工方案
- 2025年度校園營養(yǎng)餐配送合作協議合同范本3篇
- 2025年上半年甘肅慶陽市寧縣人民政府辦公室直屬事業(yè)單位選調2人易考易錯模擬試題(共500題)試卷后附參考答案
- 高原施工醫(yī)療衛(wèi)生防疫措施
- 中建涂料外墻保溫施工方案
- 礦山資源鉆探施工協議
評論
0/150
提交評論