《教程》課后習(xí)題詳解_第1頁(yè)
《教程》課后習(xí)題詳解_第2頁(yè)
《教程》課后習(xí)題詳解_第3頁(yè)
《教程》課后習(xí)題詳解_第4頁(yè)
《教程》課后習(xí)題詳解_第5頁(yè)
已閱讀5頁(yè),還剩35頁(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)介

新視野教育二級(jí)C語(yǔ)言教程課后習(xí)題詳解

(以修訂版教材為準(zhǔn))

第一章c語(yǔ)言的基礎(chǔ)知識(shí)

第二節(jié)熟悉VisualC++

LC語(yǔ)言源程序名的后綴是B

A).exeB).cC).objD).cp

*C語(yǔ)言源程序的拓展名為.C

2.下列敘述中錯(cuò)誤的是D

A)計(jì)算機(jī)不能直接執(zhí)行用C語(yǔ)言編寫的源程序

B)C程序經(jīng)C編譯后,生成后綴為.obj的文件是一個(gè)二進(jìn)制文件

C)后綴為.obj的文件,經(jīng)連接程序生成后綴為.exe的文件是一個(gè)二進(jìn)制文件

D)后綴為.obj和.exe的二進(jìn)制文件都可以直接運(yùn)行

*后綴為.obj的目標(biāo)文件不能直接運(yùn)行

3.用C語(yǔ)言編寫的代碼程序B

A)可立即執(zhí)行B)是一個(gè)源程序

C)經(jīng)過(guò)編譯即可執(zhí)行D)經(jīng)過(guò)編譯解釋才能執(zhí)行

第三節(jié)標(biāo)識(shí)符

1.按照C語(yǔ)言規(guī)定的用戶標(biāo)識(shí)符命名規(guī)則,不能出現(xiàn)在標(biāo)識(shí)符中的是B

A)大寫字母B)連接符C)數(shù)字字符D)下劃線

*標(biāo)識(shí)符的命名中不能出現(xiàn)連接符

2.以下選項(xiàng)中不合法的標(biāo)識(shí)符是C

A)printB)FORC)&aD)_00

*標(biāo)識(shí)符中不能出現(xiàn)“&”

3.以下敘述中錯(cuò)誤的是A

A)用戶所定義的標(biāo)識(shí)符允許使用關(guān)鍵字

B)用戶所定義的標(biāo)識(shí)符應(yīng)盡量做到“見(jiàn)名知意”

C)用戶所定義的標(biāo)識(shí)符必須以字母或下劃線開(kāi)頭

D)用戶定義的標(biāo)識(shí)符中,大、小寫字母代表不同標(biāo)識(shí)

*用戶自定義標(biāo)識(shí)符不允許使用關(guān)鍵字

4.可在C程序中用作用戶標(biāo)識(shí)符的一組標(biāo)識(shí)符是A

A)andB)DateC)HiD)case

_2007y-m-dDr.TomBigl

*B答案出現(xiàn)了連接符、C答案出現(xiàn)小數(shù)點(diǎn)、D答案出現(xiàn)關(guān)鍵字

5.以下不合法的用戶標(biāo)識(shí)符是C

A)j2_KEYB)DoubleC)4dD)_8_

*開(kāi)頭第一個(gè)字符不能為數(shù)字

6.以下不能定義為用戶標(biāo)識(shí)符的是D

A)MainB)_0C)_intD)sizeof

*sizeof為關(guān)鍵字

7.下列選項(xiàng)中,不能用作標(biāo)識(shí)符的是D

A)」234_B)_1_2C)int_2_D)2_int_

*開(kāi)頭第一個(gè)字符不能為數(shù)字

8.以下4組用戶定義標(biāo)識(shí)符中,全部合法的一組是A

A)_mainB)IfC)txtD)int

enclude-maxREALk_2

sinturbo3C0M_001

*B答案出現(xiàn)連接符、C答案出現(xiàn)數(shù)字開(kāi)頭、D答案出現(xiàn)關(guān)鍵字

第五節(jié)整數(shù)和實(shí)數(shù)

1.以下選項(xiàng)中正確的整型常量是C

A)10110BB)0386C)OXffaD)x2a2

2.以下關(guān)于long、int和short類型數(shù)據(jù)占用內(nèi)存大小的敘述中正確的是D

A)均占4個(gè)字節(jié)B)根據(jù)數(shù)據(jù)的大小來(lái)決定所占內(nèi)存的字節(jié)數(shù)

C)由用戶自己定義D)由C語(yǔ)言編譯系統(tǒng)決定

3.以下選項(xiàng)中不屬于C語(yǔ)言的類型的是D

A)signedshortintB)unsignedIon】jint

C)unsignedintD)longshort

4.以下選項(xiàng)中合法的實(shí)型常數(shù)是C

A)5E2.0B)E-3C).2E0D)1.3E

5.以下選項(xiàng)中,不能作為合法常量的是B

A)1.234e04B)1.234e0.4C)1.234e+4D)1.234e0

6.以下選項(xiàng)中可作為C語(yǔ)言合法常量的是A

A)-80.B)-080C)~8el.OD)—80.0e

7.以下符合C語(yǔ)言語(yǔ)法的實(shí)型常量是C

A)1.2E0.5B)3.14.159EC).5E-3D)E15

