c語言程序設(shè)計(jì)第五版習(xí)題答案_第1頁
c語言程序設(shè)計(jì)第五版習(xí)題答案_第2頁
c語言程序設(shè)計(jì)第五版習(xí)題答案_第3頁
c語言程序設(shè)計(jì)第五版習(xí)題答案_第4頁
c語言程序設(shè)計(jì)第五版習(xí)題答案_第5頁
已閱讀5頁,還剩92頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

C語言程序設(shè)計(jì)第五版習(xí)

題答案

Lastrevisionon21December2020

習(xí)題解析與答案

第1章C語言概述

一.簡(jiǎn)答題

1.概述C語言的主要特點(diǎn)。

【解答】

⑴語言簡(jiǎn)潔、緊湊,使用方便、靈活。

⑵數(shù)據(jù)類型豐富,表達(dá)能力強(qiáng)。

⑶運(yùn)算符多樣。C語言中的運(yùn)算符包含的范圍非常廣泛。

(4)具有結(jié)構(gòu)化的控制語句。如if,"else語句、whiIe語句、dowhile語句、

switch語句、for語句。

⑸允許直接訪問物理地址。C語言中含有的位和指針運(yùn)算,能夠直接對(duì)內(nèi)存地址進(jìn)

行訪問操作。

⑹所生成的目標(biāo)代碼質(zhì)量高,可移植性好。

2.構(gòu)成C語言程序的基本單位是什么它由哪幾部分組成

【解答】函數(shù)是構(gòu)成C語言程序的基本單位。一個(gè)完整的C程序一般由文件包含、

宏定義、函數(shù)說明、變量和一個(gè)或若干個(gè)函數(shù)組成。

3.C語言程序的運(yùn)行一般要經(jīng)過哪幾個(gè)步驟

【解答】⑴編輯;⑵編譯;⑶連接,生成EXE文件;⑷執(zhí)行。

二.運(yùn)行程序?qū)懡Y(jié)果

1-輸入下面程序并運(yùn)行。

main()

(

intal,a2,x;

al=100;

a2=50;

x=aI-a2;

printf(r/x=%d\nM,x);

)

【解答】運(yùn)行結(jié)果為:x=5。

2.輸入下面程序并運(yùn)行。

main()intaha2,x;

al:10;

a2=20;

x=aI*a2;

printf("al=%d,a2=%d\n",al,a2);

