第3章選擇結(jié)構(gòu)(C版)_第1頁(yè)
第3章選擇結(jié)構(gòu)(C版)_第2頁(yè)
第3章選擇結(jié)構(gòu)(C版)_第3頁(yè)
第3章選擇結(jié)構(gòu)(C版)_第4頁(yè)
第3章選擇結(jié)構(gòu)(C版)_第5頁(yè)
已閱讀5頁(yè),還剩49頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第三章 程序的控制結(jié)構(gòu)第一節(jié) 概述第二節(jié) if選擇結(jié)構(gòu)第三節(jié) switch語(yǔ)句第一節(jié) 概述 程序由若干條語(yǔ)句組成,各語(yǔ)句按照順序一條一條地執(zhí)行,這種順序結(jié)構(gòu)是簡(jiǎn)潔的。但在現(xiàn)實(shí)世界中,在解決問(wèn)題的過(guò)程中,不可避免地遇到需要進(jìn)行選擇、或需要循環(huán)工作的情況。這時(shí),程序執(zhí)行的順序需要發(fā)生變化,而非從前向后逐一執(zhí)行。因此,程序中除了順序結(jié)構(gòu)以外,通常還有選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)以及轉(zhuǎn)移機(jī)制。 C+為了支持這些控制結(jié)構(gòu),提供了豐富、靈活的控制語(yǔ)句。從結(jié)構(gòu)化程序設(shè)計(jì)的觀點(diǎn)看,所有程序都可用3種控制結(jié)構(gòu)即順序結(jié)構(gòu)、選擇結(jié)構(gòu)、和循環(huán)結(jié)構(gòu)實(shí)現(xiàn)。C+在默認(rèn)的情況下采取順序結(jié)構(gòu),除非特別指明,計(jì)算機(jī)總是按語(yǔ)句順序一條一條地

2、執(zhí)行。為使程序更清晰、更易調(diào)試與修改,并且不容易出錯(cuò),結(jié)構(gòu)化編程要盡量少用或不用goto等跳轉(zhuǎn)語(yǔ)句。 選擇類語(yǔ)句包括if語(yǔ)句和switch語(yǔ)句,用它們來(lái)解決實(shí)際應(yīng)用中按不同的情況進(jìn)行不同處理的問(wèn)題。如根據(jù)學(xué)生的成績(jī),對(duì)學(xué)生做出不同的等第評(píng)價(jià)。if選擇結(jié)構(gòu)稱為單分支選擇結(jié)構(gòu),選擇或忽略一個(gè)分支的操作。if/else選擇結(jié)構(gòu)稱為雙分支選擇結(jié)構(gòu),在兩個(gè)不同分支中選擇。switch選擇結(jié)構(gòu)稱為多分支(或多項(xiàng))選擇結(jié)構(gòu),以多種不同的情況選擇多個(gè)不同的操作。 循環(huán)類語(yǔ)句包括for循環(huán)語(yǔ)句、while循環(huán)語(yǔ)句和do循環(huán)語(yǔ)句三種,用它們來(lái)解決實(shí)際應(yīng)用中需要重復(fù)處理的問(wèn)題。如當(dāng)統(tǒng)計(jì)全班同學(xué)總分時(shí),就需要重復(fù)地做

3、加法,依次把每個(gè)人的分?jǐn)?shù)累加起來(lái)。 if、else、switch、while、do和for等都是C+關(guān)鍵字。這些關(guān)鍵字是該語(yǔ)言保留的,用于實(shí)現(xiàn)C+控制結(jié)構(gòu)的不同特性。關(guān)鍵字不能作為變量名等一些標(biāo)識(shí)符。注意,將關(guān)鍵字while的拼寫(xiě)變?yōu)椤癢hile”是個(gè)語(yǔ)法錯(cuò)誤,因?yàn)镃+是區(qū)分大小寫(xiě)的語(yǔ)言。while、if和else等所有C+保留關(guān)鍵字只能包含小寫(xiě)字母。第二節(jié) if選擇結(jié)構(gòu) C+提供三種選擇結(jié)構(gòu),即if選擇結(jié)構(gòu)、if-else選擇結(jié)構(gòu)和switch選擇結(jié)構(gòu)。一、if語(yǔ)句(單分支結(jié)構(gòu))格式1: if (條件表達(dá)式) 語(yǔ)句1; 功能:如果條件表達(dá)式的值為真,即條件成立,語(yǔ)句1將被執(zhí)行。否則,語(yǔ)句1將