8.以下不合法的數(shù)值常量是C

A)OilB)leiC)8.0E0.5D)Oxabcd

9.以下選項(xiàng)中,合法的一組C語(yǔ)言數(shù)值常量是B

A)028B)12.C).177D)0x8A

5e-3OXa234c1.510,000

—Oxf4.5e0Oabc3.e5

10.下列定義變量的語(yǔ)句錯(cuò)誤的是D

A)int_int;B)doubleint_;C)longFor;D)floatUS$;

第六節(jié)算術(shù)表達(dá)式與賦值表達(dá)式

習(xí)題

1.表達(dá)式3.6—5/2+1.2+5%2的值是D

A)4.3B)4.8C)3.3D)3.8

*3.6-2+1.2+1=3.8

2.設(shè)有定義:floatx=123.4567;,則執(zhí)行以下語(yǔ)句后輸出的結(jié)果是o123.460000

printf("%f\n",(int)(x*100+0.5)/100.0);

*(int)12346.17/100.0=12346/100.0=123.46格式控制為“%f”

3.設(shè)有定義:floata=2,b=4,h=3;,以下C語(yǔ)言表達(dá)式與代數(shù)式Xh計(jì)算結(jié)果不相符的是B

A)(a+b)*h/2B)(l/2)*(a+b)*h

C)(a+b)*h*l/2D)h/2*(a+b)

*因?yàn)?/2=0,故B答案結(jié)果不相符

第七節(jié)自加自減運(yùn)算符、逗號(hào)表達(dá)式

習(xí)題

1.設(shè)變量已正確定義為整型,貝悚達(dá)式n=i=2,++i,i++的值為o3

*表達(dá)式3的值為整個(gè)表達(dá)式的值

2.設(shè)有定義:intk=0;,以下選項(xiàng)的4個(gè)表達(dá)式中與其他3個(gè)表達(dá)式的值不相同的是A

A)k++B)k+=lC)++kD)k+1

*執(zhí)行k++,表達(dá)式的值為k自加之前的值0

3.有以下程序B

main()

(

charal='M',a2='m';

printf("%c\n",(al,a2));

)

以下敘述中正確的是

A)程序輸出大寫字母MB)程序輸出小寫字母m

C)格式說(shuō)明符不足,編譯出錯(cuò)D)程序運(yùn)行時(shí)產(chǎn)生出錯(cuò)信息

*逗號(hào)表達(dá)式的值為最后一個(gè)表達(dá)式的值

4.有以下程序:B

main()

{inta=O,b=O;

a=10;/*給a賦值

b=20;給b賦值*/

printf("a+b=%d\n",a+b);/*輸出計(jì)算結(jié)果*/

)

程序運(yùn)行后的結(jié)果是

A)a+b=30B)a+b=10C)30D)程序出錯(cuò)

*本題要注意的是注釋部分應(yīng)該包括:/*給a賦值b=20;給b賦值*/,也就是說(shuō)“b=20

也被系統(tǒng)作為注釋處理

第八節(jié)字符

1.以下選項(xiàng)中不屬于字符常量的是()。B

A),CB)"C"C)'O'D)、072'

2.已知字母A的ASCH代碼值為65,若變量kk為char型,以下不能正確判斷出kk中的值為大寫字母

的表達(dá)式是()。B

A)kk>='A'&&kk<='Z'B)!(kk>='A'IIkk<='Z')

C)(kk+32)>='a'&&(kk+32)<='z'D)kk>=65&&kk<91

3.已知字符A的ASCH代碼值是65,字符變量cl的值是A,c2的值是'D。執(zhí)行語(yǔ)句printf("%d,%d”,cl,c2-2);

后,輸出結(jié)果是()。C

A)A,BB)A,68C)65,66D)65,68

4、以下不合法的字符型常量是B

A)M13'B)'018'C)'65'D)

5.已知大寫字母A的ASCII碼是65,小寫字母a的ASCH碼是97,以下不能將變量c中大寫字母轉(zhuǎn)換

為對(duì)應(yīng)小寫字母的語(yǔ)句是()。D

A)c=c-Z+'z'B)c=c+32

C)c=c-'A'+'a'D)c='A'+c-'a'

第九節(jié)位運(yùn)算

1.變量a中的數(shù)據(jù)用二進(jìn)制表示的形式是01011101,變量b中的數(shù)據(jù)用二進(jìn)制表示的形式是11110000。

若要求將a的高4位取反,低4位不變,所要執(zhí)行的運(yùn)算是A

A)aAbB)albC)a&bD)a?4

2.有以下程序

#include<stdio.h>

main()

(

inta=l,b=2,c=3,x;

x=(aAb)&c;printf(u%d\nH,x);

程序的運(yùn)行結(jié)果是D

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

3.有以下程序

main()

(

unsignedchara=2,b=4,c=5,d;

d=alb;d&=c;printf(,'%d\n',,d);

)

程序運(yùn)行后的輸出結(jié)果是B

A)3B)4C)5D)6

4.若變量已正確定義,則以下語(yǔ)句的輸出結(jié)果是()oB

s=32;s八=32;printf(n%d",s);

A)-1B)0C)1D)32

*兩個(gè)相同的數(shù)進(jìn)行按位異或,結(jié)果為0

