第五到八章習(xí)題集答案及課后習(xí)題答案_第1頁
第五到八章習(xí)題集答案及課后習(xí)題答案_第2頁
第五到八章習(xí)題集答案及課后習(xí)題答案_第3頁
第五到八章習(xí)題集答案及課后習(xí)題答案_第4頁
第五到八章習(xí)題集答案及課后習(xí)題答案_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

習(xí)題集答案(后附課后習(xí)題答案)

第五章函數(shù)

一、選擇題:

1.答案:B

分析:在C語言中,函數(shù)可以在任何地方出現(xiàn),而main函數(shù)作為函數(shù)中的

一類,沒有特殊的限制和要求,故也可以在任何地方出現(xiàn)。

2.答案:B

分析:C語言默認規(guī)定

3.答案:D

分析:選項A中“abc”和C中的‘65'是一個字符串,而形參要求的是單

個字符不符合要求,選項B是一個賦值語句,而fun函數(shù)沒有返回值,所以

不符合要求,只有選項D正確,將32傳給ch字符變量,那么32就相當于

是ASCH碼值。

4.答案:A

分析:sin(1/2)會當作sin(0)處理。實參的類型決定了重載函數(shù)的選擇。

5.答案:D

分析:函數(shù)的調(diào)用不可以作為一個函數(shù)的形參。

6.答案:D

分析:fun(a,b)的作用是返回a^b中較大的。fun(x,y)=fun(3,8)=8,

r=fun(fun(x,y),2*z)=fun(8,12)=12

7.答案:C

分析:fl(x,y)的作用是返回x、y中較大的,f2(x,y)的作用是返回x、

y中較小的。d=fl(a,b)=fl(4,3)=4

d=fl(d,c)=fl(4,5)=5

e=f2(a,b)=f2(4,3)=3

e=f2(e,c)=f2(3,5)=3

此時各值為a=4,b=3,c=5,d=5,e=3,f=a+b+c-d-e=4。所以答案d,f,e為

5,4,3

8.答案:A

分析:c程序的基本單位是函數(shù)。函數(shù)中不可以嵌套定義函數(shù)。main()函

數(shù)可以放在任意位置。被調(diào)用的函數(shù)只要在調(diào)用之前說明了即可。

9.答案:B

分析:fun(x,y)的作用是求x、y的和。fun(a+c,b)=a+c+b=15,(int)

fun(a+c,b)=(int)15=15□fun((int)fun(a+c,b),a-c)=fun(15,-6)

=9o

10.答案:D

分析:fun(x,y)的作用是選擇x,y里面較小的一個。fun(9,8)=8,

fun(8,7)=7;fun(fun(a,b),fun(b,c))=fun(8,7)=7

11.答案:C

分析:funl(a)=a2,fun2(x,y)=(int)(funl(x)+funl(y))=(int)(x2+y2),

所以funl(l.1,2.0)=(int)(1.21+4.0)=(int)5.21=5

由于w是double型的,所以w的值為5.0。

12.答案:A

分析:函數(shù)的說明有其自己的格式,應(yīng)該包括函數(shù)類型、函數(shù)名、以及形參

類型,形參名可有可無,但是一定要統(tǒng)一,形參名隨便取。

13.答案:C

分析:允許這種函數(shù)說明的方式存在。如果只在主函數(shù)中說明,則只能在主

函數(shù)中調(diào)用f;如果在主函數(shù)以前說明,則包括主函數(shù)的所有函數(shù)都可以調(diào)

用,如果同時主函數(shù)又說明了,則不影響。

14.答案:D

分析:函數(shù)的形參不可以傳給對應(yīng)的實參。

15.答案:D

分析:形式參數(shù)的改變不影響實參。所以本題是一個迷惑題,不需要看函數(shù)

體的內(nèi)容。

16.答案:C

分析:C語言中改變函數(shù)形參的值,不會改變對應(yīng)實參的值;函數(shù)可以返回

地址值,當函數(shù)沒有指定返回值類型時,默認返回類型為void型,C語言的

函數(shù)不能嵌套定義,所以本題選擇。

17.答案:A

分析:本題答案為A,程序的執(zhí)行總是從main函數(shù)開始,在main函數(shù)結(jié)束,

無論main函數(shù)在程序的什么地方。

18.答案:A

分析:在C語言中,函數(shù)返回值的類型取決于函數(shù)定義時在函數(shù)首部所說明

的函數(shù)類型。

19.答案:C

分析:函數(shù)f(intv,intw)的功能是將實參v和w進行交換,但是實參值

的變化對形參沒有影響,所以本題中x,y,z中的值不發(fā)生變化。

20.答案:C

分析:因為fun(intx)函數(shù)是一個遞歸函數(shù),所以主函數(shù)中的調(diào)fun(3)經(jīng)過

1次遞歸調(diào)用,其過程可以描述為fun(3)=3*3-f(3-2)=9-fun(l)=9-3=6。

21.答案:D

分析:在內(nèi)存中,實參單元與形參單元是不同的單元。在C語言中,僅在調(diào)

用函數(shù)時,給形參分配存儲單元,并將實參對應(yīng)的值傳遞給形參,調(diào)用結(jié)束

后,形參單元被釋放,實參單元仍保留并維持原值。故本題答案為D。

22.答案:C

分析:變量a,b,c的初始值分別為1,2,3o因此逗號表達式“a++,b++,a+b”

值等于5,表達式C++的值為3,這樣主函數(shù)main。中調(diào)用子函數(shù)的表達式為