4、被忽略(不被執(zhí)行),程序?qū)错樞驈恼麄€(gè)選擇結(jié)構(gòu)之后的下一條語(yǔ)句繼續(xù)執(zhí)行。執(zhí)行流程如圖3-1所示 說(shuō)明:格式中的“條件表達(dá)式”必須用圓括號(hào)括起來(lái)。條件表達(dá)式 語(yǔ)句1falsetrue圖3-1 程序設(shè)計(jì)風(fēng)格提示:從語(yǔ)法上來(lái)講,整個(gè)if語(yǔ)句可以寫(xiě)在一行。如果條件表達(dá)式和語(yǔ)句都非常簡(jiǎn)單,那么整個(gè)語(yǔ)句可以寫(xiě)在一行;否則,最好在條件表達(dá)式后換行,而且語(yǔ)句部分要相對(duì)if縮進(jìn)兩格。例3.1 讀入一個(gè)整數(shù)a,如果a為偶數(shù)在屏幕上輸出yes#includeusing namespace std;int main( ) int a; cina; if (a%2=0) coutyes; return 0; 注意:關(guān)系

5、運(yùn)算符=用來(lái)表達(dá)該符號(hào)的左右兩邊是否相等,不要寫(xiě)成賦值號(hào)=。試一試 若題目改為“讀入一個(gè)整數(shù)a,如果a為奇數(shù)在屏幕上輸出no”該如何修改程序?例3.2 讀入一個(gè)數(shù),若這個(gè)數(shù)大于1并且小于100,則輸出yes# includeusing namespace std;int main ( ) int a; cina; if (a1)&(a100) cout1)&(a100),根據(jù)要 求 “條件表達(dá)式”必須用圓括號(hào)括起來(lái),否則編譯會(huì)出錯(cuò)。格式2 : if (條件表達(dá)式) 語(yǔ)句1; 語(yǔ)句2; 若條件成立時(shí),要執(zhí)行的操作由多個(gè)句子構(gòu)成,我們必須把這些句子括在一對(duì)花括號(hào) 內(nèi),我們稱這種形式為語(yǔ)句塊或復(fù)合語(yǔ)

6、句。 程序設(shè)計(jì)風(fēng)格提示:書(shū)寫(xiě)語(yǔ)句塊(也稱為復(fù)合語(yǔ)句)時(shí),左右花括號(hào)要對(duì)齊,組成語(yǔ)句塊的各語(yǔ)句要相對(duì)花括號(hào)縮進(jìn)一層并對(duì)齊。例3.3 輸入三個(gè)整數(shù),按從大到小的順序輸出。 【分析】輸入的三個(gè)數(shù)存放在a、b、c中,設(shè)想讓a為三數(shù)中最大數(shù),怎么辦呢?如果a=b;如果a=c;設(shè)想讓b為第二大的數(shù),c為第三大的數(shù),怎么做呢?如果b=c,最后輸出a,b,c的值。程序如下:#includeusing namespace std;int main()int a,b,c,temp;cinabc;if (ab) /保證a大于等于b temp=a;a=b;b=temp;if (ac) /保證a大于等于c,則a為最大數(shù)

7、 temp=a;a=c;c=temp;if (bc) /保證b大于等于c temp=b;b=c;c=temp;couta b cendl;return 0;二、if-else語(yǔ)句(雙分支結(jié)構(gòu)) if單分支選擇結(jié)構(gòu)只在條件為true時(shí)采取操作,條件為false時(shí)則忽略這個(gè)操作。利用if-else雙分支選擇結(jié)構(gòu)則可以在條件為true時(shí)和條件為false時(shí)采取不同操作。格式1: 功能:如果(條件表達(dá)式)的值為“真” ,即條件成立,則執(zhí)行語(yǔ)句1,執(zhí)行完“語(yǔ)句1”后繼續(xù)執(zhí)行整個(gè)ifelse語(yǔ)句的后繼語(yǔ)句;如果(條件表達(dá)式)的值為“假” ,即條件不成立,那么跳過(guò)語(yǔ)句1選擇執(zhí)行“語(yǔ)句2” ,執(zhí)行完語(yǔ)句2后繼

