NOIP(全國(guó)青少年信息學(xué)奧林匹克聯(lián)賽)復(fù)習(xí)Pascal.ppt
《NOIP(全國(guó)青少年信息學(xué)奧林匹克聯(lián)賽)復(fù)習(xí)Pascal.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《NOIP(全國(guó)青少年信息學(xué)奧林匹克聯(lián)賽)復(fù)習(xí)Pascal.ppt(29頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
一 復(fù)習(xí)回顧 基本結(jié)構(gòu) 順序結(jié)構(gòu) 選擇結(jié)構(gòu) 循環(huán)結(jié)構(gòu) 過程和函數(shù) 標(biāo)準(zhǔn)類型 整型integer0 23678 實(shí)型real兩種表示 小數(shù)表示法 科學(xué)表示法 字符型char如 a A 布爾型boolean如 真true假false 文件類型file 常量 指在程序執(zhí)行過程中值不能改變的量 變量 指在程序執(zhí)行過程中值可以改變的量 表達(dá)式和函數(shù) 常量的說明 如 圓周率 Constpi 3 14 注意 變量必須先說明再使用 變量說明 VARx integer 算術(shù)運(yùn)算符 div 整除 34div5 6mod 取余 34mod5 4 常用函數(shù) 函數(shù)名 功能 舉例 Abs x 求變量的絕對(duì)值 Abs 5 4 5 4 Sqr x 求變量x的平方 Sqr 2 4 Sqrt x 求變量x的平方根 Sqrt 4 2 Chr x 取ASCII碼的值 Chr 48 0 Ord x 取字符的ASCII值 ord A 65 Trunc x 截尾函數(shù) Trunc 1 99 1 Round x 舍入取整 Round 3 9 4round 3 1 3Round 3 9 4round 3 1 3 pred 前導(dǎo)函數(shù) Pred 2 1pred b a succ 后繼函數(shù) Succ 1 2Succ a b 表達(dá)式 1 寫出一個(gè)整數(shù)被3整除所得余數(shù)的表達(dá)式 xmod3 2 寫出計(jì)算圓的周長(zhǎng)表達(dá)式 2 pi r 3 將任一大寫字母轉(zhuǎn)換成小寫字母 Chr ord x ord a ord A 4 寫出表示年齡大于50歲的表達(dá)式 N 50 5 寫出一個(gè)數(shù)既能被3整除又能被5整除的表達(dá)式 xmod3 0 and xmod5 0 基本語句 一 賦值語句變量 表達(dá)式 功能 先計(jì)算后賦值 二 輸入語句read readlnread 變量1 變量2 readln 變量1 變量2 功能 依次從鍵盤上讀入數(shù)據(jù) 三 輸出語句write writeln write 變量1 變量2 writeln 變量1 變量2 例 從鍵盤輸入兩個(gè)數(shù) 交換后輸出 Programex 1 input output vara b c integer beginwriteln 請(qǐng)輸入兩個(gè)數(shù) read a b c a a b b c writeln 交換后的值是 a 5 b 5 End 程序首部 說明部分 語句部分 運(yùn)行 請(qǐng)輸入兩個(gè)數(shù) 34 交換后的值是 43 例 從鍵盤輸入一個(gè)三位數(shù) 分離出百位 十位和個(gè)位并輸出 Programex 2 input output varx ge shi bai integer beginwriteln 請(qǐng)輸入一個(gè)三位數(shù) read x ge xmod10 bai xdiv100 shi x bai 100 div10 writeln bai bai shi 10 shi ge 10 ge End 程序首部 說明部分 語句部分 運(yùn)行結(jié)果 請(qǐng)輸入一個(gè)三位數(shù) 836 bai 8shi 3ge 6 四 選擇結(jié)構(gòu)的程序設(shè)計(jì) 格式一 If條件then語句1 格式二 If條件then語句1else語句2 格式一功能 如果條件成立則執(zhí)行then后的語句1 否則執(zhí)行該條件語句的下一條語句 格式二功能 如果條件成立則執(zhí)行then后的語句1 否則執(zhí)行else后的語句2 例 輸入一個(gè)數(shù)X 要求不使用ABS函數(shù) 輸出其絕對(duì)值 分析 首先輸入一個(gè)數(shù)給X 然后判斷X是否小于0 如果是則 X 為X的絕對(duì)值 否則輸出X Programex 3 input output varx real beginreadln x ifx 0thenwriteln x elsewriteln x End 例4 將輸入的兩個(gè)非負(fù)實(shí)數(shù)中較大的放在max里 小的放在min里 并輸出 算法 1 輸入兩個(gè)數(shù)max min 2 判斷max是否小于min 如果小于min 則交換max和min的值 3 輸出max min的值 Programex 4 input output varmax min t real beginread max min ifmax minthenbegint max max min min tend writeln max min End If語句嵌套 在格式一或格式二中 當(dāng)語句1或語句2本身也是一個(gè)條件語句時(shí) 稱該語句為條件語句嵌套 注意 1 else語句總是和與它最近的那個(gè)還沒有其他的else配對(duì)的if then配對(duì) 如果內(nèi)層的else子句要省 則寫一個(gè)空語句或采用復(fù)合語句 即增加語句括號(hào) 2 在書寫程序時(shí)采用縮進(jìn)式 以增強(qiáng)程序的可讀性 Case語句 Case表達(dá)式of常數(shù)表1 語句1 常數(shù)表2 語句2 常數(shù)表n 語句n Else語句n 1End 表達(dá)式為有序類型 整型 布爾型 字符型 例5 輸入兩個(gè)數(shù) 不為0 及一個(gè)算術(shù)運(yùn)算符 輸出其運(yùn)算結(jié)果 Programex 5 input output varx y s real ch char beginwriteln 請(qǐng)輸入x y以及運(yùn)算符 readln x y readln ch casechof s x y s x y s x y s x yend Writeln x ch y s end 例6 打印某年某月有幾天 分析 某年某月的天數(shù)分為這幾種情況 1 每年的1 3 5 7 8 10 12這七個(gè)月每月為31天 2 每年的4 6 9 11這四個(gè)月為30天 3 2月又分為兩種情況 閏年為29天 否則為28天 判斷閏年的條件 年數(shù)能被4整除 并且不能被100整除 但可以被400整除的年份為閏年 yearmod4 0 and yearmod1000 or yearmod400 0 Programex 6 input output varyear month len integer beginwriteln inputyearandmonth readln year month Casemonthof1 3 5 7 8 10 12 len 31 4 6 9 11 len 30 2 beginif yearmod4 0 and yearmod1000 or yearmod400 0 thenlen 29elselen 28endEnd Writeln len End 循環(huán)結(jié)構(gòu) 一 計(jì)數(shù)循環(huán) For控制變量 初值to終值do 循環(huán)體語句 For控制變量 初值downto終值do 循環(huán)體語句 控制變量為有序類型 執(zhí)行過程 1 先將初值賦值給控制變量 2 比較控制變量與終值 如果超過則不執(zhí)行循環(huán)體中的語句 結(jié)束循環(huán) 3 否則執(zhí)行循環(huán)體中的語句 4 將控制變量的后繼值賦給控制變量 5 從 2 開始重復(fù) 循環(huán)的執(zhí)行次數(shù)為 終值 初值 1 例7 計(jì)算1 2 3 100之和 Programex 7 input output varI s integer begins 0 forI 1to100dos s I writeln s End 循環(huán)體 循環(huán)執(zhí)行次數(shù)為 100 1 1 100 執(zhí)行結(jié)果為 5050 執(zhí)行過程 I s初值為0 輸出 1 0 1 1 s s I 100 初值為1 終值100 2 100 1 2 3 3 100 3 3 6 99 100 4851 99 4950 100 100 4950 100 5050 5050 101 條件不成立退出循環(huán) 例8 編程找出四位整數(shù)abcd中滿足下述關(guān)系的數(shù) ab cd ab cd abcd 分析 由題意知 abcd是個(gè)四位數(shù) 故其范圍是 1000 9999 然后對(duì)每一個(gè)數(shù)看它的高兩位和低兩位數(shù)和的平方是否與該數(shù)相等 分離高兩位和低兩位的方法是 高位 ab abcddiv100低位 cd abcdmod100 Programex 8 input output varI m n k integer beginforI 1000to9999dobeginm Idiv100 n Imod100 k m n m n ifk Ithenwriteln 符合條件的四位整數(shù)是 I end end 本題采用窮舉法 又叫枚舉法 當(dāng)型循環(huán) While布爾表達(dá)式do語句 執(zhí)行過程 先求布爾表達(dá)式的值 當(dāng)其值為真時(shí) 重復(fù)執(zhí)行指定語句 當(dāng)其值為假時(shí) 終止循環(huán) 注意 為了能使while循環(huán)正常終止 一定要有一條能改變布爾表達(dá)式值的語句 讓表達(dá)式的值為假 從而使循環(huán)結(jié)束 Programex 9 input output varx integer beginx 1 whilex 100dobeginwrite x 5 x x 2 end end 例9 輸出1 100之間的奇數(shù) 執(zhí)行過程 1 成立 x x 2 3 成立 1 3 x x 2 5 成立 5 x x 2 7 成立 7 x x 2 99 成立 99 x x 2 101 條件不成立退出循環(huán) 循環(huán)次數(shù)為 100 1 div2 1 分析 1 讓一個(gè)變量I呈自然數(shù)列增長(zhǎng) 即一開始I 1 2 讓m作為一個(gè)因子 I作為另一個(gè)因子進(jìn)行乘法運(yùn)算 可以得到積s 此時(shí)s必定是m的倍數(shù) 3 再判斷s是否能被n整除 若能整除轉(zhuǎn) 5 否則執(zhí)行下一步 4 4 I變量增長(zhǎng)1 再去執(zhí)行 2 5 輸出s 此時(shí)s即為m n的最小公倍數(shù) 例10 求兩個(gè)自然數(shù)m n的最小公倍數(shù) Programex 9 input output varm n I s integer beginwrite 請(qǐng)輸入兩個(gè)自然數(shù) readln m n I 1 s m I whilesmodn0dobeginI I 1 s m i end write m n的最小公倍數(shù)為 s end 注意 關(guān)系表達(dá)式smodn的作用是判斷一個(gè)數(shù)是否能被另一個(gè)數(shù)整除 在程序中常用到 直到型循環(huán) Repeat語句1 語句2 語句nUntil布爾表達(dá)式 執(zhí)行過程 先執(zhí)行指定的語句 然后判斷條件 當(dāng)條件不成立時(shí) 繼續(xù)執(zhí)行指定的語句 直到條件成立時(shí)終止循環(huán) 注意 為了能使repeat until循環(huán)正常終止 循環(huán)體中要有一條能改變布爾表達(dá)式值的語句 讓表達(dá)式的值為真 從而使循環(huán)結(jié)束 分析 該問題的思路如同 打擂臺(tái) 即先有任意一人站在擂臺(tái)上 然后第二個(gè)人上來與它比武 勝者留在臺(tái)上 如此反復(fù) 直到第n個(gè)人比完為止 共打n 1次比賽 最后留在臺(tái)上的人肯定是最強(qiáng)者 例11 從n個(gè)數(shù)中挑選出最大的數(shù) Programex 11 input output varn x m y integer beginreadln n readln x m 0 repeatreadln y ifx ythenx ym m 1 untilm n 1 writeln n 個(gè)數(shù)中最大的是 x end 多重循環(huán) 循環(huán)套循環(huán) ForI 初值1to終值1dobegin forj 初值2to終值2dobegin end end 外循環(huán) 內(nèi)循環(huán) 外循環(huán)體 內(nèi)循環(huán)體 注意 1 循環(huán)次數(shù)為 終值1 初值1 1 終值2 初值2 1 2 外循環(huán)變化一次 內(nèi)循環(huán)要從初值變化到終值一次 例12 求100 999中的水仙花數(shù) 如三位數(shù)abc a 3 b 3 c 3 則稱abc為水仙花數(shù) 用三重循環(huán)編程序 Programex 12 input output vara b c integer beginfora 1to9doforb 0to9doforc 0to9doifa a a b b b c c c a 100 b 10 cthenwrite a 100 b 10 c 6 readln end 運(yùn)行結(jié)果 153370371407 例13四個(gè)學(xué)生上地理課時(shí) 回答我國(guó)四大淡水湖大小時(shí)這樣說 甲說 最大洞庭湖 最小洪澤湖 鄱陽湖第三 乙說 最大洪澤湖 最小洞庭湖 鄱陽湖第二 太湖第三 丙說 最小洪澤湖 洞庭湖第三 丁說 最大鄱陽湖 最小太湖 洪澤湖第二 洞庭湖第三 其中每個(gè)學(xué)生僅答對(duì)一個(gè) 請(qǐng)編程確定湖的大小 分析 本題為邏輯判斷題 每個(gè)湖的大小不一樣 所以分別用1 2 3 4表示它們的各自的大小 用四重循環(huán)來進(jìn)行列舉 然后再分別對(duì)他們所說的話作判斷即可 programex 13 input output vardong hong bo tai integer beginfordong 1to4doforhong 1to4doifhongdongthenforbo 1to4doif hongbo and dongbo thenbegintai 10 dong hong bo if ord dong 1 ord hong 4 ord bo 3 1 and ord hong 1 ord dong 4 ord bo 2 ord tai 3 1 and ord dong 3 ord hong 4 1 and ord bo 1 ord tai 4 ord hong 2 ord dong 3 1thenwriteln dong dong hong hong bo bo tai tai end end 運(yùn)行結(jié)果 dong 2hong 4bo 1tai 3 甲說 最大洞庭湖 最小洪澤湖 鄱陽湖第三 程序如下 例14用5元錢買100只紐扣 其中金屬紐扣每只5角 有機(jī)玻璃和每只1角 小撳扣1分錢買3個(gè) 編程求出各種紐扣各買了多少只 分析 用x y z分別表示金屬紐扣 有機(jī)扣 撳扣的只數(shù) 依題意可得 X y z 100 1 50X 10y z 3 500 2 這是一個(gè)不定方程組 一般有多組解 由方程 1 可知X Y Z的范圍 它們分別為 1 x 1001 y 1001 x 100 2 式轉(zhuǎn)化為 150X 30y z 1500 Programex 14 input output varx y z integer beginforx 1to100dofory 1to100doforz 1to100doif x y z 100 and 150 x 30 y z 1500 thenwrite 金屬扣 x 有機(jī)扣 y 撳扣 z end 用三重循環(huán)編程 程序如下 法II在法I的基礎(chǔ)上改進(jìn) 由方程 2 可知1 x 10 1 y 50循環(huán)次數(shù) 10 50 100 50000次 是法I的5 運(yùn)行時(shí)間縮短了很多 法III在法II的基礎(chǔ)上可以將方程 1 改為 z 100 x y 這樣可以減少一重循環(huán) 使程序的運(yùn)行時(shí)間變得更短 Programex 14c input output varx y z integer beginforx 1to10dofory 1to50dobeginz 100 x y if 150 x 30 y z 1500 thenwrite 金屬扣 x 有機(jī)扣 y 撳扣 z end end 縮短多重循環(huán)的運(yùn)行時(shí)間的改進(jìn)方法是 1 縮小終值與初值的距離 2 減少循環(huán)嵌套的層數(shù) 例15已知faibonacci 費(fèi)波那契數(shù)列 的前幾個(gè)數(shù)分別為0 1 1 2 3 5 編程求此數(shù)列的前n項(xiàng) 分析 觀察找規(guī)律 f1 0 n 1 f2 1 n 2 fn fn 1 fn 2 n 3 即從第三項(xiàng)起 后一項(xiàng)是前兩項(xiàng)之和 現(xiàn)用f表示fn p表示f的前一項(xiàng) fn 1 l表示它的前兩項(xiàng) fn 2 則有等式f p l plf第一次01f 0 1 1 第三項(xiàng) 第二次11f 1 1 2 第四項(xiàng) 第三次12f 1 2 3 第五項(xiàng) 程序如下 Programex 15 input output varn p l t integer t記錄第幾項(xiàng) beginread n p 0 l 1 t 2 write 0 1 打印前兩項(xiàng) whiletndobeginf p l if tmod4 0 thenwriteln 每行打印四個(gè)數(shù) write f 6 p l l f t t 1 end end 本題采用遞推法 遞推即在一個(gè)序列中 下一項(xiàng)的值是在前一項(xiàng)值的基礎(chǔ)上推算出來的 也就是下一項(xiàng)對(duì)前一項(xiàng)有某種依賴關(guān)系 For while repeat 語句使用時(shí)注意 1 已知循環(huán)次數(shù) 宜用for循環(huán) 2 當(dāng)循環(huán)次數(shù)未知?jiǎng)t選用while或repeat語句 3 在進(jìn)行循環(huán)程序設(shè)計(jì)時(shí) 一定要搞清楚在循環(huán)前應(yīng)做什么事 通常在循環(huán)前要做一些準(zhǔn)備工作 如 累加 計(jì)數(shù)器清零 變量賦初值等 在循環(huán)中需做什么事 解決什么問題 在循環(huán)后又要做什么事 若將該做的事忘了 或?qū)⑺鼈兎佩e(cuò)順序或位置 則不能得到正確的結(jié)果- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- NOIP 全國(guó)青少年 信息學(xué) 奧林匹克 聯(lián)賽 復(fù)習(xí) Pascal
鏈接地址:http://www.820124.com/p-6391836.html