fun(5,3);其返回值等于8。所以變量sum的值等于8。本題選擇C。

二、填空題:

1.答案:a=l.O,b=l.O,s=l.0;

分析:分別求出變量的初始值。a=a*x為的是求xn,所以其初始值為l,b=b*i

位的是求n!,所以其初始值為1,當n=0時,s=l,所以s的初始值為1。由

于定義的是double型的數(shù)據(jù),所以答案為a=1.0,b=1.0,s=1.0;

2.答案:m=fun(a,4)+fun(b,4Afun(a+b,3);

分析:由程序可以看出fun(x,n)=xnofun(a,4)=a4,

fun(b,4)=b4,fun(a+b,3)=(a+b)3,當要計算m=a4+b4+(a+b)3時,函數(shù)調(diào)用語句

為m=fun(a,4)+fun(b,4)+fun(a+b,3);

3.答案:xx*x+l

分析:1)求f(x)的累加和,即為求f(0)+f(1)+f(2)+f(3)+f(4)

+……,函數(shù)SunFun來實現(xiàn)此功能。括號中應(yīng)該填入累加的序號值,即

為Xo

2)f(x)=x2+l,F(intx)函數(shù)來實現(xiàn)這個功能,所以填寫x*x+l。

1.答案:-ffun(10)

分析:函數(shù)的作用為計算m=l-2+3-4+5-6+7-8+9-10,實際上為計算

m=l*l+(-l)*2+l*3+(-l)*4+...+1*9+(-1)*10,在循環(huán)體中,i為1,2,3…

f為1的符號。每循環(huán)一次,f的符號應(yīng)該變換一下,所以變換的語句為f=-f。

當n=l時,計算的是m=l;當n=2時,計算的是m=l-2...因為計算的是

m=1-2+3-4+5-6+7-8+9-10,所以答案為n=10,即firn(10)。

2.答案:9

分析:1)函數(shù)的意思為f(x,y)=(y-x)*x

f(3,4)=(4-3)*3=3

f(3,5)=(5-3)*3=6

2)d=f(3,6)=(6-3)*3=9.

3.答案:doublemax

分析:通過程序可以看出,main函數(shù)中使用了max函數(shù),而其他地方?jīng)]有對

max函數(shù)進行說明。所以程序中應(yīng)該對max函數(shù)進行說明。說明的格式為

doublemax(double,double)?

4.答案:3,2,2,3

分析:1)x=2,y=3,當調(diào)用fun(x,y)時,相當于執(zhí)行fun(2,3)0

x=x+y;x=2+3=5;

y=x-y;y=5-3=2;

x=x-y;x=5-2=3;

此時x,y的值為3,2,所以輸出的結(jié)果為3,2。

2)在main函數(shù)中,實參不會因為形參的改變而改變,x,y的值仍為2,3,

所以所以輸出的結(jié)果為2,3.

8、答案:13

分析:fun函數(shù)是一個遞歸函數(shù),主函數(shù)中調(diào)用的fun(3)共遞歸兩次,fun(3)

中又調(diào)用fiin(3/2)即fun(l),先輸出fun(l)中x的值,為1,然后再輸出fun(3)

中x的值為3。所以結(jié)果為13。

9、答案:m=9k=14

i=5j=5

分析:為賽量i和j賦初值為4,調(diào)用fun(i++,++j)即fun(4,5),在fun函數(shù)

中計算m和k的值,m+=k即m=m+k=4+5=9,k+=m即k=k+m=5+9=14,分

別輸出m和k的值,即輸出m=9,k=14;然后到主函數(shù)中輸出自增1后的i

和j的值,即i=5,j=5?

第六章指針

一、選擇題

1答案:A

分析:本題主要考指針賦值,n2=nl;是把n2的值賦給nl,故根據(jù)指針賦值

的定義可知選A,即把q所指對象的值賦給p所指對象。

2答案:B

分序:本題主要考指針定義,因為p指向變量x,故輸出其值的時候應(yīng)該是

x的值。

3答案:C

分析:本題主要考指針的定義和賦值,C前面是定義一個量a并賦值為10,后

面定義一個指針,并把a的值賦給這個指針。

4答案:C

分析:本題主要考指針的定義及賦值,開始時使p指向a,q指向b,把它們

的值交換,然后再顯示。故得正確答案C。

5答案:C

分析:本題主要考函數(shù)指針的定義,函數(shù)前面的*號表求返回值是指針類型,

void表示返回?zé)o值弄的。故選C。

6答案:A

分析:本題主要考的是指針的變量的賦值,在使用scanf()函數(shù)的時候,

后面跟的是一個地址,由于pa本身保存的是地址,故選A

7答案:D

分析:本題主要考的指針的賦值及指向指針的指針的賦值,根據(jù)定義知選D。

B的正確形式是**q=2;C的正確形式應(yīng)該是q=&po

8答案:C

分析:本題主要考的是全局變量和局部變量,以及指針的用法,第一個f(&a)

的返回值是5,第二個返回值是2o

9答案:A

分析:本題主要考的是變量自加,指針傳值,以及指針的賦值。通過第二行

a=b可知pl,p2指向的變量的值相同,都指向了b所指的對象,也是p2所指

的對象由于(*a)++;是實現(xiàn)a所指對象的自加,故由,a,變成b,故最終

選Ao

10答案:A

分析:本題主考NULL,一般來說當我們把一個空值以整數(shù)的形式輸出出來