8、續(xù)執(zhí)行整個(gè)ifelse語(yǔ)句的后繼語(yǔ)句;也就是說(shuō)ifelse語(yǔ)句總是根據(jù)(條件表達(dá)式)的結(jié)果,選擇“語(yǔ)句1”和“語(yǔ)句2”中的一個(gè)執(zhí)行,執(zhí)行完以后,整個(gè)ifelse就算執(zhí)行完了。執(zhí)行流程如圖4-2所示if (條件表達(dá)式) 語(yǔ)句1; else 語(yǔ)句2; 程序設(shè)計(jì)風(fēng)格提示:書(shū)寫(xiě)ifelse語(yǔ)句時(shí),if和else要對(duì)齊,而分支的語(yǔ)句部分要縮進(jìn)兩格。條件表達(dá)式語(yǔ)句塊2flasetrue語(yǔ)句塊1圖3-2 例3.4 輸入溫度t的值,判斷是否適合晨練。(25=t=30,則適合晨練ok,否則不適合no)#includeusing namespace std;int main() int t; cin t; if

9、(t=25) &(t=30) coutok!n; else coutno!n; return 0; 格式2 :if (條件表達(dá)式) 語(yǔ)句1; 語(yǔ)句2; else 語(yǔ)句1; 語(yǔ)句2; 若分支語(yǔ)句由多個(gè)句子構(gòu)成,我們必須把這些句子括在一對(duì)花括號(hào) 內(nèi)。 例3.5 乘坐飛機(jī)時(shí),當(dāng)乘客行李小于等于20公斤時(shí),按每公斤1.68元收費(fèi),大于20公斤時(shí),按每公斤1.98元收費(fèi),編程計(jì)算收費(fèi)(保留2位小數(shù))。#include using namespace std;int main( ) float w, p; scanf(%f,&w); if (wb) if (bc) y=a; else y=c; else部

10、分否定的是條件bc,即它與第二個(gè)if語(yǔ)句配對(duì);若想讓else部分與第一個(gè)if語(yǔ)句配對(duì),則要引入一個(gè)復(fù)合語(yǔ)句,將上述語(yǔ)句寫(xiě)成如下形式:if (ab) if (bc) y=a;else y=c;例3.7 輸入三個(gè)數(shù),輸出其中最大的數(shù)?!痉椒?】設(shè)maxn用于存放三個(gè)數(shù)中最大的數(shù),輸入的三個(gè)數(shù)存放在a、b、c中,那么如果a比b和c大,則最大數(shù)是a,否則,如果b比a和c大,則最大數(shù)是b,否則,最大數(shù)是c。程序如下:#includeusing namespace std;int main()float a,b,c,maxn;cinabc;if (ab&ac) maxn=a; /判斷a是否最大else i

11、f (ba&bc) maxn=b; /判斷b是否最大else maxn=c;coutmaxnmaxn,則此時(shí)的最大數(shù)應(yīng)該是b即maxn=b,如果cmaxn,則最大數(shù)應(yīng)該是c即maxn=c。程序如下:#includeusing namespace std;int main()float a,b,c,maxn;cinabc;maxn=a; if (bmaxn) maxn=b; /maxn為a,b中的最大值if (cmaxn) maxn=c; /maxn為a,b,c中的最大值coutmaxn3?10:12 / 53為true,所以 x=10; x=3=9?25:18 / 3=9為false,所以 x