printf("x=%d\n,r,x);

1

【解答】運(yùn)行結(jié)果為:al=10,a2=20x=200

3.輸入下面程序并運(yùn)行。

#include<>

main()

(

printf("******\n");

printf("*****\n");

printf("****\n");

printf("***\n");

printf("

printf("*\n");

)

【解答】運(yùn)行結(jié)果為:******

*****

思考:可以修改程序,使之輸出平行四邊形,等腰三角形等圖形。

三.編程題

1.參照本章例題,編寫一個(gè)C程序,用于顯示如下信息:

********>k>k******

IloveCprograms!

*>k***********>k>k>k>k**

【分析與提示】

①要有文件包含語句include<>°C語言中沒有數(shù)據(jù)的輸入、輸出等功能,數(shù)據(jù)的

輸入、輸出都是通過調(diào)用系統(tǒng)提供的庫函數(shù)scanf和printf等來實(shí)現(xiàn)的。這些函數(shù)

的說明都包括在文件中。

②main是主函數(shù)的名稱。用{}括起來的內(nèi)容是函數(shù)體,函數(shù)體由若干條語句組

成,這是計(jì)算機(jī)要執(zhí)行的部分,每條語句以分號(hào)“;”結(jié)束。

③注意顯示的信息有三行,所以要用到換行符“\n”。

參考代碼:

#include<>

main()

H

printf('*************************\n')printf(IloveCprograms!\n");

printf(''************************\n'))

第2章數(shù)據(jù)類型及其運(yùn)算

一-簡(jiǎn)答題

1C語言中的數(shù)據(jù)類型主要有哪幾類

【解答】短整型(shortint)

「整型J整型(int)

長(zhǎng)整西(longintS

基本類字字符型(cdr)單精度(float),

3型(浮點(diǎn)型)]J

雙精‘(double)I

出舉類型(enum)<

4組類型r

構(gòu)造類,結(jié)構(gòu)體類目(struct)

少用體類型(unLn)

指針類在

I空類型(void)

2.字符常量與字符串常量有什么區(qū)別

【解答】字符常量用單括號(hào)括起,字符串常量用雙括號(hào)括起;字符常量存儲(chǔ)時(shí)占1

個(gè)字節(jié),字符串常量存儲(chǔ)時(shí)除了n個(gè)字符外,還有系統(tǒng)加上的字符串終止符\。,所以字符

串常量存儲(chǔ)時(shí)占n+1個(gè)字節(jié)。

3.C語言中的常量包括哪幾類各自是如何構(gòu)成的

【解答】C語言中的常量是一些其值預(yù)先定的量,并且在程序執(zhí)行過程中其值不再

發(fā)生變化。常量的分類遵循基本數(shù)據(jù)類型分類原則,C語言編譯系統(tǒng)自動(dòng)將其存放在于類

型相應(yīng)的內(nèi)存單元中。其類別包含整形常量、浮點(diǎn)常量、字符常量、字符串常量和枚舉

常量。整形常量又分為十進(jìn)制整形常量、八進(jìn)制整形常量、十六進(jìn)制整形常量。浮點(diǎn)常

量分成十進(jìn)制形式和指數(shù)形式。C語言中的,字符常量是用單括號(hào)括起來的一個(gè)字符

或是字符序列,而字符串常量是用一對(duì)雙括號(hào)括起來的零個(gè)或者多個(gè)字符組成的序列。

4.簡(jiǎn)述指針、變量的指針、變量的值、指針變量與指針變量的值的含義是什么

【解答】C語言中將地址又稱為“指針;一個(gè)變量所分配的內(nèi)存空間首字節(jié)地址,

稱為該變量的指針(地址),變量的值就被放入所分配的地址單元中。地址一旦被分配,

就不會(huì)再改變,所以,指針是一個(gè)常量。既然是常量就可以把它賦給一個(gè)變量。用來存放

指針的變量,被稱為指針變量。一個(gè)指針變量的值是變量的地址,一個(gè)指針變量可以被

賦予不同的指針值。

5.下面哪些是不合法的常量說明不合法的理由。

123,,0892,Oxabc,,"Morning"【解答】非法常量有:

0892——含有非八進(jìn)制數(shù)字8和9

——非法指數(shù)形式浮點(diǎn)常量:規(guī)定e后面的指數(shù)必須為整數(shù)。

6.下面對(duì)變量定義的語句哪些不正確為什么請(qǐng)改正。

(1)charcLinta2;(2)INTa,b;FLOATx,y;(3)a.b:char:

(4)charif;(5)inta,b(6)Inta:b:c;

(7)inta,x;floatx,y;

【解答】

(1)charcLinta2;

錯(cuò)誤。定義不同類型的變量時(shí),應(yīng)用分號(hào)彼此分開。

改正為:charcl;inta2;

(2)INTa.b;FLOATx.y;

錯(cuò)誤。C語言中表示類型名的關(guān)鍵字必須小寫。

改正為:inta,b;floatx,y;

(3)a,b:char;

錯(cuò)誤。C語言中變量定義格式為:類型名變量名;

改正為:chara.b:

(4)charif;

錯(cuò)誤。變量名不能與C語言的關(guān)鍵字重名。

改正為:charfl;

(5)inta,b

錯(cuò)誤。變量定義以語句形式出現(xiàn),應(yīng)以分號(hào)結(jié)尾。

改正為:inta,b;

(6)Inta:b:c;

錯(cuò)誤。類型名不能有大寫字母,相同類型名之間用逗號(hào)分隔,

改正為:inta,b,c;

(7)inta,x;floatx,y;

錯(cuò)誤。在同一程序位置上,同一變量名不能重復(fù)定義充當(dāng)兩個(gè)不同的變量。

改正為:inta,x;floatxl,y;

7.下述字符串常量的長(zhǎng)度是多少在內(nèi)存中存儲(chǔ)時(shí)各自占用的單元數(shù)又是多少

11)“Hell。!"(2)“ABC\ii\\TH\C64V(3)u\xAB*V765+123="

【解答】

21)-Hello!”字符串長(zhǎng)度為6,占用內(nèi)存字節(jié)數(shù)為7。

32)“ABC\n\\TH\064\”字符串長(zhǎng)度為9,占用內(nèi)存字節(jié)數(shù)為10。因?yàn)槠渲衆(zhòng)n\\

\064\各自只占一個(gè)字符的位置。

43)“\xAB*\765+123二”該字符串不是合法的,因?yàn)閈765表示的值太大,超出合法

的ASCII字符集的范圍。

--運(yùn)行程序?qū)懡Y(jié)果

5.以下程序的執(zhí)行結(jié)果是main()

intij;

i=15;

printf("%d,%d”,;

J

【解答】14,15

6.以下程序的執(zhí)行結(jié)果是______o

main()

(

inta=20,b=10.c,*p1,*p2;

PI=&a;

p2二&b;

c=(-*p1)/(*p2)+6;

printf(na=%d,b=%d\n",a,b);

printfC+p1=%d,*p2=%d\n*\*p1,*p2);printfCc=%d\n\c);

)

【分析與提示】

pla

c=4

7.以下程序的執(zhí)行結(jié)果是

#incIudeo

main()