的時候,默認的情況是0。

11答案:C

分析:本題考的是指針變量的賦值,雖然p沒有賦值,表示沒有指向某個具

體的對象,但事實上系統(tǒng)會讓它隨機的指向存儲單元里的一個對象,那么它

的返回值應(yīng)該是所指存儲單元中的值。

12答案:B

分析:本題主要考函數(shù)中參數(shù)變量的定義,在B中連續(xù)定義兩個變量,這在

函數(shù)中是不可以的。

13答案:C

分析:本題主要考指針的指針,c先指向b,b是一個指針,它指向a,故c最

終是指向a的,故其值是a中的值。

14答案:A

分析:本題主要考指針的賦值,我們不能把一個具體的值賦給一個指針變量。

B選項是w,p指向同一對象。C是p指向a。D是把w所指對象的值賦給p

所指對象。

15答案:B

分析:本題主要考指針傳值,p,q分別指向a,b,然而r會指向它們的較小值。

16答案:D

分析:在D中把一個整形變量的值賦給一個指針的地址,故而是錯的。應(yīng)該

寫成p=&ao

17答案:D

分析:本題主要考調(diào)用函數(shù)時指針傳值和一般的變量的傳值區(qū)別。指針通過

地址傳值,而變量是直接傳值。c指針指向b,故對c指針里面的值的修改

等于直接修改b中的值。

18答案:D

分析:本題主要考指針的定義及指針變量的值的輸出方式,指針b指向a,

故輸出其值是511。

19答案:C

分析:本題主要考指針標識符*和乘號*的區(qū)別,*p=*pl*(*p2)中第1,2,4個*

號是指針標識符,而第三個是乘號,故其運算的結(jié)果是3。

20答案:C

分析:本題主考函數(shù)的嵌套調(diào)用和數(shù)據(jù)的類型轉(zhuǎn)換,注意的是(int)(a+b),所以

得至U5.0。

21答案:A

分析:本題主要說的是函數(shù)的遞歸調(diào)用,函數(shù)fun()實現(xiàn)的功能是從1加到n,

然后返回給主函數(shù)。

22答案:D

分析:A不能把一個具體的值賦給一個指針變量。Bq是指向指針的指針只

能保存指針的地址。C同B。

23答案:D

分析':A指針賦處初值時不能把一個具體的值賦給一個指針變量指向的地址。

B語法錯誤,C不能發(fā)地址賦給浮點型變量。

24答案:C

分析:指針只能存放地址。

25答案:C

分析:scanf()函數(shù)的輸入數(shù)據(jù)列表應(yīng)該是合法的地址表達式。

26答案:D

分析:A中b需要預(yù)先定義,B中字符變量b只能接收單個字符。C中二級

指針應(yīng)定義為**c。答案D

27答案:D

分析:代碼“s+=2”是錯誤的,s是數(shù)組的首地址,但S是常量不能改變它

的值。

28答案:A

分析:B的正確格式是“p=&n”,C的正確格式是“scanf("%d",p)”,D的

正確格式是“printf("%d\n",*p)”。答案A

二、填空題

1答案:84

分析:voidf()函數(shù)里的x,y分別是一個指針變量和整型變量,指針x指向一

個整型的變量,即指向主函數(shù)里的x,故在函數(shù)voidf()里修改指針x的值,

會影響到主函數(shù)里的x的值,但修改voidf()里的y的值卻不會影響到主函數(shù)

里的y的值。因為主函數(shù)x傳的是地址,y傳的是值。

2答案:k*k

分析:由于k是一個指針,故第一個空應(yīng)該填k。

由于第二個空要輸出指針k所指對象的值,故應(yīng)該填*k表示該指針所指對象

的值

3答案:35

分析:p,q分別指向x,y,然后調(diào)用函數(shù)swap。;它的功能是把兩個指針所指向的

對象交換,原來a,b分別指向x,y,但交換后分別指向y,x,所以并不把指向的

對象的值交換。函數(shù)返回后,p,q仍然分別指向x,y。故其值不變。

4答案:n=n/10

分析:把n除以10,每執(zhí)行一次就可以把數(shù)的陽未位去掉,因為兩個整數(shù)相除,

不會保留小數(shù),故最低位會丟掉,并且把數(shù)縮小到十分之一。然后依次從個

位到最高位把數(shù)字輸出。

5答案:35

第七章數(shù)組

一、選擇題

1答案:B

分析:此題考察一維數(shù)組的定義,一維數(shù)組的說明中,下標必須為正的

整型常量,不能為變量,在一維數(shù)組的初始化中,指出在單純的定義時

不能省略數(shù)組的長度。

2答案:B

分析:首先i=0時,判斷i++<7成立,進入循環(huán)體,但此時i=Lp[l]=12