12、=18;例3.8 #include using namespace std; int main() int a,b; cinab; int c=ab?a:b;/ 相當(dāng)于if (ab) c=a; else c=b; coutcb?(cd?e:f):g; 相當(dāng)于 if (ab) if (cd) x=e; else x=f; else x=g; 從可讀性來(lái)說(shuō),條件操作符最適合于簡(jiǎn)單關(guān)系和簡(jiǎn)單表達(dá)式的值: x=(ab)?a:b;當(dāng)代碼變得更復(fù)雜時(shí),使用if else 語(yǔ)句表達(dá)更為清晰?!旧蠙C(jī)練習(xí)】1.判斷數(shù)正負(fù)【1.4編程基礎(chǔ)之邏輯表達(dá)式與條件分支01】 給定一個(gè)整數(shù)N,判斷其正負(fù)。如果N0,輸出po

13、sitive;如果N=0,輸出zero;如果N0,輸出negative。輸入: 一個(gè)整數(shù)N(-109 = N 0, 輸出positive; 如果N = 0, 輸出zero; 如果N y,輸出;若x=y,輸出=;若xy,輸出。輸入: 一行,包含兩個(gè)整數(shù)x和y,中間用單個(gè)空格隔開(kāi)。0=x232, -231=y y,輸出 ;若x = y,輸出 = ;若x y,輸出 【上機(jī)練習(xí)】6.判斷是否為兩位數(shù)【1.4編程基礎(chǔ)之邏輯表達(dá)式與條件分支06】 判斷一個(gè)正整數(shù)是否是兩位數(shù)(即大于等于10且小于等于99)。若該正整數(shù)是兩位數(shù),輸出1,否則輸出0。輸入: 一個(gè)正整數(shù),不超過(guò)1000。輸出: 一行。若該正整數(shù)

14、是兩位數(shù),輸出1,否則輸出0。樣例輸入: 54樣例輸出: 1【上機(jī)練習(xí)】7.收集瓶蓋贏大獎(jiǎng)【1.4編程基礎(chǔ)之邏輯表達(dá)式與條件分支07】 某飲料公司最近推出了一個(gè)“收集瓶蓋贏大獎(jiǎng)”的活動(dòng):如果你擁有10個(gè)印有“幸運(yùn)”、或20個(gè)印有“鼓勵(lì)”的瓶蓋,就可以兌換一個(gè)神秘大獎(jiǎng)?,F(xiàn)分別給出你擁有的印有“幸運(yùn)”和“鼓勵(lì)”的瓶蓋數(shù),判斷是否可以去兌換大獎(jiǎng)。若可以兌換大獎(jiǎng),輸出1,否則輸出0。輸入: 一行,包含兩個(gè)整數(shù),分別是印有“幸運(yùn)”和“鼓勵(lì)”的瓶蓋數(shù),用一個(gè)空格隔開(kāi)。輸出: 一行。若可以兌換大獎(jiǎng),輸出1,否則輸出0。樣例輸入: 11 19樣例輸出: 1【上機(jī)練習(xí)】8.判斷一個(gè)數(shù)能否同時(shí)被3和5整除【1.4

15、編程基礎(chǔ)之邏輯表達(dá)式與條件分支08】 判斷一個(gè)數(shù)n 能否同時(shí)被3和5整除,如果能同時(shí)被3和5整除輸出YES,否則輸出NO。輸入: 輸入一行,包含一個(gè)整數(shù)n。( -1,000,000 n 1,000,000)輸出: 輸出一行,如果能同時(shí)被3和5整除輸出YES,否則輸出NO。樣例輸入: 15樣例輸出: YES【上機(jī)練習(xí)】9.判斷能否被3,5,7整除【1.4編程基礎(chǔ)之邏輯表達(dá)式與條件分支09】 給定一個(gè)整數(shù),判斷它能否被3,5,7整除,并輸出以下信息: 1、能同時(shí)被3,5,7整除(直接輸出3 5 7,每個(gè)數(shù)中間一個(gè)空格); 2、只能被其中兩個(gè)數(shù)整除(輸出兩個(gè)數(shù),小的在前,大的在后。例如:3 5或者

16、3 7或者5 7,中間用空格分隔); 3、只能被其中一個(gè)數(shù)整除(輸出這個(gè)除數(shù)); 4、不能被任何數(shù)整除,輸出小寫(xiě)字符n,不包括單引號(hào)。輸入: 輸入一行,包括一個(gè)整數(shù)。輸出: 輸出一行,按照描述要求給出整數(shù)被3,5,7整除的情況。樣例輸入: 105樣例輸出: 3 5 7【上機(jī)練習(xí)】10有一門(mén)課不及格的學(xué)生【1.4編程基礎(chǔ)之邏輯表達(dá)式與條件分支10】 給出一名學(xué)生的語(yǔ)文和數(shù)學(xué)成績(jī),判斷他是否恰好有一門(mén)課不及格(成績(jī)小于60分)。若該生恰好有一門(mén)課不及格,輸出1;否則輸出0。 輸入: 一行,包含兩個(gè)在0到100之間的整數(shù),分別是該生的語(yǔ)文成績(jī)和數(shù)學(xué)成績(jī)。輸出: 若該生恰好有一門(mén)課不及格,輸出1;否則

17、輸出0。樣例輸入: 50 80樣例輸出: 1第三節(jié) switch語(yǔ)句 應(yīng)用條件語(yǔ)句可以很方便地使程序?qū)崿F(xiàn)分支,但是出現(xiàn)分支比較多的時(shí)候,雖然可以用嵌套的if語(yǔ)句來(lái)解決,但是程序結(jié)構(gòu)會(huì)顯得復(fù)雜,其至凌亂。為方便實(shí)現(xiàn)多情況選擇,C+提供了一種switch開(kāi)關(guān)語(yǔ)句。 1.語(yǔ)句格式: switch(表達(dá)式) case 常量表達(dá)式1: 語(yǔ)句序列1; break;case 常量表達(dá)式2: 語(yǔ)句序列2; break; case 常量表達(dá)式n: 語(yǔ)句序列n; break;default: 語(yǔ)句序列n+1; 該語(yǔ)句中可以使用一次或多次case標(biāo)號(hào),但只能使用一次default標(biāo)號(hào),或者省略整個(gè)default部分