(

chara=,G,.b=,o',c=,o',d=,d';

a=a+32;

b=b-6:

c=c+3;

d=d+8;

printf("%c%c%c%c\n'\a.b.c.d);

)

【分析與提示】從ASCH代碼表可以看出,字符“G,、寸的ASCII代碼值

為71、111、101,因此,’G+32、,o-6、,o'+3、1d1+8的值分別是103、

105、114、108,它們所對(duì)應(yīng)的字符分別是I"、"V、匕"、T。

常用結(jié)論:

⑴在C語言中,字符數(shù)據(jù)可以按其ASCII代碼值參加整數(shù)運(yùn)算。由于英文字母

在ASCII代碼表中是按順序排列的,所以在計(jì)算,。~3代表的字母時(shí),可從字符,。,

順序向后取3個(gè)字母,該字母是匕”。

⑵從ASCII代碼表可以看出“小寫字母”一對(duì)應(yīng)大寫字母,的結(jié)果是32.因此可推

算出如下等式:大寫字母的ASCII值+32二對(duì)應(yīng)小寫字母的ASCH值;小寫字母的ASCII

值-32二對(duì)應(yīng)大寫字母的ASCII值。

【解答】girI

8.以下程序的執(zhí)行結(jié)果是o

#includeoniain(){intx;

x=-3+4*5-6;

printfCx1=%d\n",x);

x=3+4%5-6;

printf("x2=%d\n",x);

x=-3*4%-6;

printf("x3=%d\n",x);

)

【分析與提示】xl=ll分*5是20,-3+20是17,17-6等于11)

x2=l(4%5等于4,3+4等于7.7-6等于1)x3=0(-3*4等于-12,-12%-6

等于0)x2=lx3=0

9.以下程序的執(zhí)行結(jié)果是_____o

#inekideomain()(

printf("%d\n",NULL);

printf("%d,%c\n",49,49);

printf("%d,%c,%o\n",48+10,48+10,48+10);

)

【分析與提示】

0(NULL的ASCH碼值是0)

49,1(數(shù)字1的ASCII碼值是49)

58.1,72(48+10等于58,正好是“:”的ASCII碼值,八進(jìn)制表示是72)

【解答】。

49.1

58,:.72

三、改錯(cuò)題

1-請(qǐng)修改下列程序,使其能夠通過編譯。

#include<>

VoidMain()

(

inta=6;b=8;

intc;

c=a*b;

printfC%d\c);

)

【答案】錯(cuò)誤的地方有3處:⑴第2行關(guān)鍵字應(yīng)該小寫;⑵定義b時(shí)前面

應(yīng)該用逗號(hào);⑶打印語句的格式應(yīng)該用雙引號(hào)括起來。

正確的程序如下:

#incIude<>voidmain()inta=6,b=8;

intc;

c=a*b:

printf("%d",c);

1

2請(qǐng)修改下列程序,使其能夠正確運(yùn)行。

#inekide<>voidmain();

floatf=;

charc=,'c

printf("%c:c);

)

【答案】錯(cuò)誤的地方有3處:⑴第2行main。;不應(yīng)該有分號(hào);⑵定義

charc=,'c";

時(shí),字符常量應(yīng)該用單引號(hào):⑶打印語句printf("%d\n",int(f%3));的格式有

錯(cuò),應(yīng)該在f前的int用括號(hào)括起來,因?yàn)閷?shí)型數(shù)據(jù)不能執(zhí)行取余運(yùn)算。

正確的程序如下:

#include<>voidmain()(floatf=;

charc=c*;

printf(^dXn",((int)f%3));

printfC*%c".c):

?第3章順序結(jié)構(gòu)程序設(shè)計(jì)

簡(jiǎn)答題

1.程序有哪三種基本結(jié)構(gòu)

【解答】程序的三種基本結(jié)構(gòu)為:順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。

2.C語言的語句有哪幾類表達(dá)式語句與表達(dá)式有什么不同

【解答】C語句可分為以下五類:表達(dá)式語句、函數(shù)調(diào)用語句、控制語句、復(fù)合語

句和空語句。其中表達(dá)式語句與表達(dá)式的區(qū)別在于表達(dá)式語句是表達(dá)式加上“二組成。

二、填空題

運(yùn)算符,%是指

2.C語言中的空語句就是

3.Scanf函數(shù)中的“格式字符”后面應(yīng)該是___________而不應(yīng)該是

4.若想輸出字符%,則應(yīng)該在“格式字符。的字符串中用表示。

5.intx=7:執(zhí)行x+=x-=x+x:后X的值是C

6.inta=10,b=20;a+=b;b=a-b;a-二b;的功能是

答案:1.地址、變量a的內(nèi)存地址。

2.一個(gè)分號(hào)。

3.變量地址,變量名。

4.連續(xù)2個(gè)%號(hào)。

5.-14

6.交換變量a,b的值,打印出a=20,b=10。

三.運(yùn)行程序?qū)懡Y(jié)果

1以下程序的執(zhí)行結(jié)果是。

#inekideoniain()fdoubled=:intx.y:x=:y=(x+/:

printf("%d\n';d*y);}

【解答】0

2.以下程序的執(zhí)行結(jié)果是o

main()(doubIed;fIoatf;IongI;inti;

i=f=l=d=20/3;

printf("%d%ld%f%An",i,I,f,d);)

【解答】66

3.以下程序的執(zhí)行結(jié)果是

main()

{

intk=17;

printf("%d,%o,%x\ii",k,k,k);

)

【解答】17,21,11

4.以下程序的執(zhí)行結(jié)果是,

#inekideomain(){

chara,b,c,d;

a='A,b=B,c=C;d='D;

printf("%lc\n",a);

printf("%2c\n",b);

printf("%3c\n",c);

printf("%4c\n",d);

)

【分析與提示】可以用%C格式輸出的,也可以用%€1格式輸出,所以與%md近