5.設(shè)有以下語(yǔ)句

inta=l,b=2,c;

c=aA(b?2);

執(zhí)行后,C的值為D

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

第二章數(shù)據(jù)輸出與輸入

第二節(jié)數(shù)據(jù)輸出

1.有以下程序段

charch;

intk;

ch='a,;

k=12;

printf(n%c,%d,n,ch,ch,k);

printf("k=%d\nn,k);

已知字符a的ASCH十進(jìn)制代碼為97,則執(zhí)行上述程序段后輸出結(jié)果是D

A)因變量類型與格式描述符的類型不匹配輸出無(wú)定值

B)輸出項(xiàng)與格式描述符個(gè)數(shù)不符,輸出為零值或不定值

C)a,97,12k=12

D)a,97,k=12

2、有以下程序段:

main()

{intx,y,z;

x=y=l;

z=x++,y++,++y;

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

程序運(yùn)行后的輸出結(jié)果是C

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

*分析過(guò)程見(jiàn)教材25頁(yè)例3

3.有以卜程序,其中%u表示按無(wú)符號(hào)整數(shù)輸出

main()

(

unsignedshortx=0xFFFF;/*x的初值為十六進(jìn)制數(shù)*/

printf("%u\n",x);

)

程序運(yùn)行后的輸出結(jié)果是B

A)-1B)65535C)32767D)0XFFFF

4.以下敘述中不正確的是A

A)調(diào)用printf函數(shù)時(shí),必須要有輸出項(xiàng)

B)使用putchar函數(shù)時(shí),必須在之前包含頭文件stdio.h

C)在C語(yǔ)言中,整數(shù)可以以十進(jìn)制、八進(jìn)制或十六進(jìn)制的形式輸出

D)使用putchar函數(shù)可以不要輸出項(xiàng)

5.設(shè)有以下程序

main()

(

intc=35;printf("%d",c&c);

)

程序運(yùn)行后的輸出結(jié)果是C

A)0B)70C)35D)53

*兩個(gè)相同的數(shù)進(jìn)行按位與時(shí),結(jié)果等于本身

6.以下程序運(yùn)行后的輸出結(jié)果是.88

main()

(

intx=0210;printf("%X\n",x);

)

*將八進(jìn)制數(shù)轉(zhuǎn)為十六進(jìn)制數(shù)輸出

第三節(jié)數(shù)據(jù)輸入

1.以下程序運(yùn)行時(shí)若從鍵盤輸入:102030〈回車輸出結(jié)果是—oA

#include<stdio.h>

main()

(

inti=O,j=O,k=O;

scanf(n%d%*d%dn,&i,&j,&k);

printf(n%d,%d,%d",i,j,k);

A)10,30,0B)10,20,30C)0,0,0D)程序出錯(cuò)

*注意%*d為跳過(guò)輸入的數(shù)據(jù)

2.已知字符A的ASCII代碼值為65,以下程序運(yùn)行時(shí)若從鍵盤輸入:B33〈回車>。輸出結(jié)果是B

#include"stdio.h"

main()

(

chara,b;

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

a=a-'A'+'O';

b=b*2;

printf("%c%c”,a,b);

)

A)程序段有語(yǔ)法錯(cuò)B)1BC)165D)1b

*a=a-'A'+'O';即a=66-65+48b=b*2;即b=33*2得出結(jié)果后找到對(duì)應(yīng)的字符輸出

3.有以下程序

main()

(

intm=0256,n=256;

printf("%o%o\n",m,n);

)

程序運(yùn)行后的輸出結(jié)果是()o

A)02560400B)0256256C)256400D)400400

*m為八進(jìn)制數(shù)n為十進(jìn)制數(shù)%0指輸出八進(jìn)制數(shù)輸出足不帶前導(dǎo)

4.有以下程序

main()

(

inta=666,b=888;

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

)

程序運(yùn)行后的輸出結(jié)果是()oB

A)錯(cuò)誤信息B)666C)888D)666,888

*%d只與輸出列表中的變量a對(duì)應(yīng),注意區(qū)別printf("%d\n”,(a,b));

5.設(shè)有以下程序

main()

(

intx=102,y=012;

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

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

A)10,01B)02,12C)102,10D)02,10

*%d為輸出十進(jìn)制整數(shù),所以要將八進(jìn)制轉(zhuǎn)為十進(jìn)制

6.執(zhí)行以下程序時(shí)輸入1234567vCR>,則輸出結(jié)果是o1234

#include<stdio.h>

main()

(

inta=l,b;

scanf(u%2d%2d",&a,&b);printf("%d%d\nn,a,b);

第三章選擇結(jié)構(gòu)

第一節(jié)關(guān)系運(yùn)算與邏輯運(yùn)算

1.已知字母A的ASCH代碼值為65,若變量kk為char型,以下不能正確判斷出kk中的值為大寫字母

的表達(dá)式是B

A)kk>='A'&&kk<='Z'B)!(kk>='A'IIkk<='Z')

C)(kk+32)>='a'&&(kk+32)v='z'D)isalpha(kk)&&(kk<91)

*isalpha(kk)檢查kk是否為字母,是,返回1,否,返回0

2.當(dāng)變量c的值不為2、4、6時(shí),值也為“真”的表達(dá)式是B