18、;多個(gè)case標(biāo)號(hào)也允許使用在同一個(gè)語(yǔ)句序列的前面;每個(gè)語(yǔ)句標(biāo)號(hào)有保留字case和后面的常量表達(dá)式及冒號(hào)組成,每個(gè)常量表達(dá)式通常為字面常量,如常數(shù)或字符。 2.語(yǔ)句執(zhí)行過(guò)程 switch語(yǔ)句執(zhí)行過(guò)程分為以下3步描述。 (1)計(jì)算出switch后面圓括號(hào)內(nèi)表達(dá)式的值,假定為M,若它不是整型,系統(tǒng)將自動(dòng)舍去其小數(shù)部分,只取其整數(shù)部分作為結(jié)果值。 (2)依次計(jì)算出每個(gè)case后常量表達(dá)式的值,假定它們?yōu)镸1、M2、,同樣若它們的值不是整型,則自動(dòng)轉(zhuǎn)換為整型。 (3)讓M依次同M1、M2、進(jìn)行比較,一旦遇到M與某個(gè)值相等,則就從對(duì)應(yīng)標(biāo)號(hào)的語(yǔ)句開(kāi)始執(zhí)行;在碰不到相等的情況下,若存在default子句,則

19、就執(zhí)行其冒號(hào)后面的語(yǔ)句序列,否則不執(zhí)行任何操作;當(dāng)執(zhí)行到復(fù)合語(yǔ)句最后的右花括號(hào)時(shí)就結(jié)束整個(gè)switch語(yǔ)句的執(zhí)行。 在實(shí)際使用switch語(yǔ)句時(shí),通常要求當(dāng)執(zhí)行完某個(gè)case后的一組語(yǔ)句序列后,就結(jié)束整個(gè)語(yǔ)句的執(zhí)行,而不讓它繼續(xù)執(zhí)行下一個(gè)case語(yǔ)句后面的語(yǔ)句序列,為此,可通過(guò)使用break語(yǔ)句來(lái)實(shí)現(xiàn)。該語(yǔ)句只有保留字break,而沒(méi)有其它任何成分。它是一條跳轉(zhuǎn)語(yǔ)句,在switch中執(zhí)行到它時(shí),將結(jié)束該switch語(yǔ)句,系統(tǒng)接著向下執(zhí)行其它語(yǔ)句。在使用switch語(yǔ)句時(shí),還應(yīng)注意以下幾點(diǎn):case語(yǔ)句后的各常量表達(dá)式的值不能相同,否則會(huì)出現(xiàn)錯(cuò)誤碼。2.每個(gè)case或default后,可以包含多