似,m指出了要輸出數(shù)據(jù)的寬度。若數(shù)據(jù)位數(shù)小于m,則左端補(bǔ)空格,若數(shù)據(jù)位數(shù)大于m,則

按實(shí)際位數(shù)輸出。

【解答】A

BCD

5.以下程序的執(zhí)行結(jié)果是

#incIudeomain(){

charcl,c2;

scanf('%c%c\&c1,&c2);

printf(ncl=%c,c2=%c,c3=%d,c4=%d',c1++,—c2,c19c2);

)

【解答】運(yùn)行輸入:AB〈回車〉

運(yùn)行結(jié)果為:c1=A,c2=A,c3=65,c4=66

6.以下程序的執(zhí)行結(jié)果是

#inekideomain()(

charcI.c2:

scanf("%c,%c\&c1,&c2);

++cl;

~c2;

printf(Hcl=%c,c2=%c\nH,c1,c2);

)

【分析與提示】例如當(dāng)輸入B,C<回車〉,B,C的AS析I碼值為66,67,執(zhí)行-

7;后,cl為66+1變成67即C,c2為67-1變成66即B。

【解答】運(yùn)行輸入:B,C〈回車),運(yùn)行結(jié)果為:cl=C,c2=B

7.以下程序的執(zhí)行結(jié)果是o

main()