A)(c=2)II(c==4)II(c==6)B)(c>=2&&cv=6)II(c!=3)II(c!=5)

C)(c>=2&&c<=6)&&!(c%2)D)(c>=2&&c<=6)&&(c%2!=1)

3.以下選項(xiàng)中,當(dāng)x為大于1的奇數(shù)時(shí),值為0的表達(dá)式D

A)x%2==lB)x/2C)x%2!=0D)x%2==0

4.以下關(guān)于邏輯運(yùn)算符兩側(cè)運(yùn)算對(duì)象的敘述中正確的是(D

A)只能是整數(shù)0和1B)只能是整數(shù)0或非0整數(shù)

C)可以是結(jié)構(gòu)體類型的數(shù)據(jù)D)可以是任意合法的表達(dá)式

5.設(shè)有定義:intk=l,m=2;floatf=7;,則以下選項(xiàng)中錯(cuò)誤的表達(dá)式是C

A)k=k>=kB)-k++C)k%int(f)D)k>=f>=m

*強(qiáng)制類型轉(zhuǎn)換的格式必須為:(類型名)表達(dá)式

6.設(shè)有定義:inta=2,b=3,c=4;,則以下選項(xiàng)中值為0的表達(dá)式是A

A)(!a==l)&&(!b==0)B)(!a==l)ll(!b==O)

C)a&&bD)all(b+b)&&(c-a)

第二節(jié)if語(yǔ)句

1.若變量已正確定義,有以下程序段

inta=3,b=5,c=7;

if(a>b)a=b;c=a;

if(c!=a)c=b;

printf(,,%d,%d,%d\n,,,a,b,c);

其輸出結(jié)果是B

A)程序段有語(yǔ)法錯(cuò)B)3,5,3C)3,5,5D)3,5,7

*if表達(dá)式后的語(yǔ)句只能是一個(gè)語(yǔ)句或者一個(gè)復(fù)合語(yǔ)句

2.當(dāng)把以下4個(gè)表達(dá)式用作if語(yǔ)句的控制表達(dá)式時(shí),有一個(gè)選項(xiàng)與其他3個(gè)選項(xiàng)含義不同,這個(gè)選項(xiàng)

是D

A)k%2B)k%2==lC)(k%2)!=0D)!k%2==l

*前三個(gè)是對(duì)k%2后的結(jié)果進(jìn)行判斷,而D答案是對(duì)k進(jìn)行邏輯非后再除二取余

3.下列條件語(yǔ)句中,功能與其他語(yǔ)句不同的是D

A)if(a)printf("%d\n",x);elseprintf("%d\n",y);

B)if(a==O)printf("%d\n",y);elseprintf("%d\n",x);

C)if(a!=O)printf("%d\n",x);elseprintf("%d\n",y);

D)if(a==O)printf("%d\n",x);elseprintf("%d\n",y);

*前三個(gè)都是當(dāng)a不等于0時(shí)輸出x,a等于0時(shí)輸出y,D答案相反

4.設(shè)變量x和y均已正確定義并賦值,以下if語(yǔ)句中,在編譯時(shí)將產(chǎn)生錯(cuò)誤信息的是C

A)if(x++);B)if(x>y&y!=O);

C)if(x>y)x--D)if(y<0){;}

elsey++:elsex++;

*無(wú)語(yǔ)句結(jié)束標(biāo)志“;”

第三節(jié)嵌套的if語(yǔ)句

1.在嵌套使用if語(yǔ)句時(shí),C語(yǔ)言規(guī)定else總是C

A)和之前與其具有相同縮進(jìn)位置的if配對(duì)B)和之前與其最近的if配對(duì)

C)和之前與其最近的且不帶else的if配對(duì)D)和之前的第一個(gè)if配對(duì)

2.有以下程序

main()

{inta=5,b=4,c=3,d=2;

if(a>b>c)

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

elseif((c-l>=d)=l)

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

else

printf("%d\n",d+2)

)

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

A)2B)3C)4D)編譯時(shí)有錯(cuò),無(wú)結(jié)果

*無(wú)語(yǔ)句結(jié)束標(biāo)志";”

第四節(jié)條件表達(dá)式、switch語(yǔ)句、goto語(yǔ)句

1.以下程序段中與語(yǔ)句k=a>b?(b>c?l:0):0;功能等價(jià)的是A

A)if((a>b)&&(b>c))k=l;B)if((a>b)ll(b>c))k

elsek=0;elsek=0;

C)if(a<=b)k=0;D)if(a>b)k=l;

elseif(b<=c)k=l;elseif(b>c)k=l;

elsek=0;

2.1列敘述中正確的是D

A)break語(yǔ)句只能用于switch

B)在switch語(yǔ)句中必須使用default

C)break語(yǔ)句必須與switch語(yǔ)句中的case配對(duì)使用

D)在switch語(yǔ)句中,不一定使用break語(yǔ)句

*break還能用于循環(huán)體中

3.有以下程序段

intk=O,a=1,b=2,c=3;

k=a<b?b:a;k=k>c?c:k;

執(zhí)行該程序段后,k的值是B

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

4.有以下程序

#include<stdio.h>

main()

(

intx=l,y=O,a=O,b=O;

switch(x)

(

case1:

switch(y)

{

case0:a++;break;

case1:b++;break;

)

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

case3:a++;b++;

)

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

)