20、條語(yǔ)句,不需要使用“”和“”括起來(lái)。3.各case和default子句的先后順序可以變動(dòng),這不會(huì)影響程序執(zhí)行結(jié)果。4. default子句可以省略,default后面的語(yǔ)句末尾可以不必寫(xiě)break。 程序設(shè)計(jì)風(fēng)格提示:寫(xiě)switch語(yǔ)句時(shí),switch(表達(dá)式)單獨(dú)一行,各case分支和default分支要縮進(jìn)兩格并對(duì)齊,分支處理語(yǔ)句要相對(duì)再縮進(jìn)兩格,以體現(xiàn)不同層次的結(jié)構(gòu)。3.語(yǔ)句格式舉例(1)左右兩邊的書(shū)寫(xiě)格式是等價(jià)的switch(a) case 1:x+;break; case 2:y+;break; case 3:z+;break; default:couterror; switch(a

21、) case 1: x+; break; case 2: y+; break; case 3: z+; break; default: couterror; (2)switch(ch) case a: case A: d1=(x+y)/2; d2=x*y-2; break; case b: case B: d1=(a+b)/2; d2=a*b-2; break; default: coutinput error!; 說(shuō)明: 1.每個(gè)case后面的語(yǔ)句可以寫(xiě)在冒號(hào)后的同一行或換到新行寫(xiě)。 2.都是一組語(yǔ)句,有時(shí)可為空,如(2)。例3.9 根據(jù)從鍵盤(pán)上輸入的表示星期幾的數(shù)字,對(duì)應(yīng)輸出它的英文名稱。

22、#includeusing namespace std;int main() int weekday; cinweekday; switch(weekday) case 1:coutMondayendl; break; case 2: coutTuesdayendl; break; case 3: coutWednesdayendl; break; case 4: coutThursdayendl; break; case 5: coutFridayendl; break; case 6: coutSaturdayendl; break; case 7: coutSundayendl; bre

23、ak; default:coutinput error!; return 0;例3.10 一個(gè)最簡(jiǎn)單的計(jì)算器支持+,-,*,/四種運(yùn)算。輸入只有一行:兩個(gè)參加運(yùn)算的數(shù)和一個(gè)操作符(+,-,*,/)。輸出運(yùn)算表達(dá)式的結(jié)果??紤]下面兩種情況: (1)如果出現(xiàn)除數(shù)為0的情況,則輸出:Divided by zero! (2)如果出現(xiàn)無(wú)效的操作符(即不為+,-,*,/之一),則輸出:Invalid operator!輸入樣例: 34 56 +輸出樣例: 90【分析】設(shè)num1、num2存放兩個(gè)參加運(yùn)算的操作數(shù),op存放操作符。 當(dāng)op為“+”號(hào)時(shí),實(shí)現(xiàn)加法操作。 當(dāng)op為“-”號(hào)時(shí),實(shí)現(xiàn)減法操作。 當(dāng)o

24、p為“*”號(hào)時(shí),實(shí)現(xiàn)乘法操作。 當(dāng)op為“/”號(hào)時(shí),判斷b值,如果不為0,則實(shí)現(xiàn)除法操作,如果為0,則輸出:Divided by zero!。 當(dāng)op不是上面四種操作符時(shí),輸出:“Invalid operator!”。 程序如下:#includeusing namespace std;int main()float num1,num2;char op;cinnum1num2op;switch(op)case +: coutnum1+num2endl;break;case -: coutnum1-num2endl;break;case *: coutnum1*num2endl;break;cas

