C語(yǔ)言概念題100(解答)_第1頁(yè)
C語(yǔ)言概念題100(解答)_第2頁(yè)
C語(yǔ)言概念題100(解答)_第3頁(yè)
C語(yǔ)言概念題100(解答)_第4頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余105頁(yè)可下載查看

下載本文檔

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

文檔簡(jiǎn)介

C語(yǔ)言概念題解答選編為了切實(shí)掌握c語(yǔ)言的基本概念,特列出有關(guān)內(nèi)容的選擇題和填充題等供讀者參考。讀者在自學(xué)本材料時(shí),希望讀者先自己給出解答,然后再來(lái)閱讀習(xí)題的參考解答。單項(xiàng)選擇題I,以下字符列中,能作為c程序自定義標(biāo)識(shí)符的是①num(10) ②file_bak③breakDclass+2【解】C語(yǔ)言規(guī)定,C程序的標(biāo)識(shí)符的命名規(guī)則是要由英文字母或下線字符開頭,由英文字母、下線字符和數(shù)字符構(gòu)成的字符序列,并且不可以與C語(yǔ)言規(guī)定的保留字相同。在供選擇的答案中,選擇①含有括號(hào)字符,不是標(biāo)識(shí)符,它好象是函數(shù)調(diào)用表達(dá)式;選擇②符合c語(yǔ)言關(guān)于標(biāo)識(shí)符的構(gòu)成規(guī)則,所以它可以作為標(biāo)識(shí)符;選擇③是c語(yǔ)言的保留字,它不可以再被程序設(shè)定為標(biāo)識(shí)符;選擇④是ー個(gè)加法運(yùn)算算術(shù)表達(dá)式,也不可以作為程序的標(biāo)識(shí)符。所以解答是②。下列字符列中,不是C語(yǔ)言提供的合法關(guān)鍵字是①switch②begin③case④default【解】因C語(yǔ)言的關(guān)鍵字表中沒有begin,它不是C語(yǔ)言的關(guān)鍵字。所以解答是②。鍵盤符號(hào)是指如其標(biāo)記所示能顯示的字符。下列字符中屬于鍵盤符號(hào)的是①ヽ②\n③\t?\b【解】鍵盤符號(hào)是指鍵盤上有標(biāo)記,并能在顯示器上直接以其標(biāo)記字樣顯示的字符。有許多鍵盤上有標(biāo)記的符號(hào),它們不是用于直接顯示的,鍵入這種字符用于表示特定的意義,如常用的回車符。為了能讓C程序標(biāo)記這種符號(hào),程序采用轉(zhuǎn)義字符的方式書寫這種字符。如‘\n‘、、‘、‘\b'都不是鍵盤字符,在C語(yǔ)言中,它們都得用轉(zhuǎn)義字符來(lái)表達(dá)。只有字符‘ヽ’オ是鍵盤字符。所以解答是①。但在C程序中,反斜杠字符、已特別用作轉(zhuǎn)義字符的引導(dǎo)符,它也得用轉(zhuǎn)義字符的表達(dá)形式書寫,將它寫成、,下列字符列中,不是用來(lái)表達(dá)轉(zhuǎn)義字符是①\\ ②ヽ’③074 ④\0【解】轉(zhuǎn)義字符有三種書寫形式:反斜杠字符后接上某個(gè)規(guī)定的字符;反斜杠字符后接上1至3個(gè)ハ進(jìn)制數(shù)字符;反斜杠字符和字符x之后接上1至2個(gè)十六進(jìn)制數(shù)字符。后兩種分別以ハ進(jìn)制數(shù)和十六進(jìn)制數(shù)直接給出字符的ASCI!代碼值。而074是八進(jìn)制整數(shù),不是轉(zhuǎn)義字符。所以解答是下列字符列中,可以作為“字符串常量”的是①ABC②"ABC"③'abc'④'a'【解】C程序中,ー個(gè)字符串常量是表示ー個(gè)字符序列,書寫時(shí),用雙引號(hào)字符前后括住這個(gè)字符序列。所以只有"ABC"是一個(gè)正確的字符串常量,其余都不是。其中,ABC可作為標(biāo)識(shí)符,字符列,abc,不能出現(xiàn)在C程序中,,a,是ー個(gè)字符常量。所以解答是②。在用一個(gè)字節(jié)存儲(chǔ)ー個(gè)字符的系統(tǒng)中,,'n,在內(nèi)存占用的字節(jié)數(shù)是①1 ②2 ③3 ④4【解】一般來(lái)說,ー個(gè)字符在內(nèi)存中只占1個(gè)字節(jié),,ヽn,是轉(zhuǎn)義字符,其意義是換行符,它作為一個(gè)字符存儲(chǔ),在內(nèi)存也只占1個(gè)字節(jié)。所以解答是①。字符串〃xyz"在內(nèi)存占用的字節(jié)數(shù)是①3②4 ③6 @8【解】字符串中的每個(gè)字符占1個(gè)字節(jié),但C程序在存儲(chǔ)字符串時(shí),要在最后ー個(gè)有效字符后面接上1個(gè)字符串結(jié)束的標(biāo)記符,'0,。這樣,存儲(chǔ)字符串常量〃xyz"需要4個(gè)字節(jié)。所以解答是②。8,在以下字符列中,合法的長(zhǎng)整型常數(shù)是①0L②4962710 ③0.054838743 ④2.1869el0【解】為表示不同范圍的整數(shù),整型數(shù)據(jù)分短整型、基本型和長(zhǎng)整型,并對(duì)三種整型內(nèi)部表示的最高位的不同理解,又分別分成無(wú)符號(hào)和帶符號(hào)兩種。若要明確指明一個(gè)整數(shù)是長(zhǎng)整型的,必須在整數(shù)之后接上字符’!7。所以0L是一個(gè)長(zhǎng)整型的整型常量,而4962710是基本整型數(shù)據(jù),而對(duì)于用2個(gè)字節(jié)表示一個(gè)基本整型數(shù)據(jù)的系統(tǒng)來(lái)說,該整數(shù)將因超出范圍而是ー個(gè)錯(cuò)誤的整數(shù);0.054839743和2.1869elO都是double型的實(shí)數(shù)。所以解答是①。ー個(gè)char型數(shù)據(jù),它的值在內(nèi)存中存放的是①ASCH代碼值②BCD代碼值③內(nèi)碼值④十進(jìn)制代碼值【解】計(jì)算機(jī)存儲(chǔ)字符,通常是存儲(chǔ)字符的某種代碼值。有許多種字符編碼的方法,現(xiàn)在最流行的是ASCII代碼。在C語(yǔ)言中,char型數(shù)據(jù)在內(nèi)存中存放的是ASCII代碼。所以解答是①。設(shè)變量m,n,a,b,c,d均為〇,執(zhí)行(m=a==b)ll(n=c==d)后,m,n的值是①0,0②0,1 ③1,0 @1,1【解】計(jì)算(m=a==b)ll(n=c==d)的過程是先計(jì)算邏輯或的左運(yùn)算分量(m=a==b)的值,由于賦值運(yùn)算符的優(yōu)先級(jí)比關(guān)系運(yùn)算符=ニ的優(yōu)先級(jí)低,又先計(jì)算a==b。因a,b均為O后,所以比較結(jié)果值為1。將1賦給變量m,使變量m的值變?yōu)閗同時(shí)這個(gè)賦值運(yùn)算的結(jié)果也是1,這樣邏輯運(yùn)算的左運(yùn)算分量的值為10由于邏輯或運(yùn)算的左運(yùn)算分量值為!,按照C語(yǔ)言對(duì)邏輯或運(yùn)算優(yōu)化計(jì)算的規(guī)定,不再計(jì)算邏輯或的右運(yùn)算分量,而直接得到邏輯或運(yùn)算的結(jié)果為1。由于邏輯或的右運(yùn)算分量不曾計(jì)算過,所以變量n的值也不為變化。這樣,上述表達(dá)式計(jì)算后,變量m的值為1,變量n的值為0。所以解答是③。.設(shè)a為5,執(zhí)行下列語(yǔ)句后,b的值不為2的是①b二a/2②b=6-(―a)③b=a%2④b=aく3?3:2【解】因兩個(gè)整型數(shù)據(jù)相除,結(jié)果是整數(shù),當(dāng)a的值為5時(shí),計(jì)算表達(dá)式b=a/2后,使b的值為2〇計(jì)算表達(dá)式b=6-(--a)是先計(jì)算子表達(dá)式(--a),先讓a的值減1變成4,并以減1后的a為子表達(dá)式的結(jié)果,所以子表達(dá)式的結(jié)果為4,最后使b的值為2。在計(jì)算表達(dá)式b=a%2時(shí),求余運(yùn)算a%2的結(jié)果為1,最后使變量b的值為1〇計(jì)算表達(dá)式b=av3?3:2時(shí),先計(jì)算條件表達(dá)式av3?3:2,以2為結(jié)果,最后也使變量b的值為2〇所以解答是③。.執(zhí)行語(yǔ)句“x=(a=3,b=a--);”后,x,a,b的值依次為①3,3,2②2,3,2 ③3,2,3 @2,3,3【解】計(jì)算表達(dá)式X=3=3加=即ー)時(shí),先計(jì)算賦值號(hào)右端圓括號(hào)內(nèi)的逗號(hào)表達(dá)式。逗號(hào)表達(dá)式要求各子表達(dá)式順序計(jì)算,并以最后子表達(dá)式的值為整個(gè)逗號(hào)表達(dá)式的結(jié)果。所以該表達(dá)式計(jì)算時(shí),先讓變量a的值為3,a-的值是a當(dāng)時(shí)的值,以該值為結(jié)果賦給變量b,并以該值為逗號(hào)表達(dá)式的值賦給變量x,然后a的值被減少1。所以計(jì)算該表達(dá)式后,使變量x,a,b的值依次為3,2,3〇所以解答是③。.設(shè)整型變量m,n,a,b,c,d均為!,執(zhí)行"(m=a>b)&&(n=a>b)”后,m,n的值是①0,0②0,1③1,0@1,1【解】表達(dá)式(m=a>b)&&(n=a>b)是ー個(gè)邏輯表達(dá)式,它的計(jì)算過程是先計(jì)算邏輯與的左分量(m=a>b),其中又是先計(jì)算a>b。因a>b不成立,結(jié)果為0,將。賦給變量m,最后邏輯與的左分量結(jié)果為〇。由于邏輯運(yùn)算采用特別的優(yōu)化計(jì)算規(guī)則,當(dāng)邏輯與的左分量結(jié)果為〇時(shí),不再計(jì)算邏輯與的右分量,而直接以〇為邏輯與的結(jié)果。所以,上述表達(dá)式計(jì)算使m的值變?yōu)椹?而n的值沒有變,依舊為1。所以解答是②。.設(shè)有語(yǔ)句“inta=3;”,則執(zhí)行了語(yǔ)句“a+=a?=a*a;”后,變量a的值是①3②〇③9?-12【解】由于賦值運(yùn)算符的結(jié)合性自右至左,語(yǔ)句“a+二a-二a*a;”的執(zhí)行是先計(jì)算a*a,得到值9,再計(jì)算a-=a*a,使a的值為ー6,接著計(jì)算a+=a,使a的值為ー12。所以解答是?。.在以下ー組運(yùn)算符中,優(yōu)先級(jí)最高的運(yùn)算符是①く二②二③%@&&【解】常規(guī)運(yùn)算符的優(yōu)先級(jí)自高到低的排列順序是算術(shù)運(yùn)算符、移位運(yùn)算符、關(guān)系運(yùn)算符、按位運(yùn)算符、邏輯運(yùn)算符、條件運(yùn)算符、賦值運(yùn)算符、逗號(hào)運(yùn)算符。所以問題所給的四個(gè)運(yùn)算符按優(yōu)先級(jí)自高到低的排列順序是%,<=,&&,=〇所以解答是③。.設(shè)整型變量i的值為3,則計(jì)算表達(dá)式i-i后表達(dá)式的值為①〇②1③2④表達(dá)式出錯(cuò)【解】有些運(yùn)算符只有一個(gè)字符,也有許多運(yùn)算符由兩個(gè)字符組成。特別是有些字符既可是單個(gè)字符的運(yùn)算符,又能組成雙字符的運(yùn)算符。編譯系統(tǒng)在識(shí)別源程序時(shí),通常是盡量多地讀入字符,能組成多字符單詞的先盡量組成多字符單詞。所以表達(dá)式i—i,被編譯器理解為(i—)-i。另外,當(dāng)表達(dá)式中某變量有后綴自增和自減運(yùn)算時(shí),先按變量的原值計(jì)算表達(dá)式,然后再對(duì)變量進(jìn)行自增和自減運(yùn)算。同樣地,當(dāng)表達(dá)式中某變量有前綴自增和自減運(yùn)算時(shí),先對(duì)變量進(jìn)行自增和自減運(yùn)算,然后再按變量的新值計(jì)算表達(dá)式。按這個(gè)約定,求表達(dá)式(i-)-i是計(jì)算i-i的值為0,然后再對(duì)i作自減運(yùn)算。這樣,表達(dá)式(i--)-i的值為0。所以解答是①。.設(shè)整型變量a、b、c均為2,表達(dá)式a+++b+++c++的結(jié)果是①6②9③8④表達(dá)式出錯(cuò)【解】與上一小題解答的理由相同,表達(dá)式a+++b+++c++被系統(tǒng)理解成:((a++)+(b++))+(c++)。表達(dá)式“變量++”的值是變量的原來(lái)值,所以在變量a、b、c均為2的前題下,執(zhí)行上述表達(dá)式,得到結(jié)果為6。所以解答是①。.若已定義x和y為double類型,則表達(dá)式:x=l,y=x+3/2的結(jié)果是①1②2③2.0④2.5【解】由于變量x和y都是double類型,表達(dá)式x=l,y=x+3/2是先計(jì)算x=l,司1是整型的,x是double類型的,該計(jì)算先將整數(shù)1轉(zhuǎn)換成double類型的1.0L,并將!.0L賦給變量Xo計(jì)算y=x+3/2是先求3/2的值,因是兩整數(shù)相除,結(jié)果是整型值!,然后在計(jì)算x+1時(shí),也先將1轉(zhuǎn)換成1.0L,然后求得x+1的值為2.0L,最后將該值賦給變量y,并得到整個(gè)表達(dá)式的值為2.0L,簡(jiǎn)寫成2.0。所以解答是③。.設(shè)a=l,b=2,c=3,d=4,則表達(dá)式avb?a:cvd?a:d的結(jié)果為①4②3③2④1【解】條件運(yùn)算符的優(yōu)先級(jí)比關(guān)系運(yùn)算符的優(yōu)先級(jí)低,并且它的結(jié)合性是自右向左的,所以表達(dá)式a<b?a:c<d?a:d可用圓括號(hào)等價(jià)地寫成(a<b)?a:((c<d)?a:d)o因avb成立,計(jì)算結(jié)果為a的值1。所以解答是④。.設(shè)a為整型變量,下列C表達(dá)式中,不能表達(dá)數(shù)學(xué)關(guān)系式:10vavl5的是①10<a<15 ②a==11IIa==12IIa==13IIa==14③a>10&&a<15 ④!(a<=10)&&!(a>=15)【解】數(shù)學(xué)關(guān)系式10vavl5表示a只能是11,12,13,14四個(gè)值之1。用C表達(dá)式表示這個(gè)條件,可寫成a>10&&a<15,或!(av=10)&&!(a>=15),或a==11IIa==12IIa==13IIa==14等。若寫成10<a<15,該算式的計(jì)算順序是先求出I0<a的結(jié)果0或1,然后以這個(gè)結(jié)果與15比較,是否小于15,顯然這與數(shù)學(xué)式子的意義是不一致的。所以解答是①。.下列表達(dá)式中,正確的C賦值表達(dá)式是(T)a=7+b+c=a+7(2)a=7+b++=a+7@)a=(7+b,b++,a+7)(4)a=7+b,c=a+7【解】賦值運(yùn)算符是運(yùn)算符之一,賦值運(yùn)算也可以出現(xiàn)在表達(dá)式中。賦值運(yùn)算時(shí),出現(xiàn)在賦值運(yùn)算符左邊的表達(dá)式應(yīng)該是引用ー個(gè)存儲(chǔ)對(duì)象,例如變量。不可以是一個(gè)數(shù)值計(jì)算表達(dá)式。如表達(dá)式a=7+b+c=a+7因算術(shù)運(yùn)算符比賦值運(yùn)算符的優(yōu)先級(jí)高,要把a(bǔ)+7的結(jié)果賦給7+b+c,這是錯(cuò)誤的。同樣理由,表達(dá)式a=7+b++=a+7也是錯(cuò)誤的。而表達(dá)式a=(7+b,b++,a+7就是正確的賦值表達(dá)式,它是先計(jì)算賦值號(hào)左邊的括號(hào)表達(dá)式,括號(hào)表達(dá)式內(nèi)是一個(gè)逗號(hào)表達(dá)式,逗號(hào)表達(dá)式要求順序逐一計(jì)算各子表達(dá)式,并以最后ー個(gè)子表達(dá)式的值作為逗號(hào)表達(dá)式的結(jié)果,最后將該結(jié)果賦給變量a。而表達(dá)式a=7+b,c=a+7則不是ー個(gè)賦值表達(dá)式,而是ー個(gè)逗號(hào)表達(dá)式,它由兩個(gè)賦值子表達(dá)式組成。所以解答是③。.若有以下定義:chara;intb;floatc;doubled;則表達(dá)式a*b+d-c值的類型為①float②int③char④double【解】基本類型的數(shù)據(jù)可以混合運(yùn)算,但運(yùn)算時(shí),對(duì)要求運(yùn)算分量類型相同的運(yùn)算來(lái)說,如運(yùn)算分量的類型不是全相同,則會(huì)有自動(dòng)類型轉(zhuǎn)換發(fā)生。類型自動(dòng)轉(zhuǎn)換規(guī)則規(guī)定類型低(簡(jiǎn)單)的向類型高(復(fù)雜)的轉(zhuǎn)換。各類型由高到低的排列順序是:longdoubleヽdouble>float>unsignedlong>long>unsignedint>into這樣,若有定義:chara;intb;floatc;doubled;則表達(dá)式a*b+d-c的值的類型是double的。首先計(jì)算a*b,得到int類型的值,接著計(jì)算a*b+d,得到double類型的值,最后計(jì)算a*b+d-c,得到double類型的值。所以解答是④。.表達(dá)式“9!=7”的值是①true②非〇值③〇④1【解】關(guān)系運(yùn)算的結(jié)果只有。和1,若關(guān)系成立,則結(jié)果為1;若關(guān)系不成立,則結(jié)果為〇。因關(guān)系式9!=7成立,所以表達(dá)式的結(jié)果為1。雖然1也是非。值,在供選擇的答案中有1,所以最確切的解答是④。.用十進(jìn)制數(shù)表示表達(dá)式“121012”的運(yùn)算結(jié)果是①1②。③14?16【解】按位運(yùn)算將運(yùn)算分量視作二進(jìn)位的位串信息,對(duì)兩運(yùn)算分量的對(duì)應(yīng)位進(jìn)行運(yùn)算,產(chǎn)生二進(jìn)位的位串信息結(jié)果。整數(shù)12最低8位二進(jìn)位是00001100,整數(shù)。12是八進(jìn)制數(shù),它的最低8位二進(jìn)位是。。。。101。。這兩個(gè)二進(jìn)位位串信息按位或運(yùn)算,得到結(jié)果是。。。。111。,對(duì)應(yīng)十進(jìn)制數(shù)14,ハ進(jìn)制數(shù)是016。所以解答是③。. 設(shè)字符型變量a=3,b=6,計(jì)算表達(dá)式c=3り)《2后c的二進(jìn)制值是①00011100②00000111③00000001④00010100【解】a的值為3,寫成8位二進(jìn)制數(shù)形式是00000011,b的值為6,寫成8位二進(jìn)制數(shù)形式是00000110。表達(dá)式c=(aAb)vv2,先計(jì)算a與b的按位加,得到結(jié)果00000101,將這結(jié)果向左移2位,得到ニ進(jìn)位的位串信息是000101〇〇。所以解答是④。.設(shè)a,b和c都是int型變量,且a=3,b=4,c=5,則下面的表達(dá)式中值為〇的是①匕‘&&'b'②a<=b③allb+c&&b-c④!((a<b)&&!cII1)【解】對(duì)于表達(dá)式兩個(gè)非〇運(yùn)算分量的邏輯與結(jié)果為1。對(duì)于表達(dá)式av二b,由于關(guān)系式成立,結(jié)果也為1。又由于變量a為非〇,表達(dá)式allb+c&&b-c的結(jié)果也為1〇對(duì)于表達(dá)式!((avb)&&!clll),先是計(jì)算(avb)得到結(jié)果1;計(jì)算!c得到結(jié)果為〇;再計(jì)算它們的邏輯與,結(jié)果為〇。繼續(xù)與1求邏輯或,得到結(jié)果為1。最后,對(duì)1求邏輯非,得到結(jié)果為〇。所以解答是④。.設(shè)ch是char型變量,其值為,ぺ,則下面表達(dá)式的值是ch=(ch>='A'&&ch<='Z')?(ch-<A'+'a'):ch①A②a③Z④z【解】由于字符型變量ch的值為,A:計(jì)算表達(dá)式ch=(ch>=,A,&&ch<=,Z,)?(ch+32):ch?先計(jì)算其中條件表達(dá)式,由于條件(ch>=,A,&&chv=,Zう成立,該條件表達(dá)式以ch+32=97為結(jié)果,將該值賦給變量ch,以字符表達(dá)這個(gè)值為は。所以解答是②。.設(shè)有無(wú)符號(hào)整型變量i、j、k,i值為013,j值為0x13。計(jì)算表達(dá)式“k二?ilj?3;”后,k的值是①06 ②0177776③066④0177766【解】將變量i的ハ進(jìn)制數(shù)值013寫成二進(jìn)制形式為00001011,將變量j的十六進(jìn)制值0x13寫成二進(jìn)制數(shù)形式為00010011。表達(dá)式k=~iIj?3的計(jì)算過程是先求?i,結(jié)果用ハ進(jìn)制代碼表示為0177764;接著計(jì)算j>>3,結(jié)果為02。對(duì)它們進(jìn)行按位或運(yùn)算結(jié)果為0177766。所以解答是④。.設(shè)a=3,b=4,執(zhí)行“printf("%d,%d”,(a,b),(b,a));”的輸出是①3,4②4,3③3,3@4,4【解】在調(diào)用格式輸出函數(shù)的語(yǔ)句中,其中每個(gè)格式符對(duì)應(yīng)ー個(gè)輸出項(xiàng),格式符d要求輸出項(xiàng)內(nèi)容以十進(jìn)制整數(shù)形式輸出。語(yǔ)句中的第一個(gè)格式符對(duì)應(yīng)輸出項(xiàng)(a,b)是ー個(gè)逗號(hào)表達(dá)式,該表達(dá)式的值是b的值,所以先輸出4。接著輸出字符逗號(hào)。同樣輸出項(xiàng)(b,a)的值是a的值,輸出3。所以語(yǔ)句執(zhí)行將輸出4,3。正解的選擇是②。.使用“scanf("x=%f,y=%ド,&x,&y)”,要使x,y均為1.25,正確的輸入是①1.25,1.25②1.251.25③x=1.25,y=1.25④x=1.25y=1.25【解】格式輸入函數(shù)的格式字符串中的字符可以分成三類:空格類字符、其它普通字符和格式轉(zhuǎn)換說明。其中空格類字符用來(lái)自動(dòng)跳過空格類字符,直至下一個(gè)非空格類字符。普通字符要求輸入字符與其完全相同。格式轉(zhuǎn)換說明對(duì)輸入字符列按格式轉(zhuǎn)換說明進(jìn)行轉(zhuǎn)換,得到內(nèi)部值存儲(chǔ)到對(duì)應(yīng)輸入項(xiàng)所指定的存儲(chǔ)位置中。格式輸入函數(shù)調(diào)用scanf(ttx=%f,y=%f,,&x,&y)以普通字符x=開頭,輸入時(shí)也要先輸入x=o接著是一個(gè)浮點(diǎn)數(shù)輸入格式,所有能構(gòu)成一個(gè)浮點(diǎn)數(shù)!.25的字符序列都能滿足要求。接著是普通字符列“,y二”,在輸入的浮點(diǎn)數(shù)之后也要有字符列“,y二”。最后又是浮點(diǎn)數(shù)輸入格式,同樣所有能構(gòu)成一個(gè)浮點(diǎn)數(shù)!.25的字符序列都能滿足要求。問題給出的供選擇答案中只有x=1.25,y=1.25是正確的輸入。所以選擇③。通常,格式輸入函數(shù)調(diào)用中,不在格式字符串插入普通字符,要求輸入與格式中的普通字符匹配的字符,而是簡(jiǎn)潔地寫上輸入格式即可。. 設(shè)a,b為字符型變量,執(zhí)行“scanf("a二%c,b二%c”,&a,&b)”后使a為W,b為,B,,從鍵盤上的正確輸入是①②③A二A,B二B④a二A,b二B【解】函數(shù)調(diào)用scanfCta=%c,b=%c,,,&a,&b)中,普通字符必須按格式字符串要求照原樣輸入,c格式對(duì)緊接的任何字符都輸入。所以實(shí)現(xiàn)問題的要求,輸入字符列應(yīng)為“a=A,b=B"。另外要特別指出,在程序中,為表示字符常量,字符前后需加單引號(hào)。但用字符格式輸入字符時(shí),在要輸入字符前后不必另鍵入單引號(hào)。若鍵入單引號(hào),則這個(gè)單引號(hào)也將作為字符被輸入。正確的解答是④。32.設(shè)有inti=010,j=10;則執(zhí)行“printf("%d,%d\n”,++i,j—);”的輸出是①11,10②9,10③010,9(4)10,9【解】變量1和上的初值分別為ハ進(jìn)制數(shù)010和十進(jìn)制數(shù)10,格式輸出函數(shù)調(diào)用printf(<4%d,%d\n”,++i,j--)中,++i的值是變量i增1后的值,原來(lái)值是ハ進(jìn)制數(shù)010,等于十進(jìn)制數(shù)8,輸出9。j-的值是變量j減1之前的值,輸出10。格式字符串中的逗號(hào)是普通字符照原樣輸出。所以問題給出的格式輸出函數(shù)調(diào)用將輸出9,10。正確的解答是②.設(shè)x、y、z、t均為int型變量,則執(zhí)行以下語(yǔ)句后,t的值為x=y=z=l;t=++x||++y&&++z;①不定值②2③1④〇【解】語(yǔ)句序列"x=y=z=l;t=++x||++y&&++z;”使變量x的值為1,變量t是賦ー個(gè)邏輯表達(dá)式的值。在C語(yǔ)言中,由邏輯與和邏輯或構(gòu)成的邏輯表達(dá)式有特別的計(jì)算規(guī)則,順序計(jì)算各邏輯子表達(dá)式,并當(dāng)一旦能得到邏輯表達(dá)式的結(jié)果時(shí),就立即結(jié)束邏輯表達(dá)式的計(jì)算,不再計(jì)算后繼邏輯子表達(dá)式。本題的邏輯表達(dá)式是兩個(gè)運(yùn)算分量的邏輯或,而且左運(yùn)算分量++x的值為非0,立即得到邏輯或運(yùn)算的結(jié)果為1,并將1賦給變量t,所以變量t的值為1。正確解答為③。.設(shè)x、y、z均為int型變量,則執(zhí)行以下語(yǔ)句后,x、y、z的值為x=l;y=0;z=2;y++&&++zII++x;①2、1、3②2、0、3③2、1、3④2、1、2【解】語(yǔ)句序列“x=l;y=0;z=2;y++&&++zII++x;"先使變量x的值為1,變量y的值為0,變量z的值為2。由邏輯與和邏輯或構(gòu)成的邏輯表達(dá)式的特別計(jì)算規(guī)則,順序計(jì)算各邏輯子表達(dá)式,并當(dāng)一旦能得到邏輯子表達(dá)式的結(jié)果時(shí),就立即結(jié)束邏輯子表達(dá)式的計(jì)算,不再計(jì)算該邏輯子表達(dá)式。計(jì)算y++因y的值為0,使y++&&++z的結(jié)果為0,立即去計(jì)算++x,這次計(jì)算使變量y的值變成!,而變量z的值未改變。接著計(jì)算++x,使x的值變?yōu)?〇所以經(jīng)上述語(yǔ)句執(zhí)行后,x、y、z的值依次為2、1、2〇正確解答為④。.假定所有變量均已正確定義,下列程序段運(yùn)行后x的值是a=b=c=O;x=35;if(!a)x一:elseif(b);if(c)x=3;elsex=4;①34②4③35?3【解】以變量a,b,c的值均為0,變量x的值為35,語(yǔ)句:if(!a)x一:elseif(b);if(c)x=3;elsex=4;由兩個(gè)if語(yǔ)句組成。首先執(zhí)行前ー個(gè)if齒]"if(!a)x--;elseif(b)由因變量a的值為0,條件!a成立,執(zhí)行x—使x的值變?yōu)?4。接著執(zhí)行后繼的if語(yǔ)句“if(c)x=3;elsex=4;",因變量c的值為O,條件不成立而執(zhí)行x=4,最終使變量x的值為4。正確解答是②。注意前ー個(gè)if語(yǔ)句的else部分的成分語(yǔ)句只有“if(b);”,這是一個(gè)單分支if語(yǔ)句,且其成分語(yǔ)句為空語(yǔ)句。.下面的程序段所表示的數(shù)學(xué)函數(shù)關(guān)系是y=-1;if(x!=O)if(x>0)y=1;elsey=0;-1 (x<0) 1 (x< 0) 0 (x<0) -1(x<0)①y二〇 (x=0) ②y= T (x=0) ③y= T (x=0) @y =1(x=0)1 (x>0) 0 (x>0) 1 (x>0) 0(x>0)【解】程序段首先置變量y的值為ー1,碗按變量x值的不同情況重置變量y的值。重置的首要條件是x!=0,若變量x的值為0,則不再重置變量y的值,所以在x值為0情況下,y的值是ー1。在變量x的值不等于。的條下,若x的值大于0,重置變量y的值為1;若變量x的值小于〇,重置變量y的值為〇〇所以程序段實(shí)現(xiàn)當(dāng)變量x的值為。時(shí),變量y的值為-15當(dāng)變量x的值大于。時(shí),置變量y的值為1;當(dāng)變量x的值小于。時(shí),置變量y的值為〇。正確解答為③。37.設(shè)inta=8,b=7,c=6,x=1;執(zhí)行語(yǔ)句if(a>6)if(b>7)if(c>8)x=2;elsex=3;后x的值是①。②1 ③2 ④3【解】將上述語(yǔ)句寫成易讀的結(jié)構(gòu)化形式:if(a>6)if(b>7)if(c>8)x=2;elsex=3;該語(yǔ)句的執(zhí)行過程是,首先判定(a>6),因a的值是8,條件成立;接著判定(b>7),因b的值是7,條件不成立。在上述語(yǔ)句中,沒有對(duì)應(yīng)if(b>7)的else,上述語(yǔ)句就因(b>7)的條件不成立而不執(zhí)行任何有意義的動(dòng)作,結(jié)束該語(yǔ)句的執(zhí)行。這樣,變量a、b、c和x的值都不會(huì)因執(zhí)行上述語(yǔ)句而改變,所以變量x的值依舊保持1。所以解答是②。38.執(zhí)行下列程序段x=9;while(x>7){printf("*”);x―;}后輸出的結(jié)果是①****②***③**④*【解】上述代碼以x的初值為9,在x>7成立的情況下循環(huán),每次循環(huán)輸出ー個(gè)?字符,并讓x的值減1。共執(zhí)行2次循環(huán),也就共輸出了2個(gè)?字符。所以解答為③。39,下列語(yǔ)句中,錯(cuò)誤的是①while(x=y)5;②dox++while(x-10);③while(0); @do2;while(a=b);【解】while語(yǔ)句的一般形式是:while(表達(dá)式)語(yǔ)句這里的表達(dá)式可以是任何合理的表達(dá)式,語(yǔ)句可以是任何語(yǔ)句,包括空語(yǔ)句,或表達(dá)式語(yǔ)句??赡軙鴮懙膚hile語(yǔ)句沒有任何意義,如供選擇的①while(x=y)5J和③while(0);但這兩個(gè)語(yǔ)句的句法沒有任何錯(cuò)誤。do-while語(yǔ)句的一般形式是:do語(yǔ)句while(表達(dá)式);其中的成分語(yǔ)句也可以是任何語(yǔ)句,但供選擇答案②dox++while(x-10);中的代碼x++是一個(gè)表達(dá)式,不是語(yǔ)句,所以是錯(cuò)誤的。正確解答是②。.循環(huán)語(yǔ)句afor(x=0,y=0;(y!=123)II(x<4);x++) 的循環(huán)執(zhí)行①無(wú)限次②不確定次③4次④3次【解】for循環(huán)語(yǔ)句的初始化部分置變量x和y的初值為0,循環(huán)條件是(y!=123)II(x<4),每次循環(huán)后變量x的值增1〇由于循環(huán)過程中變量y的值未被修改過,循環(huán)條件又是一個(gè)邏輯或,其左分量(y!=123)永遠(yuǎn)成立,也就是循環(huán)條件永遠(yuǎn)成立。所以該循環(huán)語(yǔ)句將循環(huán)執(zhí)行無(wú)限次。正確解答是①。.若i、j已定義為int類型,則以下程序段中的內(nèi)循環(huán)體的執(zhí)行次數(shù)是〇。for(i=5;i;i--)for(j=0;j<4;j++){ }①20 ②24 ③25 ?30【解】問題所給的程序段的外循環(huán)是ー個(gè)for循環(huán)語(yǔ)句,它的初始化部分置變量i的初值為5,循環(huán)條件簡(jiǎn)寫成i,即i!=0,每次循環(huán)后變量i的值減1。所以外循環(huán)共控制5次循環(huán)。內(nèi)循環(huán)也是ー個(gè)for循環(huán)語(yǔ)句,它的初始化部分置變量j的初值為0,循環(huán)條件是jv4,每次循環(huán)后變量j的值增1。所以內(nèi)循環(huán)共控制4次循環(huán)。這樣,如內(nèi)循環(huán)的體內(nèi)未曾對(duì)變量i和j有修改,在內(nèi)、外循環(huán)ー起控制下,內(nèi)循環(huán)的體共被重復(fù)執(zhí)行20次。正確解答是①。.假定a和b為int型變量,則執(zhí)行以下語(yǔ)句后b的值為a=1;b=10;do{b-=a;a++;}while(b—<0);①9②-2③T@8【解】在這個(gè)程序段中,循環(huán)開始前變量a的值為!,b的值為10,每次循環(huán)從變量b減去a,并讓a增1,并在循環(huán)條件判定時(shí),又讓b減去1。第一次循環(huán)后,變量b的值變成9,變量a的值變?yōu)?,循環(huán)判斷時(shí),因b的值大于〇,循環(huán)條件不成立,結(jié)束循環(huán)。但在循環(huán)判斷時(shí),讓b減去了1,所以循環(huán)結(jié)束時(shí),變量b的值為8。正確的解答是④。.設(shè)x和y為int型變量,則執(zhí)行下面的循環(huán)后,y的值為for(y=l,x=l;y<=50;y++){if(x>=10)break;if(x%2==1){x+=5;continue;}x-=3;)①2②4③6@8【解】for循環(huán)語(yǔ)句的初始化部分置變量x和y的初值為1,循環(huán)條件是(y<=50),每次循環(huán)后變量y的值增1,控制循環(huán)最多執(zhí)行50次。循環(huán)體有三個(gè)語(yǔ)句:首先在發(fā)現(xiàn)變量x的值大于等于10時(shí),結(jié)束循環(huán);接著是當(dāng)變量x除2的余數(shù)為1(即變量x是奇數(shù))時(shí),讓變量x值增5,讓x變成偶數(shù),并直接進(jìn)入下ー輪循環(huán);如變量x是偶數(shù),則從變量x減去3,讓變量x變成奇數(shù)。由上述分析知,每?jī)纱窝h(huán)使變量x的值增加2。第一次循環(huán)后,變量x的值變成6。第二次循環(huán)后,變量x的值變成3。第三次循環(huán)后,變量x的值變成8。第四次循環(huán)后,變量x的值變成5。第五次循環(huán)后,變量x的值變成10o第六次循環(huán)時(shí),因變量x的值大于等于10,直接跳出循環(huán),這次循環(huán)是非正常結(jié)束,對(duì)變量y的修正只執(zhí)行了5次。所以循環(huán)結(jié)束后,變量y的值增至6。正確的解答是③。. 在C語(yǔ)言中,下列說法中正確的是①編程時(shí)盡量不要使用“do語(yǔ)句while(條件)”的循環(huán)②"do語(yǔ)句while(條件)”的循環(huán)中必須使用“break”語(yǔ)句退出循環(huán)③“do語(yǔ)句while(條件)”的循環(huán)中,當(dāng)條件非。時(shí)將結(jié)束循環(huán)④“do語(yǔ)句while(條件)”的循環(huán)中,當(dāng)條件為〇時(shí)將結(jié)束循環(huán)【解】do-while語(yǔ)句的一般形式是:do語(yǔ)句while(表達(dá)式);其語(yǔ)義是重復(fù)執(zhí)行其成分語(yǔ)句,直至表示條件的表達(dá)式值為0時(shí)結(jié)束。do-while語(yǔ)句是正常使用的ー種循環(huán)結(jié)構(gòu)之一。do-while語(yǔ)句的循環(huán)結(jié)束條件由while后的表達(dá)式值為O所控制,并不一定要有break語(yǔ)句跳出循環(huán)來(lái)結(jié)束循環(huán)。do-while語(yǔ)句在條件值非〇時(shí),將繼續(xù)循環(huán),而不是結(jié)束循環(huán)。條件值為〇時(shí),オ結(jié)束循環(huán)。所以正確的選擇是④。.若有以下程序段,w和k都是整型變量,則不能與該程序段等價(jià)的循環(huán)語(yǔ)句是w=k;LB:if(w==0)gotoLE;w—;printf("*");gotoLB;LE:①for(w=k;w!=0;w--)printf("*");w=k;while(w--!=0)printf(“*”);w二k;do{w--;printf(“*”);}while(w!=0);for(w=k;w;--w)printf("*");【解】問題所給出的程序段用goto語(yǔ)句構(gòu)造一個(gè)循環(huán)控制結(jié)構(gòu),該循環(huán)結(jié)構(gòu)的初值是讓變量W的值為k的值,循環(huán)結(jié)束條件是W的值等于0,循環(huán)體是讓變量w的值減1,并輸出ー個(gè)字符?。上述循環(huán)控制過程用for循環(huán)可描述如下:for(w=k;w!=0;w--)printf("ポリ;或?qū)懗?for(w=k;w;--w)printf?!?");若用while語(yǔ)句,可描述如下:w=k;while(w--!=0)printfぐ'*");w++;/*在w等于。時(shí),也執(zhí)行了一次w--,這里是對(duì)w最后減1的補(bǔ)嘗?/或更直觀地寫成:w=k;while(w!=0) {w一;printf(“*");}若用do-while語(yǔ)句,可描述如下:w二k;if(w)do{w--;printf(“*");}while(w);若寫成:w=k;do{ w--;printf。'*");}while(w!=0);是不正確的,因?yàn)樵a當(dāng)k的值為O時(shí),不輸出字符?,而上面的改寫,當(dāng)k的值為O時(shí),將輸出數(shù)數(shù)多多的字符?。所以解答應(yīng)是③。若有下列說明,則數(shù)值為4的表達(dá)式是inta[12]={1,2,3,4,5,6,7,8,9,10,11,12);charc=匕',d,g;②a[g-c]②a[4]③a['d'-'c']④a['d'-c]【解】數(shù)組元素的下標(biāo)自。開始順序編號(hào),值為4的元素是a[3]。所以只有下標(biāo)表達(dá)式的值為3オ是正確的。下標(biāo)表達(dá)式g-c中的的變量g和c的值是還未被設(shè)定的,其值不確定。a[4]的值為5,下標(biāo)為4是不對(duì)的。,的值為1,a[l]的值是2,所以也是不對(duì)的。變量c的值為す,'d'-c=3,所以正確解答是④。設(shè)有定義:"chars[12]={"string"};",則printf("%d\n",strlen(s));的輸出是①6②7③11?12【解】在C語(yǔ)言中,字符串是指在有效字符之后有字符串結(jié)束標(biāo)記符的字符列,并約定字符串的長(zhǎng)度是指字符串中有效字符個(gè)數(shù),不包括字符串的結(jié)束標(biāo)記符。存于字符數(shù)組s中的字符串是“string”,該字符串的長(zhǎng)度為6,所以輸出該字符串的長(zhǎng)度應(yīng)是6。正確的解答是①。下列C代碼中,正確的是①chara[3][]={'abc',T}; ②chara[][3]={'abc',T};③chara[3][]={ta,,"F,}; ④chara[][3]={“a”,【解】如定義數(shù)組時(shí)有初始化,其最高維的長(zhǎng)度可以省缺,由系統(tǒng)根據(jù)初始化時(shí)的初值個(gè)數(shù)確定,而其它維的長(zhǎng)度是不可以缺省的。對(duì)兩維字符數(shù)組的初始化,可以按行用字符串對(duì)其初始化,也可以按兩維數(shù)組元素的存儲(chǔ)順序逐一用字符對(duì)其元素初始化。在供選擇解答①和③中,有不是最高維的長(zhǎng)度被缺省,所以是錯(cuò)誤的。在供選擇解答①和②中,還將字符串常量寫作,abc、這也是錯(cuò)誤的。只有④,用字符串按行給兩維字符數(shù)組初始化,這才是正確的。正確的解答是④。下列C代碼中,合法的數(shù)組定義是①inta[!={"string”};②inta[5]:{0,1,2,3,4,5);(3)chara二{“string”}; ④chara[]={0,1,2,3,4,5};【解】①錯(cuò)誤的原因是整數(shù)數(shù)組不可以用字符串對(duì)其初始化。②錯(cuò)誤的原因是,數(shù)組初始化時(shí),初始化指定的值的個(gè)數(shù)不能多于數(shù)組的元素個(gè)數(shù)。③錯(cuò)誤的原因是,能用字符串初始化的只有字符指針變量,或字符數(shù)組。字符串不能對(duì)其它類型的變量初始化,包括字符變量。④是正確的,因?yàn)樽址麛?shù)組可以用小整數(shù)(作為字符的ASCH代碼值)對(duì)其元素初始化。.字符串"m\x43\\\np\102q”的長(zhǎng)度是①7 ②9 ③15 @16【解】字符串的長(zhǎng)度是指字符串中有效字符的個(gè)數(shù)。在C程序中,組成字符串的字符可以是一般的普通字符,也可以是轉(zhuǎn)義字符。其中轉(zhuǎn)義字符又可以用多種不同形式來(lái)表達(dá):反斜杠字符之后接上預(yù)先規(guī)定的字符,用來(lái)表示特殊字符或特定意義的控制字符。如單引號(hào)字符、雙引號(hào)字符、反斜杠字符等特殊字符,換行、回車、退格等控制字符。反斜杠字符之后接上1至3位ハ進(jìn)制數(shù)字符,這是直接用ハ進(jìn)制數(shù)字表示字符的ASCII代碼的方式。反斜杠字符之后接上字符x,并后接1至2個(gè)十六進(jìn)制數(shù)字符,這是直接用十六進(jìn)制數(shù)字表示字符的ASCII代碼的方式。后二種能表示C語(yǔ)言允許的任何字符。在本小題給出的字符串中,字符‘'x43,是用十六進(jìn)制數(shù)表示的ー個(gè)字符,字符'\\’表示一個(gè)反斜杠字符,字符'ゝれ表示一個(gè)換行字符,字符''102'是用ハ進(jìn)制數(shù)表示的ー個(gè)字符。這樣,所給字符串只有7個(gè)有效字符。所以,該字符串的長(zhǎng)度是7,解答為①。.函數(shù)調(diào)用ustrcat(strcpy(strl,str2),str3)”的功能是①將字符串str!復(fù)制到字符串str2中后再連接到字符串str3之后②將字符串strl連接到字符串str2中后再?gòu)?fù)制到字符串str3之后③將字符串str2復(fù)制到字符串str!中后再將字符串str3連接到字符串strl之后④將字符串str2連接到字符串str!之后再將字符串strl復(fù)制到字符串str3中【解】函數(shù)調(diào)用strcat(si,s2)是將s2字符串復(fù)制連接到si字符串之后,使si字符串比得更長(zhǎng)。函數(shù)調(diào)用strcpy(sl,s2)是將s2字符串復(fù)制到si,使si字符串的內(nèi)容與s2字符串的內(nèi)容相同。函數(shù)調(diào)用strcat(strcpy(strl,str2),str3)是先執(zhí)行strcpy(strl,str2),然后再執(zhí)行strcat(strl,str3),所以其功能是將字符串str2復(fù)制到字符串strl中,然后再將字符串str3復(fù)制連接到字符串strl之后。正確的選擇是③。.設(shè)有如下定義,則正確的敘述為charx[]={"abcdefg”},y[]={'a','b',で,'d', f,'g'};①數(shù)組x和數(shù)組y等價(jià) ②數(shù)組x和數(shù)組y長(zhǎng)度相同③數(shù)組x的長(zhǎng)度大于數(shù)組y的長(zhǎng)度④數(shù)組x的長(zhǎng)度小于數(shù)組y的長(zhǎng)度【解】不指定數(shù)組長(zhǎng)度的字符數(shù)組定義,其所需要的字節(jié)數(shù)可由初始化中給出的值的個(gè)數(shù)確定。字符數(shù)組可以用字符串初始化,也可用字符逐個(gè)給字符數(shù)組的元素初始化。但盡管用字符初始化時(shí),給出了字符串中的全部字符,但字符串自動(dòng)會(huì)含有字符串的結(jié)束標(biāo)記符,字符串初始化所需要的字節(jié)個(gè)數(shù)會(huì)比用同樣多的字符初始化多1個(gè)字節(jié)。所以只有③才是正確的。. 設(shè)有定義“inta=3,b,*p=&a;",則下列語(yǔ)句中使b不為3的語(yǔ)句是①b二?&a;②b二?p;③b=a;④b=?a;【解】定義有inta=3,b,*p=&a;對(duì)b賦值的表達(dá)式有?&a、?p、a、?a。引用變量a的值有兩種方法,ー是直接引用a,二是通過a的指針間接引用a。對(duì)于后者,又有多種表達(dá)方法,通過指向a的指針p,間接引用a的內(nèi)容,如?p?;蛲ㄟ^求地址運(yùn)算符由變量a得到其指針&a,再由這指針表達(dá)式間接引用a的內(nèi)容,如?&a。所以表達(dá)式?&a、?p和a都能弓|用變量a的值,而使b的值為3。而表達(dá)式?a是錯(cuò)誤的,因?yàn)閍不是指針變量,不能對(duì)它施行取內(nèi)容運(yùn)算符?。所以解答是④。.定義ー個(gè)具有10個(gè)元素的整型數(shù)組,應(yīng)當(dāng)使用語(yǔ)句是①inta[10]; ②inta[2,5]; ③intaロ;④int*a[10];【解】ー個(gè)具有10個(gè)元素的整型數(shù)組可以是ー維數(shù)組,定義ー維數(shù)組常用的一般形式是數(shù)組元素的類型數(shù)組名[數(shù)組元素個(gè)數(shù)常量表達(dá)式];供選擇的答案①是滿足上述要求的代碼形式;供選擇答案②的方括號(hào)中有兩個(gè)表達(dá)式,用逗號(hào)分隔,不符合上述一般形式,所以是不正確的代碼;供選擇答案③未指定數(shù)組的元素個(gè)數(shù),它是對(duì)變量a的說明,不是指定元素個(gè)數(shù)的數(shù)組定義;供選擇答案④的代碼所定義的數(shù)組元素的類型是指向整型數(shù)據(jù)對(duì)象的指針類型,其元素不是整型的,不合本小題要求。所以解答是①。.設(shè)charstrl[10]="ABCDE",str2[10]="xyz";則執(zhí)行語(yǔ)句printfstrlen(strcpy(strl,str2)));后的輸出結(jié)①9 ②8 ③5 @3【解】上述代碼是輸出表達(dá)式strlen(strcpy(strl,str2))的值,該表達(dá)式的求值順序是先執(zhí)行函數(shù)調(diào)用strcpy(strl,str2),該函數(shù)調(diào)用將str2所指字符串內(nèi)容復(fù)制到strl所指的字符數(shù)組中,并返回存放于strl中的字符串的首字符的指針。經(jīng)函數(shù)調(diào)用strcpy(strl,str2)后,strl中的內(nèi)容變成字符串“xyz”。接著求更新成字符串“xyz”的str!中的字符串的長(zhǎng)度,并輸出。這樣,代碼將輸出整數(shù)3。所以解答為④。.設(shè)intx[]={1,3,5,7,9,11,13},*p=x;則不能正確引用數(shù)組元素的表達(dá)式是①*(p-) ②*(--p) ③*(p++) ④*(++p)【解】根據(jù)C語(yǔ)言關(guān)于數(shù)組變量名表達(dá)式就是數(shù)組首元素的指針的約定,上述指針變量P的初值是指向數(shù)組X的首元素x[0]。表達(dá)式?(P-)的求值順序是先求P一,它的值是P的原先值,即x[0]的指針&x[〇]。這樣,表達(dá)式?(P-)引用的是數(shù)組x的首元素x[0],是對(duì)數(shù)組x的ー個(gè)有意義元素的引用。但這里要指出的是在該表達(dá)式求值后,變量p的值將要減去ー個(gè)單位,使P指向x[O]的前ー個(gè)位置,這是一個(gè)在程序中沒有確定意義的位置。表達(dá)式?(-P)的求值順序是先求一P,它首先讓變量p的值減去一個(gè)單位,使P指向x[0]的前ー個(gè)位置,這是一個(gè)在程序中沒有確定意義的位置。表達(dá)式?(-P)引用的不再是數(shù)組x的ー個(gè)有意義的元素。表達(dá)式?(P++)的求值順序是先求P++,它的值是P的原先值&x[0]。這樣,表達(dá)式*(p++)引用的是數(shù)組x的首元素x[0],是對(duì)數(shù)組x的ー個(gè)有意義元素的引用。在該表達(dá)式求值后,變量P的值將要增加一個(gè)單位,使P是x[〇]的后ー個(gè)元素的指針,即&x[l]。表達(dá)式*(++p)的求值順序是先求++P,它首先讓變量P的值增加一個(gè)單位,使P的值是x[0]的后ー個(gè)元素的指針,即&x[l]。這樣,表達(dá)式?(++p)引用的是數(shù)組x的元素x[l],也是ー個(gè)有意義的引用。所以解答為②。57.設(shè)intx[]:{1,2,3,4},y,*p=&x[l];則執(zhí)行語(yǔ)句y=(*—p)++;后變量y的值為①1 ②2 ③3 @4【解】上述指針變量P的初值是指向數(shù)組x的元素x[l]o表達(dá)式y(tǒng)二(?一p)++的求值順序是先求一p,它首先讓變量P的值減去ー個(gè)單位,使P指向x[0]。接著求表達(dá)式?一p,這是對(duì)x[〇]的引用。表達(dá)式(*—p)++也就是X[〇]++,它的值是X[0]的原來(lái)值1。最后,表達(dá)式y(tǒng)=(*—p)++將1賦給變量y,使y的值為1。經(jīng)上述表達(dá)式求值后,x[0]的值變成2。所以解答為①。.在C語(yǔ)言中,下列說法中,錯(cuò)誤的敘述是①函數(shù)定義可以分為兩個(gè)部分:函數(shù)說明部分和函數(shù)體②主函數(shù)可以調(diào)用任何非主函數(shù)③任何非主函數(shù)可以調(diào)用其它任何非主函數(shù)④程序可以從任何函數(shù)開始執(zhí)行【解】每個(gè)C函數(shù)的定義分兩部分,函數(shù)說明部分和函數(shù)體,所以敘述①是正確的敘述。在C語(yǔ)言中,函數(shù)可以遞歸調(diào)用,主函數(shù)可以調(diào)用程序中的任何函數(shù),當(dāng)然可以調(diào)用任何非主函數(shù)的其它函數(shù),所以敘述②是ー個(gè)正確的敘述。同樣理由,敘述③也是正確的。C語(yǔ)言規(guī)定,C程序只有一個(gè)主函數(shù),并總是從主函數(shù)開始執(zhí)行,不能從非主函數(shù)開始執(zhí)行。所以,說程序可以從任何函數(shù)開始執(zhí)行是錯(cuò)誤的。所以解答是④。.函數(shù)調(diào)用時(shí),下列說法中不正確的是①若用值傳遞方式,則形式參數(shù)不予分配內(nèi)存②實(shí)際參數(shù)和形式參數(shù)可以同名③主調(diào)函數(shù)和被調(diào)用函數(shù)可以不在同一個(gè)文件中④函數(shù)間傳遞數(shù)據(jù)可以使用全局變量【解】在C語(yǔ)言中,函數(shù)的形式參數(shù)是函數(shù)的一種局部變量,函數(shù)調(diào)用時(shí),不管形式參數(shù)的傳遞方式,系統(tǒng)都要為被調(diào)用函數(shù)的形式參數(shù)分配內(nèi)存。所以,敘述①是不正確的。因函數(shù)的形式參數(shù)當(dāng)作函數(shù)的局部變量,形式參數(shù)與實(shí)際參數(shù)是否同名,系統(tǒng)是不予區(qū)別的。所以敘述②是正確的。為了能正確識(shí)別和翻譯調(diào)用函數(shù)的代碼,在函數(shù)調(diào)用處,有關(guān)被調(diào)用函數(shù)的函數(shù)名、返回結(jié)果,以及形式參數(shù)等詳細(xì)信息是應(yīng)該知道的。如被調(diào)用函數(shù)與調(diào)用代碼在同一源程序文件,并且被調(diào)用函數(shù)的定義出現(xiàn)在調(diào)用代碼之前,在調(diào)用處能知道全部被調(diào)用函數(shù)的調(diào)用信息。但如被調(diào)用函數(shù)的定義出現(xiàn)在調(diào)用代碼之后,或被調(diào)用函數(shù)的定義在別的源程序文件,為了能知道如何正確調(diào)用被調(diào)用函數(shù),只要對(duì)被調(diào)用函數(shù)給出它的函數(shù)說明即可。所以③,主調(diào)函數(shù)和被調(diào)用函數(shù)不在同一個(gè)源程序文件中也是可以的。函數(shù)之間傳遞信息除通過函數(shù)的形式參數(shù)外,也可通過全局變量。即調(diào)用處將有關(guān)被調(diào)用函數(shù)需要的信息預(yù)放在某些全局變量中;被調(diào)用函數(shù)執(zhí)行時(shí),引用這些全局變量,并將執(zhí)行結(jié)果也放在這些全局變量中;函數(shù)調(diào)用返回后,調(diào)用代碼之后就可引用調(diào)用函數(shù)留在這些全局變量中的信息。所以敘述④也是正確的。由以上所敘,解答為①。.執(zhí)行下列程序intfun(intxl,intx2){intx;xl>x2?(x=3):(x=4);returnx+xl;main(){printf(tt%d\n,,>fun(7,8));}后輸出結(jié)果是①9 ②10 ③11 ④12【解】上述程序中,主函數(shù)以實(shí)際參數(shù)7和8調(diào)用函數(shù)fun,并輸出函數(shù)的返回值。函數(shù)fun被調(diào)用時(shí),形式參數(shù)xl的初值是7,x2的初值是8。函數(shù)執(zhí)行表達(dá)式語(yǔ)句xl>x2?(x=3):(x=4)這是ー個(gè)條件表達(dá)式,因條件xl>x2不成立,條件表達(dá)式求(x=4),該表達(dá)式的求值使函數(shù)的局部變量x的值為40最后,函數(shù)返回x+xl的值11。所以解答為③。.設(shè)指針x指向的整型變量值為25,則“printf("%d\n",++*x);”的輸出是①23②24③25@26【解】若指針變量x指向某個(gè)變量,例如指向變量v,并且變量v的值是25〇則表達(dá)式++*x的值是26。這是因?yàn)楸磉_(dá)式的計(jì)算順序可加圓括號(hào)表達(dá)成(++(*x)),首先是?X,是對(duì)X所指變量V的引用,所以++*X就是++V。++V是先讓變量V增1,并以增1后的V的值為表達(dá)式++V的結(jié)果,其值是26。所以解答是④。.若有說明:“inti,j=7,*p=&i;",則與“i=j;”等價(jià)的語(yǔ)句是①i二?p;②*p二?&j;③i二&j;④i二**p;【解】指針變量p指向變量i時(shí),表達(dá)式i二?p等價(jià)于i=i:表淵*p=*&j等價(jià)于i=j;而表達(dá)式i=&j企圖將整型變量的指針賦給整型變量,這是錯(cuò)誤的;表達(dá)式i=**p也是ー種錯(cuò)誤的表達(dá)式。p是指針,*p是p所指變量j,**p是企圖將整型變量j當(dāng)作指針,并想通過j間接引用某個(gè)變量。所以解答是②。.若有說明語(yǔ)句“inta[10],*p=a;",對(duì)數(shù)組元素的正確引用是①a[p]②p[a]③*(p+2)④p+2【解】在C語(yǔ)言中,約定數(shù)組名單獨(dú)出現(xiàn)在表達(dá)式中時(shí),它表示數(shù)組首元素的指針。有inta[10],則a可以作為&a[0]使用。另有整型指針變量p,代碼p=a實(shí)現(xiàn)p指向數(shù)組a的首元素。則表達(dá)式?(p+2)是引用數(shù)組元素a[2]o表達(dá)式a[p]和p[a]都是不正確的,下標(biāo)必須是整型表達(dá)式,不可以是指針表達(dá)式。表達(dá)式p+2是指針表達(dá)式,它的值是&p[2]。所以只有表達(dá)式?(p+2)引用數(shù)組a的元素a[2]。所以解答是③。.下面各語(yǔ)句中,能正確進(jìn)行賦字符串操作的語(yǔ)句是①chars[5]={"ABCDE"};②chars[5]={》’,,B',5C',,D',田リ;(3)char*s;s=“ABCDE”;④char*s;scanf("%s”,s);【解】字符串最終存儲(chǔ)于字符數(shù)組中,存儲(chǔ)字符串的字符數(shù)組可以是程序主動(dòng)引入的(定義或動(dòng)態(tài)分配),也可以是由系統(tǒng)分配的。其中字符數(shù)組用字符串常量初始化就是字符串存儲(chǔ)于由程序引入的字符數(shù)組的例子。給字符指針賦字符串則是系統(tǒng)自動(dòng)分配字符串存儲(chǔ)空間的例子。給字符指針賦字符串常量并不是將一個(gè)長(zhǎng)長(zhǎng)的字符串常量存于字符指針變量中,而是將字符串常量存儲(chǔ)于常量區(qū),并將存儲(chǔ)這個(gè)字符串常量的首字節(jié)地址賦給指針變量,讓指針變量指向字符串常量的首字符。對(duì)于以字符串常量作為字符數(shù)組初值的情況,要求字符數(shù)組足夠的大,能存得下字符串常量。這里有一個(gè)特別的規(guī)定,若數(shù)組的大小少于存儲(chǔ)字符串有效字符的字節(jié)個(gè)數(shù),系統(tǒng)將報(bào)告錯(cuò)誤;當(dāng)字符數(shù)組的大小只能存儲(chǔ)字符串的有效字符,而不能存儲(chǔ)字符串結(jié)束標(biāo)記符時(shí),則存儲(chǔ)于字符數(shù)組中的內(nèi)容是字符序列,因沒有存儲(chǔ)字符串結(jié)束標(biāo)記符,存儲(chǔ)的內(nèi)容就不是字符串。如代碼chara[5="ABCDE"。另外,給字符數(shù)組元素逐一賦字符初值,并在字符初值中沒有字符串結(jié)束標(biāo)記符,則存于字符數(shù)組中的內(nèi)容也不是字符串。如代碼chars[5]=「AYB—CJD—E,}。特別要注意當(dāng)字符指針還未指向某個(gè)字符數(shù)組的元素時(shí),不可以通過字符指針輸入字符串。如代碼char*s;scanf("%s",s)o若寫成char*str;scanf("%s”,&str)更是錯(cuò)誤的了。由于C語(yǔ)言規(guī)定數(shù)組不能相互賦值,所以只能將字符串常量賦給某字符指針。如代碼char*s;s="ABCDE”是正確的。實(shí)際上,字符串“ABCDE”被存儲(chǔ)于常量區(qū)中,向指針變量賦的是字符指針,讓s指向其中的字符,ベ。所以解答是③。.若有以下定義,則不能表示a數(shù)組元素的表達(dá)式是inta[10]={1,2,3,4,5,6,7,8,9,10},*p二a;①*p②a[10]③*a④a[p-a]【解】上述定義代碼定義了有10個(gè)元素的整型數(shù)組a,和定義指針變量p,并讓p指向數(shù)組元素a[0]。所以代碼?p是引用a[0]。由于數(shù)組a只有10個(gè)元素,最后ー個(gè)元素是a[9],表達(dá)式a[10]是錯(cuò)誤的。數(shù)組名a可以作為a的首元素的指針,表達(dá)式?a就是a[0],是對(duì)數(shù)組a的首元素a[0]的引用。指針p的值是a,表達(dá)式p-a的值是0,所以a[p-a]就是a[0]。所以解答是②。66,若有以下的定義,則值為3的表達(dá)式是inta[]={1,2,3,4,5,6,7,8,9,10),*p=a;①p+=2,*(p++) ②p+=2,*++p③p+=3,*p++④p+=2,++*p【解】數(shù)組a有10個(gè)元素,分別有值1至10,指針變量p指向a[〇]。①逗號(hào)表達(dá)式p+=2,*(p++),先是p+=2使p指向a[2],接著是*(p++),以當(dāng)時(shí)p所指變量a[2]取內(nèi)容3為表達(dá)式的值,同時(shí)使p指向a[3]。②逗號(hào)表達(dá)式p+=2,*++p,先是p+=2使p指向a[2],以后是?++p,又使p增1,讓它指向a[3],并取指針p所指變量a[3]的內(nèi)容4作為表達(dá)式的值。③逗號(hào)表達(dá)式p+=3,*p++,先是p+=3使p指向a[3],以后是?p++,表達(dá)式的值是a[3]為4,而使p指向a[4]。④逗號(hào)表達(dá)式p+=2,++*p,先是p+=2,使p指向a⑵,以后是++*p,因當(dāng)時(shí)的?p就是a[2],++a[2]使a[2]增1,變成4,并以4為表達(dá)式的值。所以只有p+=2,*(p++)的值是3。所以解答是①。. 執(zhí)行語(yǔ)句"chara[10]={"abed"},*p=a;"后,*(p+4)的值是①"abed"②d③へ0,④不能確定【解】若有chara[10]="abed",*p=a,則指針變量p指向a[0]。在表達(dá)式?(p+4)中,p+4指向a[4],*(p+4)就是a[4]。由于用字符串“abed”給字符數(shù)組a賦初值,a[4]的值是字符串結(jié)束標(biāo)記符、0,所以解答是③。.若有以下定義,則數(shù)值為4的表達(dá)式〇。intw[3][4]={{0,1},{2,4},{5,8}},(*p)[4]=w;①*w[l]+l②p++,*(p+l)③w⑵⑵④【解】?jī)删S數(shù)組定義有多種賦初值的辦法,問題給出的代碼是按行給數(shù)組的部分元素賦初值。它們分別是w[0][0]=〇、w[O][l]=l>w[l][0]=2,w[l][l]=4、w[2][0]=5>w⑵[1]=8。根據(jù)約定,未指定初值的元素自動(dòng)置全〇值。指針變量p是ー個(gè)指向具有四個(gè)int型元素的一維數(shù)組的指針,定義時(shí)的初值使它指向數(shù)組w的第一行。①的代碼,*w[l]+l中的w[l]是指向w[l][〇的指針,*w[l]就是w[l][0],其值是2,*w[l]+l的值是3。②的代碼是逗號(hào)表達(dá)式,“p++,*(p+D”先使p指向數(shù)組w的第二行,*(p+1)中的p+1是指向數(shù)組w的第三行,*(p+1)是指針值,指向數(shù)組w的第三行的第一個(gè)元素,即&w[2][0]。③的代碼w[2][2]引用數(shù)組w第三行的第三列元素,其值是0。④的代碼p[l][l]引用數(shù)組w第二行的第二列元素w[l][l],其值是4。所以解答是④。.若有下面的程序片段,則對(duì)數(shù)組元素的錯(cuò)誤引用是〇。inta[12]={0},*p[3],**pp,i;for(i=0;i<3;i++)p[i]=&a[i+4];PP=P;①PP[0]⑴②a[10]③p[3][l]④*(*(p+2)+2)【解】上述代碼定義變量a是有!2個(gè)整型元素的數(shù)組,它的初值全是〇〇p是有3個(gè)元素的指針數(shù)組,每個(gè)指針能指向整型變量。pp是指針的指針,它能指向ー個(gè)指向整型變量的指針,i是ー個(gè)整型變量。執(zhí)行代碼for(i=0;i<3;i++)p[i]=&a[i*4]使指針數(shù)組p的元素p[0]指向a[4],p[l]指向a[5],p[2]指向a[6]o代碼pp=p使指針變量pp指向p[0]o①,代碼pp[O][l]用指針表達(dá)可等價(jià)地寫成?(*pp+l)。其中?pp就是p[〇],p[〇]的值是&a[4],*pp+l的值是&a⑷+1=&a[5],*(*pp+l)就是a[5]。②,代碼a[10]當(dāng)然是引用數(shù)組a的元素。③,代碼p[3][l]因數(shù)組p只有三個(gè)元素,沒有p[3],所以是錯(cuò)誤的。④,代碼?(*(p+2)+2)中的(p+2)是&p[2],*(p+2)是p[2],其值是&a[6],*(p+2)+2的值是&a[8],*(*(p+2)+2)引用的是a[8]。所以解答是③。.若有如下定義和語(yǔ)句,則輸出結(jié)果是〇。int**pp,*p,a=10,b=20;pp=&p;p=&a;p=&b;printf(<4%d,%d\n",*p,**pp);①10,20②10,10③20,10④20,20【解】上述代碼定義變量pp是指針的指針,它能指向ー個(gè)指向整型變量的指針。定義變量p是指針,它能指向一個(gè)整型變量。a是ー個(gè)整型變量,它有初值10ob也是ー個(gè)整型變量,它有初值20〇代碼pp=&p使pp指向p,p=&a使p指向a,p=&b又使p指向b,不再指向a。所以?p是引用b,其值為20。**pp是通過pp間接引用p,再通過p間接引用b,所以也是20。所以解答是④。.若有以下定義和語(yǔ)句,則對(duì)w數(shù)組元素的非法引用是〇。intw[2][3],(*pw)[3];pw=w;①*(w[0]+2)②*pw[2]③pw[〇][〇]④*(pw[l]+2)【解】上述代碼定義2行3列的兩維數(shù)組w,定義能指向有三個(gè)整型元素ー維數(shù)組的指針pw,并讓pw指向數(shù)組w的第一行。①,代碼?(w[0]+2)中的W[O]是&w[〇][〇],w[0]+2是&w[〇][2],所以,*(w[0]+2)就是W[〇][2]。②,代碼?pw[2]中的pw[2]是&w[2][0],該數(shù)組w只有2行沒有w[2][0],所以代碼?pw[2]是對(duì)數(shù)組w元素的非法引用。③,代碼pw[〇][〇]就是w[〇][〇]。④,代碼?(pw[l]+2)中的pw[l]就是?(pw+1),即&w[l][0],pw[l]+2就是&w[l][2],所以,*(pw[l]+2)就是w[l][2]。所以解答是②。.函數(shù)調(diào)用語(yǔ)句“f((el,e2),(e3,e4,e5))函中參數(shù)的個(gè)數(shù)是〇。①1 ②2 ③4 ④5【解】上述函數(shù)調(diào)用中,(el,e2)和(e3,e4,e5)是兩個(gè)帶括號(hào)的表達(dá)式,所以函數(shù)調(diào)用只提供兩個(gè)實(shí)參,其中第一個(gè)實(shí)參先計(jì)算el的值,然后計(jì)算e2,并以e2的值為實(shí)參。第二個(gè)實(shí)參順序計(jì)算e3,e4,e5,并以e5的值為實(shí)參。所以解答是②。.C語(yǔ)言中,函數(shù)的隱含存儲(chǔ)類型是〇。①auto②static③extern④無(wú)存儲(chǔ)類別【解】由于C函數(shù)內(nèi)不能再定義函數(shù),C函數(shù)的存儲(chǔ)類型只能是靜態(tài)的或外部的之一。若定義函數(shù)時(shí)不指定存儲(chǔ)類型是靜態(tài)的,則它的存儲(chǔ)類型就是外部的(extern),即函數(shù)允許被程序的其它函數(shù)調(diào)用。所以解答是③。.以下對(duì)C語(yǔ)言函數(shù)的有關(guān)描述中,正確的是〇。①在C語(yǔ)言中,調(diào)用函數(shù)時(shí),只能把實(shí)參的值傳遞給形參,形參的值不能傳遞給實(shí)參②C函數(shù)既可以嵌套定義,又可以遞歸調(diào)用③函數(shù)必須有返回值,否則不能使用函數(shù)④C程序中,有調(diào)用關(guān)系的所有函數(shù)必須放在同一個(gè)源程序文件中【解】C語(yǔ)言規(guī)定,調(diào)用函數(shù)時(shí),只能把實(shí)參的值傳遞給函數(shù)的形參。函數(shù)調(diào)用時(shí),形參從實(shí)參表達(dá)式得到初值,形參也是函數(shù)的ー種局部變量,其值可以改變,但形參的值不能傳回給對(duì)應(yīng)的實(shí)參。當(dāng)函數(shù)設(shè)置非指針類型的形參時(shí),實(shí)參可以是同類型的一般表達(dá)式;當(dāng)函數(shù)設(shè)置指針類型的形參時(shí),對(duì)應(yīng)的實(shí)參也必須是同類型的指針表達(dá)式。所以敘述①是正確的。C函數(shù)雖可以遞歸調(diào)用,但同時(shí)規(guī)定,在函數(shù)內(nèi)不能再定義函數(shù),所以敘述②是錯(cuò)誤的。通常C函數(shù)會(huì)有返回值,但也可以沒有返回值,有許多情況,函數(shù)的執(zhí)行是完成某種預(yù)定的工作,并沒有返回值,所以敘述③是不正確的。在C程序中,如函數(shù)未指定是靜態(tài)的,則就是外部的,能讓別的文件中的函數(shù)調(diào)用,但函數(shù)要調(diào)用別的文件中的函數(shù),在調(diào)用代碼之前,需對(duì)它作說明,所以敘述④也是不正確的。正確的解答只有①。.設(shè)函數(shù)的功能是交換x和y的值,且通過正確調(diào)用返回交換結(jié)果。不能正確執(zhí)行此功能的函數(shù)是〇。funa(int*x,int*y){int*p;*p二*x;*x二*y;*y二*p;)funb(intx,inty){intt;t二x;x二y;y二t;}func(int*x,int*y){intp;p二*x;*x二*y;*y二p;)④fund(int*x,int*y){int*p;*x二*x+*y;*y二?x一?y;*x二?x一?y;【解】設(shè)計(jì)實(shí)現(xiàn)交換兩個(gè)變量值的函數(shù)。希望函數(shù)調(diào)用能改變調(diào)用環(huán)境中的變量,方法之一是讓函數(shù)設(shè)置指針類型的形參,實(shí)參傳送給形參的是希望交換值的兩個(gè)變量的指針。函數(shù)的兩個(gè)形參得到這兩個(gè)變量的指針后,函數(shù)就能通過形參間接引用要交換值的變量,或引用它們的值,或改變它們的值。從而實(shí)現(xiàn)從函數(shù)傳回信息存于調(diào)用環(huán)境的變量中。以上所述是設(shè)計(jì)交換變量值函數(shù)的一般原則,具體編寫函數(shù)時(shí)還需注意對(duì)上述原則的正確應(yīng)用。對(duì)于函數(shù)funa,該函數(shù)的定義滿足設(shè)置指針形參,并通過指針形參間接引用環(huán)境變量的要求。但是在函數(shù)體中定義了指針變量P,并在P未明確設(shè)定它所指向的變量下,代碼?P=*x企圖將值存入它所指的變量中,這是初學(xué)者經(jīng)常出現(xiàn)的ー種嚴(yán)重的錯(cuò)誤。該函數(shù)因有錯(cuò),不能實(shí)現(xiàn)交換變量值的功能。對(duì)于函數(shù)funb,該函數(shù)不定義指針形參,函數(shù)體也沒有可用的指針間接引用調(diào)用環(huán)境中的變量,所以該函數(shù)也不能實(shí)現(xiàn)交換變量值的功能。對(duì)于函數(shù)func,該函數(shù)正確定義了指針形參,函數(shù)體也正確通過指針形參間接引用環(huán)境中的變量,并正確定義了自己的局部變量。該函數(shù)能實(shí)現(xiàn)交換變量值的功能。對(duì)于函數(shù)fund,該函數(shù)也正確定義指針形參和函數(shù)體通過形參間接引用環(huán)境變量。特別要指出的是,該函數(shù)是利用?x和?y的舊值與新值之間的關(guān)系實(shí)現(xiàn)問題要求的。其中第一個(gè)賦值使?x存有原來(lái)未交換之前的*x與*y之和;第二個(gè)賦值從這個(gè)和中減去原來(lái)的?y,并將差賦給?y,使*y的值是交換之前的?x的值;第三個(gè)賦值再次從和中減去新的*y,即減去交換之前的?X,這個(gè)差就是交換之前的?y,并將差賦給?X。經(jīng)以上三個(gè)賦值,實(shí)現(xiàn)兩變量之間的值交換。所以不能正確執(zhí)行交換變量值的函數(shù)是funa和funb,即正確選擇是①和②。76.要求函數(shù)的功能是在ー維數(shù)組a中查找x值。若找到,則返回所在的下標(biāo)值;否則,返回〇。設(shè)數(shù)據(jù)放在數(shù)組元素的a[l]到a[n]中。在以下給出的函數(shù)中,不能正確執(zhí)行此功能的函數(shù)是〇。funa(int*a,intn,intx){*a=x;while(a[n]!=x)n--;returnn;)funb(int*a,intn,intx){intk;for(k=1;k<=n;k++)if(a[k]==x)returnk;return0;)func(intaロ,intn,intx){int*k;a[0]-x;k=a+n;while(*k!=x)k一;returnk-n;④fund(inta[],intn,intx){intk=0;dok++;while((k<n+l)&&(a[k]!=x));if((k<n+l)&&a[k]==x))returnk;elsereturn0;)【解】在數(shù)組中找指定值是經(jīng)常遇到的計(jì)算要求,有多種編程方法。在這里,數(shù)據(jù)預(yù)放在數(shù)組下標(biāo)1至n的元素中,下標(biāo)為O的元素沒有放數(shù)據(jù),程序可以利用這個(gè)位置簡(jiǎn)化查找函數(shù)。函數(shù)funa先將要查找的值放入a[0],從數(shù)據(jù)表的最后ー個(gè)元素開始逆序向前查找。這樣做的好處是循環(huán)條件不必?fù)?dān)心因數(shù)組中原先沒有值為x的元素而一直向前,訪問不是數(shù)表的元素,需插入條件n>0。在a[0]處放入x后,這個(gè)條件就不必要了,循環(huán)至少在訪問了a[0]后終止,并返回。值。所以該函數(shù)能完成指定的功能。函數(shù)funb采用常規(guī)的辦法編寫,循環(huán)在a[l]與a[n]之間順序?qū)ふ?一旦找到立即返回找到處的下標(biāo),直至查找循環(huán)結(jié)束,查不到指定的值時(shí),返回〇值。函數(shù)func采用與函數(shù)funa相同的方法,不過是另引入ー個(gè)指針變量。但是該函數(shù)return語(yǔ)句后的表達(dá)式有嚴(yán)重的錯(cuò)誤,應(yīng)返回k-a,兩指針的差是ー個(gè)整數(shù),在這里是找到元素的下標(biāo)。表達(dá)式k-n是指針k向前移n個(gè)位置的指針值。函數(shù)fund預(yù)置k為0,循環(huán)讓k增1,并在k在界內(nèi)和a[k]不等于x的情況下繼續(xù)循環(huán)。循環(huán)結(jié)束有兩種情況,或k已不在界內(nèi),或k在界內(nèi),并且a[k]等于X。若是后者,函數(shù)返回k,而若前者,函數(shù)返回0。該函數(shù)也能正確完成查找工作。這樣,不能正確完成查找工作的函數(shù)是函數(shù)func。所以正確的選擇是③。.以下程序的輸出結(jié)果是〇。ttinclude<stdio.h>subl(chara,charb){charc;c=a;a=b;b=c;}sub2(char*a,charb){charc;c二*a;*a=b;b=c;}sub3(char*a,char*b){charc;c二*a;*a=*b;*b=c;}main(){chara,b;a二 、A';セニ 、B‘; sub3(&a,&b); putchar(a); putchar(b);a二 、A'; b二 、B‘; sub2(&a,b); putchar(a) ; putchar(b);a二 、A’;セニ 、B‘; subl(a,b); putchar(a); putchar(b);)①BABBAB②ABBBBA③BABABA④BAABBA【解】在上述程序中,函數(shù)subl完成兩形參值的交換,與實(shí)參提供的變量無(wú)關(guān),這是ー個(gè)沒有意義的函數(shù)。函數(shù)sub2將第二個(gè)形參的值置入由第一個(gè)指針形參所指的變量中,指針形參所指的變量由調(diào)用時(shí)的實(shí)參提供。函數(shù)sub3完成將兩個(gè)形參所指的變量的值交換的工作。程序調(diào)用sub3,使變量a和b的值交換輸出BA;調(diào)用sub2,使變量b的值傳送到a,輸出BB;調(diào)用subl,變量a和b的值不改變,輸出AB。所以程序輸出BABBAB。正確解答是①。. 設(shè)有定義語(yǔ)句“int(*ptr)[10];”,其中的ptr是①10個(gè)指向整型變量的指針②指向10個(gè)整型變量的函數(shù)指針③ー個(gè)指向具有10個(gè)元素的ー維數(shù)組的指針④具有10個(gè)指針元素的ー維數(shù)組【解】代碼"int(*ptr)[10];”的分析過程是,因圓括號(hào),括號(hào)內(nèi)的ptr先與字符?結(jié)合,字符?修飾標(biāo)識(shí)符ptr,使它是ー種指針;接著與后面的ー對(duì)方括號(hào)結(jié)合,表示是這樣ー種指針,是指向ー維數(shù)組的;再有方括號(hào)中的10,說明這種數(shù)組有10個(gè)元素。至此,ptr是指向含10個(gè)元素的ー維數(shù)組的指針。最后,是最前面的面,表示數(shù)組元素是血類型的。所以,ptr是ー個(gè)指向具有!0個(gè)int型元素的一維數(shù)組的指針。所以解答是③。另外,要是①,10個(gè)指向整型變量的指針,就是ー個(gè)指針數(shù)組,上述代碼應(yīng)寫成“int*ptr[10];",即ptr是ー個(gè)有!0個(gè)指向整型變量的數(shù)組。要是②,返回值是指向10個(gè)整型變量的函數(shù)的指針,上述代碼應(yīng)寫成“int(*(*ptr)())[10];",即ptr是指針,指向ー種函數(shù),函數(shù)的返回值又是ー種指針,指向10個(gè)元素的數(shù)組,數(shù)組的元素是整型的。下面的代碼是這樣的函數(shù)指針和函數(shù)的例子:#include<stdio.h>inta[][10]={{1,234,5,6,7,8,9,0},{0,1,2,3,4,567,8,9}};int(*(*ptr)(int))[10];int(*f(intn))[10]{returna+n;)voidmain(){int(*p)[10],*q;ptr=f;/?讓ptr指向函數(shù)f*/p=ptr(O); q=*p; printf("%d\n",*q);p=ptr(l); q=*p; printf("%d\n",*q);)在上述代碼中,函數(shù)有一個(gè)int型的形參。要是④,其意義與①相同,上述代碼應(yīng)寫成“int*ptr[10];",即ptr是ー個(gè)有10個(gè)元素的數(shù)組,數(shù)組元素是指向整型變量的指針。.計(jì)算平方數(shù)時(shí),不可能引起二義性的宏定義是①#defineSQR(x)x*x ②#defineSQR(x)(x)*(x)③#defi

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論