c語言選擇結(jié)構(gòu)程序設(shè)計(jì)習(xí)題答案_第1頁
c語言選擇結(jié)構(gòu)程序設(shè)計(jì)習(xí)題答案_第2頁
c語言選擇結(jié)構(gòu)程序設(shè)計(jì)習(xí)題答案_第3頁
c語言選擇結(jié)構(gòu)程序設(shè)計(jì)習(xí)題答案_第4頁
c語言選擇結(jié)構(gòu)程序設(shè)計(jì)習(xí)題答案_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第4章選擇結(jié)構(gòu)程序設(shè)計(jì)習(xí)題(P111)C語言中如何表示“真”和“假” ?系統(tǒng)如何判斷一個(gè)量的“真”和“假” ?答:C語言中用1表示真,0表示假;系統(tǒng)按照“非0為真,0為假”判斷一個(gè)邏輯量的真假。寫出下面各邏輯表達(dá) 式的值。設(shè)a=3,b=4,c=5 °(1 )a+b>c&&b=c( 2)a|b+c&&bc(3)!(a>b)&&!c|1(4) !(x=a)&&(y=b)&&0(5) !(a+b)+c-1 &&b+c/2解:該題在求解過程中注意:一、 優(yōu)先級(jí)。邏輯運(yùn)算符(&&

2、amp;和II)低于算術(shù)運(yùn)算符和矢系運(yùn)算符而高于賦值運(yùn)算符,在邏輯運(yùn)算符中,邏輯非最高, 邏輯與其次,邏輯或最低;二、邏輯表達(dá)式的求值規(guī)則。6P94)所以得以上表達(dá)式的值分別為:<1)0( 2)1( 3)1( 4)0( 5)1有3個(gè)整數(shù)a、b、c,由鍵盤輸入,輸出其中最大的數(shù)。分析:這是一個(gè)規(guī)模較小的求最值的算法,習(xí)題用函數(shù)的方法實(shí)現(xiàn)。該題不用函數(shù)調(diào)用實(shí)現(xiàn),但方法類似。法 一:先求前兩個(gè)數(shù)的最值,再用前兩個(gè)數(shù)的最值和第三個(gè)數(shù)比較即得結(jié)果。法二:先假設(shè)第一個(gè)數(shù)是最值,再依次和第 二、第三個(gè)數(shù)比較得結(jié)果。其中都要用到單分支或雙分支選擇結(jié)構(gòu)語句。參考程序如下:法一:ma in ()int a,

3、b,c,max; /*定義4個(gè)整型變量,其中a,b,c存原始數(shù)據(jù)> max存最值*/; prin tf('*n in put the value of a,b,c:H); /*提示輸入*/ii sea nf(”d%d%d“,&a,&b, &c);廣格式符之間無分隔符,輸入時(shí)可以以空格、回車、跳格分丨隔*/(if(a>b) max=a;else max=b;IIif(max<c) max=c;iiprin tf(Hnm ax=%dn';max);II法* JMVn asaM MB-yUaaMtttMlalma in ()int a5b,c

4、5max;IIprin tf(Mnin put the value of a5b,c:f,);sea nf("%d%d%d",&a,&b, &c);iimax=a;;if(max<b) max=b;Iiif(max<c) max=c;iiprin tf(Mnm ax=%dn'max);ii 有一個(gè)函數(shù):寫一段程序,輸入X,輸出y的值。分析:這是一個(gè)典型的分?jǐn)嗪瘮?shù)的求解應(yīng)用。運(yùn)行時(shí)從鍵盤輸入x的值,再判斷其范圍根據(jù)表達(dá)式計(jì)算y值并輸出即可。該題的尖鍵是如何判斷x值的范圍,需要用到嵌套的分支選擇語句。具體方法比較多,可以先確定任意一個(gè)

5、范圍,在確定其余范圍時(shí)可以用到前一條件不滿足的隱含條件。注意嵌套語句中else和if的配對(duì)矢系。另外仍然要注意C語言表達(dá)式和數(shù)學(xué)表達(dá)式的區(qū)別,乘號(hào)(* )在C語言表達(dá)式中一定不能省略。參考程序如下:#in cludeomain ()float x,y;prin tf(*'i nput x:”); sea nf(“f”,&x);if(x<1)使用了隱含條件x >=1 */y=2*x-1;else /*前兩個(gè)條件都不滿足'則隱含條件為x>=10 7y=3*x-11;prin tf(”y=%fn”,y);對(duì)上述參考答案中加粗部分語句的改寫方法:if(x<

6、;10)if(x<1) y=x;elsey=2*x-1;if(x>=10) y=3*x-11:else if (x<1) y=x;else y=2*x-1;if(x>=1 && x<=10) y=2*x-1;else if(x>10) y=3*x-11; else y=x;思考:還有其他的改寫方法嗎?請(qǐng)動(dòng)手寫一寫。給出一百分制成績(jī),要求輸出成績(jī)等級(jí)A、B、C、D、E'。90以上為7V,80-89分為B,7079分為C , 60-69分為 D,60分以下為E。分析:該題是一個(gè)多分支選擇的應(yīng)用。C語言中實(shí)現(xiàn)多分支選擇的方法可以用ifels