25、e /: if(num2!=0) coutnum1/num2endl;break; else coutDivided by zero!endl;break;default: coutInvalid operrator!endl;return 0; 例3.11 期末來(lái)臨了,班長(zhǎng)小Q決定將剩余班費(fèi)X元錢(qián),用于購(gòu)買(mǎi)若干支鋼筆獎(jiǎng)勵(lì)給一些學(xué)習(xí)好、表現(xiàn)好的同學(xué)。已知商店里有三種鋼筆,它們的單價(jià)為6元、5元和4元。小Q想買(mǎi)盡量多的筆(鼓勵(lì)盡量多的同學(xué)),同時(shí)他又不想有剩余錢(qián)。請(qǐng)您編一程序,幫小Q制訂出一種買(mǎi)筆的方案。 【分析】對(duì)于以上的實(shí)際問(wèn)題,要買(mǎi)盡量多的筆,易知都買(mǎi)4元的筆肯定可以買(mǎi)最多支筆。因此最多可

26、買(mǎi)的筆為x div 4支。由于小q要把錢(qián)用完,故我們可以按以下方法將錢(qián)用完: 若買(mǎi)完x div 4支4元錢(qián)的筆,還剩1元,則4元錢(qián)的筆少買(mǎi)1支,換成一支5元筆即可;若買(mǎi)完x div 4支4元錢(qián)的筆,還剩2元,則4元錢(qián)的筆少買(mǎi)1支,換成一支6元筆即可;若買(mǎi)完x div 4支4元錢(qián)的筆,還剩3元,則4元錢(qián)的筆少買(mǎi)2支,換成一支5元筆和一支6元筆即可。 從以上對(duì)買(mǎi)筆方案的調(diào)整,可以看出筆的數(shù)目都是x div 4,因此該方案的確為最優(yōu)方案。程序如下:#includeusing namespace std;int main() int a,b,c,x,y; /a,b,c分別表示在買(mǎi)筆方案中,6元、5元和

27、4元錢(qián)筆的數(shù)目 /x,y分別表示剩余班費(fèi)和買(mǎi)完最多的4元筆后剩的錢(qián) cinx; /輸入x c=x/4; /4元筆最多買(mǎi)的數(shù)目 y=x%4; /求買(mǎi)完c支4元筆后剩余的錢(qián)數(shù)y switch (y) /判斷購(gòu)買(mǎi)方案 case 0: a=0; b=0; break; case 1: a=0; b=1; c-; break; case 2: a=1; b=0; c-; break; case 3: a=1; b=1; c-=2; break; couta b cendl; /三個(gè)數(shù)間以空格隔開(kāi) return 0;【上機(jī)練習(xí)】1.晶晶赴約會(huì)【1.4編程基礎(chǔ)之邏輯表達(dá)式與條件分支11】 晶晶的朋友貝貝約晶

28、晶下周一起去看展覽,但晶晶每周的1、3、5有課必須上課,請(qǐng)幫晶晶判斷她能否接受貝貝的邀請(qǐng),如果能輸出YES;如果不能則輸出NO。注意YES和NO都是大寫(xiě)字母!輸入: 輸入有一行,貝貝邀請(qǐng)晶晶去看展覽的日期,用數(shù)字1到7表示從星期一到星期日。輸出: 輸出有一行,如果晶晶可以接受貝貝的邀請(qǐng),輸出YES,否則,輸出NO。注意YES和NO都是大寫(xiě)字母!樣例輸入: 2樣例輸出: YES【上機(jī)練習(xí)】2.騎車(chē)與走路【1.4編程基礎(chǔ)之邏輯表達(dá)式與條件分支12】 在清華校園里,沒(méi)有自行車(chē),上課辦事會(huì)很不方便。但實(shí)際上。并非去辦任何事情都是騎車(chē)快,因?yàn)轵T車(chē)總要找車(chē)、開(kāi)鎖、停車(chē)、鎖車(chē)等,這要耽誤一些時(shí)間。假設(shè)找到自

