信息學奧賽課課通(C++)第3單元-電子課件_第1頁
信息學奧賽課課通(C++)第3單元-電子課件_第2頁
信息學奧賽課課通(C++)第3單元-電子課件_第3頁
信息學奧賽課課通(C++)第3單元-電子課件_第4頁
信息學奧賽課課通(C++)第3單元-電子課件_第5頁
已閱讀5頁,還剩70頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、第 3 單元 分支結(jié)構(gòu)程序設(shè)計作者:林厚從信息學奧賽課課通(C+)第1課 關(guān)系運算符學習目標1. 熟練掌握 C+ 中的關(guān)系運算符。2. 熟知關(guān)系運算符和數(shù)學運算符的優(yōu)先級。3. 學會正確書寫關(guān)系表達式。1. 關(guān)系運算符C+ 提供了六種關(guān)系運算符:(大于)、=(大于或等于)、 y + z (2) x = y (4) (x (y = z)例2、閱讀程序,寫出程序的運行結(jié)果。/p3-1-2#includeusing namespace std;int main() int n1 = 4,n2 = 5,n3; n3 = (n1 n2); cout n3 “ , ” ; n3 = (n1 n2); co

2、ut n3 “ , ” ; n3 = (n1 = 4); cout n3 “ , ” ; n3 = (n1 = 5); cout n3 endl; return 0;例3、閱讀程序,寫出程序的運行結(jié)果。/p3-1-3#includeusing namespace std;int main() char x,y; x = m ; y = n ; int n; n = x y; cout n endl; n = x = y - 1; cout n 3) + (y - x = 1); cout n endl; return 0;實踐鞏固第 2 課 邏輯運算符學習目標1. 熟練掌握 C+ 中的邏輯運算

3、符。2. 熟知邏輯運算符的優(yōu)先級。3. 學會正確書寫邏輯表達式。邏輯運算符C+ 提供了 &(邏輯與)、| (邏輯或)和?。ㄟ壿嫹牵┤N邏輯運算符。其中,& 和 | 是雙目運算符,而!是單目運算符。邏輯運算符1、邏輯運算符的優(yōu)先級問題(1) 一個 0100 之間(不包括 0 和 100)的數(shù) a。(2) x 大于 y 且 x 大于 z。(3) x 是英文字母。例1、寫出下列語義的 C+ 表達式。整型數(shù)據(jù)在參與邏輯運算時,根據(jù)其值是 0 或非 0,分別當作邏輯值“假”或“真”進行處理。例2、假設(shè)變量定義為“int a=0,b=0,c=1,d=1;”,請寫出表達式 a & b | c & d的結(jié)果。

4、2、整型數(shù)據(jù)也可以參與邏輯運算/p3-2-3#includeusing namespace std;int main()int a,b,c,d;a = 2; b = 3; c = 0;d = (a + b | c);cout d endl;return 0;例3、閱讀程序,寫出程序的運行結(jié)果。例 4、閱讀程序,寫出程序的運行結(jié)果。/p3-2-4#includeusing namespace std;int main() int a,b,c,d; a = 2;b = 3;c = 0; d = (a b) & (c = 4); cout d ” ” c endl; return 0;3、邏輯表達式

5、是“短路計算”在邏輯表達式的計算過程中,一旦能夠確定整個表達式的值,就會立刻停止計算。【問題分析】 判斷“閏年”的口訣是:四年一閏,百年不閏,四百年又閏。2016 年是閏年,因為 2016 能被 4整除;2100 年不是閏年,因為它能被 100 整除;但 2000 年是閏年,因為它能被 400 整除。 所以,判斷某一年份是否是閏年有兩種情況:一種是能被 400 整除;另一種是能被 4 整除但不能被 100 整除。所以,可以表示成:(x % 400=0) | (x % 4=0)& (x % 100 !=0)例5、寫出判斷某一年份 x 是否是“閏年”的表達式。實踐鞏固第 3 課 if 語句學習目標

6、1. 掌握 if 語句的兩種格式。2. 理解分支結(jié)構(gòu)和復(fù)合語句。3. 熟練應(yīng)用 if 語句解決一些實際問題。1. if 語句if 語句有兩種格式:第一種格式為:if (表達式)語句1;else語句2;第二種格式為:if (表達式)語句 ;例1、旅游費用?!締栴}描述】風華公司“南京一日游”的收費標準為:5 人以內(nèi)(含 5 人)按散客標準,每人 300 元;超過 5 人,按團體標準,每人 280 元。請根據(jù)輸入的人數(shù),輸出其旅游費用?!据斎敫袷健恳恍幸粋€正整數(shù) n,表示人數(shù),1n5000000?!据敵龈袷健恳恍幸粋€正整數(shù),表示需要的總旅游費用?!据斎霕永?【輸出樣例】2520【問題分析】這是一個

