2.1 單項選擇題
1.下列字符列中,可以作為“字符串常量”的是( )
① ABC ② “ABC” ③’abc’ ④’a’
【解】C程序中,一個(gè)字符率常量是表示一個(gè)字符序列,書(shū)寫(xiě)時(shí),用雙引號字符前后括住這個(gè)字符序列。所以只有”ABC”是一個(gè)正確的字符率常量,其余都不是。其中,ABC可作為標識符,字符列’abc’不能出現在C程序中,’a’是一個(gè)字符常量。所以解答是②。
2.在以字節存儲字符的系統中,’\n ’在內存占用的字節數是( )
①1 ②2 ③3 ④4
【解】一般來(lái)說(shuō),一個(gè)字符在內存中只占1個(gè)字節,’\n’是轉義字符,其意義是換行符,它作為一個(gè)字符存儲,在內存也只占五個(gè)字節。所以解答是①。
3.字符串”XyZ”在內存占用的字節數是( )
①3 ②4 ③6 ④8
【解】字符串中的每個(gè)字符占1個(gè)字節,但C程序在存儲字符串時(shí),要在最后一個(gè)有效字符后面接上 1個(gè)字符串結束的標記符‘\0‘。這樣,存儲字符串常量”xyZ”需要 4個(gè)字節。所以解答是②。
4.在以下字符列中,合法的長(cháng)整型常數是( )
① OL ② 4962710 ③ 0.054838743 ④ 2.1869el0
【解】為表示不同范圍的整數,整型數據分短整型、基本型和長(cháng)整型,并對三種整型內部表示的最高位的不同理解,又分別分成無(wú)符號和帶符號兩種。若要明確指明一個(gè)整數是長(cháng)整型的,必須在整數之后接上字符’L’。所以OL是一個(gè)長(cháng)整型的整型常量,而4962710是基本整型數據,而對于用2個(gè)字節表示一個(gè)基本整型數據的系統來(lái)說(shuō),該整數將因超出范圍而是一個(gè)錯誤的整數;0.054839743和2.1869el0都是double型的實(shí)數。所以解答是①。
5.一個(gè)char型數據,它的值在內存中存放的是()
①ASCll代碼值 ②BCD代碼值 ③內碼值 ④十進(jìn)制代碼值
【解】計算機存儲字符,通常是存儲字符的某種代碼值。有許多種字符編碼的方法,最流行的是ASCII代碼。在C語(yǔ)言中,Char型數據也用ASCII代碼表示。所以解答是①。
6.設變量 m,n,a,b,c,d均為0,執行(m=a==b)||(n=c==d)后,m,n的值是( )
①0,0 ②0,1 ③l,0 ④1,1
【解】計算(m=a==b)||(n=c==d)的過(guò)程是先計算邏輯或的左運算分量(m=a==b)的值,由于賦位運算符的優(yōu)先級比關(guān)系運算符==的優(yōu)先級低,又先計算 a==b。因 a,b均為0后,所以比較結果值為1。將1賦給變量m,使變量m的值變?yōu)?span lang="EN-US">1 。同時(shí)這個(gè)賦值運算的結果也是1,這樣邏輯運算的左運算分量的值為1。由于邏輯或運算的左運算分量值為1,按照C語(yǔ)言對邏輯或運算優(yōu)化計算的規定,不再計算邏輯或的右運算分量,而直接得到邏輯或運算的結果為1 。由于邏輯或的右運算分量不曾計算過(guò),所以變量n的值也不為變化。這樣,上述表達式計算后,變量m的情為1,變量n的值為0。所以解答是③。
7.設a為5,執行下列計算后,b的值不為2的是( )
① b=a/2 ② b=6-(a--) ③ b=a%2 ④ b=a<3?3:2
【解】因兩個(gè)整型數據相除,結果是整數,當a的值為5時(shí),計算表達式b=a/2后,使b的值為2。計算表達式b=6-(--a)是先計算子表達式(--a)的,先讓a的值減1變成4,并以減1后的a為子表達式的結果,所以子表達式的結果為4,最后使b的值為2。在計算表達式b= a%2時(shí),求余運算a%2的結果為1,最后使變量b的值為1。計算表達式b=a<3?3:2時(shí),先計算條件表達式a<3?3:2,以2為結果,最后也使變量b的值為人所以解答是③。
8.執行語(yǔ)句“x=(a=3,b=a—-);”后,X,a,b的值依次為( )
①3,3,2 ②2,3,2 ③3,2,3 ④2,3,3
【解】計算表達式x=(a=3,b=a--)時(shí),先計算賦值號右端圓括號內的逗號表達式。遠號表達式要求各子表達式順序計算,并以最后予表達式的值為整個(gè)逗號表達式的結果。所以該表達式計算時(shí),先讓變量a的值為3,a--的值是a當時(shí)的值,以該值為結果賦給變量b,并以該值為遠號表達式的值賦給變量x,然后a的值被減少1。所以計算該表達式后,使變量x,a,b的值依次為3,2,3。所以解答是③。
9.設整型變量m,n,a,b,c,d均為1,執行“( m=a>b)&&(n=a>b)"后m,n的值是( )
①0,0 ②0,l ③1,0 ④1 ,l
【解】表達式(m=a >b)&&(n=a >b)是一個(gè)邏輯表達式,它的計算過(guò)程是先計算邏輯與的左分量(m=a>b,其中又是先計算a>b。因a>b不成立,結果為0,將0賦給變量m,最后邏輯與的左分量結果為0。由于邏輯運算采用特別的優(yōu)化計算規則,當邏輯與的左分量結果為0時(shí),不再計算邏輯與的右分量,而直接以0為邏輯與的結果。所以,上述表達式計算使m的值變?yōu)?span lang="EN-US">0,而n的值沒(méi)有變,依舊為l。所以解答是②。
10,設有代碼“int a=3;”,則執行了語(yǔ)句“a+=a-= a*a;”后,變量a的值是( )
①3 ② 0 ③ 9 ④ -12
【解】由于賦值運算符的結合性自右至左,語(yǔ)句“a+=a-=a*a;”的執行是先計算a*a,得到值 9,再計算 a-=a*a,使 a的值為-6,接著(zhù)計算 a+=a,使 a的值為-12。所以解答是④。
11.在以下一組運算符中,優(yōu)先級最高的運算符是( )
①<= ②= ③% ④&&
【解】常規運算符的優(yōu)先級自高到低的排列順序是算術(shù)運算符、移位運算符<< >>、關(guān)系運算符> >= == < 。按位運算符& | ^ ~、邏輯運算符&& ||、條件運算符、賦值運算符、逗號運算符。所以問(wèn)題所給的四個(gè)運算符按優(yōu)先級自高到低的排列順序是%,<=,&&,=。所以解答是③。
12.設整型變量i的值為3,則計算表達式i---i后表達式的值為( )
①0 ②l ③2 ④表達式出錯
【解】有些運算符只有一個(gè)字符,也有許多運算符由兩個(gè)字符組成。特別是有些字符既可是單個(gè)字符的運算符,又能組成雙字符的運算符。編譯系統在識別源程序時(shí),通常是盡量多地讀入字符,能組成多字符單詞的先盡量組成多字符單詞。所以表達式i---i,被編譯器理解為(i--)-i。另外,當表達式中某變量有后綴自增和自減運算時(shí),先按變量的原值計算表達式,然后再對變量進(jìn)行自增和自減運算。同樣地,當表達式中某變量有前綴自增和自減運算時(shí),先對變量進(jìn)行自增和自減運算,然后再按變量的新值計算表達式。按這個(gè)約定,求表達式(i--)-i是計算i-i的值為0,然后再對i作自減運算。這樣,表達式(i--)-i的值為0。所以解答是①。
13.設整型變量 a、b、c均為2,表達式 a+++b+++c++ 的結果是( )
①6 ②9 ③8 ④表達式出錯
【解】與上一小題解答的理由相同,表達式a+++b+++c++被系統理解成:((a++)+(b++))+c++)。表達式“變量++”的值是變量的原來(lái)值,所以在變量a、b.c均為2的前題下,執行上述表達式,得到結果為6。所以解答是①。
14.若已定義 x和 y為double類(lèi)型,則表達式: x=l, y=x+3/2結果是( )
①l ②2 ③2.0 ④2.5
【解】由于變量x和y都是double類(lèi)型,表達式 x=l, y=x+3/2是先計算 x=1,由于 1是整型的,x是double類(lèi)型的,該計算先將整數1轉換成double類(lèi)型的1.0,并將1.0賦給變量x。計算 y=X+3/2是先求 3/2的值,因是兩整數相除,結果是整型值 1,然后在計算 X+1時(shí),也先將 1轉換成 1.0,然后求得 X+l的值為2.0,最后將該值賦給變量 y,并得到整個(gè)表達式的值為2.0.所以解答是③。
15.設a=1,b=2,c=3,d=4則表達式a< b?a:c< d?a:d的結果為()
①4 ②3 ③2 ④1
【解】條件運算符的優(yōu)先級比關(guān)系運算符的優(yōu)先級低,并且它的結合性是自右向左的,所以表達式a<b?a:c<d?a:d可用圓括號等價(jià)地寫(xiě)成(a<b?a:((c<d)?a:d)。因a<b成立,計算結果為a的值1。所以解答是④。
16.設a為整型變量,下列C表達式中,不能表達數學(xué)關(guān)系式:10<a<15的是( )
①10<a<15 ②a==11||a==12|| a==13|| a==14
③a>10&&a<15 ④?。?span lang="EN-US">a<=10)&&?。?span lang="EN-US">a>=15)
【解】數學(xué)關(guān)系式 10<a< 15表示。只能是 11, 12, 13, 14四個(gè)值之 l。用 C表達式表示這個(gè)條件,可寫(xiě)成a>10&& a<15,或!(a<=10)&&?。?span lang="EN-US">a>=15),或a==11||a==12 || a==13||a==14等。若寫(xiě)成10<a<15,該算式的計算順序是先求出10<a的結果0或1,然后以這個(gè)結果與15比較,是否小于15,顯然這與數學(xué)式子的意義是不一致的。所以解答是①。
17.下列表達式中,正確的C賦值表達式是( )
①a=7+b+C=a+7 ② C=7+b++=a+7
③a=(7+b, b++, a+7) ④ a= 7+b, c=a+7
【解】賦值運算符是運算符之一,賦值運算也可以出現在一般表達式中。賦值運算時(shí),出現在賦值運算符左邊的表達式應該是引用一個(gè)存儲對象,例如變量。不可以是一個(gè)數值計算表達式。如表達式a=7+b+c=a+7因算術(shù)運算符比賦值運算符的優(yōu)先級高,要把a+7的結果賦給7+b+c,這是錯誤的。同樣理由,表達式a= 7+b++=a+7也是錯誤的。而表達式a=(7+b,b++,a+7)就是正確的賦值表達式,它是先計算賦值號左邊的括號內的表達式,括號表達式內是一個(gè)逗號表達式,遠號表達式要求順序逐一計算各子表達式,并以最后一個(gè)子表達式的值作為遠號表達式的結果,最后將該結果賦給變量a。而表達式a=7+b,c=a+7則不是一個(gè)賦值表達式,而是一個(gè)逗號表達式,它由兩個(gè)賦值子表達式組成。所以解答是③。
18.若有以下定義: char a;int b;float c; double d;則表達式a*b+d-c值的類(lèi)型為( )
①float ② int ③ char ④ double
【解】基本類(lèi)型的數據可以混合運算,但運算時(shí),對要求運算分量類(lèi)型相同的運算來(lái)說(shuō),如運算分量的類(lèi)型不是全相同,則會(huì )有自動(dòng)類(lèi)型轉換發(fā)生。類(lèi)型自動(dòng)轉換規則規定類(lèi)型低(簡(jiǎn)單)的向類(lèi)型高(復雜)的轉換。各類(lèi)型由高到低的排列順序是:long double、float、unsigned long、long、unsigned int、int這樣,若有定義: char a; int b;float c;double d;則表達式a*b+d-c的值的類(lèi)型是double的。首先計算 a*b,得到int類(lèi)型的值,接著(zhù)計算a*b+d,得到double類(lèi)型的值,最后計算a*b+d-c,得到double類(lèi)型的值。所以解答是④。
19.表達式“9!=
①true ②非0值 ③0 ④1
【解】關(guān)系運算的結果只有0和1,若關(guān)系成立,則結果為1;若關(guān)系不成立,則結果為0。因關(guān)系式9?。?span lang="EN-US">7成立,所以表達式的結果為1。雖然1也是非0值,在供選擇的答案中有1,所以最確切的解答是④。
20.用十進(jìn)制數表示表達式“12|
①1 ②0 ③ 14 ④ 16
【解】按位運算將運算分量視作二進(jìn)位的位信息,對兩運算分量的對應位進(jìn)行運算,產(chǎn)生H進(jìn)位的位串信息結果。整數12最低8位二進(jìn)位是00001100,整數012是八進(jìn)制數,它的最低8位二進(jìn)位是00001010。這兩個(gè)二進(jìn)位位串信息按位或運算,得到結果是00001110,對應十進(jìn)制數14,八進(jìn)制數是016。所以解答是③。
21.設字符型變量 a=3,b=6,計算表達式 C=(a^b)<< 2后C的二進(jìn)制值是( )
① 00011100 ②00000111 ③ 00000001 ④ 00010100
【解】a的值為3,寫(xiě)成8位二進(jìn)制數形式是00000011,b的值為6,寫(xiě)成8位二進(jìn)制數形式是00000110。表達式c=(a^b)<<2,先計算a與b的按位加,得到結果00000101,將這結果向左移2位,得到二進(jìn)位的位串信息是00010100。所以解答是④。
22.設 a,b和 c都是int型變量,且a=3,b=4,c=5,則下面的表達式中值為 0的是( )
①’a’&&b’ ②a<=b ③a||b+c&&b-c ④!((a<b)&&!||1)
【解】對于表達式’a’&&’b,兩個(gè)非O運算分量的邏輯與結果為1。對于表達式a<=b,由于關(guān)系式成立,結果也為此又由于變量 a為非 0,表達式a||b+c&&b-c的結果也為1。對于表達式!((a<b)&&!c||1),先是計算(a<b)得到結果1;計算!C得到結果為0;再計算它們的邏輯與,結果為0。繼續與1求邏輯或,得到結果為1。最后,對1求邏輯非,得到結果為0。所以解答是①。
23.設Ch是Char型變量,其值為’A’,則下面表達式的值是( )
ch=(ch>=’A’&&ch<=’Z’)?(ch+32):ch
①’A’ ②’a’ ③’Z’ ④’z’
【解】由于字符型變量ch的值為’ A’,計算表達式ch=h>=’ A’&&ch<=’ Z’)?(ch+32):ch,先計算其中條件表達式,由于條件(ch>=’A&&h<=’Z’)成立,該條件表達式以 ch+32=97為結果,將該值賦給變量 ch,以字符表達這個(gè)值為’a’。所以解答是②。
24. 設有無(wú)符號短整型變量i、j、k,i值為013,j值為 OX13。計算表達式“k=~i|j>>
① 06 ② 0177776 ③ 066 ④ 0177766
【解】將變量 i的八進(jìn)制數值 013寫(xiě)成二進(jìn)制形式為00001011,將變量j的十六進(jìn)制值 oxl3寫(xiě)成二進(jìn)制數形式為00010011。表達式k=~i|j>>3的計算過(guò)程是先求~i,結果用八進(jìn)制代碼表示為0177764;接著(zhù)計算j>>3,結果為02。對它們進(jìn)行按位或運算結果為0177766。所以解答是④。
2.2 填充題
1.在內存中,存儲字符串“X”要占用______個(gè)字節,存儲字符’X’要占用_____個(gè)字節。
【解】計算機存儲一個(gè)字符用1個(gè)字節,存儲字符串時(shí),每個(gè)字符要占用1個(gè)字節,另在字符串的有效字符之后存儲1個(gè)字符串的結束標記符。所以存儲字符率“X’要占用2個(gè)字節,存儲字符’X’只要1個(gè)字節。
2.在C程序中,判邏輯值時(shí),用_____表示邏輯值“真”,又用_____表示邏輯值‘假”。在求邏輯值時(shí),用_____表示邏輯表達式值為“真”,又用_____表示邏輯表達式值為“假”。
【解】在C程序中,判邏輯值時(shí),用非0值表示真;而判邏輯值時(shí),用值0表示假。但邏輯表達式計算結果,邏輯表達式值為真是用1表示的,而邏輯表達式的值為假,則用0表示。
3.定義符號常量的一般形式是_____。
【解】定義符號常量用預處理命令的宏定義,其定義的一般形式是:
#define符號常量名常量
4.在函數內,說(shuō)明變量時(shí),若省略存儲類(lèi)型符,系統默認其為_____存儲類(lèi)別,該存儲類(lèi)別的類(lèi)型符為_____。
【解】在函數內,說(shuō)明變量時(shí),若省略存儲類(lèi)型符,系統就默認其為自動(dòng)存儲類(lèi)別,該存儲類(lèi)別用auto標識。
5.無(wú)符號基本整型的數據類(lèi)型符為_,雙精度實(shí)型數據類(lèi)型符為_,字符型數據類(lèi)型符為,。
【解】無(wú)符號的基本整型的類(lèi)型符為unsigned int,或簡(jiǎn)寫(xiě)成unsigned。雙精度實(shí)型數據類(lèi)型符為double,字符型數據類(lèi)型符為char。
6.定義指定數據類(lèi)型的變量時(shí),較完整的一般形式是_。
【解】要指定變量的存儲類(lèi)型,定義指定類(lèi)型的變量,其一般形式是:存儲類(lèi)型符數據類(lèi)型符變量名1,變量名2,……;
7.設有下列運算符:<<、+、++、&&、<=,其中優(yōu)先級最高的是_____,優(yōu)先級最低的是_____.
【解】對運算符<<、+、++、&&、<=,按它們的優(yōu)先級自高到低的順序排列為:++、+、<<、<=、&&所以,優(yōu)先級最高的是++,優(yōu)先
級最低的是&&。
8.設二進(jìn)制數A是
【解】按位加運算的一個(gè)重要應用是讓某個(gè)整型變量的二進(jìn)位位串信息的某些位信息反向,0變成1,而1變成0. 這只要設計這樣一個(gè)位串信息,讓要變反的位為1,不要改變的位為0,用這個(gè)位串信息與整型變量按位加就能得到希望的結果。要使字節的高4位取反,低4位不變,則需要位串信息是11110000,寫(xiě)成八進(jìn)制數是0360,寫(xiě)成十六進(jìn)制數為0xF0。
9.設a=3, b= 2,C=l,則 C>b的值為______。,a> b> C的值為______。
【解】因a的值為3,b的值是2,條件a>h為真,其值為1。表達式a>b>c的求值順序是計算a>b,結果為1,接著(zhù)計算1>c,因c的值為1,條件1>c為假,結果為0。
10.老已知a=10,b=20,則表達式!a<b的值為_____。
【解】計算表達式!a<b,先計算!a ,因a的值為1O,!a 的值為0。關(guān)系表達式0<20為真,所以表達式!a<b的值為1。
11.設X和y均為 int型變量,且X=l,y=2,則表達式 1.0+x/y的值為_____。
【解】計算表達式 1.0+x/y,先求 x/y,因 x和 y是整型變量,其中的除運算是整除, 1/2的結果為0。接著(zhù)計算1.0+0,計算時(shí),先將右分量轉換成0.0,最后得到結果1.0。
12.設整型變量 X、y、Z均為 5:
①執"x-=y-x"后,x=__________,
②執行"x%=y+z"后,x_____________.
③執行“X=(y>Z)?X+2:X-2,3,2后,X=____________。
【解】在變量x、y、z的值均為5的情況下,計算各表達式。由于表達式x-=y-z等價(jià)于表達式X=X-(y-Z),所以計算后X的值為5。表達式X%=y+Z等價(jià)于表達式X=X%(y+z),所以計算后x的值也為5。表達式x=(y>z)? x+2: x-2,3,2的計算過(guò)程用圓括號描述其計算順序是:
((X=(y>Z)?X+2:X-2),3),2
即這是一個(gè)逗號運算表達式,由一個(gè)賦值表達式和兩個(gè)數值構成,逗號表達式要求順序求各子表達式的值。表達式X=(y>Z)? X+2:X-2的計算是先求賦值號右邊的條件表達式,因條件(y>z)為假,求出X-2的值為3,將該值賦給變量X,使X的值為3。
13.能表述“20< X< 30或 X<-
【解】首先表述20<x<30的C表達式可寫(xiě)成20<x&&x<30。所以表述“20<x<30或x<
14,請寫(xiě)出數學(xué)式x/y*z的C語(yǔ)言表達式_______。
【解】數學(xué)式子表述的是x除以y乘z的積,寫(xiě)成C表達式可以寫(xiě)為x/(y*z),或可等價(jià)地寫(xiě)成x/y/Z。
15.C語(yǔ)言中運算結果可以當成邏輯值使用的表達式有:_____表達式、_______.表達式、________表達式、____________表達式、_________表達式、________表達式。
【解】在C語(yǔ)言中,邏輯判斷以非0值為真,以0值為假。所以,幾乎所有的表達式的運算結果都可以當成邏輯值使用,如算術(shù)表達式、關(guān)系表達式、邏輯表達式、賦值表達式、逗號表達式、條件表達式等。
聯(lián)系客服