程序的運(yùn)行結(jié)果是D

A)a=1,b=0B)a=2,b=2C)a=l,b=lD)a=2,b=l

*考點(diǎn):switch后有無(wú)break

5.以下程序的輸出結(jié)果是C

main()

{inta=5,b=4,c=6,d;

printf(H%d\nn,d=a>b?(a>c?a:c):(b));

A)5B)4C)6D)不確定

第四章循環(huán)結(jié)構(gòu)

第一節(jié)while語(yǔ)句

習(xí)題

1.有以下程序

main()

{inty=10;

while(y-);printf(ny=%d\n",y);

)

程序執(zhí)行后的輸出結(jié)果是B

A)y=0B)y=-lC)y=lD)while構(gòu)成無(wú)限循環(huán)

*此題考點(diǎn)為循環(huán)體語(yǔ)句為空語(yǔ)句,當(dāng)y—表達(dá)式的值為0時(shí)結(jié)束循環(huán),故y的值為?1

2.有以下程序

main()

(

intk=5;

while(-k)printf(”%d”,k-=3);

printfCAn1');

)

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

A)1B)2C)4D)死循環(huán)

"①k=5時(shí),執(zhí)行一k后,k=4,表達(dá)式的值為4,為真,執(zhí)行輸出語(yǔ)句k-=3,k=l,輸出1

②再次執(zhí)行一k表達(dá)式,k=0,表達(dá)式的值為0,結(jié)束循環(huán)

第二節(jié)do-while語(yǔ)句

1.若變量已正確定義,有以下程序段

i=0;

do

printf(“%d,”,i);

while(i++);

printf(n%d\n",i)

其輸出結(jié)果是B

A)0,0B)0,1C)I,1D)程序進(jìn)入無(wú)限循環(huán)

*執(zhí)行第一個(gè)輸出語(yǔ)句時(shí),輸出i的值為0;執(zhí)行while語(yǔ)句,循環(huán)體語(yǔ)句為空,i++表達(dá)式的值為0是i

的值為1,執(zhí)行最后?個(gè)輸出語(yǔ)句時(shí)輸出i的值為1

2.有以下程序段

intn,t=l,s=O;

scanf("%d",&n);

do{s=s+t;t=t-2;}while(t!=n);

為使此程序段不陷入死循環(huán),從鍵盤輸入的數(shù)據(jù)應(yīng)該是D

A)任意正奇數(shù)B)任意負(fù)偶數(shù)C)任意正偶數(shù)D)任意負(fù)奇數(shù)

3.以下程序的功能是:將輸入的正整數(shù)按逆序輸出。例如,若輸入135,則輸出531,請(qǐng)?zhí)羁?。n/=10

#include<stdio.h>

main()

(

intn,s;

printf(nEnteranumber:'1);scanf(n%dH,&n);

printf(nOutput:");

do

{

s=n%10;printf("%d”,s);

}while(n!=0);

printf(M\nu);

)

*答案:n=n/10

分析:假如輸入的值為135,那么n=135

(1)n=135,do:s=n%10,那么s的值為5,輸出s的值為5。接著我們要輸出3才能將n逆序輸

出。在學(xué)習(xí)%和/的時(shí)候總結(jié)過(guò):135/10=13,135%10=5,因此我們?cè)囍鴮⒑竺娴目仗钌?/p>

n=n/10,那么n的值為13,判斷(n!=0)為真。

⑵n=13,do:s=n%10,那么s的值為3,輸出s的值為3。執(zhí)行n=n/10后n的值為1,判斷(n!=0)

為真。

⑶n=l,do:s=n%10,那么s的值為1,輸出s的值為1。執(zhí)行n=n/10后n的值為0,判斷(n!=0)

為假,結(jié)束循環(huán)。

(4)已經(jīng)得到逆序的結(jié)構(gòu)為:531,說(shuō)明我們所要填的空就是n=n/10。

4.有以下程序

main()

(

intk=5,n=0;

do

(

switch(k)

{case1:case3:n+=l;break;

default:n=0;k—;

case2:case4:n+=2;k—;break;

)

printf(t4%d,,,n);

}while(k>0&&n<5);

)

程序運(yùn)行后的輸出結(jié)果是

A)235B)0235C)02356D)2345

*本題注意的是在循環(huán)第次進(jìn)入switch語(yǔ)句的時(shí)候是執(zhí)行的default后面的語(yǔ)句塊,由

于沒(méi)有break,所以還會(huì)執(zhí)行case2:case4:后面的語(yǔ)句。

第三節(jié)for語(yǔ)句

1.有以下程序

#include<stdio.h>

main()

(

intx=8;

for(;x>0;X-)

(

if(x%3)

(

printf(M%d,n,x—);

continue;

)

printf(n%d,n,-x);

程序的運(yùn)行結(jié)果是D

A)7,4,2B)8,7,5,2C)9,7,6,4D)8,5,4,2

*考點(diǎn):for循環(huán)、if語(yǔ)句、continue

分析:

(1)x=8,x>0為真,判斷:x%3的值2為真,執(zhí)行輸出語(yǔ)句,輸出X—的值為8,x為7。遇