7、“選擇性”問題,根據(jù)人數(shù) n 來選擇不同的收費標準。條件就是 n5,如果成立,那么收費為 n300;否則,收費為 n280。/p3-3-1a#includeusing namespace std;int main() int n; cin n; if(n = 5) cout n * 300 endl; else cout n * 280 endl; return 0;或換成另一種形式:/p3-3-1b#includeusing namespace std;int main() int n,ans; cin n; ans = n * 300; if(n 5) ans = n * 280; cou

8、t ans endl; return 0;例2、三個數(shù)的大小比較?!締栴}描述】輸入三個整數(shù) x、y 和 z,判斷是否滿足 x y z。若滿足,則輸出“YES”;否則,輸出“NO”。【輸入格式】一行三個整數(shù) x、y 和 z,int 范圍以內(nèi)?!据敵龈袷健恳恍幸粋€單詞,表示答案?!据斎霕永?1】3 6 7【輸出樣例 1】YES【輸入樣例 2】3 7 6【輸出樣例 2】NO【問題分析】如果邏輯表達式“x=y & y=z”為真,則輸出“YES”;否則,輸出“NO”。/p3-3-2#includeusing namespace std;int main() int x,y,z; cin x y z; i

9、f(x = y & y = z) cout ” YES ” endl; else cout ” NO ” b”成立時,需要依次執(zhí)行完這 3 條語句,這時就需要用花括號“”將這 3 條語句括起來,這些括起來的語句組合稱為“復(fù)合語句”,流程圖如右圖。/p3-3-3#includeusing namespace std;int main() int a,b,c; cin a b; if(a b) c = a; a = b; b = c; cout a ” ” b endl; return 0;實踐鞏固第 4 課 if 語句的嵌套學習目標1. 理解 if 語句嵌套的含義。2. 熟練應(yīng)用 if 語句及其

10、嵌套解決一些實際問題。if 語句的嵌套 在分支結(jié)構(gòu)中經(jīng)常會遇到這樣的情況:如果條件1成立,就去做A事情,否則去做B事情,但是,在做A事情(或者B事情)時,還要根據(jù)條件2是否成立,決定是做A1(或者B1)這件子事情,還是去做A2(或者B2)這件子事情。在程序設(shè)計中,把這種情況稱為分支結(jié)構(gòu)的“嵌套”,一般用來解決三種及以上的分支情況?!締栴}描述】輸入三個整數(shù) x、y、z,判斷其是否滿足 xyz。若滿足,輸出“YES”;否則,輸出“NO”。【輸入格式】一行三個整數(shù) x、y、z,int 范圍以內(nèi)?!据敵龈袷健恳恍幸粋€單詞,表示答案?!据斎霕永? 6 7【輸出樣例】YES例1、三個數(shù)的大小比較?!締栴}

