![C語言概念題100(解答)_第1頁](http://file4.renrendoc.com/view/24a38e1f8281549d26cddd71bd6dd931/24a38e1f8281549d26cddd71bd6dd9311.gif)
![C語言概念題100(解答)_第2頁](http://file4.renrendoc.com/view/24a38e1f8281549d26cddd71bd6dd931/24a38e1f8281549d26cddd71bd6dd9312.gif)
![C語言概念題100(解答)_第3頁](http://file4.renrendoc.com/view/24a38e1f8281549d26cddd71bd6dd931/24a38e1f8281549d26cddd71bd6dd9313.gif)
![C語言概念題100(解答)_第4頁](http://file4.renrendoc.com/view/24a38e1f8281549d26cddd71bd6dd931/24a38e1f8281549d26cddd71bd6dd9314.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
C語言概念題解答選編為了切實掌握c語言的基本概念,特列出有關內容的選擇題和填充題等供讀者參考。讀者在自學本材料時,希望讀者先自己給出解答,然后再來閱讀習題的參考解答。單項選擇題I,以下字符列中,能作為c程序自定義標識符的是①num(10) ②file_bak③breakDclass+2【解】C語言規(guī)定,C程序的標識符的命名規(guī)則是要由英文字母或下線字符開頭,由英文字母、下線字符和數(shù)字符構成的字符序列,并且不可以與C語言規(guī)定的保留字相同。在供選擇的答案中,選擇①含有括號字符,不是標識符,它好象是函數(shù)調用表達式;選擇②符合c語言關于標識符的構成規(guī)則,所以它可以作為標識符;選擇③是c語言的保留字,它不可以再被程序設定為標識符;選擇④是ー個加法運算算術表達式,也不可以作為程序的標識符。所以解答是②。下列字符列中,不是C語言提供的合法關鍵字是①switch②begin③case④default【解】因C語言的關鍵字表中沒有begin,它不是C語言的關鍵字。所以解答是②。鍵盤符號是指如其標記所示能顯示的字符。下列字符中屬于鍵盤符號的是①ヽ②\n③\t?\b【解】鍵盤符號是指鍵盤上有標記,并能在顯示器上直接以其標記字樣顯示的字符。有許多鍵盤上有標記的符號,它們不是用于直接顯示的,鍵入這種字符用于表示特定的意義,如常用的回車符。為了能讓C程序標記這種符號,程序采用轉義字符的方式書寫這種字符。如‘\n‘、、‘、‘\b'都不是鍵盤字符,在C語言中,它們都得用轉義字符來表達。只有字符‘ヽ’オ是鍵盤字符。所以解答是①。但在C程序中,反斜杠字符、已特別用作轉義字符的引導符,它也得用轉義字符的表達形式書寫,將它寫成、,下列字符列中,不是用來表達轉義字符是①\\ ②ヽ’③074 ④\0【解】轉義字符有三種書寫形式:反斜杠字符后接上某個規(guī)定的字符;反斜杠字符后接上1至3個ハ進制數(shù)字符;反斜杠字符和字符x之后接上1至2個十六進制數(shù)字符。后兩種分別以ハ進制數(shù)和十六進制數(shù)直接給出字符的ASCI!代碼值。而074是八進制整數(shù),不是轉義字符。所以解答是下列字符列中,可以作為“字符串常量”的是①ABC②"ABC"③'abc'④'a'【解】C程序中,ー個字符串常量是表示ー個字符序列,書寫時,用雙引號字符前后括住這個字符序列。所以只有"ABC"是一個正確的字符串常量,其余都不是。其中,ABC可作為標識符,字符列,abc,不能出現(xiàn)在C程序中,,a,是ー個字符常量。所以解答是②。在用一個字節(jié)存儲ー個字符的系統(tǒng)中,,'n,在內存占用的字節(jié)數(shù)是①1 ②2 ③3 ④4【解】一般來說,ー個字符在內存中只占1個字節(jié),,ヽn,是轉義字符,其意義是換行符,它作為一個字符存儲,在內存也只占1個字節(jié)。所以解答是①。字符串〃xyz"在內存占用的字節(jié)數(shù)是①3②4 ③6 @8【解】字符串中的每個字符占1個字節(jié),但C程序在存儲字符串時,要在最后ー個有效字符后面接上1個字符串結束的標記符,'0,。這樣,存儲字符串常量〃xyz"需要4個字節(jié)。所以解答是②。8,在以下字符列中,合法的長整型常數(shù)是①0L②4962710 ③0.054838743 ④2.1869el0【解】為表示不同范圍的整數(shù),整型數(shù)據(jù)分短整型、基本型和長整型,并對三種整型內部表示的最高位的不同理解,又分別分成無符號和帶符號兩種。若要明確指明一個整數(shù)是長整型的,必須在整數(shù)之后接上字符’!7。所以0L是一個長整型的整型常量,而4962710是基本整型數(shù)據(jù),而對于用2個字節(jié)表示一個基本整型數(shù)據(jù)的系統(tǒng)來說,該整數(shù)將因超出范圍而是ー個錯誤的整數(shù);0.054839743和2.1869elO都是double型的實數(shù)。所以解答是①。ー個char型數(shù)據(jù),它的值在內存中存放的是①ASCH代碼值②BCD代碼值③內碼值④十進制代碼值【解】計算機存儲字符,通常是存儲字符的某種代碼值。有許多種字符編碼的方法,現(xiàn)在最流行的是ASCII代碼。在C語言中,char型數(shù)據(jù)在內存中存放的是ASCII代碼。所以解答是①。設變量m,n,a,b,c,d均為〇,執(zhí)行(m=a==b)ll(n=c==d)后,m,n的值是①0,0②0,1 ③1,0 @1,1【解】計算(m=a==b)ll(n=c==d)的過程是先計算邏輯或的左運算分量(m=a==b)的值,由于賦值運算符的優(yōu)先級比關系運算符=ニ的優(yōu)先級低,又先計算a==b。因a,b均為O后,所以比較結果值為1。將1賦給變量m,使變量m的值變?yōu)閗同時這個賦值運算的結果也是1,這樣邏輯運算的左運算分量的值為10由于邏輯或運算的左運算分量值為!,按照C語言對邏輯或運算優(yōu)化計算的規(guī)定,不再計算邏輯或的右運算分量,而直接得到邏輯或運算的結果為1。由于邏輯或的右運算分量不曾計算過,所以變量n的值也不為變化。這樣,上述表達式計算后,變量m的值為1,變量n的值為0。所以解答是③。.設a為5,執(zhí)行下列語句后,b的值不為2的是①b二a/2②b=6-(―a)③b=a%2④b=aく3?3:2【解】因兩個整型數(shù)據(jù)相除,結果是整數(shù),當a的值為5時,計算表達式b=a/2后,使b的值為2〇計算表達式b=6-(--a)是先計算子表達式(--a),先讓a的值減1變成4,并以減1后的a為子表達式的結果,所以子表達式的結果為4,最后使b的值為2。在計算表達式b=a%2時,求余運算a%2的結果為1,最后使變量b的值為1〇計算表達式b=av3?3:2時,先計算條件表達式av3?3:2,以2為結果,最后也使變量b的值為2〇所以解答是③。.執(zhí)行語句“x=(a=3,b=a--);”后,x,a,b的值依次為①3,3,2②2,3,2 ③3,2,3 @2,3,3【解】計算表達式X=3=3加=即ー)時,先計算賦值號右端圓括號內的逗號表達式。逗號表達式要求各子表達式順序計算,并以最后子表達式的值為整個逗號表達式的結果。所以該表達式計算時,先讓變量a的值為3,a-的值是a當時的值,以該值為結果賦給變量b,并以該值為逗號表達式的值賦給變量x,然后a的值被減少1。所以計算該表達式后,使變量x,a,b的值依次為3,2,3〇所以解答是③。.設整型變量m,n,a,b,c,d均為!,執(zhí)行"(m=a>b)&&(n=a>b)”后,m,n的值是①0,0②0,1③1,0@1,1【解】表達式(m=a>b)&&(n=a>b)是ー個邏輯表達式,它的計算過程是先計算邏輯與的左分量(m=a>b),其中又是先計算a>b。因a>b不成立,結果為0,將。賦給變量m,最后邏輯與的左分量結果為〇。由于邏輯運算采用特別的優(yōu)化計算規(guī)則,當邏輯與的左分量結果為〇時,不再計算邏輯與的右分量,而直接以〇為邏輯與的結果。所以,上述表達式計算使m的值變?yōu)椹?而n的值沒有變,依舊為1。所以解答是②。.設有語句“inta=3;”,則執(zhí)行了語句“a+=a?=a*a;”后,變量a的值是①3②〇③9?-12【解】由于賦值運算符的結合性自右至左,語句“a+二a-二a*a;”的執(zhí)行是先計算a*a,得到值9,再計算a-=a*a,使a的值為ー6,接著計算a+=a,使a的值為ー12。所以解答是?。.在以下ー組運算符中,優(yōu)先級最高的運算符是①く二②二③%@&&【解】常規(guī)運算符的優(yōu)先級自高到低的排列順序是算術運算符、移位運算符、關系運算符、按位運算符、邏輯運算符、條件運算符、賦值運算符、逗號運算符。所以問題所給的四個運算符按優(yōu)先級自高到低的排列順序是%,<=,&&,=〇所以解答是③。.設整型變量i的值為3,則計算表達式i-i后表達式的值為①〇②1③2④表達式出錯【解】有些運算符只有一個字符,也有許多運算符由兩個字符組成。特別是有些字符既可是單個字符的運算符,又能組成雙字符的運算符。編譯系統(tǒng)在識別源程序時,通常是盡量多地讀入字符,能組成多字符單詞的先盡量組成多字符單詞。所以表達式i—i,被編譯器理解為(i—)-i。另外,當表達式中某變量有后綴自增和自減運算時,先按變量的原值計算表達式,然后再對變量進行自增和自減運算。同樣地,當表達式中某變量有前綴自增和自減運算時,先對變量進行自增和自減運算,然后再按變量的新值計算表達式。按這個約定,求表達式(i-)-i是計算i-i的值為0,然后再對i作自減運算。這樣,表達式(i--)-i的值為0。所以解答是①。.設整型變量a、b、c均為2,表達式a+++b+++c++的結果是①6②9③8④表達式出錯【解】與上一小題解答的理由相同,表達式a+++b+++c++被系統(tǒng)理解成:((a++)+(b++))+(c++)。表達式“變量++”的值是變量的原來值,所以在變量a、b、c均為2的前題下,執(zhí)行上述表達式,得到結果為6。所以解答是①。.若已定義x和y為double類型,則表達式:x=l,y=x+3/2的結果是①1②2③2.0④2.5【解】由于變量x和y都是double類型,表達式x=l,y=x+3/2是先計算x=l,司1是整型的,x是double類型的,該計算先將整數(shù)1轉換成double類型的1.0L,并將!.0L賦給變量Xo計算y=x+3/2是先求3/2的值,因是兩整數(shù)相除,結果是整型值!,然后在計算x+1時,也先將1轉換成1.0L,然后求得x+1的值為2.0L,最后將該值賦給變量y,并得到整個表達式的值為2.0L,簡寫成2.0。所以解答是③。.設a=l,b=2,c=3,d=4,則表達式avb?a:cvd?a:d的結果為①4②3③2④1【解】條件運算符的優(yōu)先級比關系運算符的優(yōu)先級低,并且它的結合性是自右向左的,所以表達式a<b?a:c<d?a:d可用圓括號等價地寫成(a<b)?a:((c<d)?a:d)o因avb成立,計算結果為a的值1。所以解答是④。.設a為整型變量,下列C表達式中,不能表達數(shù)學關系式:10vavl5的是①10<a<15 ②a==11IIa==12IIa==13IIa==14③a>10&&a<15 ④!(a<=10)&&!(a>=15)【解】數(shù)學關系式10vavl5表示a只能是11,12,13,14四個值之1。用C表達式表示這個條件,可寫成a>10&&a<15,或!(av=10)&&!(a>=15),或a==11IIa==12IIa==13IIa==14等。若寫成10<a<15,該算式的計算順序是先求出I0<a的結果0或1,然后以這個結果與15比較,是否小于15,顯然這與數(shù)學式子的意義是不一致的。所以解答是①。.下列表達式中,正確的C賦值表達式是(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【解】賦值運算符是運算符之一,賦值運算也可以出現(xiàn)在表達式中。賦值運算時,出現(xiàn)在賦值運算符左邊的表達式應該是引用ー個存儲對象,例如變量。不可以是一個數(shù)值計算表達式。如表達式a=7+b+c=a+7因算術運算符比賦值運算符的優(yōu)先級高,要把a+7的結果賦給7+b+c,這是錯誤的。同樣理由,表達式a=7+b++=a+7也是錯誤的。而表達式a=(7+b,b++,a+7就是正確的賦值表達式,它是先計算賦值號左邊的括號表達式,括號表達式內是一個逗號表達式,逗號表達式要求順序逐一計算各子表達式,并以最后ー個子表達式的值作為逗號表達式的結果,最后將該結果賦給變量a。而表達式a=7+b,c=a+7則不是ー個賦值表達式,而是ー個逗號表達式,它由兩個賦值子表達式組成。所以解答是③。.若有以下定義:chara;intb;floatc;doubled;則表達式a*b+d-c值的類型為①float②int③char④double【解】基本類型的數(shù)據(jù)可以混合運算,但運算時,對要求運算分量類型相同的運算來說,如運算分量的類型不是全相同,則會有自動類型轉換發(fā)生。類型自動轉換規(guī)則規(guī)定類型低(簡單)的向類型高(復雜)的轉換。各類型由高到低的排列順序是:longdoubleヽdouble>float>unsignedlong>long>unsignedint>into這樣,若有定義:chara;intb;floatc;doubled;則表達式a*b+d-c的值的類型是double的。首先計算a*b,得到int類型的值,接著計算a*b+d,得到double類型的值,最后計算a*b+d-c,得到double類型的值。所以解答是④。.表達式“9!=7”的值是①true②非〇值③〇④1【解】關系運算的結果只有。和1,若關系成立,則結果為1;若關系不成立,則結果為〇。因關系式9!=7成立,所以表達式的結果為1。雖然1也是非。值,在供選擇的答案中有1,所以最確切的解答是④。.用十進制數(shù)表示表達式“121012”的運算結果是①1②。③14?16【解】按位運算將運算分量視作二進位的位串信息,對兩運算分量的對應位進行運算,產(chǎn)生二進位的位串信息結果。整數(shù)12最低8位二進位是00001100,整數(shù)。12是八進制數(shù),它的最低8位二進位是。。。。101。。這兩個二進位位串信息按位或運算,得到結果是。。。。111。,對應十進制數(shù)14,ハ進制數(shù)是016。所以解答是③。. 設字符型變量a=3,b=6,計算表達式c=3り)《2后c的二進制值是①00011100②00000111③00000001④00010100【解】a的值為3,寫成8位二進制數(shù)形式是00000011,b的值為6,寫成8位二進制數(shù)形式是00000110。表達式c=(aAb)vv2,先計算a與b的按位加,得到結果00000101,將這結果向左移2位,得到ニ進位的位串信息是000101〇〇。所以解答是④。.設a,b和c都是int型變量,且a=3,b=4,c=5,則下面的表達式中值為〇的是①匕‘&&'b'②a<=b③allb+c&&b-c④!((a<b)&&!cII1)【解】對于表達式兩個非〇運算分量的邏輯與結果為1。對于表達式av二b,由于關系式成立,結果也為1。又由于變量a為非〇,表達式allb+c&&b-c的結果也為1〇對于表達式!((avb)&&!clll),先是計算(avb)得到結果1;計算!c得到結果為〇;再計算它們的邏輯與,結果為〇。繼續(xù)與1求邏輯或,得到結果為1。最后,對1求邏輯非,得到結果為〇。所以解答是④。.設ch是char型變量,其值為,ぺ,則下面表達式的值是ch=(ch>='A'&&ch<='Z')?(ch-<A'+'a'):ch①A②a③Z④z【解】由于字符型變量ch的值為,A:計算表達式ch=(ch>=,A,&&ch<=,Z,)?(ch+32):ch?先計算其中條件表達式,由于條件(ch>=,A,&&chv=,Zう成立,該條件表達式以ch+32=97為結果,將該值賦給變量ch,以字符表達這個值為は。所以解答是②。.設有無符號整型變量i、j、k,i值為013,j值為0x13。計算表達式“k二?ilj?3;”后,k的值是①06 ②0177776③066④0177766【解】將變量i的ハ進制數(shù)值013寫成二進制形式為00001011,將變量j的十六進制值0x13寫成二進制數(shù)形式為00010011。表達式k=~iIj?3的計算過程是先求?i,結果用ハ進制代碼表示為0177764;接著計算j>>3,結果為02。對它們進行按位或運算結果為0177766。所以解答是④。.設a=3,b=4,執(zhí)行“printf("%d,%d”,(a,b),(b,a));”的輸出是①3,4②4,3③3,3@4,4【解】在調用格式輸出函數(shù)的語句中,其中每個格式符對應ー個輸出項,格式符d要求輸出項內容以十進制整數(shù)形式輸出。語句中的第一個格式符對應輸出項(a,b)是ー個逗號表達式,該表達式的值是b的值,所以先輸出4。接著輸出字符逗號。同樣輸出項(b,a)的值是a的值,輸出3。所以語句執(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ù)的格式字符串中的字符可以分成三類:空格類字符、其它普通字符和格式轉換說明。其中空格類字符用來自動跳過空格類字符,直至下一個非空格類字符。普通字符要求輸入字符與其完全相同。格式轉換說明對輸入字符列按格式轉換說明進行轉換,得到內部值存儲到對應輸入項所指定的存儲位置中。格式輸入函數(shù)調用scanf(ttx=%f,y=%f,,&x,&y)以普通字符x=開頭,輸入時也要先輸入x=o接著是一個浮點數(shù)輸入格式,所有能構成一個浮點數(shù)!.25的字符序列都能滿足要求。接著是普通字符列“,y二”,在輸入的浮點數(shù)之后也要有字符列“,y二”。最后又是浮點數(shù)輸入格式,同樣所有能構成一個浮點數(shù)!.25的字符序列都能滿足要求。問題給出的供選擇答案中只有x=1.25,y=1.25是正確的輸入。所以選擇③。通常,格式輸入函數(shù)調用中,不在格式字符串插入普通字符,要求輸入與格式中的普通字符匹配的字符,而是簡潔地寫上輸入格式即可。. 設a,b為字符型變量,執(zhí)行“scanf("a二%c,b二%c”,&a,&b)”后使a為W,b為,B,,從鍵盤上的正確輸入是①②③A二A,B二B④a二A,b二B【解】函數(shù)調用scanfCta=%c,b=%c,,,&a,&b)中,普通字符必須按格式字符串要求照原樣輸入,c格式對緊接的任何字符都輸入。所以實現(xiàn)問題的要求,輸入字符列應為“a=A,b=B"。另外要特別指出,在程序中,為表示字符常量,字符前后需加單引號。但用字符格式輸入字符時,在要輸入字符前后不必另鍵入單引號。若鍵入單引號,則這個單引號也將作為字符被輸入。正確的解答是④。32.設有inti=010,j=10;則執(zhí)行“printf("%d,%d\n”,++i,j—);”的輸出是①11,10②9,10③010,9(4)10,9【解】變量1和上的初值分別為ハ進制數(shù)010和十進制數(shù)10,格式輸出函數(shù)調用printf(<4%d,%d\n”,++i,j--)中,++i的值是變量i增1后的值,原來值是ハ進制數(shù)010,等于十進制數(shù)8,輸出9。j-的值是變量j減1之前的值,輸出10。格式字符串中的逗號是普通字符照原樣輸出。所以問題給出的格式輸出函數(shù)調用將輸出9,10。正確的解答是②.設x、y、z、t均為int型變量,則執(zhí)行以下語句后,t的值為x=y=z=l;t=++x||++y&&++z;①不定值②2③1④〇【解】語句序列"x=y=z=l;t=++x||++y&&++z;”使變量x的值為1,變量t是賦ー個邏輯表達式的值。在C語言中,由邏輯與和邏輯或構成的邏輯表達式有特別的計算規(guī)則,順序計算各邏輯子表達式,并當一旦能得到邏輯表達式的結果時,就立即結束邏輯表達式的計算,不再計算后繼邏輯子表達式。本題的邏輯表達式是兩個運算分量的邏輯或,而且左運算分量++x的值為非0,立即得到邏輯或運算的結果為1,并將1賦給變量t,所以變量t的值為1。正確解答為③。.設x、y、z均為int型變量,則執(zhí)行以下語句后,x、y、z的值為x=l;y=0;z=2;y++&&++zII++x;①2、1、3②2、0、3③2、1、3④2、1、2【解】語句序列“x=l;y=0;z=2;y++&&++zII++x;"先使變量x的值為1,變量y的值為0,變量z的值為2。由邏輯與和邏輯或構成的邏輯表達式的特別計算規(guī)則,順序計算各邏輯子表達式,并當一旦能得到邏輯子表達式的結果時,就立即結束邏輯子表達式的計算,不再計算該邏輯子表達式。計算y++因y的值為0,使y++&&++z的結果為0,立即去計算++x,這次計算使變量y的值變成!,而變量z的值未改變。接著計算++x,使x的值變?yōu)?〇所以經(jīng)上述語句執(zhí)行后,x、y、z的值依次為2、1、2〇正確解答為④。.假定所有變量均已正確定義,下列程序段運行后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,語句:if(!a)x一:elseif(b);if(c)x=3;elsex=4;由兩個if語句組成。首先執(zhí)行前ー個if齒]"if(!a)x--;elseif(b)由因變量a的值為0,條件!a成立,執(zhí)行x—使x的值變?yōu)?4。接著執(zhí)行后繼的if語句“if(c)x=3;elsex=4;",因變量c的值為O,條件不成立而執(zhí)行x=4,最終使變量x的值為4。正確解答是②。注意前ー個if語句的else部分的成分語句只有“if(b);”,這是一個單分支if語句,且其成分語句為空語句。.下面的程序段所表示的數(shù)學函數(shù)關系是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的值為〇〇所以程序段實現(xiàn)當變量x的值為。時,變量y的值為-15當變量x的值大于。時,置變量y的值為1;當變量x的值小于。時,置變量y的值為〇。正確解答為③。37.設inta=8,b=7,c=6,x=1;執(zhí)行語句if(a>6)if(b>7)if(c>8)x=2;elsex=3;后x的值是①。②1 ③2 ④3【解】將上述語句寫成易讀的結構化形式:if(a>6)if(b>7)if(c>8)x=2;elsex=3;該語句的執(zhí)行過程是,首先判定(a>6),因a的值是8,條件成立;接著判定(b>7),因b的值是7,條件不成立。在上述語句中,沒有對應if(b>7)的else,上述語句就因(b>7)的條件不成立而不執(zhí)行任何有意義的動作,結束該語句的執(zhí)行。這樣,變量a、b、c和x的值都不會因執(zhí)行上述語句而改變,所以變量x的值依舊保持1。所以解答是②。38.執(zhí)行下列程序段x=9;while(x>7){printf("*”);x―;}后輸出的結果是①****②***③**④*【解】上述代碼以x的初值為9,在x>7成立的情況下循環(huán),每次循環(huán)輸出ー個?字符,并讓x的值減1。共執(zhí)行2次循環(huán),也就共輸出了2個?字符。所以解答為③。39,下列語句中,錯誤的是①while(x=y)5;②dox++while(x-10);③while(0); @do2;while(a=b);【解】while語句的一般形式是:while(表達式)語句這里的表達式可以是任何合理的表達式,語句可以是任何語句,包括空語句,或表達式語句??赡軙鴮懙膚hile語句沒有任何意義,如供選擇的①while(x=y)5J和③while(0);但這兩個語句的句法沒有任何錯誤。do-while語句的一般形式是:do語句while(表達式);其中的成分語句也可以是任何語句,但供選擇答案②dox++while(x-10);中的代碼x++是一個表達式,不是語句,所以是錯誤的。正確解答是②。.循環(huán)語句afor(x=0,y=0;(y!=123)II(x<4);x++) 的循環(huán)執(zhí)行①無限次②不確定次③4次④3次【解】for循環(huán)語句的初始化部分置變量x和y的初值為0,循環(huán)條件是(y!=123)II(x<4),每次循環(huán)后變量x的值增1〇由于循環(huán)過程中變量y的值未被修改過,循環(huán)條件又是一個邏輯或,其左分量(y!=123)永遠成立,也就是循環(huán)條件永遠成立。所以該循環(huán)語句將循環(huán)執(zhí)行無限次。正確解答是①。.若i、j已定義為int類型,則以下程序段中的內循環(huán)體的執(zhí)行次數(shù)是〇。for(i=5;i;i--)for(j=0;j<4;j++){ }①20 ②24 ③25 ?30【解】問題所給的程序段的外循環(huán)是ー個for循環(huán)語句,它的初始化部分置變量i的初值為5,循環(huán)條件簡寫成i,即i!=0,每次循環(huán)后變量i的值減1。所以外循環(huán)共控制5次循環(huán)。內循環(huán)也是ー個for循環(huán)語句,它的初始化部分置變量j的初值為0,循環(huán)條件是jv4,每次循環(huán)后變量j的值增1。所以內循環(huán)共控制4次循環(huán)。這樣,如內循環(huán)的體內未曾對變量i和j有修改,在內、外循環(huán)ー起控制下,內循環(huán)的體共被重復執(zhí)行20次。正確解答是①。.假定a和b為int型變量,則執(zhí)行以下語句后b的值為a=1;b=10;do{b-=a;a++;}while(b—<0);①9②-2③T@8【解】在這個程序段中,循環(huán)開始前變量a的值為!,b的值為10,每次循環(huán)從變量b減去a,并讓a增1,并在循環(huán)條件判定時,又讓b減去1。第一次循環(huán)后,變量b的值變成9,變量a的值變?yōu)?,循環(huán)判斷時,因b的值大于〇,循環(huán)條件不成立,結束循環(huán)。但在循環(huán)判斷時,讓b減去了1,所以循環(huán)結束時,變量b的值為8。正確的解答是④。.設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)語句的初始化部分置變量x和y的初值為1,循環(huán)條件是(y<=50),每次循環(huán)后變量y的值增1,控制循環(huán)最多執(zhí)行50次。循環(huán)體有三個語句:首先在發(fā)現(xiàn)變量x的值大于等于10時,結束循環(huán);接著是當變量x除2的余數(shù)為1(即變量x是奇數(shù))時,讓變量x值增5,讓x變成偶數(shù),并直接進入下ー輪循環(huán);如變量x是偶數(shù),則從變量x減去3,讓變量x變成奇數(shù)。由上述分析知,每兩次循環(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)時,因變量x的值大于等于10,直接跳出循環(huán),這次循環(huán)是非正常結束,對變量y的修正只執(zhí)行了5次。所以循環(huán)結束后,變量y的值增至6。正確的解答是③。. 在C語言中,下列說法中正確的是①編程時盡量不要使用“do語句while(條件)”的循環(huán)②"do語句while(條件)”的循環(huán)中必須使用“break”語句退出循環(huán)③“do語句while(條件)”的循環(huán)中,當條件非。時將結束循環(huán)④“do語句while(條件)”的循環(huán)中,當條件為〇時將結束循環(huán)【解】do-while語句的一般形式是:do語句while(表達式);其語義是重復執(zhí)行其成分語句,直至表示條件的表達式值為0時結束。do-while語句是正常使用的ー種循環(huán)結構之一。do-while語句的循環(huán)結束條件由while后的表達式值為O所控制,并不一定要有break語句跳出循環(huán)來結束循環(huán)。do-while語句在條件值非〇時,將繼續(xù)循環(huán),而不是結束循環(huán)。條件值為〇時,オ結束循環(huán)。所以正確的選擇是④。.若有以下程序段,w和k都是整型變量,則不能與該程序段等價的循環(huán)語句是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語句構造一個循環(huán)控制結構,該循環(huán)結構的初值是讓變量W的值為k的值,循環(huán)結束條件是W的值等于0,循環(huán)體是讓變量w的值減1,并輸出ー個字符?。上述循環(huán)控制過程用for循環(huán)可描述如下:for(w=k;w!=0;w--)printf("ポリ;或寫成:for(w=k;w;--w)printf。’*");若用while語句,可描述如下:w=k;while(w--!=0)printfぐ'*");w++;/*在w等于。時,也執(zhí)行了一次w--,這里是對w最后減1的補嘗?/或更直觀地寫成:w=k;while(w!=0) {w一;printf(“*");}若用do-while語句,可描述如下:w二k;if(w)do{w--;printf(“*");}while(w);若寫成:w=k;do{ w--;printf。'*");}while(w!=0);是不正確的,因為原代碼當k的值為O時,不輸出字符?,而上面的改寫,當k的值為O時,將輸出數(shù)數(shù)多多的字符?。所以解答應是③。若有下列說明,則數(shù)值為4的表達式是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ù)組元素的下標自。開始順序編號,值為4的元素是a[3]。所以只有下標表達式的值為3オ是正確的。下標表達式g-c中的的變量g和c的值是還未被設定的,其值不確定。a[4]的值為5,下標為4是不對的。,的值為1,a[l]的值是2,所以也是不對的。變量c的值為す,'d'-c=3,所以正確解答是④。設有定義:"chars[12]={"string"};",則printf("%d\n",strlen(s));的輸出是①6②7③11?12【解】在C語言中,字符串是指在有效字符之后有字符串結束標記符的字符列,并約定字符串的長度是指字符串中有效字符個數(shù),不包括字符串的結束標記符。存于字符數(shù)組s中的字符串是“string”,該字符串的長度為6,所以輸出該字符串的長度應是6。正確的解答是①。下列C代碼中,正確的是①chara[3][]={'abc',T}; ②chara[][3]={'abc',T};③chara[3][]={ta,,"F,}; ④chara[][3]={“a”,【解】如定義數(shù)組時有初始化,其最高維的長度可以省缺,由系統(tǒng)根據(jù)初始化時的初值個數(shù)確定,而其它維的長度是不可以缺省的。對兩維字符數(shù)組的初始化,可以按行用字符串對其初始化,也可以按兩維數(shù)組元素的存儲順序逐一用字符對其元素初始化。在供選擇解答①和③中,有不是最高維的長度被缺省,所以是錯誤的。在供選擇解答①和②中,還將字符串常量寫作,abc、這也是錯誤的。只有④,用字符串按行給兩維字符數(shù)組初始化,這才是正確的。正確的解答是④。下列C代碼中,合法的數(shù)組定義是①inta[!={"string”};②inta[5]:{0,1,2,3,4,5);(3)chara二{“string”}; ④chara[]={0,1,2,3,4,5};【解】①錯誤的原因是整數(shù)數(shù)組不可以用字符串對其初始化。②錯誤的原因是,數(shù)組初始化時,初始化指定的值的個數(shù)不能多于數(shù)組的元素個數(shù)。③錯誤的原因是,能用字符串初始化的只有字符指針變量,或字符數(shù)組。字符串不能對其它類型的變量初始化,包括字符變量。④是正確的,因為字符數(shù)組可以用小整數(shù)(作為字符的ASCH代碼值)對其元素初始化。.字符串"m\x43\\\np\102q”的長度是①7 ②9 ③15 @16【解】字符串的長度是指字符串中有效字符的個數(shù)。在C程序中,組成字符串的字符可以是一般的普通字符,也可以是轉義字符。其中轉義字符又可以用多種不同形式來表達:反斜杠字符之后接上預先規(guī)定的字符,用來表示特殊字符或特定意義的控制字符。如單引號字符、雙引號字符、反斜杠字符等特殊字符,換行、回車、退格等控制字符。反斜杠字符之后接上1至3位ハ進制數(shù)字符,這是直接用ハ進制數(shù)字表示字符的ASCII代碼的方式。反斜杠字符之后接上字符x,并后接1至2個十六進制數(shù)字符,這是直接用十六進制數(shù)字表示字符的ASCII代碼的方式。后二種能表示C語言允許的任何字符。在本小題給出的字符串中,字符‘'x43,是用十六進制數(shù)表示的ー個字符,字符'\\’表示一個反斜杠字符,字符'ゝれ表示一個換行字符,字符''102'是用ハ進制數(shù)表示的ー個字符。這樣,所給字符串只有7個有效字符。所以,該字符串的長度是7,解答為①。.函數(shù)調用ustrcat(strcpy(strl,str2),str3)”的功能是①將字符串str!復制到字符串str2中后再連接到字符串str3之后②將字符串strl連接到字符串str2中后再復制到字符串str3之后③將字符串str2復制到字符串str!中后再將字符串str3連接到字符串strl之后④將字符串str2連接到字符串str!之后再將字符串strl復制到字符串str3中【解】函數(shù)調用strcat(si,s2)是將s2字符串復制連接到si字符串之后,使si字符串比得更長。函數(shù)調用strcpy(sl,s2)是將s2字符串復制到si,使si字符串的內容與s2字符串的內容相同。函數(shù)調用strcat(strcpy(strl,str2),str3)是先執(zhí)行strcpy(strl,str2),然后再執(zhí)行strcat(strl,str3),所以其功能是將字符串str2復制到字符串strl中,然后再將字符串str3復制連接到字符串strl之后。正確的選擇是③。.設有如下定義,則正確的敘述為charx[]={"abcdefg”},y[]={'a','b',で,'d', f,'g'};①數(shù)組x和數(shù)組y等價 ②數(shù)組x和數(shù)組y長度相同③數(shù)組x的長度大于數(shù)組y的長度④數(shù)組x的長度小于數(shù)組y的長度【解】不指定數(shù)組長度的字符數(shù)組定義,其所需要的字節(jié)數(shù)可由初始化中給出的值的個數(shù)確定。字符數(shù)組可以用字符串初始化,也可用字符逐個給字符數(shù)組的元素初始化。但盡管用字符初始化時,給出了字符串中的全部字符,但字符串自動會含有字符串的結束標記符,字符串初始化所需要的字節(jié)個數(shù)會比用同樣多的字符初始化多1個字節(jié)。所以只有③才是正確的。. 設有定義“inta=3,b,*p=&a;",則下列語句中使b不為3的語句是①b二?&a;②b二?p;③b=a;④b=?a;【解】定義有inta=3,b,*p=&a;對b賦值的表達式有?&a、?p、a、?a。引用變量a的值有兩種方法,ー是直接引用a,二是通過a的指針間接引用a。對于后者,又有多種表達方法,通過指向a的指針p,間接引用a的內容,如?p。或通過求地址運算符由變量a得到其指針&a,再由這指針表達式間接引用a的內容,如?&a。所以表達式?&a、?p和a都能弓|用變量a的值,而使b的值為3。而表達式?a是錯誤的,因為a不是指針變量,不能對它施行取內容運算符?。所以解答是④。.定義ー個具有10個元素的整型數(shù)組,應當使用語句是①inta[10]; ②inta[2,5]; ③intaロ;④int*a[10];【解】ー個具有10個元素的整型數(shù)組可以是ー維數(shù)組,定義ー維數(shù)組常用的一般形式是數(shù)組元素的類型數(shù)組名[數(shù)組元素個數(shù)常量表達式];供選擇的答案①是滿足上述要求的代碼形式;供選擇答案②的方括號中有兩個表達式,用逗號分隔,不符合上述一般形式,所以是不正確的代碼;供選擇答案③未指定數(shù)組的元素個數(shù),它是對變量a的說明,不是指定元素個數(shù)的數(shù)組定義;供選擇答案④的代碼所定義的數(shù)組元素的類型是指向整型數(shù)據(jù)對象的指針類型,其元素不是整型的,不合本小題要求。所以解答是①。.設charstrl[10]="ABCDE",str2[10]="xyz";則執(zhí)行語句printfstrlen(strcpy(strl,str2)));后的輸出結①9 ②8 ③5 @3【解】上述代碼是輸出表達式strlen(strcpy(strl,str2))的值,該表達式的求值順序是先執(zhí)行函數(shù)調用strcpy(strl,str2),該函數(shù)調用將str2所指字符串內容復制到strl所指的字符數(shù)組中,并返回存放于strl中的字符串的首字符的指針。經(jīng)函數(shù)調用strcpy(strl,str2)后,strl中的內容變成字符串“xyz”。接著求更新成字符串“xyz”的str!中的字符串的長度,并輸出。這樣,代碼將輸出整數(shù)3。所以解答為④。.設intx[]={1,3,5,7,9,11,13},*p=x;則不能正確引用數(shù)組元素的表達式是①*(p-) ②*(--p) ③*(p++) ④*(++p)【解】根據(jù)C語言關于數(shù)組變量名表達式就是數(shù)組首元素的指針的約定,上述指針變量P的初值是指向數(shù)組X的首元素x[0]。表達式?(P-)的求值順序是先求P一,它的值是P的原先值,即x[0]的指針&x[〇]。這樣,表達式?(P-)引用的是數(shù)組x的首元素x[0],是對數(shù)組x的ー個有意義元素的引用。但這里要指出的是在該表達式求值后,變量p的值將要減去ー個單位,使P指向x[O]的前ー個位置,這是一個在程序中沒有確定意義的位置。表達式?(-P)的求值順序是先求一P,它首先讓變量p的值減去一個單位,使P指向x[0]的前ー個位置,這是一個在程序中沒有確定意義的位置。表達式?(-P)引用的不再是數(shù)組x的ー個有意義的元素。表達式?(P++)的求值順序是先求P++,它的值是P的原先值&x[0]。這樣,表達式*(p++)引用的是數(shù)組x的首元素x[0],是對數(shù)組x的ー個有意義元素的引用。在該表達式求值后,變量P的值將要增加一個單位,使P是x[〇]的后ー個元素的指針,即&x[l]。表達式*(++p)的求值順序是先求++P,它首先讓變量P的值增加一個單位,使P的值是x[0]的后ー個元素的指針,即&x[l]。這樣,表達式?(++p)引用的是數(shù)組x的元素x[l],也是ー個有意義的引用。所以解答為②。57.設intx[]:{1,2,3,4},y,*p=&x[l];則執(zhí)行語句y=(*—p)++;后變量y的值為①1 ②2 ③3 @4【解】上述指針變量P的初值是指向數(shù)組x的元素x[l]o表達式y(tǒng)二(?一p)++的求值順序是先求一p,它首先讓變量P的值減去ー個單位,使P指向x[0]。接著求表達式?一p,這是對x[〇]的引用。表達式(*—p)++也就是X[〇]++,它的值是X[0]的原來值1。最后,表達式y(tǒng)=(*—p)++將1賦給變量y,使y的值為1。經(jīng)上述表達式求值后,x[0]的值變成2。所以解答為①。.在C語言中,下列說法中,錯誤的敘述是①函數(shù)定義可以分為兩個部分:函數(shù)說明部分和函數(shù)體②主函數(shù)可以調用任何非主函數(shù)③任何非主函數(shù)可以調用其它任何非主函數(shù)④程序可以從任何函數(shù)開始執(zhí)行【解】每個C函數(shù)的定義分兩部分,函數(shù)說明部分和函數(shù)體,所以敘述①是正確的敘述。在C語言中,函數(shù)可以遞歸調用,主函數(shù)可以調用程序中的任何函數(shù),當然可以調用任何非主函數(shù)的其它函數(shù),所以敘述②是ー個正確的敘述。同樣理由,敘述③也是正確的。C語言規(guī)定,C程序只有一個主函數(shù),并總是從主函數(shù)開始執(zhí)行,不能從非主函數(shù)開始執(zhí)行。所以,說程序可以從任何函數(shù)開始執(zhí)行是錯誤的。所以解答是④。.函數(shù)調用時,下列說法中不正確的是①若用值傳遞方式,則形式參數(shù)不予分配內存②實際參數(shù)和形式參數(shù)可以同名③主調函數(shù)和被調用函數(shù)可以不在同一個文件中④函數(shù)間傳遞數(shù)據(jù)可以使用全局變量【解】在C語言中,函數(shù)的形式參數(shù)是函數(shù)的一種局部變量,函數(shù)調用時,不管形式參數(shù)的傳遞方式,系統(tǒng)都要為被調用函數(shù)的形式參數(shù)分配內存。所以,敘述①是不正確的。因函數(shù)的形式參數(shù)當作函數(shù)的局部變量,形式參數(shù)與實際參數(shù)是否同名,系統(tǒng)是不予區(qū)別的。所以敘述②是正確的。為了能正確識別和翻譯調用函數(shù)的代碼,在函數(shù)調用處,有關被調用函數(shù)的函數(shù)名、返回結果,以及形式參數(shù)等詳細信息是應該知道的。如被調用函數(shù)與調用代碼在同一源程序文件,并且被調用函數(shù)的定義出現(xiàn)在調用代碼之前,在調用處能知道全部被調用函數(shù)的調用信息。但如被調用函數(shù)的定義出現(xiàn)在調用代碼之后,或被調用函數(shù)的定義在別的源程序文件,為了能知道如何正確調用被調用函數(shù),只要對被調用函數(shù)給出它的函數(shù)說明即可。所以③,主調函數(shù)和被調用函數(shù)不在同一個源程序文件中也是可以的。函數(shù)之間傳遞信息除通過函數(shù)的形式參數(shù)外,也可通過全局變量。即調用處將有關被調用函數(shù)需要的信息預放在某些全局變量中;被調用函數(shù)執(zhí)行時,引用這些全局變量,并將執(zhí)行結果也放在這些全局變量中;函數(shù)調用返回后,調用代碼之后就可引用調用函數(shù)留在這些全局變量中的信息。所以敘述④也是正確的。由以上所敘,解答為①。.執(zhí)行下列程序intfun(intxl,intx2){intx;xl>x2?(x=3):(x=4);returnx+xl;main(){printf(tt%d\n,,>fun(7,8));}后輸出結果是①9 ②10 ③11 ④12【解】上述程序中,主函數(shù)以實際參數(shù)7和8調用函數(shù)fun,并輸出函數(shù)的返回值。函數(shù)fun被調用時,形式參數(shù)xl的初值是7,x2的初值是8。函數(shù)執(zhí)行表達式語句xl>x2?(x=3):(x=4)這是ー個條件表達式,因條件xl>x2不成立,條件表達式求(x=4),該表達式的求值使函數(shù)的局部變量x的值為40最后,函數(shù)返回x+xl的值11。所以解答為③。.設指針x指向的整型變量值為25,則“printf("%d\n",++*x);”的輸出是①23②24③25@26【解】若指針變量x指向某個變量,例如指向變量v,并且變量v的值是25〇則表達式++*x的值是26。這是因為表達式的計算順序可加圓括號表達成(++(*x)),首先是?X,是對X所指變量V的引用,所以++*X就是++V。++V是先讓變量V增1,并以增1后的V的值為表達式++V的結果,其值是26。所以解答是④。.若有說明:“inti,j=7,*p=&i;",則與“i=j;”等價的語句是①i二?p;②*p二?&j;③i二&j;④i二**p;【解】指針變量p指向變量i時,表達式i二?p等價于i=i:表淵*p=*&j等價于i=j;而表達式i=&j企圖將整型變量的指針賦給整型變量,這是錯誤的;表達式i=**p也是ー種錯誤的表達式。p是指針,*p是p所指變量j,**p是企圖將整型變量j當作指針,并想通過j間接引用某個變量。所以解答是②。.若有說明語句“inta[10],*p=a;",對數(shù)組元素的正確引用是①a[p]②p[a]③*(p+2)④p+2【解】在C語言中,約定數(shù)組名單獨出現(xiàn)在表達式中時,它表示數(shù)組首元素的指針。有inta[10],則a可以作為&a[0]使用。另有整型指針變量p,代碼p=a實現(xiàn)p指向數(shù)組a的首元素。則表達式?(p+2)是引用數(shù)組元素a[2]o表達式a[p]和p[a]都是不正確的,下標必須是整型表達式,不可以是指針表達式。表達式p+2是指針表達式,它的值是&p[2]。所以只有表達式?(p+2)引用數(shù)組a的元素a[2]。所以解答是③。.下面各語句中,能正確進行賦字符串操作的語句是①chars[5]={"ABCDE"};②chars[5]={》’,,B',5C',,D',田リ;(3)char*s;s=“ABCDE”;④char*s;scanf("%s”,s);【解】字符串最終存儲于字符數(shù)組中,存儲字符串的字符數(shù)組可以是程序主動引入的(定義或動態(tài)分配),也可以是由系統(tǒng)分配的。其中字符數(shù)組用字符串常量初始化就是字符串存儲于由程序引入的字符數(shù)組的例子。給字符指針賦字符串則是系統(tǒng)自動分配字符串存儲空間的例子。給字符指針賦字符串常量并不是將一個長長的字符串常量存于字符指針變量中,而是將字符串常量存儲于常量區(qū),并將存儲這個字符串常量的首字節(jié)地址賦給指針變量,讓指針變量指向字符串常量的首字符。對于以字符串常量作為字符數(shù)組初值的情況,要求字符數(shù)組足夠的大,能存得下字符串常量。這里有一個特別的規(guī)定,若數(shù)組的大小少于存儲字符串有效字符的字節(jié)個數(shù),系統(tǒng)將報告錯誤;當字符數(shù)組的大小只能存儲字符串的有效字符,而不能存儲字符串結束標記符時,則存儲于字符數(shù)組中的內容是字符序列,因沒有存儲字符串結束標記符,存儲的內容就不是字符串。如代碼chara[5="ABCDE"。另外,給字符數(shù)組元素逐一賦字符初值,并在字符初值中沒有字符串結束標記符,則存于字符數(shù)組中的內容也不是字符串。如代碼chars[5]=「AYB—CJD—E,}。特別要注意當字符指針還未指向某個字符數(shù)組的元素時,不可以通過字符指針輸入字符串。如代碼char*s;scanf("%s",s)o若寫成char*str;scanf("%s”,&str)更是錯誤的了。由于C語言規(guī)定數(shù)組不能相互賦值,所以只能將字符串常量賦給某字符指針。如代碼char*s;s="ABCDE”是正確的。實際上,字符串“ABCDE”被存儲于常量區(qū)中,向指針變量賦的是字符指針,讓s指向其中的字符,ベ。所以解答是③。.若有以下定義,則不能表示a數(shù)組元素的表達式是inta[10]={1,2,3,4,5,6,7,8,9,10},*p二a;①*p②a[10]③*a④a[p-a]【解】上述定義代碼定義了有10個元素的整型數(shù)組a,和定義指針變量p,并讓p指向數(shù)組元素a[0]。所以代碼?p是引用a[0]。由于數(shù)組a只有10個元素,最后ー個元素是a[9],表達式a[10]是錯誤的。數(shù)組名a可以作為a的首元素的指針,表達式?a就是a[0],是對數(shù)組a的首元素a[0]的引用。指針p的值是a,表達式p-a的值是0,所以a[p-a]就是a[0]。所以解答是②。66,若有以下的定義,則值為3的表達式是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個元素,分別有值1至10,指針變量p指向a[〇]。①逗號表達式p+=2,*(p++),先是p+=2使p指向a[2],接著是*(p++),以當時p所指變量a[2]取內容3為表達式的值,同時使p指向a[3]。②逗號表達式p+=2,*++p,先是p+=2使p指向a[2],以后是?++p,又使p增1,讓它指向a[3],并取指針p所指變量a[3]的內容4作為表達式的值。③逗號表達式p+=3,*p++,先是p+=3使p指向a[3],以后是?p++,表達式的值是a[3]為4,而使p指向a[4]。④逗號表達式p+=2,++*p,先是p+=2,使p指向a⑵,以后是++*p,因當時的?p就是a[2],++a[2]使a[2]增1,變成4,并以4為表達式的值。所以只有p+=2,*(p++)的值是3。所以解答是①。. 執(zhí)行語句"chara[10]={"abed"},*p=a;"后,*(p+4)的值是①"abed"②d③へ0,④不能確定【解】若有chara[10]="abed",*p=a,則指針變量p指向a[0]。在表達式?(p+4)中,p+4指向a[4],*(p+4)就是a[4]。由于用字符串“abed”給字符數(shù)組a賦初值,a[4]的值是字符串結束標記符、0,所以解答是③。.若有以下定義,則數(shù)值為4的表達式〇。intw[3][4]={{0,1},{2,4},{5,8}},(*p)[4]=w;①*w[l]+l②p++,*(p+l)③w⑵⑵④【解】兩維數(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ù)約定,未指定初值的元素自動置全〇值。指針變量p是ー個指向具有四個int型元素的一維數(shù)組的指針,定義時的初值使它指向數(shù)組w的第一行。①的代碼,*w[l]+l中的w[l]是指向w[l][〇的指針,*w[l]就是w[l][0],其值是2,*w[l]+l的值是3。②的代碼是逗號表達式,“p++,*(p+D”先使p指向數(shù)組w的第二行,*(p+1)中的p+1是指向數(shù)組w的第三行,*(p+1)是指針值,指向數(shù)組w的第三行的第一個元素,即&w[2][0]。③的代碼w[2][2]引用數(shù)組w第三行的第三列元素,其值是0。④的代碼p[l][l]引用數(shù)組w第二行的第二列元素w[l][l],其值是4。所以解答是④。.若有下面的程序片段,則對數(shù)組元素的錯誤引用是〇。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個整型元素的數(shù)組,它的初值全是〇〇p是有3個元素的指針數(shù)組,每個指針能指向整型變量。pp是指針的指針,它能指向ー個指向整型變量的指針,i是ー個整型變量。執(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]用指針表達可等價地寫成?(*pp+l)。其中?pp就是p[〇],p[〇]的值是&a[4],*pp+l的值是&a⑷+1=&a[5],*(*pp+l)就是a[5]。②,代碼a[10]當然是引用數(shù)組a的元素。③,代碼p[3][l]因數(shù)組p只有三個元素,沒有p[3],所以是錯誤的。④,代碼?(*(p+2)+2)中的(p+2)是&p[2],*(p+2)是p[2],其值是&a[6],*(p+2)+2的值是&a[8],*(*(p+2)+2)引用的是a[8]。所以解答是③。.若有如下定義和語句,則輸出結果是〇。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是指針的指針,它能指向ー個指向整型變量的指針。定義變量p是指針,它能指向一個整型變量。a是ー個整型變量,它有初值10ob也是ー個整型變量,它有初值20〇代碼pp=&p使pp指向p,p=&a使p指向a,p=&b又使p指向b,不再指向a。所以?p是引用b,其值為20。**pp是通過pp間接引用p,再通過p間接引用b,所以也是20。所以解答是④。.若有以下定義和語句,則對w數(shù)組元素的非法引用是〇。intw[2][3],(*pw)[3];pw=w;①*(w[0]+2)②*pw[2]③pw[〇][〇]④*(pw[l]+2)【解】上述代碼定義2行3列的兩維數(shù)組w,定義能指向有三個整型元素ー維數(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]是對數(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ù)調用語句“f((el,e2),(e3,e4,e5))函中參數(shù)的個數(shù)是〇。①1 ②2 ③4 ④5【解】上述函數(shù)調用中,(el,e2)和(e3,e4,e5)是兩個帶括號的表達式,所以函數(shù)調用只提供兩個實參,其中第一個實參先計算el的值,然后計算e2,并以e2的值為實參。第二個實參順序計算e3,e4,e5,并以e5的值為實參。所以解答是②。.C語言中,函數(shù)的隱含存儲類型是〇。①auto②static③extern④無存儲類別【解】由于C函數(shù)內不能再定義函數(shù),C函數(shù)的存儲類型只能是靜態(tài)的或外部的之一。若定義函數(shù)時不指定存儲類型是靜態(tài)的,則它的存儲類型就是外部的(extern),即函數(shù)允許被程序的其它函數(shù)調用。所以解答是③。.以下對C語言函數(shù)的有關描述中,正確的是〇。①在C語言中,調用函數(shù)時,只能把實參的值傳遞給形參,形參的值不能傳遞給實參②C函數(shù)既可以嵌套定義,又可以遞歸調用③函數(shù)必須有返回值,否則不能使用函數(shù)④C程序中,有調用關系的所有函數(shù)必須放在同一個源程序文件中【解】C語言規(guī)定,調用函數(shù)時,只能把實參的值傳遞給函數(shù)的形參。函數(shù)調用時,形參從實參表達式得到初值,形參也是函數(shù)的ー種局部變量,其值可以改變,但形參的值不能傳回給對應的實參。當函數(shù)設置非指針類型的形參時,實參可以是同類型的一般表達式;當函數(shù)設置指針類型的形參時,對應的實參也必須是同類型的指針表達式。所以敘述①是正確的。C函數(shù)雖可以遞歸調用,但同時規(guī)定,在函數(shù)內不能再定義函數(shù),所以敘述②是錯誤的。通常C函數(shù)會有返回值,但也可以沒有返回值,有許多情況,函數(shù)的執(zhí)行是完成某種預定的工作,并沒有返回值,所以敘述③是不正確的。在C程序中,如函數(shù)未指定是靜態(tài)的,則就是外部的,能讓別的文件中的函數(shù)調用,但函數(shù)要調用別的文件中的函數(shù),在調用代碼之前,需對它作說明,所以敘述④也是不正確的。正確的解答只有①。.設函數(shù)的功能是交換x和y的值,且通過正確調用返回交換結果。不能正確執(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;【解】設計實現(xiàn)交換兩個變量值的函數(shù)。希望函數(shù)調用能改變調用環(huán)境中的變量,方法之一是讓函數(shù)設置指針類型的形參,實參傳送給形參的是希望交換值的兩個變量的指針。函數(shù)的兩個形參得到這兩個變量的指針后,函數(shù)就能通過形參間接引用要交換值的變量,或引用它們的值,或改變它們的值。從而實現(xiàn)從函數(shù)傳回信息存于調用環(huán)境的變量中。以上所述是設計交換變量值函數(shù)的一般原則,具體編寫函數(shù)時還需注意對上述原則的正確應用。對于函數(shù)funa,該函數(shù)的定義滿足設置指針形參,并通過指針形參間接引用環(huán)境變量的要求。但是在函數(shù)體中定義了指針變量P,并在P未明確設定它所指向的變量下,代碼?P=*x企圖將值存入它所指的變量中,這是初學者經(jīng)常出現(xiàn)的ー種嚴重的錯誤。該函數(shù)因有錯,不能實現(xiàn)交換變量值的功能。對于函數(shù)funb,該函數(shù)不定義指針形參,函數(shù)體也沒有可用的指針間接引用調用環(huán)境中的變量,所以該函數(shù)也不能實現(xiàn)交換變量值的功能。對于函數(shù)func,該函數(shù)正確定義了指針形參,函數(shù)體也正確通過指針形參間接引用環(huán)境中的變量,并正確定義了自己的局部變量。該函數(shù)能實現(xiàn)交換變量值的功能。對于函數(shù)fund,該函數(shù)也正確定義指針形參和函數(shù)體通過形參間接引用環(huán)境變量。特別要指出的是,該函數(shù)是利用?x和?y的舊值與新值之間的關系實現(xiàn)問題要求的。其中第一個賦值使?x存有原來未交換之前的*x與*y之和;第二個賦值從這個和中減去原來的?y,并將差賦給?y,使*y的值是交換之前的?x的值;第三個賦值再次從和中減去新的*y,即減去交換之前的?X,這個差就是交換之前的?y,并將差賦給?X。經(jīng)以上三個賦值,實現(xiàn)兩變量之間的值交換。所以不能正確執(zhí)行交換變量值的函數(shù)是funa和funb,即正確選擇是①和②。76.要求函數(shù)的功能是在ー維數(shù)組a中查找x值。若找到,則返回所在的下標值;否則,返回〇。設數(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)常遇到的計算要求,有多種編程方法。在這里,數(shù)據(jù)預放在數(shù)組下標1至n的元素中,下標為O的元素沒有放數(shù)據(jù),程序可以利用這個位置簡化查找函數(shù)。函數(shù)funa先將要查找的值放入a[0],從數(shù)據(jù)表的最后ー個元素開始逆序向前查找。這樣做的好處是循環(huán)條件不必擔心因數(shù)組中原先沒有值為x的元素而一直向前,訪問不是數(shù)表的元素,需插入條件n>0。在a[0]處放入x后,這個條件就不必要了,循環(huán)至少在訪問了a[0]后終止,并返回。值。所以該函數(shù)能完成指定的功能。函數(shù)funb采用常規(guī)的辦法編寫,循環(huán)在a[l]與a[n]之間順序尋找,一旦找到立即返回找到處的下標,直至查找循環(huán)結束,查不到指定的值時,返回〇值。函數(shù)func采用與函數(shù)funa相同的方法,不過是另引入ー個指針變量。但是該函數(shù)return語句后的表達式有嚴重的錯誤,應返回k-a,兩指針的差是ー個整數(shù),在這里是找到元素的下標。表達式k-n是指針k向前移n個位置的指針值。函數(shù)fund預置k為0,循環(huán)讓k增1,并在k在界內和a[k]不等于x的情況下繼續(xù)循環(huán)。循環(huán)結束有兩種情況,或k已不在界內,或k在界內,并且a[k]等于X。若是后者,函數(shù)返回k,而若前者,函數(shù)返回0。該函數(shù)也能正確完成查找工作。這樣,不能正確完成查找工作的函數(shù)是函數(shù)func。所以正確的選擇是③。.以下程序的輸出結果是〇。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ù)。函數(shù)sub2將第二個形參的值置入由第一個指針形參所指的變量中,指針形參所指的變量由調用時的實參提供。函數(shù)sub3完成將兩個形參所指的變量的值交換的工作。程序調用sub3,使變量a和b的值交換輸出BA;調用sub2,使變量b的值傳送到a,輸出BB;調用subl,變量a和b的值不改變,輸出AB。所以程序輸出BABBAB。正確解答是①。. 設有定義語句“int(*ptr)[10];”,其中的ptr是①10個指向整型變量的指針②指向10個整型變量的函數(shù)指針③ー個指向具有10個元素的ー維數(shù)組的指針④具有10個指針元素的ー維數(shù)組【解】代碼"int(*ptr)[10];”的分析過程是,因圓括號,括號內的ptr先與字符?結合,字符?修飾標識符ptr,使它是ー種指針;接著與后面的ー對方括號結合,表示是這樣ー種指針,是指向ー維數(shù)組的;再有方括號中的10,說明這種數(shù)組有10個元素。至此,ptr是指向含10個元素的ー維數(shù)組的指針。最后,是最前面的面,表示數(shù)組元素是血類型的。所以,ptr是ー個指向具有!0個int型元素的一維數(shù)組的指針。所以解答是③。另外,要是①,10個指向整型變量的指針,就是ー個指針數(shù)組,上述代碼應寫成“int*ptr[10];",即ptr是ー個有!0個指向整型變量的數(shù)組。要是②,返回值是指向10個整型變量的函數(shù)的指針,上述代碼應寫成“int(*(*ptr)())[10];",即ptr是指針,指向ー種函數(shù),函數(shù)的返回值又是ー種指針,指向10個元素的數(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ù)有一個int型的形參。要是④,其意義與①相同,上述代碼應寫成“int*ptr[10];",即ptr是ー個有10個元素的數(shù)組,數(shù)組元素是指向整型變量的指針。.計算平方數(shù)時,不可能引起二義性的宏定義是①#defineSQR(x)x*x ②#defineSQR(x)(x)*(x)③#defi
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)公司融資合同范本
- 艙口蓋系統(tǒng)行業(yè)深度研究報告
- 化肥長期供貨合同范本
- 場地使用出租合同范本
- 事業(yè)單位聘用合同范本
- 共享叉車租賃合同范例
- 副食購買合同范本
- 充電樁維修合同范本
- 勞務法合同范本
- 加盟合同范本
- 戰(zhàn)略管理與倫理
- 如何構建高效課堂課件
- 虛擬化與云計算技術應用實踐項目化教程 教案全套 第1-14周 虛擬化與云計算導論-騰訊云服務
- 甲基丙烯酸甲酯生產(chǎn)工藝畢業(yè)設計設備選型與布置模板
- 徐金桂行政法與行政訴訟法新講義
- 瀝青拌合設備結構認知
- 2023年北京高考政治真題試題及答案
- 復旦中華傳統(tǒng)體育課程講義05木蘭拳基本技術
- 北師大版五年級上冊數(shù)學教學課件第5課時 人民幣兌換
- 工程回訪記錄單
- 住房公積金投訴申請書
評論
0/150
提交評論