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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

C語言程序設計第五版習

題答案

Lastrevisionon21December2020

習題解析與答案

第1章C語言概述

一.簡答題

1.概述C語言的主要特點。

【解答】

⑴語言簡潔、緊湊,使用方便、靈活。

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

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

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

switch語句、for語句。

⑸允許直接訪問物理地址。C語言中含有的位和指針運算,能夠直接對內存地址進

行訪問操作。

⑹所生成的目標代碼質量高,可移植性好。

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

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

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

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

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

二.運行程序寫結果

1-輸入下面程序并運行。

main()

(

intal,a2,x;

al=100;

a2=50;

x=aI-a2;

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

)

【解答】運行結果為:x=5。

2.輸入下面程序并運行。

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

【解答】運行結果為:al=10,a2=20x=200

3.輸入下面程序并運行。

#include<>

main()

(

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

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

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

printf("***\n");

printf("

printf("*\n");

)

【解答】運行結果為:******

*****

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

三.編程題

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

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

IloveCprograms!

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

【分析與提示】

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

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

的說明都包括在文件中。

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

成,這是計算機要執(zhí)行的部分,每條語句以分號“;”結束。

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

參考代碼:

#include<>

main()

H

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

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

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

一-簡答題

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

【解答】短整型(shortint)

「整型J整型(int)

長整西(longintS

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

3型(浮點型)]J

雙精‘(double)I

出舉類型(enum)<

4組類型r

構造類,結構體類目(struct)

少用體類型(unLn)

指針類在

I空類型(void)

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

【解答】字符常量用單括號括起,字符串常量用雙括號括起;字符常量存儲時占1

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

串常量存儲時占n+1個字節(jié)。

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

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

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

型相應的內存單元中。其類別包含整形常量、浮點常量、字符常量、字符串常量和枚舉

常量。整形常量又分為十進制整形常量、八進制整形常量、十六進制整形常量。浮點常

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

或是字符序列,而字符串常量是用一對雙括號括起來的零個或者多個字符組成的序列。

4.簡述指針、變量的指針、變量的值、指針變量與指針變量的值的含義是什么

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

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

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

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

賦予不同的指針值。

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

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

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

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

6.下面對變量定義的語句哪些不正確為什么請改正。

(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;

錯誤。定義不同類型的變量時,應用分號彼此分開。

改正為:charcl;inta2;

(2)INTa.b;FLOATx.y;

錯誤。C語言中表示類型名的關鍵字必須小寫。

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

(3)a,b:char;

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

改正為:chara.b:

(4)charif;

錯誤。變量名不能與C語言的關鍵字重名。

改正為:charfl;

(5)inta,b

錯誤。變量定義以語句形式出現(xiàn),應以分號結尾。

改正為:inta,b;

(6)Inta:b:c;

錯誤。類型名不能有大寫字母,相同類型名之間用逗號分隔,

改正為:inta,b,c;

(7)inta,x;floatx,y;

錯誤。在同一程序位置上,同一變量名不能重復定義充當兩個不同的變量。

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

7.下述字符串常量的長度是多少在內存中存儲時各自占用的單元數(shù)又是多少

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

【解答】

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

32)“ABC\n\\TH\064\”字符串長度為9,占用內存字節(jié)數(shù)為10。因為其中\(zhòng)n\\

\064\各自只占一個字符的位置。

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

的ASCII字符集的范圍。

--運行程序寫結果

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

intij;

i=15;

printf("%d,%d”,;

J

【解答】14,15

6.以下程序的執(zhí)行結果是______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í)行結果是

#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,它們所對應的字符分別是I"、"V、匕"、T。

常用結論:

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

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

順序向后取3個字母,該字母是匕”。

⑵從ASCII代碼表可以看出“小寫字母”一對應大寫字母,的結果是32.因此可推

算出如下等式:大寫字母的ASCII值+32二對應小寫字母的ASCH值;小寫字母的ASCII

值-32二對應大寫字母的ASCII值。

【解答】girI

8.以下程序的執(zhí)行結果是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í)行結果是_____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碼值,八進制表示是72)