7、e嵌套語句或用switch語句,該題這兩種方法都可以實(shí)現(xiàn)。在用if-else實(shí)現(xiàn)的時(shí)候注意else和if的配對(duì),方法同上題;用switch語句實(shí)現(xiàn)的時(shí)候注意成績(jī)處理為可以列舉的值,方法是將成績(jī)?nèi)≌笳?0,這樣百分制的成績(jī)只有11種可能了。參考程序如下:法一(ifelse語句實(shí)現(xiàn)):mai n()float score;廣存放輸入的百分制成績(jī)*/char grade; /* 存放等級(jí) */ prin tf("nPlease in put the score:");scan f(”f”,&score);廣提示輸入*/while(score>100 | scor

8、e < 0)廣完成輸入*/ pri ntf("Score in put error!nPlease in廣對(duì)輸入的成績(jī)進(jìn)行合法性檢查*/put the score:");/*若不合法則提示重新輸入*/scan f(“f”,&score);廣重新輸入"7prin tfC'nn);廣以下對(duì)成績(jī)進(jìn)行判斷,計(jì)算出對(duì)應(yīng)的等級(jí)*/if(score>=90) grade='A'else if(score>=80) grade='B'else if(score>=70) grade=C;else if(sco

9、re>=60) grade='D'else grade='E'prin tf(MScore= %g Grade is% (n n,score,grade);廣輸出結(jié)果*/法二(switch語句實(shí)現(xiàn))mai n()float score;char grade;prin tf(f,nPlease in put the score:11);scan f("%f", &score);while(score>100 | score < 0) prin tf(f,Score in put error!1 nPlease in p

10、ut the score:”); scan f("%fH, &score);prin tf(HnH);switch( (int)score/10 )/*先將成績(jī)?nèi)≌?,再整?0,得商的整數(shù)部分7/*以下case后為switch后表達(dá)式計(jì)算出來可能的值*/case 10:case 9: grade=A: break; /*兩個(gè)case值共用一組執(zhí)行語句*/case 8: grade='B*; break;case 7: grade=C; break;case 6: grade='D' break;default: grade='E'pri

11、n tf("Score=%g Grade is %cn n,score,grade);給一個(gè)不多于5位的正整數(shù),要求:求出它是幾位數(shù);分別輸出每一位數(shù)字;按逆序輸出各位數(shù)字。分析:該題的尖鍵是將一個(gè)整數(shù)分解為各位數(shù)字,可以用整除和取余相結(jié)合的方法實(shí)現(xiàn),并分別用不同 的變量保存起來。由于整數(shù)的位數(shù)在 1 5位之間不確定,所以適合用 switch開矢語句實(shí)現(xiàn)。參考程序如下:J JMCMIMgl«l5 B 00i|»M8gMI.IM hBIB B* Ii giBQlmai n()long int num; /* num存放輸入的原始數(shù)據(jù),由于最大的5位數(shù)是99999,它

12、超出了 int型的范圍(-32768 +32767 )所以定義為long型*/int w,a,b,c,d,e; /*變量w用于存放數(shù)的位數(shù)其余存放5位數(shù)的各位數(shù)字*/提示輸入*/prin tf("Please in put a number(099999):”); /*輸入長(zhǎng)整型數(shù)據(jù)*/while( num<0 | num>99999 ) /*檢查輸入數(shù)據(jù)的合法性*/ prin tf("nln put Error! Please re-e nter:");i scan f(”ld”,&n um);/* 一組if-else的嵌套確定輸入的num是

13、幾位數(shù)*/if(num<10) w=1;else if(num <100) w=2;else if(nu m<1000) w=3;else if(nu m<10000) w=4;else w=5;/*根據(jù)位數(shù)分解num的各位數(shù)字*/switch( w) case 5: e=num/10000;/*萬位存于變量 e 中 *7千位存于變量d中*/百位存于變量c中*/ 十位存于變量b中*/case 1: a=nu m%10;個(gè)位存于變量a中*/case 4: d=nu m/1000%10; /* case 3: c=n um/100%10; /*case 2: d=n um/

14、10%10;/*廣順序、逆序輸出分解后的各位數(shù)字*/switch(w) case 5: prin tf("Shu nxu:%d%d%d%d%dn", e,d,c,b,a); prin tf(”Nixu:%d%d%d%d%dn”,a,b,c,d,e);break;case 4: prin tf("Sh un xu:%d%d%d%dn",a,b,c,d);prin tf(,Nixu:%d%d%d%dn,d,c,b,a);break;! case 3: prin tf("Shu nxu:%d%d%dn",a,b,c); I prin tf(

15、,Nixu:%d%d%dn,c,b,a);break;! case 2: prin tf("Shu nxu:%d%dnM,a,b);i prin tf(nNixu:%d%dnn,b,a);Ibreak;case 1: prin tf(nSh un xu:%d%dnn,a,b);i prin tf(nNixu:%d%dnH,b,a);break;1輸入4個(gè)整數(shù),要求按照由小到大的順序輸出。分析:小規(guī)模數(shù)據(jù)的簡(jiǎn)單排序可參考P88例,先將第一個(gè)變量和其后各變量逐一比較,逆序交換,最終將最值存于第一個(gè)變量中;然后將第二個(gè)變量和其后各變量再逐一比較,逆序交換,將第二個(gè)最值存于第二個(gè)變量中; 以此類推,直到最的兩個(gè)變量比較,逆序交換。最后按順序輸出各變量的值即為有序。參考程序如下:I I UMM JI aiMII l I I:* « ! Ml I ! I I l MM IMilmai n()int a,b,c,d,t;i printf(nn請(qǐng)輸入4個(gè)整數(shù):”);sea nf("%d%d%d%d',&a,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論