不滿足if語句,不執(zhí)行j+=p[i]。按照此方法,得到j(luò)=p[2J+p[4]+p[6]=45,

即B正確。

3答案:D

分析:首先i=0<7&&p[0]%2!=0,滿足循環(huán)條件,執(zhí)行k=k+p⑼,即k=ll,

然后執(zhí)行i++,再進行判斷,滿足循環(huán)條件,k=ll+p[l],所以k=24,執(zhí)行

i++,i=2,,再進行判斷,此時不滿足循環(huán)條件,循環(huán)結(jié)束,輸出k值,為

24o

4答案:A

分析:此題主要考察循環(huán)嵌套,第一個循環(huán)體執(zhí)行完是將x[0],x[ll,x[21,

x[3],進行從大到小排序,第二個循環(huán)體執(zhí)行完是將x[4],x[5],x[6],

x[7]進行從小到大排序。

5答案:B

分析:此題考察二維數(shù)組的定義,單純定義二維數(shù)組時,行和列都不能

缺省。在初始化過程中,列不能缺省,賦值的行數(shù)和列數(shù)不能超過數(shù)組

的行數(shù)和列數(shù)。

6答案:D

分析:同上題分析一樣。

7答案:D

分析:同上。

8答案:C

分析:此題分別輸出m[2][0],m[2][l],m[2][2]o

9答案:A

分析:此題考察在for循環(huán)后,i=O,i=l時,執(zhí)行if語句,使得a[l][0],a[l][l]

的值分別減1,而當i=2時,執(zhí)行else語句,a[l][2J=lo因此輸出

a[0][l]+a[l][l]+a[l][2]=2+4+l=7;

10答案:B

分析:此題考察for循環(huán),計算aa⑼⑴,aa[l][l],aa⑵⑵,aa[3][l]的和,即

為190

11答案:C

分析:由于自增加運算符(++)的優(yōu)先級別高于取地址運算符(&),所

以選項C無法表示aa川的地址,其他三個選項都可以。

12答案:D

分析:數(shù)組名實際代表數(shù)組的首地址,也就是數(shù)組中第一個元素a[0]的

地址,那么a+i就代表數(shù)組a中下標為i的元素a[i]的地址,*(a+i)就代表

a國這個元素,所以*(*(a+i))的表示是錯誤的,此題選擇D。

13答案:A

分析:本題答案為A,指針p指向數(shù)組a中第一個元素,此時p中存放

的是數(shù)組中a[0J的地址,將指針p+2不是單純的加一個整數(shù)2,而是將

指針后移,兩個存儲單元,指向了a[2]這個數(shù)組元素,所以輸出的是a[2]

中的值3。

14答案:B

分析:此題答案為B,通過程序我們可知指針p指向數(shù)組中元素a[3],

指針q指向元素a[5],輸出*p+*q即輸出a[3]+a[5]=10,所以選擇B。

15答案:C

分析:本題通過循環(huán)控件用y累計p[l]+p[2]的值,由于指針p指向數(shù)組

中元素a[l]所以p[l]即數(shù)組中元素a[2],p[2]即數(shù)組中元素a[3],

a[2J+a[3]=6+8=14?

16答案:A

分析:我們讓指針p指向數(shù)組a中第一個元素,然后通過循環(huán)控制輸出

指針p每次后移一個存儲單元,并輸出其所指存儲單元中的內(nèi)容,而指

針p指向數(shù)組a,所以就是輸出數(shù)組a中的每一個元素,選擇A。

17答案:D

分析:*p表示指針p所指存儲單元中的內(nèi)容,所以(*p)++表示將p所

指存儲單元中的內(nèi)容加1,不符合題目要求,其他三項都符合要求,所

以選擇D。

18答案:A

分析:為指針賦一個NULL值,就是指針具有一個空值,讓一個空指針

去訪問一個存儲單元時,將會得到一個出錯的信息。

19答案:D

分析:變量p是一個指針,所以我們只能為其賦一個地址值,不能為其

賦一個表達式或一個常量值,所以A、B、C三個選項不符合要求,D選

項中,a代表數(shù)組a的首地址,是一個地址值,所以D正確。

20答案:C

分析:讓指針p指向數(shù)組中元素a[3],那p[5]即數(shù)組中元素a[7],所以

b中的值是8。

21答案:B

分析:與上一題同理,指針s指向數(shù)組元素a[3],s[2]即數(shù)組中元素a[4],

即為0。

22答案:C

分析:數(shù)組名t代表數(shù)組的首地址,所以*(t+i)就代表t[i]元素中的值,

通過循環(huán)控制求累加和s,實際上

s=a[0]+a[2]+a[4J+a[6J+a[8J=1+3+5+7+9=25o

23答案:B

分析:讓指針p指向二維數(shù)組a的第一個元素,那么可用p⑼代表a[0][0],

用p川代表a[0][l]........,用p[8]代表a⑵⑵,通過循環(huán)為數(shù)組a中

的每一個元素賦了一個值。輸出即p[5]的值為6o

24答案:D

分析:讓指針p指向二維數(shù)組a的第一個元素,那么可用p⑼代表a[0][01,

用p[l]代表a[0][l]........,用p[8]代表a[2][2J,通過循環(huán)為數(shù)組a中

的每一個元素賦了一個值。再通過循環(huán)輸出a[l][0]、a[l][l],a[l][2],即

p[3]、p[4]、p[5]的值,所以輸出的是3、4、5o

25答案:B

分析:在這里我們通過(*小理2]定義了一個行指針ptr,ptr存放的是含有

兩個整型元素的一維數(shù)組的首地址。a是二維數(shù)組名,就是數(shù)組的首地

址,ptr=a+i就代表,將數(shù)組中第i行的首地址賦給行指針ptr。能過第一

個循環(huán)控制,為第0行和第1的首元素賦值,也就是為a[0]⑼和

賦值,輸入的是1、2、3,但是只賦給兩個元素,所以取前面兩個值,

所以輸出時,a[0]⑼的值為1,的值為2,其他的默認都為0。

26答案:B

分析:int*p[3]是表示定義一個指針數(shù)組,數(shù)組名為p,其中包含3個元

素,每個元素都是一個指向int類型的指針。

27答案:D

分析:通過(*p)[5]則定義了一個行指針,存放長度為5的一維數(shù)組的指

針,通過p=c,讓p指向二維數(shù)組c,那么p[i]就是指向數(shù)組c中第i行

的指針。p「]+n就是數(shù)組中第i行,第n列的地址,如果要引用第i行第

n列的元素,就可以表示成*(p[i]+n),所以本題選擇D。

28答案:D

分析:二維數(shù)組元素的地址可以用表達式求得,也可以通過每行

的首地址來表示,第i行的首地址可以通過a[i]來表示,a[i]+j就表示第

i行第j列的地址,等價于*(a+i)+j,如果要引用第i行第j列的元素,

則可表示成*(a[i]+j),*(*(a+i)+j)或(*(a+i))[j]所以本題選擇D。

29答案:C

分析:p是一個指針數(shù)組,通過p[O]=aU]可知p[0]中存放的是數(shù)組a中

第1行的首地址,所以p[O]+l就代表第1行第1列元素的地址,所以

*(p[O]+l)就代表元素

30答案:C

分析:通過(*ps)[5J則定義了一個行指針,存放長度為5的一維數(shù)組的指

針,通過ps=s,讓ps指向二維數(shù)組s,那么ps[i]就是指向數(shù)組s中第i

行的指針,可用ps[i][j]或*(ps[i]+j)表示第i行第j列的元素。所以選項

C正確。

31答案:A

分析:通過(*pa)[3]定義了一個行指針pa指向二維數(shù)組a,這樣就

表示a[i][j],通過循環(huán)語句控制將和a"]”]中的值分別減1變?yōu)?

和4,給a⑴⑵賦值為1。a[0][1]+a[1][1]+a[1][2]=2+4+1=7,所以本題選

擇Ao

32答案:B

分析:循環(huán)共執(zhí)行3次:i=0并且j=0時:

t=t+b[O][b[0][0]]=1+b[0][0]=1+0=1,當i=l并且j=l時:

t=t+b[l][b[l][l]]=l+b[l][l]=l+l=2,當i=2并且j=2時:

t=t+b⑵[b⑵⑵]=2+b⑵⑵=2+2=4。

33答案:B

分析:第一個for循環(huán)控制輸出的空格,第二個for循環(huán)控制輸出數(shù)組中

元素,分析可知,輸出數(shù)組元素時,第0行輸出0個空格,并從第0

列元素開始輸出,第1行輸出1個空格后,并從第1列元素開始輸出依

此類推,第i行輸出i個空格后,從第i列開始輸出,所以空格處填i。

34答案:A

本題中通過嵌套循環(huán)找出數(shù)組中最小的元素的值,存放在min變量中,

并且將相應(yīng)的行號放在row變量列中,列號放在col變量中輸出。

35答案:A

分析:p=s就表示讓指針p指向數(shù)組S的首地址,數(shù)組中第一個元素,所

以*p可以表示s[0],A選項正確;數(shù)組s中的元素個數(shù)由定義數(shù)組時的

下標決定,P所指的字符串長度由實際的字符個數(shù)決定,是不相等的,

所以B錯誤,s數(shù)組名代表數(shù)組的首地址,是一個地址常量,不是變量

所以C錯誤;數(shù)組s中存放的是數(shù)組中的每一個元素,而指針變量p中

存放的是數(shù)組的首地址,所以D錯誤。

36答案:A

分析:通過pc=ch,讓指針pc指向數(shù)組ch中的第一個元素,此時pc+i

即表示ch[i]的地址,所以輸出*(pc+5)即輸出元素ch⑸中的字符“z”。

37答案:D

分析:swapl(a,a+l)是將數(shù)組中元素a[0]和a[l]的地址傳遞給形參cO和

cl兩個數(shù)組,然后在函數(shù)swapl中對它們進行交換,由于傳遞的是地址

值,所以形參變化,對應(yīng)的實參也發(fā)生改變;所以a[0]與a[l]中的值也

相互交換;swap2(&b⑼,是將數(shù)組b中元素b[0]和b[l]的地址傳遞

給形參指針變量cO和cl,然后對指針變量所指的存儲單元中的值進行

交換,所以b[0]和b[l]中的值相對也發(fā)生變化,因此最后輸出的值為53

53。

38答案:C

分析:循環(huán)for(i=0;i<12;i++)c[s[i]]++;共執(zhí)行12次,分別為:c[l]++,

c[2]++9c[3]++,c[4]++9c[4]++,c[3]++,c[2]++,c[1]++,c[l]++,c[l]++,

c[2]++,c[3]++,其中c[l]自加了4次,c⑵自加了3次,c[3]自加了3

次,c[14]自加了2次,所以c[l]的值為4,c⑵的值為3,c[3]的值為3,c[4]

的值為2,輸出結(jié)果為4332。

39答案:C

分析:函數(shù)fun的功能是將數(shù)組中下標從i至叮的元素倒序,在主函數(shù)中

先通過調(diào)用fun(a,0,3)將a⑼到a[3]的元素倒序得到{4,3,2,1,5,6,7,8,9,0},

再通過fun(a,4,9)將a[4]到a[9]的元素倒序得到[4,3,2』,0,9,8,7,6,5}最后再

通過fun(a,0,9),將a[0]到a[9]中的所有元素倒序得到{5,6,7,8,9,0,1,2,3,4}。

二、填空題

1.答案:24

分析:此題分析過程同選擇題3。

2.答案:1111

分析:本題正確答案為1111。初始化時數(shù)組中每個元素的值都是0,通

過循環(huán)讓數(shù)組中n[l]到n[4]中每個元素的值都是其前一個元素的值乘以

2后,值仍為0,然后輸出每個元素的值加1,即1111。

3.答案:30

分析:計算s=a[0][0]+a[0][2]+a[lj[l]+a[l][l]+a[2][2]+a[2][0]=30

4.答案:123(換行)056(換行)009

分析:在第一個for循環(huán)中,使得a[l][0],a⑵⑼,a⑵[1]全部等于0,因此

輸出即得。

5.答案:92

分析:i=0時,首先判斷i++<4成立,執(zhí)行循環(huán)體,此時i=l,在do-while

內(nèi)層循環(huán)中,得至Us=a[l][0]+a[l][l]+a[l][2]+a[l][3]=26;然后再進行條

件判斷i++<4,進入循環(huán)體,此時i=2,執(zhí)行continue,再一次進行條件判

斷,進入循環(huán)體,此時i=3,因此計算s=a[3][0]+a[3][l]+a[3][2]+a[3][3]

得到s=92。

6.答案:58

分析:i=0時,s=a[0][0]+a[0][l]=3;

i=l時,由于a[l][0]==0。因此跳出內(nèi)層循環(huán);

i=2時,得至Us=s+a[2][lJ=3+23=26;

i=3時,得至I」s=s+a[3][lj=26+32=58o

7、答案:6

分析:通過循環(huán)控制,讓數(shù)組中的每個元素與x進行比較,如果該元素

的值小于x,則將該元素的值賦給z,否則將x賦給z;y=0時,z=2;y=l

時,z=4;y=2時,z=6,最后結(jié)果是6。

8、答案:19

分析:該題通過循環(huán)控制用y來累計和,

y=y+a[l]+a[2J+a[3J=l+4+6+8=19。

9、答案:6

分析:指針p指向數(shù)組a的首元素,通過循環(huán)控制,將p所指元素中的

值賦給數(shù)組中的每個元素,由于是同步的,所以數(shù)組a中元素的值并沒

有變化。

10、答案:5768

分析:p的地址為5732,所以p+9的地址為5732+4X9=5768。

11、答案:2

4

分析:指針p指向數(shù)組中的第一個元素,第一條輸出語句,輸出p所指

的存儲單元中的內(nèi)容,即2;然后將指針p后移,指向下一個元素,由

于k指向p,所以輸出**k,也就是輸出,p所指的存儲單元中的內(nèi)容,

即4o

第八章字符串

1D

解析:在C語言中,字符串常量是由雙引號括起來的,由若干個字符所組

成的序列。所以A選項中的字符是由一對單引號括起來,C選項中只有一個

雙引號,皆錯。對于B選項,定義了一個字符變量,卻給它賦了字符串常量,

錯誤。若該改為charstr[]="\x43”,則也正確。

2A

解析:A選項中ss[l]可以看作是一個地址常量,其值不能改變,所以不可以

對其賦值。但是在定義二維數(shù)組的時候,對其進行初始化是允許的,如選項

Bo選項C和D定義的是字符指針變量,可以對其進行賦值。

3A

解析:Str是地址常量,P是指針變量,兩者類型不一致,選項B錯誤。Str

數(shù)組的長度是20,而P所指的字符串遇到、(T就結(jié)束,本題中其長度應(yīng)該為7,

選項C錯誤。同理,既然Str數(shù)組的長度與P所指字符串長度不同,所以存

放的內(nèi)容肯定不同,選項D錯誤。

4C

解析:對于數(shù)組P,只有三個元素,分別是所以sizeof(P)的輸出結(jié)

果應(yīng)該是3,對于數(shù)組q,存儲了四個元素,分別是以及、0,。所以

sizeof(q)的輸出結(jié)果是4。

5C

解析:本題的分析同第4題。

6C

解析:數(shù)組a中存儲了7個字符,分別是3,。,,\0:0,,匕丫0:\0,,當使用位60的)

統(tǒng)計計數(shù)的時候,會統(tǒng)計計算這7個字符,但是當用strlen(a)統(tǒng)計數(shù)組元

素個數(shù)的時候,遇到'\0’的時候就會結(jié)束,所以最終的輸出結(jié)果是72。

7B

解析:ps=s語句使ps指向數(shù)組s的首地址,即指向元素a,對于表達式*p+4,

由于*的優(yōu)先級高于+,所以進行間接訪問運算,得到a,再+4,根據(jù)ascii碼

的順序,最后的輸出結(jié)果應(yīng)該是e,答案為B。

8B

解析:選項A的getc()函數(shù)完成的是從文件中讀入一個字符,而不是題目

所要求的從鍵盤讀入一個字符,錯誤。選項C的getchar()函數(shù)每次讀入的

是一個字符變量,而不是字符串變量,錯誤。選項D的scanf()函數(shù),通過

格式控制符%s可以讀入字符串變量,但是遇到空格會作為輸入數(shù)據(jù)的分隔

符,不會被作為數(shù)據(jù)讀入。選項Bgets()函數(shù)可以完成題目要求的功能,

參見課本P1102例6。

9D

解析:選項A中的參數(shù)2的數(shù)據(jù)類型不匹配,應(yīng)改為&x(4],選項B中的y是

指針常量,不能進行++運算,錯誤。選項C中參數(shù)1對應(yīng)的數(shù)組長度小于

參數(shù)2的數(shù)組長度,錯誤。

10B

解析:strlen()函數(shù)統(tǒng)計字符串長度的時候,是在遇到'\0,的時候結(jié)束統(tǒng)計。

所以對于數(shù)組q來說,定義了數(shù)組的長度為10,并給前三個字符賦了初值,

則從第4個字符開始,系統(tǒng)將數(shù)組元素的值置為所以strlen(q)的結(jié)果是3。

而對于數(shù)組p來說,數(shù)組長度為3,但是何口寸遇到無法確定,所以strlen

(p)的值也無法確認。

11D

解析:函數(shù)f(char*p[],intn)完成的功能就是對字符串進行字典排序,根

據(jù)題目,最后將排在第2位的字符串是“abbd",0strlen(p[l])的輸出結(jié)

果應(yīng)該是4。

12A

解析:*運算符和++運算符的優(yōu)先級相同,且結(jié)合方向都是自右向左,所以

結(jié)果是15,答案為A。

13D

解析:根據(jù)函數(shù)代碼,若返回的是正數(shù),則表示a字符串的字典排序在b字

符串之后,若返回0,表示a和b中存儲的字符串一樣,若返回負數(shù),表示a

字符串的字典排序在b字符串之前。

14A

解析:point()函數(shù)傳遞的是指針變量的值,而不是指針變量本身的地址,

仍然是一個傳值而不是傳地址的過程,實參的值沒有改變,所以指針p仍然

指向字符串的首地址,輸出結(jié)果為a。

15D

解析:比較字符串大小的時候,應(yīng)該調(diào)用函數(shù)strcmp(),而不是直接進行比

較,選項A錯誤。對于選項B,只要si和s2不相等,無論si所指串是大于

或是小于s2所指串,其結(jié)果非0,都會執(zhí)行語句S,與題意不符,錯誤。選

項C的函數(shù)實參順序錯誤。

16B

解析:對于二維數(shù)組,第二行的首元素是接著第一行的最后一個元素的。所

以P+10是指向字符串“Beijing”的首地址,所以正確答案是B。

17D

解析:對于格式控制符%s,在輸出的時候遇到,(T才結(jié)束輸出。所以答案為D

18B

解析:gets()函數(shù)需要的參數(shù)是指針類型的。所以ACD都滿足條件,答案

B中的a[0]是字符,不是指針類型,錯誤。

19A

解析:P[4]指向的應(yīng)該是第5個字符串的首地址,即字符串“cd",所以strlen

(Pl4])的結(jié)果是2。

20C

解析:數(shù)組名是指針常量,不能對其進行賦值,所以選項C錯誤,需要注意

一點:在定義字符數(shù)組的時候可以初始化,如選項A。

21C

解析:swap函數(shù)實現(xiàn)了交換字符串首地址中對應(yīng)的元素,所以輸出結(jié)果為

Ibc,a23o

22B

解析:fun函數(shù)統(tǒng)計首字符是,F(xiàn)的字符串的個數(shù),所以符合條件的有“Tue”

和“Thu”,輸出結(jié)果為2.

23A

解析:funl函數(shù)中的(*編++將指針q所指向的字符進行一次自加運算,所以輸

出結(jié)果為A.

24C

解析:注意字符串“3697”和存儲了一個'(T,所以j+=2,在字符9之后指向的

數(shù)據(jù)是2,8,4,都不滿足條件(即]葉'0')%2,所以結(jié)果為C。

25C

解析:二維數(shù)組str的第二維數(shù)是20,所以p+20保存的是字符串"Beijing”的首

地址.strlen(p+20)輸出的就是字符串“Beijing”的長度.結(jié)果為7。

26A

解析:while中的語句是*p2=*pl,注意,這是賦值語句,不是比較語句,正確

答案為A

27C

解析:p=s[l]語句使得指針p指向字符串“two”的首地址,所以*(p+1)的

輸出結(jié)果是“two”的第二個字符'w',正確答案為C。

28B

解析:puts。函數(shù)實現(xiàn)的功能是輸出字符串,for循環(huán)中,ps的值首先保存

最后一個字符地址,逐一遞減,輸出的結(jié)果為B。

29D

解析:strlen(p)遇到'\0'結(jié)束執(zhí)行。所以只統(tǒng)計了指針p指向的前5個字

符“abcde”,結(jié)果為5o

30A

解析:字符串s中的存儲字符有下面9個:

所以strlen(s)的結(jié)果為9。

31B

解析:ch[l]可以看作是二維數(shù)組的行指針,指向第二個字符串的首地址,注

意輸出中的轉(zhuǎn)義字符\”,輸出的結(jié)果是顯示一個

32A

解析:字符串常量"good!”賦給字符串變量時,再結(jié)尾自動加上字符、(T,

這樣就一共需要6個存儲單元,但是選項A中的數(shù)組str的長度只有5,所

以錯誤。

33D

解析:程序執(zhí)行while循環(huán),最后一次執(zhí)行中,pb指向bl的首地址,所以

將bl全部拷貝給b2,所以程序的輸出結(jié)果為7。

二、填空:

19

解析:IBM為3個長度,3為1個長度,012為3個長度,\1為1個長度,

\\為1個長度,故長度為9。

2*2*4*6*8*

解析:while循環(huán)實現(xiàn)的是將字符串的奇數(shù)位賦值為*,并輸出,偶數(shù)位原樣

輸出。

3*t++

解析:注意變量t需要自加。

4efgh

解析:strlen(s)/2的值為4,所以指針變量p的起始地址是從字符'e'的

地址開始,格式控制符%s輸出遇到'\0'結(jié)束。所以輸出efgh。

5cdeab

解析:move函數(shù)實現(xiàn)的功能是將字符串循環(huán)左移。

6s[i]>='O'&&s[i]<=,9,

解析:判斷字符串中單個字符的ASCII碼是否在“0”-“9”之間,就可以判

斷字符是否是數(shù)字。

7p+n

解析:得到字符變量c的值在字符數(shù)組變量str中出現(xiàn)的位置,再讓指針p

前移這個位子的數(shù)字。

8s-1*s++

解析:要注意s=s-l是讓指針變量后移一位,移到'\0'前面。

9*t

解析:注意,由于后面的循環(huán)體語句有t++,所以這里是九而不是九十+。

10bcdefgha

解析:ss函數(shù)實現(xiàn)的是實現(xiàn)字符串循環(huán)左移的功能。

11gae

解析:循環(huán)的作用是輸出字符串a(chǎn)和字符串b下標相同時字符也相同的字

符。

12、abcfg

解析:注意循環(huán)第3此取到的是‘\0'結(jié)束符。

13、strlen(str)+str-lt==0huiwen(str)

解析:用一個指針指向輸入的字符串的頭,一個指針指向輸入的字符串的尾。

然后對比指針的值,然后使頭指針自加,尾指針自減,再對比值。

教程課后習(xí)題答案

第五章函數(shù)

第一節(jié)函數(shù)的定義、庫函數(shù)

習(xí)題

1.在C語言中,函數(shù)返回值的類型最終取決于A

A)函數(shù)定義時在函數(shù)首部所說明的函數(shù)類型

B)return語句中表達式值的類型

C)調(diào)用函數(shù)時主函數(shù)所傳遞的實參類型

D)函數(shù)定義時形參的類型

2.有以下函數(shù)

intfun(char*s)

(

char*t=s;

while(*t++);

retum(t-s);

)

該函數(shù)的功能是B

A)比較兩個字符的大小B)計算s所指字符串占用內(nèi)存字節(jié)的個數(shù)

C)計算s所指字符串的長度D)將s所指字符串復(fù)制到字符串t中

3.程序中對fun函數(shù)有如下說明C

void*fun();

此說明的含義是

A)fun函數(shù)無返回值

B)fun函數(shù)的返回值可以是任意的數(shù)據(jù)類型

C)fun函數(shù)的返回值是無值型的指針類型

D)指針fun指向一個函數(shù),該函數(shù)無返回值

第二節(jié)函數(shù)的調(diào)用與函數(shù)說明

習(xí)題

1.有以下程序

#include<stdio.h>

intf(intx)

(

inty;

if(x==0llx==l)return(3);

y=x*x-f(x-2);

returny;

)

main()

(

intz;

z=f(3);

printf(n%d\nn,z);

)

程序的運行結(jié)果是C

A)0B)9C)6D)8