【解答】。

49.1

58,:.72

三、改錯題

1-請修改下列程序,使其能夠通過編譯。

#include<>

VoidMain()

(

inta=6;b=8;

intc;

c=a*b;

printfC%d\c);

)

【答案】錯誤的地方有3處:⑴第2行關鍵字應該小寫;⑵定義b時前面

應該用逗號;⑶打印語句的格式應該用雙引號括起來。

正確的程序如下:

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

intc;

c=a*b:

printf("%d",c);

1

2請修改下列程序,使其能夠正確運行。

#inekide<>voidmain();

floatf=;

charc=,'c

printf("%c:c);

)

【答案】錯誤的地方有3處:⑴第2行main。;不應該有分號;⑵定義

charc=,'c";

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

錯,應該在f前的int用括號括起來,因為實型數(shù)據(jù)不能執(zhí)行取余運算。

正確的程序如下:

#include<>voidmain()(floatf=;

charc=c*;

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

printfC*%c".c):

?第3章順序結構程序設計

簡答題

1.程序有哪三種基本結構

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

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

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

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

二、填空題

運算符,%是指

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

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

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

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

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

答案:1.地址、變量a的內存地址。

2.一個分號。

3.變量地址,變量名。

4.連續(xù)2個%號。

5.-14

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

三.運行程序寫結果

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

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

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

【解答】0

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

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

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

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

【解答】66

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

main()

{

intk=17;

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

)

【解答】17,21,11

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

#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,則左端補空格,若數(shù)據(jù)位數(shù)大于m,則

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

【解答】A

BCD

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

#incIudeomain(){

charcl,c2;

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

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

)

【解答】運行輸入:AB〈回車〉

運行結果為:c1=A,c2=A,c3=65,c4=66

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

#inekideomain()(

charcI.c2:

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

++cl;

~c2;

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

)

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

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

【解答】運行輸入:B,C〈回車),運行結果為:cl=C,c2=B

7.以下程序的執(zhí)行結果是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í)行結果是_______o

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

floatx;

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

x=a/b;

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

1

【解答】運行輸入:2,2〈回車〉,運行結果為;

9.當輸入123451a時,給出程序的運行結果,執(zhí)行結果是。

#inckide<>

main()

(

inta;charc;

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

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

)

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

格,若數(shù)據(jù)位數(shù)大于rn,則按實際位數(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的值時,要先鍵入三個空格,然后再鍵入

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

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

【解答】運行輸入:一〈回車》

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

輸入到每個變量,應該如何輸入數(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);

)

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

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

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

【解答】運行輸入:a=3,b=4V回車〉

X=8,y*回車〉

CI=AC2=a<回車>

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

四.編程題

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

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

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

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

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

但是注意這種轉換是有條件的。因為,char變量在內存占一個字節(jié),而int整型

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

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

參考代碼:

#incIudc

charch;

ch=getchar();

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

)

【解答】運行輸入:B〈回車〉

運行結果:B,66

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

【分析與提示】大寫字母轉換小寫時ASCII碼值+32,相反的,小寫字母轉換成大

寫字母時ASCII碼值-32。

參考代碼:

#include<>main()

f

charxI,x2;

printfCxU'n,;

scanf("%cH,&xl);

x2=xl+32;

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

【解答】運行輸入:A〈回車》

運行結果:A,a

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

【提示】結果要求保留2位小數(shù),所以輸出的結果格式為%.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);

【解答】

運行輸入:pleaseinputx,y:10,20V回車〉

運行結果:x=,y=

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

4.編寫一個程序,求出給定半徑r的圓以及內正n邊形的面積,并且輸出計算結

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

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

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

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

結果。

參考代碼:

#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);

)

運行結果如下:

PleaseinouttheradiusandtheN.;

15

S=A=

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

用戶輸入的華氏溫度轉換成攝氏溫度,并予以輸出。

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

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

格式為%。

參考代碼:

#include<>

niain()