11、分析】前面已經(jīng)介紹過用邏輯表達式“x=y &y=z”來表示YES”的條件,本題也可以用 if語句的嵌套來解決,如圖:/p3-4-1#includeusing namespace std;int main() int x,y,z; cin x y z; if(x = y) if(y = z) cout ” YES ” endl; else cout ” NO ” endl; else cout ” NO ” endl; return 0;(1)分支結(jié)構(gòu)可以嵌套很多層;(2)if 與 else 的配對關(guān)系;(3)編程要形成良好的代碼風格;使用 if 語句的嵌套需注意的問題/p3-4-2a#incl

12、udeusing namespace std;int main()int x = 4, y = 3, z = 2;if(x = y)if(y = z)cout YES endl;elsecout NO endl;return 0;例2、閱讀程序,寫出程序的運行結(jié)果?!締栴}分析】 程序不會輸出任何結(jié)果。因為其中的else子句從書寫格式上看,與外層“if(x = y)”語句配對,但其實是與內(nèi)層的“if(y = z)”配對。而外層的“if(x = y)”是不成立的,又沒有else子句,所以直接執(zhí)行后面的“returne 0;”語句。例3、判斷閏年?!締栴}描述】輸入某一年份 x,判斷該年份是否是閏年。

13、是則輸出“YES”,否則輸出“NO”。【輸入格式】一行一個正整數(shù) x,int 范圍以內(nèi)?!据敵龈袷健恳恍幸粋€單詞,表示判斷結(jié)果?!据斎霕永?000【輸出樣例】YES【問題分析】前面已經(jīng)介紹過判斷閏年的條件表達式。對于閏年的判斷,也可以采用嵌套的方法來實現(xiàn)。/p3-4-3#includeusing namespace std;int main() int x; cin x; if(x % 400 = 0) cout “ YES ” endl; else if(x % 4 = 0) if(x % 100 != 0) cout “ YES ” endl; else cout “ NO ” endl

14、; else cout “ NO ” 500, 則 flag = 1;【參考代碼】 教材78頁。實踐鞏固第 5 課 條件表達式學習目標學會書寫和使用條件表達式解決一些實際問題。條件表達式C+語言表達能力強,表達式類型豐富。其中就有一個“條件表達式”,通過它也可以來實現(xiàn)有選擇的取值。條件表達式的格式為: ? : 其運算規(guī)則為:首先計算表達式 1 的值,若表達式 1 的值為真(非 0),則只計算表達式 2,并將其結(jié)果作為整個表達式的值;否則,只計算表達式 3,并將其結(jié)果作為整個表達式的值。例1、閱讀程序,寫出程序的運行結(jié)果。/p3-5-1#includeusing namespace std;in

15、t main() int x = 5,y = 10,z; z = x y ? x : y; cout z 0 ? 1 : -1; cout z endl; cout (x % 2 = 0 ? “ x is even ” : ” x is odd ” ) endl; return 0;例2、旅游費用【問題描述】風華公司“南京一日游”的收費標準為:5人以內(nèi)(含5人)按散客標準,每人300元。超過5人,按團體標準,每人 280 元。請根據(jù)輸入的人數(shù),輸出其旅游費用?!据斎敫袷健恳恍幸粋€正整數(shù) n,表示人數(shù),1n5000000?!据敵龈袷健恳恍幸粋€正整數(shù),表示需要的總旅游費用?!据斎霕永?【輸出樣例

16、】2520/p3-5-2#includeusing namespace std;int main() int n; cin n; cout (n = 5 ? n * 300:n * 280) endl; return 0;例3、判斷閏年【問題描述】輸入某一年份 x,判斷該年份是否是閏年。是則輸出“YES”,否則輸出“NO”。【輸入格式】一行一個正整數(shù) x,int 范圍以內(nèi)。【輸出格式】一行一個單詞,表示判斷結(jié)果。【輸入樣例】2000【輸出樣例】YES/p3-5-3#includeusing namespace std;int main() int x; cin x; cout (x % 400