2.以下敘述中錯誤的是C

A)改變函數(shù)形參的值,不會改變對應(yīng)實參的值

B)函數(shù)可以返回地址值

C)可以在函數(shù)內(nèi)部定義函數(shù)

D)調(diào)用sin函數(shù)需要包含頭文件math.h

3.若程序中定義了以下函數(shù)

doublemyadd(doublea,doubleb)

(

return(a+b);

)

并將其放在調(diào)用語句之后,則在調(diào)用之前應(yīng)進行函數(shù)聲明,以下選項中錯誤的是A

A)doublemyadd(doublea,b);B)doublemyadd(double,double);

C)doublemyadd(doubleb,doublea);D)doublemyadd(doublex,doubley);

第三節(jié)函數(shù)的數(shù)據(jù)傳遞

習(xí)題

1.有以下程序

voidf(intv,intw)

(

intt;

t=v;v=w;w=t;

)

main()

(

intx=l,y=3,z=2;

if(x>y)

f(x,y);

elseif(y>z)

f(y,z);

else

f(x,z);

printf("%d,%d,%d\n",x,y,z);

)

執(zhí)行后輸出結(jié)果是C

A)1,2,3B)3,1,2C)1,3,2D)2,3,1

2.以下程序的輸出結(jié)果是?13

#include<stdio.h>

voidfun(intx)

(

if(x/2>0)

ftin(x/2);

printf("%d*',x);

)

main()

(

fun(3);

printfC^n");

第六章指針

第一節(jié)變量的地址和指針

習(xí)題

1.以下敘述中錯誤的是C

A)改變函數(shù)形參的值,不會改變對應(yīng)實參的值

B)函數(shù)可以返回地址值

C)可以給指針變量賦一個整數(shù)作為地址值

D)當在程序的開頭包含文件stdio.h時,可以給指針變量賦NULL

2.以下定義語句中正確的是D

A)inta=b=0;B)char,A'=65+l,b='b';

C)floata=l,*b=&a,*c=&b;D)doublea=0.0,b=l.1;

3.設(shè)已有定義:floatx;則以下對指針變量p進行定義且賦初值的語句中正確的是D

A)float*p=1024;B)int*p=(floatx);

C)floatp=&x;D)float*P=&x;

第二節(jié)指針變量賦值及運算

習(xí)題

1.設(shè)有定義:intnH),*p=&n,**q=&p;,則以下選項中,正確的賦值語句是D

A)p=l;B)*q=2;C)q=p;D)*p

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論