到后面的continue語(yǔ)句結(jié)束本論循環(huán),接著執(zhí)行for結(jié)構(gòu)中的表達(dá)式3,x—后x的值為

6o

(2)x=6,x>0為真,判斷:x%3的值0為假,執(zhí)行if后面的語(yǔ)句,輸出一x的值為5,x為5。

接著執(zhí)行for結(jié)構(gòu)中的表達(dá)式3,x-后x的值為4。

(3)x=4,x>0為真,判斷:x%3的值1為真,執(zhí)行輸出語(yǔ)句,輸出x—的值為4,x為3。遇

到后面的continue語(yǔ)句結(jié)束本論循環(huán),接著執(zhí)行for結(jié)構(gòu)中的表達(dá)式3,x—后x的值為

2o

(4)x=2,x>0為真,判斷:x%3的值2為真,執(zhí)行輸出語(yǔ)句,輸出x—的值為2,x為1。遇

到后面的continue語(yǔ)句結(jié)束本論循環(huán),接著執(zhí)行for結(jié)構(gòu)中的表達(dá)式3,x—后x的值為

Oo

(5)x=0,x>0為假,結(jié)束循環(huán)。

(6)最終輸出的結(jié)果為:8,5,4,2

2.以下不構(gòu)成無(wú)限循環(huán)的語(yǔ)句或者語(yǔ)句組是A

A)n=0;B)n=0;

do{++n;}while(n<=0);while(l){n++;}

C)n=10;D)for(n=0,i=l;;i++)n+=i;

while(n);{n—;}

*構(gòu)成死循環(huán)的情況:1、表達(dá)式的值永遠(yuǎn)為真;2、缺省表達(dá)式2.

第四節(jié)循環(huán)結(jié)構(gòu)的嵌套

1.有以下程序

main()

(

inti,n=O;

for(i=2;i<5;i++)

(

do

(

if(i%3)continue;

n++;

}while(!i);

n++;

)

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

)

程序執(zhí)行后的輸出結(jié)果是D

A)n=5B)n=2C)n=3D)n=4

*執(zhí)行過(guò)程:

(1)、n=0,i=2時(shí),i<5為真,i%3為真,執(zhí)行continue,結(jié)束本次循環(huán),!i為假,執(zhí)行最后n++,n=l,執(zhí)

行i++

(2)、

2.有以下程序

main()

(

intij,x=0;

for(i=0;i<2;i++)

(

x++;

for(j=0;j<=3;j++)

(

if(j%2)continue;

x++;

)

X++;

)

printf("x=%d\nn,x);

)

程序執(zhí)行后的輸出結(jié)果是B

A)x=4B)x=8C)x=6D)x=12

*程序執(zhí)行過(guò)程:(1)、x=0,i=0時(shí),iv2為真,執(zhí)行x++,x=l

j=O,j<=3為真,j%2為假,執(zhí)行x++,x=2,再執(zhí)行j++

j=l,jv=3為真,j%2為真,執(zhí)行continue,再執(zhí)行j++

j=2,j<=3為真,j%2為假,執(zhí)行x++,x=3,再執(zhí)行j++

j=3,jv=3為真,j%2為真,執(zhí)行continue,再執(zhí)行j++

j=4,j<=3為假,結(jié)束內(nèi)層循環(huán),執(zhí)行最后一個(gè)x++,x=4,再執(zhí)行i++

(2)、x=4,i=l時(shí),iv2為真,執(zhí)行x++,x=5

j=O,j<=3為真,j%2為假,執(zhí)行x++,x=6,再執(zhí)行j++

j=l,j<=3為真,j%2為真,執(zhí)行continue,再執(zhí)行j++

j=2,jv=3為真,j%2為假,執(zhí)行x++,x=7,再執(zhí)行j++

j=3,j<=3為真,j%2為真,執(zhí)行conlinue,再執(zhí)行j++

j=4,jv=3為假,結(jié)束內(nèi)層循環(huán),執(zhí)行最后一個(gè)x++,x=8,再執(zhí)行i++

(3)、x=8,i=2時(shí),iv2為假,結(jié)束循環(huán),輸出x

3.下面程序的功能是輸出以下形式的金字塔圖案

***

main()

(

inti,j;

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

(

for(j=l;j<=4-i;j++)printf(M”);

for(j=l;j<=;j++)printf(u*");

printfCAn'1);

在下劃線處應(yīng)填入的是B

A)iB)2*i-lC)2*i+lD)i+2

*分析:

通過(guò)觀察可以知道:第一行只有一個(gè)*號(hào),卻在*的前面有三個(gè)空格。第二行有三個(gè)*號(hào),*

號(hào)前面有兩個(gè)空格。第三行有五個(gè)*號(hào),在*號(hào)前面僅僅有?個(gè)空格。第四行有七個(gè)*號(hào),沒(méi)

有空格。從中可以得到如下規(guī)律:

用i代表行數(shù),共有4行:

i=l時(shí),有4-i個(gè)空格,有2*i-l個(gè)*號(hào)

i=2時(shí),有4-i個(gè)空格,有2*i-l個(gè)*號(hào)

i=3時(shí),有4-i個(gè)空格,有2*i-l個(gè)*號(hào)

i=4時(shí),有4-i個(gè)空格,有2*i-l個(gè)*號(hào)

結(jié)合程序即可得到正確結(jié)果。