17、 = 0 ? “ YES ” :(x % 4 = 0 ? (x %100 != 0 ? “ YES ” : ” NO ” ) : ” NO ” ) endl; return 0;實踐鞏固第 6 課 switch 語句學習目標1. 掌握 switch 語句的格式和含義。2. 學會應(yīng)用 switch 語句解決一些實際問題。多分支語句switch 在一些實際問題中,分類情況特別多,用if語句嵌套實現(xiàn)起來,層數(shù)太多,容易出錯。為此,C+提供了一種多分支語句switch。 switch 語句的一般格式為:switch (表達式) case 常量表達式1: 語句組1; break; case 常量表達式2

18、: 語句組2; break; case 常量表達式n: 語句組n; break; default: 語句組n+1多分支語句switch 執(zhí)行過程為:先計算表達式的值,然后從前往后依次與case子句中所列出的各個常量表達式的值進行比較,若表達式的值與常量中的值相等,就開始進入相應(yīng)的case后面的語句組執(zhí)行,遇到后續(xù)的case也不再進行判斷(默認匹配),直至遇到break語句或switch語句結(jié)束。default表示表達式與所有常量表達式的值都不匹配,那就執(zhí)行其后面的語句組,通常將default放在最后。如果表達式與各分支常量表達式的值都不匹配時,不需要執(zhí)行任何語句,則default可以省略。例1

19、、閱讀下面程序,思考輸入“-”,則輸出什么。/p3-6-1#includeusing namespace std;int main() char symbol; cin symbol; switch(symbol) case + :cout “ + ” endl; break; case - :cout “ - ” endl; break; case * :cout “ * ” endl; break; case / :cout “ / ” endl; break; default:cout “ Input Invalid! ” ; return 0; 【問題分析】輸出“-”。如果把其中的4條

20、“break;”語句去掉,輸出什么?使用 switch 語句要注意的問題(1)switch 后面的表達式,取值只能是整型、字符型、布爾型或枚舉型。case 后面的常量表達式,其值類型要與 switch 后面表達式的類型一致。(2)任意兩個 case 后的表達式值必須各不相同,否則將引起歧義。(3)語句組可以是一條語句,也可以是一個復(fù)合語句。(4)多個 case 語句可以共用一組程序。例3、閱讀程序,思考分別輸入 “A”“B”“C”,則程序輸出什么。/p3-6-3#includeusing namespace std;int main() char ch; cin ch; switch(ch)

21、case A : case B : case C :cout “ Pass ” endl; break; 例4、優(yōu)惠購物【問題描述】某商場的客戶分為白金卡會員、金卡會員、銀卡會員和普通客戶。為了回饋廣大顧客,現(xiàn)推出以下優(yōu)惠活動:(1) 如果客戶是白金會員,現(xiàn)在將享受 7 折優(yōu)惠;(2) 如果客戶是金卡會員,現(xiàn)在將享受 8 折優(yōu)惠;(3) 如果客戶是銀卡會員,現(xiàn)在將享受 9 折優(yōu)惠;(4) 如果客戶是普通客戶,現(xiàn)在將享受 9.5 折優(yōu)惠。本題的任務(wù)是根據(jù)顧客的身份和購買商品的價格,給出應(yīng)付金額?!据斎敫袷健康谝恍幸粋€字符?!癙”表示白金會員,“G”表示金卡會員,“S”表示銀卡會員,其他字符表示普

22、通客戶。第二行一個整數(shù),int 范圍以內(nèi),表示該顧客購買的商品金額?!据敵龈袷健恳恍幸粋€實數(shù),保留兩位小數(shù),表示顧客應(yīng)付金額?!緲永斎搿縂580【樣例輸出】464.00/p3-6-4#includeusing namespace std;int main() char id; float price,discount; scanf( “ %cn ” ,&id); scanf( “ %f ” ,&price); switch(id) case P :discount = 0.7; break; case G :discount = 0.8; break; case S :discount =