(

charch=*a;inta=98;

doubley=;

printf(1(1)a=%d,a=%c,ch=%d,ch=%c\n\a,a,ch,ch);

printfC⑵b=%u\n';b);

printf("(3)c=%Id\nM,c);

printf(n(4)x=%f,y=%f\nH,x,y);

printf(n(5)x=%e,y=%e\n'\x,y);

printf(n(6)y=%\n\y);}

[解答](1)a=98,a=b,ch=97,ch=a

(2)b=l000(4)x=,y=(5)x=+00,y=+00(6)y=

8.以下程序的執(zhí)行結(jié)果是_______o

#inckide<>main()(inta,b;

floatx;

scanf(1,%d,%d",&a,&b);

x=a/b;

printfC\nx=%f\n",x);

1

【解答】運(yùn)行輸入:2,2〈回車〉,運(yùn)行結(jié)果為;

9.當(dāng)輸入123451a時(shí),給出程序的運(yùn)行結(jié)果,執(zhí)行結(jié)果是。

#inckide<>

main()

(

inta;charc;

scanf("%3d,%c",&a,&c);

printf(r\n%d,%d\n",a,c);

)

【分析與提示】%md,m指出了要輸出數(shù)據(jù)的寬度。若數(shù)據(jù)位數(shù)小于叫則左端補(bǔ)空

格,若數(shù)據(jù)位數(shù)大于rn,則按實(shí)際位數(shù)輸出。a的ASCII碼值是97。

【解答】12345.97

1C.分析下面程序,在鍵盤上輸入數(shù)據(jù)才能使得變量a=10.b=20.

cl='A',c2='a"x=,y=,z=o

程序如下:

#include<>

main()

inta,b;

floatx,y,z;

charcI,c2;

scanf("%5d%5d%c%c%f%f%*f,%f,,&a,&b,&cI,&c2,&x,&y,&z);

printfCa=%d.b=%d,c1=%c.c2=%c,x=%f.y=%f.z=%F'.a.b,c1.c2,x.y.z):

)

【分析與提示】按%5d格式輸入a與b的值時(shí),要先鍵入三個(gè)空格,然后再鍵入

1。與2。。%*f是用來禁止賦值的。在輸入時(shí),對(duì)應(yīng)%*f位置可以隨意輸入一個(gè)數(shù)(我們輸

入,該數(shù)不會(huì)賦值給任何變量的)。

【解答】運(yùn)行輸入:一〈回車》

11.一個(gè)程序中,使用了多個(gè)scanf函數(shù)輸入數(shù)據(jù),用a=3,b=7,x=,y=,cl=,A\c2=W

輸入到每個(gè)變量,應(yīng)該如何輸入數(shù)據(jù)

inta,b;

floatx,y;

charcI.c2;

scanf(a=%d,b=%d,&a,&b);

scanf(Hx=%f,y=%e",&x,&y);

scanf(Hcl=%cc2=%c,\&c1,&c2);

printf(Ha=%d,b=%dx=%f,y=%f,c1=%c,c2=%c\n",a,b,x,y,c1,c2);

)

【分析與提示】在使用多個(gè)scanf函數(shù)輸入數(shù)據(jù)時(shí),第一個(gè)輸入行末尾輸入的回車

被第二個(gè)scanf函數(shù)吸收,因此在第二、三個(gè)scanf函數(shù)的雙引號(hào)后放置一個(gè)空格以抵消

上行輸入的回車鍵。若沒有一個(gè)空格,則按上面輸入的數(shù)據(jù)會(huì)出錯(cuò)。

【解答】運(yùn)行輸入:a=3,b=4V回車〉

X=8,y*回車〉

CI=AC2=a<回車>

15彳丁結(jié)果:a=3,b-7,x=,y,cl-A,c2-a

四.編程題

1.由鍵盤輸入1個(gè)字母,輸出其ASCII碼值。

【分析與提示】將一個(gè)字符常數(shù)賦給一個(gè)字符變量,并不是把該字符本身放到內(nèi)存

單元中去,而是將該字符的ASCII代碼放到內(nèi)存單元中,因此,字符型數(shù)據(jù)也可以像整型

數(shù)據(jù)那樣使用,可以用來表示一些特定范圍內(nèi)的整數(shù)。所以依型與char型變量的值可

以互換,分別用枇和洞不同格式輸出就行了。

但是注意這種轉(zhuǎn)換是有條件的。因?yàn)椋琧har變量在內(nèi)存占一個(gè)字節(jié),而int整型

變量占2個(gè)字節(jié)。當(dāng)int型高位字節(jié)是。時(shí),char與int可以互換;若不是。,則不可以互

換。例如,用心格式輸出時(shí),取低位字節(jié),高位字節(jié)被舍棄。

參考代碼:

#incIudc

charch;

ch=getchar();

printf("%c,%d",ch.ch);

)

【解答】運(yùn)行輸入:B〈回車〉

運(yùn)行結(jié)果:B,66

2.從鍵盤上輸入一個(gè)大寫字母,把它轉(zhuǎn)換成小寫字母,然后顯示出來。

【分析與提示】大寫字母轉(zhuǎn)換小寫時(shí)ASCII碼值+32,相反的,小寫字母轉(zhuǎn)換成大

寫字母時(shí)ASCII碼值-32。

參考代碼:

#include<>main()

f

charxI,x2;

printfCxU'n,;

scanf("%cH,&xl);

x2=xl+32;

printf(n%c,%c\nH,x1,x2);)

【解答】運(yùn)行輸入:A〈回車》

運(yùn)行結(jié)果:A,a

3.從鍵盤上輸入兩個(gè)實(shí)型數(shù),求兩數(shù)的和、差、積,輸出結(jié)果時(shí)要求小數(shù)部分占兩位。

【提示】結(jié)果要求保留2位小數(shù),所以輸出的結(jié)果格式為%.2九

main()(

floatx,y,a,b.c;

printfCpleaseinputx,y:;

$canf("%f,%f",&x,&y);

a=x+y;

b=x-y;

c=x*y:

nn

printf(x=%f,y=%f\n,x5y);

printf(Hx+y=%.2f\nx-y=%.2f\nx*y=%.2f\n\a.b,c);

【解答】

運(yùn)行輸入:pleaseinputx,y:10,20V回車〉

運(yùn)行結(jié)果:x=,y=

x+y=x-y=x*y=

4.編寫一個(gè)程序,求出給定半徑r的圓以及內(nèi)正n邊形的面積,并且輸出計(jì)算結(jié)

果。r和n的值由用戶輸入。

【分析與提示】由數(shù)學(xué)知識(shí)得到:半徑為r圓的面積5二加[半徑為r圓的內(nèi)接正

n邊形的面積4二”飛心々/2,其中。=21/〃

處理步驟:提示信息,接收參數(shù)值;計(jì)算圓的面積;計(jì)算正n邊形的面積;輸出

結(jié)果。

參考代碼:

#inckideo

#inekideo

#definePI

niain()

(

intn;

floatr,s.area;

printf(uPleaseinputtheradiusandthe

scant("%f%d",&rt&n);

s=PI*r*r;

area=(n*r*r*sin(2*Pl/n))/;

printf(nS=%.2f\tA=%.2f\n\s,area);

return(0);

)

運(yùn)行結(jié)果如下:

PleaseinouttheradiusandtheN.;

15

S=A=

5.已知華氏溫度與攝氏溫度之間的轉(zhuǎn)換公式是:c=5/9x(F-32),編寫一個(gè)程序,將

用戶輸入的華氏溫度轉(zhuǎn)換成攝氏溫度,并予以輸出。

【分析與提示】首先要定義輸入輸出溫度為浮點(diǎn)型,且5/9兩數(shù)相除結(jié)果為整數(shù),

5/9的值為0,故不能寫成5/9,而應(yīng)寫成*(932)。結(jié)果要求保留2位小數(shù),所以輸出的結(jié)果

格式為%。

參考代碼:

#include<>

niain()

(

intf;

floatc;

printf(n\npleaseinputtheF:n);

scanf("%d'\&f);

c=9*(f-32);〃不能寫成5/9,兩數(shù)相除結(jié)果為整數(shù),5/9的值為0*/

printfCtheis:%.2f\c);

return(0);

)

【解答】運(yùn)行結(jié)果如下:

pleaseinputtheF:75〈回車〉

the,[eratureis:

6.由鍵盤輸入5個(gè)學(xué)生的計(jì)算機(jī)成績(jī),計(jì)算他們的平均分并保留2位小數(shù)。

【分析與提示】方法與上題類似,同樣是保留兩位有效數(shù)字%。

參考代碼:

main()

(

inta,b,c,d,e;

floattotaLaver;

printf(Pleseinput5students'scores:\nH);

scanf("%d,%d,%d,%d,%d",&a,&b,&c,&d,&e);

totaI=a+b+c+d+e;

aver-totaI/;

printf("Average:%\iV\aver);

【解答】運(yùn)行輸入:80,93,75,68.87〈回車)

運(yùn)彳丁結(jié)果:Average:

7.編寫將輸入的英里轉(zhuǎn)換為公里,每英里等于538。英尺,每英尺等于12英

寸,每英寸等于2.54厘米,每公里等于10。00。厘米。

main()

(

doubIemiIe,k;

priiitfCenter

scanf(u%lf\&miIe):

k=mile*5380*12*100000;

print*"%lfmiIeis%lfkilometerNn'\mile*k);

)

【解答】運(yùn)行:entermile:2/

miIeiskilometer

第4章選擇結(jié)構(gòu)程序設(shè)計(jì)

習(xí)題

1.已知a=3,b=4,c=5。則邏輯表達(dá)式a+b>c&&b==c的值為

(a>b)&&clII的值為,!(a+b)+c-l&&b+c/2的值為。

【分析與提示】本題考查運(yùn)算符的優(yōu)先級(jí)別。

【解答】0:1:1

二、運(yùn)行程序?qū)懡Y(jié)果

L下列程序運(yùn)行的運(yùn)行結(jié)果為。

#inekideo

main()

inta=3,b=8,c=9,d=2,e=4;

intmin;

min=(a<b)a:b;

min=(min<c)minic;

min=(min<d)min:d;

min=(min<e)mime;

printf("Minis%d\n",min);

)

【分析與提示】本題程序的功能為:找出a,b,c,d,e中最小的值并輸出。

【解答】Minis2

2.若輸入3.4〈回車),下列程序運(yùn)行的運(yùn)行結(jié)果為;若輸入4.3〈回車》,下列

程序運(yùn)行的運(yùn)行結(jié)果為0

#inckide<>

main()

(

irta,b,c;

printf("Inputa.b:");

ecanf("%d,%d",ab);

if(a>=b)

{c=a*b;printf(,%d*%d=%d\n"ja,b,c);}

eIse

{c=a/b;printf("%d/%d=%d\n'\a,b,c);}

)

【分析與提示】本題程序的功能為:從鍵盤輸入變量a.b,計(jì)算c的值(若a>王則

c-a*b,若a<b貝ljc-a/b),并輸出a.b.c的值。

【解答】3/4=0;4*3=12

3.下列程序運(yùn)行的運(yùn)行結(jié)果為。

#inekideo

main()

(

intx=l,y=0,a=0?b=0;

switch(x)

(

case1:

swtch(y)

{case0:a++;break;

case1:b++;break;

)

case2:a++;b++;break;

)

printf("a=%d,b=%d\n",a.b);

)

【分析與提示】本題中easel:后面是一個(gè)switch語句,執(zhí)行完該語句后,直接執(zhí)行

case2:后面的語句。

【角翠答】a=2tb=l

三.編程題

1.輸入一個(gè)字母,若為小寫,則把它變成大寫輸出。

【分析與提示】小寫字母的ASCII碼值與其對(duì)應(yīng)的大寫字母的ASCII碼值相差32。

參考代碼:

main()

charc;

printf("請(qǐng)輸入一個(gè)字母、n");

scanf(n%c\&c);

if(c>=,a'&&cv='z')

c=c-32;

printf("%c\n",c):)

2.企業(yè)發(fā)放的獎(jiǎng)金根據(jù)利潤(rùn)提成。利潤(rùn)⑴低于或等于1。萬元時(shí),獎(jiǎng)金可提

10%;利潤(rùn)高于10萬元,低于20萬元時(shí),低于10萬元的部分按10節(jié)提成,高于10萬元的

部分,可可提成舟;20萬到40萬之間時(shí),高于20萬元的部分,可提成5%;40萬到

60萬之間時(shí)高于40萬元的部分,可受成3*;60萬到100萬之間時(shí),高于60萬元的部

分,可提成%,高于1。0萬元時(shí),超過1。。萬元的部分按居提成,從鍵盤輸入當(dāng)月利潤(rùn)

I,求應(yīng)發(fā)放獎(jiǎng)金總數(shù)

【分析與提示】請(qǐng)利用數(shù)軸來分界,定位。注意定義時(shí)需把獎(jiǎng)金定義成長(zhǎng)整型。

參考代碼:

main()

{

longinti;

intbonusI,bonus2,bonus4,bonus6,bonusIO,bonus;

snanf(〃/1d〃,&i);

bonusI=100000*;bonus2=bonusI+100000*;

bonus4=bonus2+200000*;

bonus6=bonus4+200000*;

bonus10=bonus6+400000*;

if(i<=100000)

bonus=i*;

elseif(i<=200000)

bonus二bonusl+(i-100000)*;

elseif(i<=400000)

bonus=bonus2+(i-200000)*;

elseif(i<=600000)

bonus=bonus4+(i-400000)*;

elseif(i<=1000000)

bonus=bonus6+(i-600000)*;

else

bonus=bonus10+(i-1000000)*;

printf("bonus-%d”,bonus);

)

3.由鍵盤輸入三個(gè)整數(shù)a、b、c.用條件運(yùn)算符求出其中最大值和最小值。

【分析與提示】首先比較輸入的a,b的大小,并把大數(shù)裝入sax,小數(shù)裝入min中,然

后再與c比較,若max小于c,則把c賦予max;如果c小于min,則把c賦予min?因此max內(nèi)

總是最大數(shù),而min內(nèi)總是最小數(shù)。最后輸出max和min的值即可c

參考代碼:

main()

inta.b,c,max.min;

scanf(*d,$d,$d,&a.&b.&c);

max=a>ba:b;

niax=max>cmax:c;

min=a<ba:b;

min=min<cmin:c;

printf("最大值為:%d,最小值為:%d\n”,max.min);

)

4.有一函數(shù):

Xf(x<l)

y=2x-l(IWx<10)

3x-lI(xNIO)

編一程序,輸入一個(gè)x值,輸出y值。

【分析與提示】本題考查if語句的嵌套,應(yīng)當(dāng)注意if與else的配對(duì)關(guān)系。從最內(nèi)層開

始,else總是與它上面最近的(未曾配對(duì)的)if配對(duì)。

參考代碼:

main。(floatx,y;printfC請(qǐng)輸入x的值\rT);scanf(*f;&x);

if(x<l)y=x;

eIse

if(x>=10)y=3*x-l1;

eIsey=2*x-l;

printf("x=%,y=%v,x,y);

I

5.從鍵盤上輸入星期號(hào),并顯示該日期的英文名字。

【分析與提示】本實(shí)例知識(shí)點(diǎn):switch語句。

switch語句的控制流程是:首先計(jì)算表達(dá)式的值,然后依次與每一個(gè)case中的常量值

進(jìn)行比較,一旦發(fā)現(xiàn)了某個(gè)能夠匹配的值,就執(zhí)行該case后面的語句組,直到遇至IJbreak

語句為止。如果表達(dá)式的值與所有case中的常量都不匹配,則執(zhí)行default后面的語句組。

參考代碼:

man()

intxqh;

charywm;

printf("請(qǐng)輸入星期號(hào)(1-7):\n");

scanf(n%dM,&xqh);

swtch(xqh)

{case1:printf(Monday,1);break;

case2:printf(HTuesdayw);break;

case3:printf('<WednesdayM);break;

case4:printf(HThursdayH);break;

case5:printf(HFridayH);break;

case6:printf("Saturday1*);break:

case7:printf("Sunday,;break;

default:printf(“error");

)

)

6.某市不同車牌的出租車3公里的起步價(jià)和計(jì)費(fèi)分別為:夏利7元/公里,3公里以

外元/公里;富康8元/公里,3公里以外元/公里;桑塔納9元,3公里以外元/公里。編

程:從鍵盤輸入乘車的車型及行車公里數(shù),輸出應(yīng)付車資。

【分析與提示】可設(shè)三個(gè)變量,分別表示乘車的車型、行車公里數(shù)和應(yīng)付車資,

根據(jù)乘車的車型和行車公里數(shù),計(jì)算出應(yīng)付的車資。

參考代碼:

main()

(

intex;/*定義乘車的車型變量ex*/

floatgl,cf;/*定義行車公里數(shù)變量gl、應(yīng)付車資變量cf*/

夏利\n\t2-富康\n\t3-桑塔納\n");

printf(%請(qǐng)輸入車型(1-3)scanf("%d",&cx);

printf("\n\t請(qǐng)輸入行車公里數(shù):”);

scanf("%f',&gl);

switch(ex)

{case1:if(gI<=3)cf=;

eIsecf=7+(gl-3)*;break;

case2:if(gI<=3)cf=:

eIsecf=8+(gI-3)*;break;

case3:if(gI<=3)cf=;

eIsecf=9+(g1-3)*;

)

printf(M應(yīng)付車資為%.1

)

7.給一個(gè)不多于5位的正整數(shù),要求:①求出它是幾位數(shù);②分別打印出每一位數(shù)字;

③按逆序打印出各位數(shù)字。如原數(shù)為12345.則逆序?yàn)?4321。

【分析與提示】本題的思路是:設(shè)5個(gè)變量,分別代表個(gè)位、十位、百位、千位

和萬位。從個(gè)位起,依次將各個(gè)位取出來,按取出的順序組合成新的數(shù)據(jù),并記錄當(dāng)前取

出的數(shù)字的個(gè)數(shù)。

參考代碼:

incIudemain()(

unsignedx,m,n=0,w=0;

unsignedge=05shi=0,bai=0.qian=0,wan=0;

“intf(“請(qǐng)輸入一個(gè)正整數(shù))

scanf(*u\&x);

m=x;

ge=m%10;m=m/10;w=1;n=ge;

if(m)

{shi=m%10;m=m/10;w=2;n=n*10+shi;

if(m)

{bai=m%10;m=m/10;w=3;n=n*10+bai;

if(m)

(qian=m%10;m=ni/10;w=4;n=n*10+qian;

if(m)

{wan=m;w=5;n=n*10+wan;J

)

)

)

printf(H\n%u為%11位數(shù)",n,w);

printf("\n正整數(shù)的原序?yàn)椋?u",x);

printf("\n正整數(shù)的逆序?yàn)椋?u\n);

)

注:當(dāng)該程序輸入一個(gè)較大的5位數(shù)時(shí),輸出結(jié)果就不正確了,思考為什么動(dòng)手試

一下怎樣修改該程序。

第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)

一、填空

1.下面程序的功能是用“輾轉(zhuǎn)相除法力求兩個(gè)正整數(shù)的最大公約數(shù)。請(qǐng)?zhí)羁铡?/p>

#inckide<>

mail()

intr,m.n;

scanf('%d%dni&m,&n);

if(m<n)(1);

r=m^n;

while(r){m=n;n=r;;)

printf("%d\n",n);

)

【分析與提示】輾轉(zhuǎn)相除法:兩數(shù)相除,若不能整除,則以除數(shù)作為被除數(shù),余

數(shù)作為除數(shù),繼續(xù)相除,直到余數(shù)為。時(shí),當(dāng)前除數(shù)就是最大公約數(shù)。

【解答】(I)r=m;m=n;n=r;(2)r=m%n;

二,運(yùn)行程序?qū)懡Y(jié)果

1.下列程序運(yùn)行的運(yùn)行結(jié)果為0

#inekideo

n)ain()

(

inty=10;

do

{y—;

}wniIe(-y);

printf("%d?y-);

【分析與提示】注意丫~與丫一的運(yùn)算順序。

【解答】0

2.下列程序運(yùn)行的運(yùn)行結(jié)果為。

main()

(

intx=3,y=6,z=2:

while(x++!=(y-=l))

(

z+=l;

if(y<x)

break;

priiitfC%d,%d,%d\ir\x,y.z);

)

1

【解答】4,5,3

3.下列程序運(yùn)行的運(yùn)行結(jié)果為.

main()

(

inta=Lb=O;

for(;a<3;a++)

switch(a++)

(

caseI:b—:

case2:b++;

case3:b+=3;break;

1

printf(u%d\nn,b);

)

【解答】3

4.下列程序運(yùn)行的運(yùn)行結(jié)果為。

main()intx=10,y=10J;

for(i=0:i<2;y=i++)priiitf(%4dMeI,x-y);

)

【解答】101090

三.編程題

1,求s=I+2+4+8+-+64的值c

【分析與提示】本題為數(shù)學(xué)項(xiàng)求和問題,數(shù)學(xué)項(xiàng)間的關(guān)系為:第n項(xiàng)的值為第n-1

項(xiàng)的值2倍。參考代碼:

main。

(

inti,s=05t=I;

whiIe(t<=64)

Is=s+t;

t=2*t;

)

printf(Hs=%d\n*\s);

)

2.求s=l+l/2+l/3+-+l/100的值。

【分析與提示】本題為分?jǐn)?shù)數(shù)學(xué)項(xiàng)求和問題,要想得到每一項(xiàng)的正確結(jié)果,分式

中的分子、分母至少要有一個(gè)為實(shí)型數(shù)據(jù)。

參考代碼:

main()

(inti;

floats=0,t;

for(i=l;i<=100;i++)

{t=i;

s=s+t;

)

printf("s=%.2f\n",s);

)

3.求T=1!+2!+3!+???+10!的值。

【分析與提示】本題為數(shù)學(xué)項(xiàng)求和問題,數(shù)學(xué)項(xiàng)間的關(guān)系為:第n項(xiàng)的值為第n-1

項(xiàng)的n倍。參考代碼:

main()

longintt=0.tn=l;

inti;

for(i=l;i<=10;i++)

{tn=i*tn;

t=t+tn;

)

printfCt=%ld",t);

)

4.求s=2/1+3/2+4/3+5/44—+22/21的值。

【分析與提示】請(qǐng)抓住分子與分母的變化規(guī)律。

參考代碼:

main()

(

intm;

floats=0,n=;

for(m=l;m<=2I;m++)

{s=s+ii/m;

n=n+1;

)

printf("s=%.2fui",s);

)

5.輸入一行字母,分別統(tǒng)計(jì)其中的英文字母、空格、數(shù)字和其他字符的個(gè)數(shù)。

【分析與提示】利用while語句,條件為輸入的字符不為.

參考代碼:

include

main()

(

charc;

intletters=0,space=0,digit=0,other=0:

Printf("請(qǐng)輸入一行字符:\n");

whiIe((c=getchar())!=\n)

(if(c>=a&&c<=zllc>=A&&c<=Z)letters++;

elseif(c=')space++;

elseif(c>-0&&c<=9)digit++;

eIseother++;

1

printf(“字母數(shù)<d空格數(shù);*d數(shù)字?jǐn)?shù)=%d其它字符數(shù)二%d\n”,letters,space,digit,other);)

6.求100以內(nèi)能被8整除的數(shù),并求它們的和。

【提示】判斷一個(gè)數(shù)m能否被n整除的方法是:將m對(duì)n取余數(shù),若余數(shù)為。,

則為整除。

參考代碼:

main。

(

intn,s=0;

for(n=1;n<=100;n++)

if(r%8==0)

|s=s+n;

printf("

溫馨提示

  • 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)論