第五節(jié)break和continue語(yǔ)句在循環(huán)中的應(yīng)用

1.以下敘述中正確的是C

A)break語(yǔ)句只能用于switch語(yǔ)句體中

B)continue語(yǔ)句的作用是:使程序的執(zhí)行流程跳出包含它的所有循環(huán)

C)break語(yǔ)句只能用在循環(huán)體內(nèi)和Iswitch語(yǔ)句體內(nèi)

D)在循環(huán)體內(nèi)使用break語(yǔ)句和continue語(yǔ)句的作用相同

第六節(jié)循環(huán)結(jié)構(gòu)的分析方法

1.以下程序段中的變量已正確定義

for(i=0;j<4;i++,i++)

for(k=l;k<3;k++);printf("*H);

程序段的輸出結(jié)果是()D

A)********B)****C)**D)*

*循環(huán)體為空語(yǔ)句

第五章函數(shù)

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

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

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

B)return語(yǔ)句中表達(dá)式值的類型

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

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

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

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(H%d\n",z);

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

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

*解析:

intffintx)4----------------A

{inty;,

VAAAAAAZ*J*

或x=O||x=l"

return3/

V\A/'ZvWWW'v*vW?,

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

returnvy

},

z<3)^__----------------|L

將f(3)的值的賦值給變量z,當(dāng)執(zhí)行至ijf函數(shù)時(shí)將3的值傳遞給變量x,則x得到的值為3,執(zhí)

行函數(shù)中的語(yǔ)句,則x==Ollx==l表達(dá)式的值為假值,則不返回3值,執(zhí)行后面的語(yǔ)句

y=x*x-f⑴.先執(zhí)行f(l)函數(shù),則將1的值傳遞給變量x,所以變量x得到的值為1,執(zhí)行后

面的語(yǔ)句x==Ollx==l表達(dá)式的值為真值,返回3值,最后計(jì)算y=3*3-3=6,所以最后的答案

為6,選擇答案C。

2.以下敘述中錯(cuò)誤的是C

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

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

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

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

*函數(shù)不可以嵌套定義

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

doublemyadd(doublea,doubleb)

(

return(a+b);

)

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

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

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

*參數(shù)名可以缺省,類型名不能缺省

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

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,1,x,y,z);

)

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

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

*分析:f函數(shù)的功能是:交換兩個(gè)變量的值,但是變量V和W為普通變量,所以只是在f

函數(shù)中改變了變量的值,但是在主函數(shù)中并沒(méi)有改變實(shí)參的值。所以變量x、y、z的并沒(méi)

有改變。所以主函數(shù)中x、y、z的值還是原來(lái)變量的值,即1,3,2.故選答案C。

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

#include<stdio.h>

voidfun(intx)

(

if(x/2>0)

fun(x/2);

printf(n%d",x);

)

main()

(

fun(3);

printf(n\nn);

)

*分析:

fun/SX'

fiinfl)----------

printfY14?od^jc);*

先執(zhí)行fun(3)把x/2的值為1,真值,執(zhí)行fun(l),再次調(diào)用fun函數(shù),則輸出的x的值,

即1。輸出結(jié)束,fun(l),函數(shù)結(jié)束,則執(zhí)行后面的這?條printf函數(shù),即輸出3的值。最后

的結(jié)果為:13.

第六章指針

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

1.以下敘述中錯(cuò)誤的是C

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

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

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

D)當(dāng)在程序的開(kāi)頭包含文件stdio.h時(shí),可以給指針變量賦NULL

2.以下定義語(yǔ)句中正確的是D

A)inta=b=O;B)charA=65+l,b='b';

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

*A答案b未定義、C答案c是一級(jí)指針、D答案分號(hào)是C語(yǔ)言語(yǔ)句的結(jié)束標(biāo)志

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

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

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

*分析:A答案門oat*p=1024,將個(gè)常量1024賦值給指針,賦值號(hào)兩邊的類型錯(cuò)誤。B

答案int*p=(floatx);將一個(gè)float類型的變量x賦值給指針變量p是錯(cuò)誤的。C答案float

p=&x;將x的地址賦值給變量p是錯(cuò)誤的。D答案float*p=&x;將變量x的地址賦值給指針

P,因此是正確的。

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

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

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

*分析:intn=0,*p=&n,**q=&p;定義了一個(gè)普通變量n賦初始值為0,一個(gè)一維指針p

指向了n的地址,一個(gè)二維指針q指向了p的地址。

A答案p=l,將常量1賦值給?維指針是錯(cuò)誤的,類型不一致。

B答案*q=2,因?yàn)閝是二維指針,因此*q可以理解為一維的指針,將2賦值給*q類型不一

致。

C答案q=p,q和q的類型不一致,因此不能直接賦值。

D答案*p=5,p是一維指針,*p就相當(dāng)于?個(gè)普通變量,因此可以將5賦值給*p。

2.有以下程序

main()

(

inta=l,b=3,c=5;

int*pl=&a,*p2=&b,*p=&c;

*p=*pl*(*p2);

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

)

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

A)IB)2C)3D)4

*分析:inta=l,b=3,c=5;int*pl=&a,*p2=&b,*p=&c;pl指向了a的地址,p2指向了b的