23、0.9; break; default:discount = 0.95; printf( “ %.2fn ” ,price * discount); return 0;例5、某年某月的天數(shù)【問題描述】輸入x和y,輸出x年y月有多少天?!据斎敫袷健恳恍袃蓚€正整數(shù)x和y,分別表示年份和月份。x在int范圍以內(nèi),y為112?!据敵龈袷健恳恍幸粋€整數(shù),表示該年該月有多少天?!緲永斎搿?000 3【樣例輸出】31/p3-6-5#includeusing namespace std;int main()int x,y,day;cin x y; switch(y)case 1:case 3:case 5:

24、case 7:case 8:case 10:case 12: day = 31; break;case 4:case 6:case 9:case 11: day = 30; break;case 2:if(x % 400 = 0) | (x % 4 = 0) & (x % 100 != 0)day = 29;else day = 28;break;cout day endl;return 0;實踐鞏固第 7 課 分支結(jié)構(gòu)應(yīng)用舉例學習目標1. 總結(jié)反思,建立分支結(jié)構(gòu)的知識體系。2. 實踐鞏固,熟練應(yīng)用分支結(jié)構(gòu)解決一些實際問題。例1、水果價格【問題描述】蘋果(apples)、梨(pears)、橘子

25、(oranges)、葡萄(grapes)4種水果,單價分別是3.00元/千克,2.50 元 / 千克,4.10 元 / 千克和 10.2 元 / 千克?!据斎敫袷健恳恍幸粋€整數(shù),09 之間?!据敵龈袷健刻崾拘畔⒑拖鄳?yīng)水果的單價,格式如樣例輸出所示?!緲永斎搿?【樣例輸出】1apples2pears3oranges4grapesPrice=4.1/p3-7-1#includeusing namespace std;int main() int x; cin x; cout “ 1apples ” endl; cout “ 2pears ” endl; cout “ 3oranges ” end

26、l; cout “ 4grapes ” endl; cout “ Price= ” ; switch(x) case 1:cout “ 3.0 ” endl; break; case 2:cout “ 2.5 ” endl; break; case 3:cout “ 4.1 ” endl; break; case 4:cout “ 10.2 ” endl; break; default:cout “ 0 ” endl; return 0;例2、蟲子吃蘋果【問題描述】小蘇買了一箱蘋果共有 n 個,很不幸的是箱子里混進了一條蟲子。蟲子每 x 小時能吃掉一個蘋果。假設(shè)蟲子在吃完一個蘋果之前不會吃另一

27、個,那么經(jīng)過 y 小時,這箱蘋果中還有多少個蘋果沒有被蟲子吃過?【輸入格式】一行三個整數(shù),表示 n、x、y,int 范圍以內(nèi),之間用一個空格隔開。【輸出格式】一行一個整數(shù),即所求答案?!据斎霕永? 2 1【輸出樣例】2【問題分析】 如果 y%x 等于 0,則剩余的蘋果為 n-y/x;否則答案為 n-y/x-1。特殊情況是,如果經(jīng)過 y小時蟲子吃掉的蘋果比 n 多,則說明剩余蘋果為 0。/p3-7-2#includeusing namespace std;int main() int n,x,y; cin n x y; int k = y / x; if(y % x) k+;/y % x 等價

28、于 y % x != 0 if(k = n) cout n - k endl; else cout 0 endl; return 0;例3、字符判斷【問題描述】鍵盤輸入任意一個字符,判斷是大寫字母、小寫字母還是數(shù)字?!据斎敫袷健恳恍幸粋€字符?!据敵龈袷健咳绻谴髮懽帜?,輸出“capital”;如果是小寫字母,則輸出“l(fā)owercase”;如果是數(shù)字,則輸出“number”;其他字符輸出“others”?!緲永斎搿緼【樣例輸出】capital【問題分析】C+ 中的字符可以直接比較大小,依據(jù)就是其對應(yīng)的 ASCII 碼值。而且在 ASCII 碼中大寫字母、小寫字母和數(shù)字字符都是連續(xù)編號的。所以,判斷字符類別可以直接進行關(guān)系運算,也可以通過它的 ASCII 碼范圍來實現(xiàn)。/p3-7-3#includeusing namespace std;int main() c

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論