29、行車(chē),開(kāi)鎖并車(chē)上自行車(chē)的時(shí)間為27秒;停車(chē)鎖車(chē)的時(shí)間為23秒;步行每秒行走1.2米,騎車(chē)每秒行走3.0米。請(qǐng)判斷走不同的距離去辦事,是騎車(chē)快還是走路快。如果騎車(chē)快,輸出一行Bike;如果走路快,輸出一行Walk;如果一樣快,輸出一行All。輸入: 輸入一行,包含一個(gè)整數(shù),表示一次辦事要行走的距離,單位為米。輸出: 輸出一行,如果騎車(chē)快,輸出一行Bike;如果走路快,輸出一行Walk;如果一樣快,輸出一行All。樣例輸入: 120樣例輸出: Bike【上機(jī)練習(xí)】3.分段函數(shù)【1.4編程基礎(chǔ)之邏輯表達(dá)式與條件分支13】 編寫(xiě)程序,計(jì)算下列分段函數(shù)y=f(x)的值。結(jié)果保留到小數(shù)點(diǎn)后三位。 y=-x

30、+2.5; 0=x5 y=2-1.5(x-3)(x-3); 5=x10 y=x/2-1.5; 10=x20輸入: 一個(gè)浮點(diǎn)數(shù)N,0 = N 20。輸出: 輸出N對(duì)應(yīng)的分段函數(shù)值:f(N)。結(jié)果保留到小數(shù)點(diǎn)后三位。樣例輸入: 1.0樣例輸出: 1.500【上機(jī)練習(xí)】4.計(jì)算郵資【1.4編程基礎(chǔ)之邏輯表達(dá)式與條件分支14】 根據(jù)郵件的重量和用戶是否選擇加急計(jì)算郵費(fèi)。計(jì)算規(guī)則:重量在1000克以內(nèi)(包括1000克), 基本費(fèi)8元。超過(guò)1000克的部分,每500克加收超重費(fèi)4元,不足500克部分按500克計(jì)算;如果用戶選擇加急,多收5元。輸入: 輸入一行,包含整數(shù)和一個(gè)字符,以一個(gè)空格分開(kāi),分別表示重

31、量(單位為克)和是否加急。如果字符是y,說(shuō)明選擇加急;如果字符是n,說(shuō)明不加急。輸出: 輸出一行,包含一個(gè)整數(shù),表示郵費(fèi)。樣例輸入: 1200 y樣例輸出: 17【上機(jī)練習(xí)】5.最大數(shù)輸出【1.4編程基礎(chǔ)之邏輯表達(dá)式與條件分支15】 輸入三個(gè)整數(shù),數(shù)與數(shù)之間以一個(gè)空格分開(kāi)。 輸出一個(gè)整數(shù),即最大的整數(shù)。輸入: 輸入為一行,包含三個(gè)整數(shù),數(shù)與數(shù)之間以一個(gè)空格分開(kāi)。輸出: 輸出一行,包含一個(gè)整數(shù),即最大的整數(shù)。樣例輸入: 10 20 56樣例輸出: 56【上機(jī)練習(xí)】6.三角形判斷【1.4編程基礎(chǔ)之邏輯表達(dá)式與條件分支16】 給定三個(gè)正整數(shù),分別表示三條線段的長(zhǎng)度,判斷這三條線段能否構(gòu)成一個(gè)三角形。如果能構(gòu)成三角形,則輸出“yes”,否則輸出“no”。輸入: 輸入共一行,包含三個(gè)正整數(shù),分別表示三條線段的長(zhǎng)度,數(shù)與數(shù)之間以一個(gè)空格分開(kāi)。輸出: 如果能構(gòu)成三角形,則輸出“yes” ,否則輸出“no”。樣例輸入: 3 4 5樣例輸出: yes【上機(jī)練習(xí)】7.判斷閏年【1.4編程基礎(chǔ)之邏輯表達(dá)式與條件分支17】 判斷某年是否是閏年。如果公元a年是閏年輸出Y,否則輸出N。輸入: 輸入只有一行,包含一個(gè)整數(shù)a(0 a 3000)。輸出: 一行,如果公元a年是閏年輸出Y,否則輸出N。樣例輸入: 2006樣例輸出: N【上機(jī)練習(xí)】8.點(diǎn)和正方形的關(guān)系【1.4編程基礎(chǔ)之邏輯表達(dá)式與

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論