地址,p指向了c的地址。*p=*pl*(*p2);計(jì)算*pl和*p2的乘積,注意中間的*號(hào)表示乘號(hào)。

即*p=l*3值為3,由于p指向了c的地址,*p的值為3那么c的值為3。

3.設(shè)有定義:intnl=0,n2,*p=&n2,*q=&nl;,以下賦值語(yǔ)句中與n2=nl;語(yǔ)句等價(jià)的是A

A)*p=*q;B)p=q;C)*p=&n1;D)p=*q;

*分析:intnl=0,n2,*p=&n2,*q=&nl;首先定義了兩個(gè)整型變量nl和n2,并為nl賦值為

0,定義了兩個(gè)指針變臉p和q,p指向了n2的地址,q指向了nl的地址??梢杂谩伴g接訪

問(wèn)運(yùn)算符”來(lái)引用相應(yīng)的存儲(chǔ)單元,因此*P就是n2的值,*q就是nl的值。與n2=nl等價(jià)

的就是*p=*q,故選擇A答案。

4.有以下程序

#include<stdio.h>

main()

(

intn,*p=NULL;

*p=&n;

printf(nInputn:”);scanf(n%d",&p);

printf(Houtputn:*');printf(,,%d\n,,,p);

)

該程序試圖通過(guò)指針p為變量n讀入數(shù)據(jù)并輸出,但程序有多處錯(cuò)誤,以下語(yǔ)句正確的是A

A)intn,*p=NULL;B)*p=&n;

C)scanf("%d”,&p)D)printf("%d\nn,p);

*分析:通過(guò)一個(gè)空指針去訪問(wèn)一個(gè)存儲(chǔ)單元時(shí),將會(huì)得到一個(gè)出錯(cuò)信息。

第三節(jié)函數(shù)之間地址值的傳遞

1,以下程序的功能是:利用指針指向3個(gè)整型變量,并通過(guò)指針運(yùn)算找出3個(gè)數(shù)中的最大值,輸出到

屏幕上,請(qǐng)?zhí)羁眨?pmax=x;(或者max=x)

main()

{

intx,y,z,max,*px,*py,*pz,*pmax;

scanf(',%d%d%d,,,&x,&y,&z);

px=&x;

py=&y;

pz=&z;

pmax=&max;

if(*pmax<*py)

*pmax=*py;

if(*pmax<*pz)

*pmax=*pz;

printf(',max=%d\n,\max);

)

*進(jìn)行比較之前對(duì)其進(jìn)行賦初值

2.voidf(inty,int*x)

{y=y+*x;*X=*X+y;}

main()

{intx=2,y=4;

f(y,&x);

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

執(zhí)行后輸出的結(jié)果是。84

*分析:

(1)首先函數(shù)從main函數(shù)開(kāi)始執(zhí)行,在main函數(shù)中定義了兩個(gè)變量x=2,y=4,調(diào)用函數(shù)

f(y,&x),這里傳入的一個(gè)是y的值,一個(gè)是x的地址。

(2)執(zhí)行函數(shù)f,形參y的值為4,x指針指向?qū)崊的地址。執(zhí)行:y=y+*x,那么y=4+2,

值為6,*x=*x+y那么*x=2+6,由于調(diào)用函數(shù)傳入的是地址,因此形參*x的值變化那么實(shí)參

x的值也相應(yīng)變化為80

⑶函數(shù)執(zhí)行完畢,繼續(xù)執(zhí)行main函數(shù)中的輸出語(yǔ)句,輸出x,y的值為8,4。

3.以下程序的輸出結(jié)果是。35

#include<stdio.h>

voidswap(int*a,int*b)

(

int*t;

t=a;a=b;b=t;

)

main()

(

inti=3,j=5,*p=&i,*q=&j;

swap(p,q);

printf(n%d%d\nn*p,*q);

)

*分析:

(1)函數(shù)從main函數(shù)開(kāi)始執(zhí)行,定義了兩個(gè)變量x和y,值為3和5,指針p和q分別指向

了x和y的地址,調(diào)用函數(shù)swap(p,q),傳入的實(shí)參為p和q。

(2)執(zhí)行函數(shù)swap,形參a和B分別指向了變量x和y的地址。執(zhí)行函數(shù)體,t=a;a=b;b=t;

是典型的交換形式,這樣通過(guò)交換后指針a指向了變量y的地址,指針b指向了變量x的

地址。但是實(shí)參P和q沒(méi)有變換。

(3)繼續(xù)執(zhí)行main函數(shù)中的輸出語(yǔ)句,輸出*p和*q的值為:35

4.有以下函數(shù)

intfun(char*s)

(

char*t=s;

while(*t++);

return(t-s);

)

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

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

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

5.程序中對(duì)fun函數(shù)有如下說(shuō)明C

void*fun();

此說(shuō)明的含義是

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

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

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

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

第七章數(shù)組

第一節(jié)一維數(shù)組

1.有以下程序段

intj;floaty;charname[50];

scanf("%2d%f%s",&j,&y,name);

當(dāng)執(zhí)行上述程序段,從鍵盤上輸入555667777abe后,y的值為B

A)55566.0B)566.0C)7777.0D)566777.0

*對(duì)j進(jìn)行輸入時(shí),格式控制為%2d,所以j的值取的

溫馨提示

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