(

intf;

floatc;

printf(n\npleaseinputtheF:n);

scanf("%d'\&f);

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

printfCtheis:%.2f\c);

return(0);

)

【解答】運行結果如下:

pleaseinputtheF:75〈回車〉

the,[eratureis:

6.由鍵盤輸入5個學生的計算機成績,計算他們的平均分并保留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);

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

運彳丁結果:Average:

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

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

main()

(

doubIemiIe,k;

priiitfCenter

scanf(u%lf\&miIe):

k=mile*5380*12*100000;

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

)

【解答】運行:entermile:2/

miIeiskilometer

第4章選擇結構程序設計

習題

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

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

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

【解答】0:1:1

二、運行程序寫結果

L下列程序運行的運行結果為。

#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〈回車),下列程序運行的運行結果為;若輸入4.3〈回車》,下列

程序運行的運行結果為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,計算c的值(若a>王則

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

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

3.下列程序運行的運行結果為。

#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:后面是一個switch語句,執(zhí)行完該語句后,直接執(zhí)行

case2:后面的語句。

【角翠答】a=2tb=l

三.編程題

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

【分析與提示】小寫字母的ASCII碼值與其對應的大寫字母的ASCII碼值相差32。

參考代碼:

main()

charc;

printf("請輸入一個字母、n");

scanf(n%c\&c);

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

c=c-32;

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

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

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

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

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

分,可提成%,高于1。0萬元時,超過1。。萬元的部分按居提成,從鍵盤輸入當月利潤

I,求應發(fā)放獎金總數(shù)

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

參考代碼:

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.由鍵盤輸入三個整數(shù)a、b、c.用條件運算符求出其中最大值和最小值。

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

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

總是最大數(shù),而min內總是最小數(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)

編一程序,輸入一個x值,輸出y值。

【分析與提示】本題考查if語句的嵌套,應當注意if與else的配對關系。從最內層開

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

參考代碼:

main。(floatx,y;printfC請輸入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.從鍵盤上輸入星期號,并顯示該日期的英文名字。

【分析與提示】本實例知識點:switch語句。

switch語句的控制流程是:首先計算表達式的值,然后依次與每一個case中的常量值

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

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

參考代碼:

man()

intxqh;

charywm;

printf("請輸入星期號(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公里的起步價和計費分別為:夏利7元/公里,3公里以

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

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

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

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

參考代碼:

main()

(

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

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

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

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

printf("\n\t請輸入行車公里數(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應付車資為%.1

)

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

③按逆序打印出各位數(shù)字。如原數(shù)為12345.則逆序為54321。

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

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

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

參考代碼:

incIudemain()(

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

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

“intf(“請輸入一個正整數(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ù)的原序為:%u",x);

printf("\n正整數(shù)的逆序為:%u\n);

)

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

一下怎樣修改該程序。

第5章循環(huán)結構程序設計

一、填空

1.下面程序的功能是用“輾轉相除法力求兩個正整數(shù)的最大公約數(shù)。請?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);

)

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

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

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

二,運行程序寫結果

1.下列程序運行的運行結果為0

#inekideo

n)ain()

(

inty=10;

do

{y—;

}wniIe(-y);

printf("%d?y-);

【分析與提示】注意丫~與丫一的運算順序。

【解答】0

2.下列程序運行的運行結果為。

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.下列程序運行的運行結果為.

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.下列程序運行的運行結果為。

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ù)學項求和問題,數(shù)學項間的關系為:第n項的值為第n-1

項的值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的值。

【分析與提示】本題為分數(shù)數(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ù)學項求和問題,數(shù)學項間的關系為:第n項的值為第n-1

項的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的值。

【分析與提示】請抓住分子與分母的變化規(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)計其中的英文字母、空格、數(shù)字和其他字符的個數(shù)。

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

參考代碼:

include

main()

(

charc;

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

Printf("請輸入一行字符:\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ù)字數(shù)=%d其它字符數(shù)二%d\n”,letters,space,digit,other);)

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

【提示】判斷一個數(shù)m能否被n整除的方法是:將m對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等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論