




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
國家二級(C語言)機試歷年真題試卷匯編25(題后含答案及解析)題型有:1.選擇題2.程序填空題3.程序修改題4.程序設(shè)計題選擇題1.下列敘述中正確的是()。A.鏈表可以是線性結(jié)構(gòu)也可以是非線性結(jié)構(gòu)B.鏈表只能是非線性結(jié)構(gòu)C.快速排序也適用于線性鏈表D.對分查找也適用于有序鏈表正確答案:A解析:線性表的鏈?zhǔn)酱鎯Y(jié)構(gòu)稱為線性鏈表,線性鏈表可以是線性結(jié)構(gòu)也可以是非線性結(jié)構(gòu)??焖倥判蚝蛯Ψ植檎沂沁m用于順序存儲的線性表。故本題選擇A選項。2.循環(huán)隊列的存儲空間為Q(1:50)。經(jīng)過一系列正常的入隊與退隊操作后,front=rear=25。后又成功地將一個元素退隊,此時隊列中的元素個數(shù)為()。A.24B.49C.26D.0正確答案:B解析:當(dāng)front=rear時可知隊列要么為空要么隊列滿,題目又成功地將一個元素退隊,說明之前隊列為滿(為空時隊列中無元素),退出一個元素后隊列中還有50-1=49個元素。故本題選擇B選項。3.設(shè)二叉樹中有20個葉子節(jié)點,5個度為1的節(jié)點,則該二叉樹中總的節(jié)點數(shù)為()。A.46B.45C.44D.不可能有這樣的二叉樹正確答案:C解析:二叉樹中只存在度為0、1、2的節(jié)點,根據(jù)在二叉樹中度為0的節(jié)點(葉子節(jié)點)總比度為2的節(jié)點多一個,可知本題中度為2的節(jié)點有20-1=19個。故該二叉樹中總的節(jié)點數(shù)為20+5+19=44個。故本題選擇C選項。4.設(shè)棧與隊列初始狀態(tài)為空。首先A,B,C,D,E依次入棧,再F,G,H,I,J依次入隊;然后依次出隊至隊空,再依次出棧至???。則輸出序列為()。A.E,D,C,B,A,F(xiàn),G,H,I,JB.E,D,C,B,A,J,I,H,G,F(xiàn)C.F,G,H,I,J,A,B,C,D,ED.F,G,H,I,J,E,D,C,B,A正確答案:D解析:棧稱為“后進先出”表或“先進后出”的線性表;隊列稱為“先進先出”或“后進后出”的線性表。F,G,H,I,J依次入隊,則依次出隊順序為F,G,H,I,J;A,B,c,D,E依次入棧,則依次出棧順序為E,D,C,B,A。故輸出順序為F,G,H,I,J,E,D,C,B,A。故本題選擇D選項。5.下面不屬于軟件工程三要素的是()。A.環(huán)境B.工具C.過程D.方法正確答案:A解析:軟件工程包含3個要素:方法、工具和過程。故本題選擇A選項。6.程序流程圖是()。A.總體設(shè)計階段使用的表達工具B.詳細(xì)設(shè)計階段使用的表達工具C.編碼階段使用的表達工具D.測試階段使用的表達工具正確答案:B解析:詳細(xì)設(shè)計階段常見的工具有程序流程圖、N-S圖、PAD圖、HIPO圖、判定表等。故本題選擇B選項。7.下面屬于“對象”成分之一的是()。A.封裝B.規(guī)則C.屬性D.繼承正確答案:C解析:面向?qū)ο蠓椒ㄖ械膶ο笥蓛刹糠纸M成:①數(shù)據(jù),也稱為屬性,即對象所包含的信息,表示對象的狀態(tài);②方法,也稱為操作,即對象所能執(zhí)行的功能、所能具有的行為。故本題選擇C選項。8.?dāng)?shù)據(jù)庫管理系統(tǒng)能實現(xiàn)對數(shù)據(jù)庫中數(shù)據(jù)的查詢、插入、修改和刪除,這類功能稱為()。A.?dāng)?shù)據(jù)控制功能B.?dāng)?shù)據(jù)定義功能C.?dāng)?shù)據(jù)存儲功能D.?dāng)?shù)據(jù)操縱功能正確答案:D解析:數(shù)據(jù)定義功能:負(fù)責(zé)數(shù)據(jù)的模式定義與數(shù)據(jù)的物理存取構(gòu)建。數(shù)據(jù)操縱功能:負(fù)責(zé)數(shù)據(jù)的操縱,包括查詢與增、刪、改等操作。數(shù)據(jù)控制功能:負(fù)責(zé)數(shù)據(jù)完整性、安全性的定義與檢查以及并發(fā)控制、故障恢復(fù)等功能。故本題選擇D選項。9.實體電影和實體演員之間的聯(lián)系是()。A.一對一B.多對多C.多對一D.一對多正確答案:B解析:一部電影可由多名演員參演,一名演員可以參演多部電影,因此實體電影和實體演員之間的聯(lián)系是多對多。故本題選擇B選項。10.定義學(xué)生的關(guān)系模式如下:S(S#,Sn,Sex,Age,D#},Da)(其屬性分別為學(xué)號、姓名、性別、年齡、所屬學(xué)院、院長)該關(guān)系的范式最高是()。A.1NFB.2NFC.3NFD.BCNF正確答案:B解析:關(guān)系數(shù)據(jù)庫中的關(guān)系是要滿足一定要求的,滿足不同程度要求的為不同的范式。滿足最低要求的叫第一范式,簡稱1NF。在滿足第一范式的基礎(chǔ)上,進一步滿足更多要求規(guī)范則是第二范式。然后在滿足第二范式的基礎(chǔ)上,還可以再滿足第三范式,以此類推。對于關(guān)系模式,若其中的每個屬性都已不能再分為簡單項,則它屬于第一范式。若某個關(guān)系R為第一范式,并且R中每一個非主屬性完全依賴于R的某個候選鍵,則稱其為第二范式。第二范式消除了非主屬性對主鍵的部分依賴。如果關(guān)系R是第二范式,并且每個非主屬性都不傳遞依賴于R的候選鍵,則稱R為第三范式。(傳遞依賴:在關(guān)系模式中,如果Y→X,X→A,且X不決定Y和A不屬于X,那么Y→A是傳遞依賴)。本題中,關(guān)系s滿足第一范式和第二范式,但是S#→D#,D#→Da,存在傳遞依賴,因此不滿足第三范式。該關(guān)系的范式最高是2NF。故本題選擇B選項。11.下面敘述中正確的是()。A.用計算機匯編語言書寫的程序是計算機可以直接執(zhí)行的B.程序是用純粹的英文所表示的人們頭腦中解決問題或進行計算的步驟C.算法僅僅是用計算機高級語言書寫的計算機解題的步驟D.用任何計算機高級語言書寫的程序都必須轉(zhuǎn)換為計算機指令序列才能執(zhí)行正確答案:D解析:計算機只能識別機器語言,選項A錯誤;程序不僅僅由純粹的英文書寫,還包括數(shù)字和一些特殊符號,選項B錯誤;算法是指解題方案的準(zhǔn)確而完整的描述,是一系列解決問題的清晰指令,并不僅僅是解題步驟,選項C錯誤;計算機只能識別執(zhí)行計算機的指令序列,任何程序都需要轉(zhuǎn)換成指令序列才能被計算機執(zhí)行,選項D正確;本題答案為D。12.下面敘述中錯誤的是()。A.C語言的函數(shù)可以直接使用,無須事先定義或聲明B.C語言程序是由函數(shù)組成的C.C語言的函數(shù)就是一段程序D.C語言的函數(shù)可以單獨編譯正確答案:A解析:C語言要求,在程序中用到的所有函數(shù),必須“先定義,后使用”,選項A錯誤;一個源程序文件由一個或多個函數(shù)以及其他有關(guān)內(nèi)容(如指令、數(shù)據(jù)聲明與定義)組成,選項B正確;函數(shù)就是一段具有特定功能的程序,選項C正確;C語言中的函數(shù)可以單獨進行編譯,編譯為目標(biāo)文件,要鏈接成可執(zhí)行文件時,選項D正確;本題答案為A。13.若有定義:inta=100;則語printf(‘‘%d%d%d\n’’,sizeof(‘‘a(chǎn)’’),sizeof(a),sizeof(3.14));的輸出是()。A.328B.248C.238D.421正確答案:B解析:sizeof是C/C++中的一個操作符(如++、--),作用就是返回一個對象或者類型所占的內(nèi)存字節(jié)數(shù)。sizeof(char)為1,sizeof(int)為4,sizeof(double)為8。當(dāng)操作數(shù)是具體的字符串或者數(shù)值時,會根據(jù)具體的類型進行相應(yīng)轉(zhuǎn)化,sizeof(‘‘a(chǎn)’’),轉(zhuǎn)化為數(shù)組型,注意要加上后面的’\0’,字節(jié)數(shù)為2;sizeof(a)即為sizeof(100),等價于sizeof(int)所以返回值為4;sizeof(3.14)其中3.14是double型,所以返回值為8,選項B正確;本題答案為B。14.若有定義:inta=3,b;,則執(zhí)行語句:b=(a++,a++,a++);后,變量a和b的值分別是()。A.6,5B.8,7C.6,3D.5,6正確答案:A解析:C語言中“++”為單目運算符,優(yōu)先級最高,a++表示在使用a之后使a的值加1,逗號表達式從左到右按順序執(zhí)行,并返回最右表達式的值,所以最后a自增了3次,結(jié)果為6,因為a++為使用后加1,所以在第三個a++時,返回最右表達式的值,a此時的值為5,賦值給b,賦值結(jié)束后執(zhí)行第三次自增,所以最后a的值為6,b的值為5,選項A正確;本題答案為A15.有以下程序段inta=3,b;b=a+3;{intc=2;a*=c+1;}printf(‘‘%d\n’’,a);下面關(guān)于此段程序的說法,正確的是()。A.這段程序的輸出是9B.這段程序中存在有語法錯誤的語句C.這段程序的輸出是7D.可執(zhí)行語句b=a+3后,不能再定義變量c正確答案:A解析:C語言中變量的定義可以在復(fù)合語句的開頭,所以可以定義變量c,選項D錯誤;此段程序不存在語法錯誤,選項B錯誤;C語言中運算符*=(/=、+=、-=),例如a*=b(a/=b、a+=b、a-=b)等價于a=a*b(a=a/b、a=a+b、a=a-b),此段程序開始a=3,b沒有賦初值,執(zhí)行b=a+3后b為6,定義變量c并賦初值2,執(zhí)行a*=c+1,等價于a=a*(c+1),結(jié)果為9,選項A正確,選項C錯誤;本題答案為A。16.以下敘述中正確的是()。A.在C語言中,常量名也要遵守標(biāo)識符的命名規(guī)則B.對單目運算符來說,運算對象一定在其右側(cè)C.標(biāo)識符的首字符必須是下劃線、字母,其他字符可以是任意的鍵盤可鍵人字符D.變量占用內(nèi)存,常量不占用內(nèi)存正確答案:A解析:C語言中,用來對變量、符號常量名、函數(shù)、數(shù)組、類型等命名的有效字符序列統(tǒng)稱為標(biāo)識符,常量名也要遵守標(biāo)識命名規(guī)則,選項A正確;單目運算符的運算對象可以在其左側(cè)或者右側(cè),如i++或++i,選項B錯誤;C語言規(guī)定標(biāo)識符只能由字母、數(shù)字、下劃線組成,選項C錯誤;一般來說,基本類型(整型、字符型等)常量會在編譯階段被編譯成立即數(shù),占用代碼段的內(nèi)存,而字符串常量占用的是數(shù)據(jù)段內(nèi)存。選項D錯誤;本題答案為A。17.若有定義:inta=3,b=2;,則下面表達式中,值為真的選項是()。A.!b||!aB.!(a/b)C.!(b/a)D.!a&&!b正確答案:C解析:C語言中“!”叫“取非”運算符,屬于邏輯運算符,只有兩種狀態(tài),“真”和“假”,C語言規(guī)定非0為“真”,0為“假”。a=3,b=2,!2、!3為0,即為假,“||”為“或”運算符,左右兩個表達式有一個為真及整個表達式為真,0||0為0,值為假,選項A錯誤;a/b為1.5,又因為a、b都為int型,自動轉(zhuǎn)換,丟棄小數(shù)部分,所以a/b的值為1,!1為0,為假,選項B錯誤;b/a為0.6666…,丟棄小數(shù)部分,其值為0,!0為真,所以選項C正確;a=3,b=2,!2、!3為0,即為假,“&&”為“與”運算符,左右兩個表達式全為真時整個表達式才為真,0&&0為假,選項D錯誤;本題答案為C。18.若要求:當(dāng)數(shù)學(xué)式3<x<7成立時,使得y=1,且設(shè)x、y為int型變量,則以下能夠?qū)崿F(xiàn)這一要求的選項是()。A.if(x>3)if(x<7)y=1;B.if(x>3||x<7)y=1;C.if(x<3)y=1;elseif(x<7)y=1;D.if(!(x<=3))y=1;elseif(7>x)y=1;正確答案:A解析:要求為當(dāng)x>3且x<7時使得y=1。當(dāng)x>3且x<7時使得y=1,選項A正確;“||”為“或”運算符,選項B錯誤;當(dāng)x<3時y=1或x<7時y=1,選項C錯誤;當(dāng)!(x<=3)即當(dāng)x>3時,y=1,或者x<7時y=1,選項D錯誤;本題答案為A。19.有下列程序#include<stdio.h>main(){charc,d;c=getchar();d=getchar();switch(c-’0’){case1:switch(d%’0’){case1:printf(‘‘*’’);case2:printf(‘‘@’’);}case2:switch(d%’0’){case1:printf(‘‘#’’);case2:printf(‘‘&’’);}}}若運行時輸入:21<回車>,程序的輸出結(jié)果是()。A.@#*B.&C.@#&D.#&正確答案:D解析:switch為多分支選擇語句,其后面括號內(nèi)的值應(yīng)為整型類型(包括字符類型),將switch后括號的值與case中給定的值相比較,如果和其中之一相匹配,則執(zhí)行該case后的語句,若都不匹配,則執(zhí)行default語句,若沒有default語句,則不執(zhí)行任何語句,流程轉(zhuǎn)到switch下一條語句,每一個case語句后應(yīng)加上break,使流程跳出switch語句,若不加break,在執(zhí)行完相匹配的case語句后會順序執(zhí)行完該case語句下的所有case語句。鍵盤輸入21,2賦值給c,1賦值給d,第一層switch語句為switch(2),執(zhí)行case2語句,第二層switch為switch(1),執(zhí)行casel語句輸出#,繼續(xù)順序執(zhí)行case1語句下面的語句case2,輸出&,執(zhí)行完畢,跳出switch語句,輸出結(jié)果為#&,選項D正確;本題答案為D。20.有下列程序#include<stdio.h>main(){inti,a,b,e;a=b=c=0:for(i=0;i<3;i++){switch(i%3){ease0:a++;break;ease1:b++;break;ease2:c++;break;}if(i%3==0)break;}printf(‘‘%d%d%d\n’’,a,b,c);}程序執(zhí)行后的輸出結(jié)果是()。A.201B.111C.100D.210正確答案:C解析:switch為多分支選擇語句,其后面括號內(nèi)的值應(yīng)為整型類型(包括字符類型),將switch后括號的值與case中給定的值相比較,如果和其中之一相匹配,則執(zhí)行該case后的語句,若都不匹配,則執(zhí)行default語句,若沒有default語句,則不執(zhí)行任何語句,流程轉(zhuǎn)到switch下一條語句,每一個case語句后應(yīng)加上break,使流程跳出switch語句若不加break,在執(zhí)行完相匹的case語句后會順序執(zhí)行完該case語句下的所有case語句。定義變量,a、b、c初值為0,執(zhí)行循環(huán)語句:i=0,%為取余運算符,如a%b,結(jié)果為a/b的余數(shù),0%3值為0,執(zhí)行case0語句,執(zhí)行完該語句此時a的值為1;向下執(zhí)行if語句,判斷i%3==0,結(jié)果為真,執(zhí)行if語句內(nèi)的break,跳出for語句,輸出a、b、c的值,此時a的值為1,b、c的值仍為0,選項C正確;本題答案為C。21.有下列程序#include<stdio.h>main(){inti,j,a,b;a=b=j=0;while(j<3){j++;jf(j==1)continue;for(i=0;i<3;i++){if(i>1)break;a=a*10+i;if(i<1)b=a;}}printf(‘‘%d%d\n’’,a,b);程序執(zhí)行后的輸出結(jié)果是()。A.10101B.101101C.100D.10110正確答案:D解析:C語言中當(dāng)continue和break用在循環(huán)語句的循環(huán)體時,break用于立即退出本層循環(huán),而continue僅僅結(jié)束本次循環(huán),本次循環(huán)體內(nèi)不執(zhí)行continue語句后的其他語句,但下一次循環(huán)還會繼續(xù)執(zhí)行,如果有多層循環(huán)時,break只會跳出本層循環(huán),不會跳出其他層的循環(huán)。兩層循環(huán)嵌套,外循環(huán)循環(huán)一次,內(nèi)循環(huán)需要執(zhí)行其所有循環(huán)。程序開始a、b、j都為0,j=0<3,執(zhí)行while循環(huán),執(zhí)行j++,j為1,(j==1)為真,執(zhí)行if語句,continue,結(jié)束本次循環(huán),j=l<3為真,再次執(zhí)行while循環(huán),j此時值為2,(j==1)為假,不執(zhí)行if語句,向下執(zhí)行for循環(huán),i=0,a=0*10+0=0,b=a=0,i++;i=1,a=0*10+1=1,b=0;i=2>1,執(zhí)行break語句,跳出for循環(huán),此時a=1,b=0,j=2<3為真,再次執(zhí)行whik語句,j=3,不執(zhí)行if語句,向下執(zhí)行for循環(huán),i=0,a=1%10+0=10.b=a=10,i++;i=1,a=10*10+1=101,b=10;i=2>1,執(zhí)行break語句,跳出for循環(huán),此時a=101,b=10,j=3<3為假,退出while循環(huán),輸出a、b,a=101,b=10,選項D正確;本題答案為D。22.有下列程序#include<stdio.h>main(){charc,i;for(i=0;i<3;i++){c=getchar();printf(‘‘%c,’’,(c-’A’+5)%26+’a’);}printf(‘‘\n’’);}若程序運行時輸入:APE<回車>,則輸出結(jié)果是()。A.E,T,I,B.F,U,J,C.f,u,j,D.E,t,I,正確答案:c解析:根據(jù)ASCII碼表,’A’-’Z’對應(yīng)的是65-90,’a’-’z’對應(yīng)的是97-122,字符型可以和數(shù)字相互比較,依次從鍵盤輸入APE,A-’A’+5=5,5%26=5,5+’a’,即為a往后第五個字母,即為f,同理先將字符轉(zhuǎn)換成對應(yīng)的ASCII碼進行計算,最后再轉(zhuǎn)換成對應(yīng)的字符輸出,最后輸出結(jié)果為f,u,j,選項C正確;本題答案為C。23.庫函數(shù)rand()的功能是產(chǎn)生一個在0—32767之間的隨機數(shù)。若要用此函數(shù)隨機產(chǎn)生一個0~99.99(2位小數(shù))之間的數(shù),以下能實現(xiàn)此要求的表達式是()。A.(rand()%10000)/100.0B.(rand()%10000)/100C.(rand()%9000+1000.0)/100.0D.(rand()%100)/100.0正確答案:A解析:要得到兩位小數(shù),應(yīng)除以小數(shù),使其轉(zhuǎn)換成浮點數(shù),所以應(yīng)除以100.0,選項B錯誤;因為rand()的功能是產(chǎn)生一個0~32767之間的隨機數(shù),且要求隨機產(chǎn)生一個0~99.99(2位小數(shù))之間的數(shù),因此先得到0~9999之間的數(shù)然后在除以100.0,rand()%10000,當(dāng)隨機數(shù)在1~9999時,結(jié)果都為其本身,當(dāng)隨機數(shù)在9999以上時,結(jié)果為0~9999,選項A正確;rand()%9000只能得到0~8999的數(shù),加上1000.0以后只能得到1000.0~9999.0,選項C錯誤;rand()%100只能得到0~99之間的隨機數(shù),選項D錯誤;本題答案為A。24.若想定義一個求x的n次方的函數(shù),設(shè)傳給函數(shù)的冪次n為整數(shù),則以下四個函數(shù)中正確的是()。A.doublemypow(doublex,intn){intsignednum,i;doublemul=1.0:if(n>=0)signednum=1;else{signednum=-1;n=-n;}for(i=1;i<=n;i++)mu1*=x;if(signednum==-1)mu1=1.0/mu1;returnmu1;}B.doublemypow(doublex,intn){inti;doublemul=1.0:n=fabs(n);for(i=1;i<=n;i++)mul*=x;returnmul;}C.doublemypow(doublex,intn){inti;doublemul=1.0;if(n>0){for(i=1;i<=n;i++)mul*=x;}else{for(i=n;i>=0;i--)mul*=1.0/x:}returnmul;}D.doublemypow(doublex,intn){inti;doublemul=1.0;if(n>=0){for(i=0;i<=n;i++)mul*=x;}else{for(i=n;i>=0;i--)mul*=1.0/x;}returnmul;}正確答案:A解析:求一個數(shù)的n次方時,先判斷是正次方還是負(fù)次方,選項A中,先定義一個標(biāo)識變量signednum,若為正次方則給該變量賦值為1,若為負(fù)次方則給該變量賦值為-1,再利用循環(huán)將需要求次方的數(shù)進行累乘操作,再通過條件語句判斷標(biāo)識變量signednum,當(dāng)檢測到該標(biāo)識變量為正時,直接輸出累乘后的值,當(dāng)檢測到該標(biāo)識變量為負(fù)時,將累乘結(jié)果取倒后輸出,本題答案為A選項。25.下面關(guān)于指針基類型的敘述正確的是()。A.基類型不同的指針,其地址值不能相同B.指針的基類型決定通過該指針訪問的每個內(nèi)存單元包含多少個字節(jié)C.基類型相同的指針,可以進行加、減、乘、除運算D.基類型為void的指針,可以存取任何類型的數(shù)據(jù)正確答案:B解析:基類型不同的指針地址值可以相同,選項A錯誤;指針的基類型決定通過該指針訪問的每個內(nèi)存單元包含多少個字節(jié),選項B正確;兩個指針變量之間可以比較大小,也可以賦值,相減以后得到的使兩指針的位移偏量,不能做加運算、乘運算、除運算,指針表示兩個地址,相加、相乘、相除沒有任何意義,選項C錯誤;void類型指針中的數(shù)據(jù)不能訪問,如果非要訪問的話,可以通過顯式轉(zhuǎn)換將void類型指針轉(zhuǎn)換為與所指向的數(shù)據(jù)類型相符的類型,選項D錯誤;本題答案為B。26.有下列程序#include<stdio.h>intfun(chara,char*s){inttemp;temp=a;a=*s:*s=temp:returna;}voidmain(){chara=‘3’,b=‘6’,c;c=fun(a,&b);printf(‘‘%c,%c,%c\n’’,a,b,c);}程序執(zhí)行后的輸出結(jié)果是()。A.6,3,6B.6,3,3C.3,6,3D.3,3,6正確答案:D解析:主函數(shù)調(diào)用fun函數(shù)時,將實參a的值和變量b的地址拷貝給形參變量a,和形參指針變量s。這時形參a的值為’3’,形參指針s和實參b指向同一塊內(nèi)存空間,此空間存放的值為’6’。在函數(shù)fun中,變量temp的值為’3’,形參a被重新賦值為’6’,執(zhí)行語句*s=temp時,將’3’賦給指針變量s指向的內(nèi)存空間,這時,實參b也指向這塊內(nèi)存空間。函數(shù)調(diào)用結(jié)束時,變量c=‘6’,a=‘3’,b=‘3’。選項D正確;本題答案為D。27.有下列程序#include<stdio.h>voidmain(){intarry[]={1,3,5,7,9},i,j;for(i=0;i<4;i+=2){for(j=1;i+j<5;j++,j++)printf(‘‘%d’’,arry[i+j]);}}程序執(zhí)行后的輸出結(jié)果是()。A.357B.377C.599D.577正確答案:B解析:arry[]為一維數(shù)組,執(zhí)行第一次外循環(huán)i=0時:j=1,arry[1],j=3,arry[3],j=5,i+j=5<5為假,結(jié)束內(nèi)循環(huán),執(zhí)行第二次外循環(huán),i-2時;j=1,arry[3],j=3,i+j=5<5為假,結(jié)束內(nèi)循環(huán),i=4<4為假,結(jié)束外循環(huán),輸出結(jié)果為arry[1],arry[3],arry[3],即為377,選項B正確;本題答案為B。28.有下列程序#include<stdio.h>voidmain(){intarry[][3]={{1,3},{5},{7,9}},i,j;for(i=2;i>=0;i--){for(j=2;j>=0;j--)printf(‘‘%d’’,arry[i][j]);printf(‘‘\n’’);}}程序執(zhí)行后的輸出結(jié)果是()。A.097005031B.031005097C.790500130D.130500790正確答案:A解析:二維數(shù)組arry[]的初始值為:130500790只對部分元素賦初值并且省略了第一維的長度,執(zhí)行第一次外循環(huán)循環(huán)時,輸出arry[2][2],arry[2][1],arry[2][0],執(zhí)行第二次外循環(huán)時輸出arry[1][2],arry[1][1],arry[1][0],執(zhí)行第三次外循環(huán)時輸出arry[0][2],arry[0][1],arry[0][0],所得結(jié)果為097005031選項A正確;本題答案為A。29.有下列程序#include<stdio.h>char*fun(char*st,intn){inti;for(i=0;i<n-1;i++){putchar(st[i]-32);}st[i]=‘\0’;returnst+n;}voidmain(){chars[30]=‘‘happybrithday’’;char*cc=fun(s,6);printf(‘‘%s\n’’,c);}程序執(zhí)行后的輸出結(jié)果是()。A.happybirthdayB.HAPPYbirthdayC.birthdayhappyD.birthdayHAPPY正確答案:B解析:根據(jù)ASBII碼表,’A’-’Z’對應(yīng)的是65-90,’a’-’z’對應(yīng)的是97~122,將字符串s的首元素地址傳給指針st,并將前五個元素對應(yīng)的ASCII碼-32。即為將小寫的happy,變成大寫的HAPPY,putchar()函數(shù)直接將這五個字符輸出,當(dāng)i=5時跳出循環(huán)向下執(zhí)行,st為數(shù)組s的首元素地址,st+n返回該數(shù)組第六個元素及之后的元素,返回值為birthday,所以最后的輸出結(jié)果為HAPPYbirthday,選項B正確;本題答案為B。30.有下列程序#include<stdio.h>intfun(char*s,char*t){intc=0:char*p,*q;while(*s){P=s;q=t;while(*p&&*q&&*p++=*q++);if(!*q)c++;s++;}returnc;}voidmain(){char*str1=‘‘celebrationmeeting’’,*str0=‘‘ti’’;printf(‘‘%d\n’’,fun(str1,str0));}程序執(zhí)行后的輸出結(jié)果是()。A.1B.0C.2D.3正確答案:C解析:fun()函數(shù)的功能是以第二個字符串作為第一個字符串的子串,判斷第一個字符串含有幾個子串。首先將兩個字符串首字母地址傳給相應(yīng)的形參,將第一個第二個字符串的首字母地址分別賦給p,q,c為計數(shù)變量,當(dāng)?shù)谝粋€字符串中的字母跟第二個字符串中的字母相同時,兩個指針都加一,即都往后移動一位繼續(xù)比較,直到第二個字符串的指針為空指針,即第二個字符串結(jié)束,此時代表找到一個子串,c加1,然后第一個字符串的指針繼續(xù)往后加一,第二個字符串的指針指向第一個字符,繼續(xù)比較,選項C正確;本題答案為C。31.有下列程序#include<stdio.h>intfun2(int*dt,intn);intfun1(intn,int*dt){inti=0,num;while(n){dt[i]=n%10;n/=10:i++:}num=fun2(dt,i);returnnum;}intfun2(int*dt,intn){inti,t=0;for(i=0;i<n;i++)t=t*10+dt[i];returnt;}voidmain(){intdata[100];printf(‘‘%d\n’’,fun1(12345,data));}程序執(zhí)行后的輸出結(jié)果是()。A.13524B.12345C.54321D.42531正確答案:C解析:函數(shù)fun1()中while循環(huán)的功能即為將12345這個五位數(shù)拆分成五個數(shù)字并且將它們的順序顛倒存人數(shù)組dt中,當(dāng)i=0時,dt[0]=12345%10=5,即數(shù)組中第一個元素為5,12345/10,經(jīng)強制轉(zhuǎn)化變?yōu)?234,然后依次執(zhí)行把所有數(shù)字存入數(shù)組,函數(shù)fun2()的功能即為把這五個數(shù)分別乘以它們所在的數(shù)位的權(quán),將這五個數(shù)重新組成一個五位數(shù),最后的輸出結(jié)果為54321,選項C正確;本題答案為C。32.有下列程序#include<stdio.h>voidfun(intn,int*t){inttp:if(n<2)return;if(dt[0]>dt[1]){tp=dt[0];at[0]=dt[1];dt[1]=tp;}fun(n-1,dt+1);}voidmain(){intd[10]={35,13,21,3,15},i;for(i=0;i<4;i++)fun(5-i,d);for(i=0;i<5;i++)printf(‘‘%d’‘,d[i]);}程序執(zhí)行后的輸出結(jié)果是()。A.313152135B.352115133C.313352115D.152135133正確答案:A解析:fun()函數(shù)的功能為判斷一個數(shù)組中相鄰兩個數(shù)的大小,若前一個數(shù)大于后一個數(shù),則將兩個數(shù)在數(shù)組中的位置互換,先對比第一個元素與第二個元素,若符合條件則交換位置,反之則不變,在fun函數(shù)內(nèi),通過fun(n-1,dt+1)遞歸調(diào)用自己,依次向后比較,直到n<2,退出函數(shù)。函數(shù)調(diào)用一次,fun函數(shù)可以找到數(shù)組的最大值并放在最后一個元素位置,通過第一個for循環(huán),可以完成數(shù)組的排序。再利用第二個for循環(huán),將該數(shù)組的所有元素依次輸出,執(zhí)行完輸出結(jié)果應(yīng)為313152135,選項A正確;本題答案為A。33.有下列程序#include<stdio.h>intfun(intb){statieinta=0:intt;t=a+b;a=b;returnt;}voidmain(){inti;for(i=1;i<24;)printf(‘‘%d’’,i=fun(i));}程序執(zhí)行后的輸出結(jié)果是()。A.12358132134B.11358132134C.247122033D.0247122033正確答案:A解析:函數(shù)中,用static聲明的變量,為靜態(tài)局部變量,靜態(tài)局部變量在內(nèi)存的靜態(tài)存儲區(qū)中占據(jù)著永久性存儲單元,退出函數(shù)時,變量不會消失,下一次調(diào)用時,值仍然存在。執(zhí)行循環(huán),i=1,調(diào)用函數(shù)fun(),a=b=1,因為a為靜態(tài)局部變量,所以在函數(shù)調(diào)用結(jié)束后,它并不釋放,仍保留a的值為1,返回值為1,輸出1,i=1,再次執(zhí)行循環(huán),調(diào)用函數(shù),此時a的值為上一次調(diào)用保存的值1,所以返回值為2,此時a的值仍為1,輸出2,i=2,再次執(zhí)行循環(huán),調(diào)用函數(shù),返回值為3,a=b=2,依次執(zhí)行直到循環(huán)結(jié)束,最后輸出結(jié)果為12358132134,選項A正確;本題答案為A。34.有以下不完整程序#include<stdio.h>intfun(intb){【】returna+b;}voidmain(){inti;i=fun(5);printf(‘‘%d\n’’,i);}inta=10;若要程序能正確運行并得到結(jié)果15,在【】處,所應(yīng)加入的變量聲明是()。A.staticinta;B.registerinta;C.a(chǎn)utointa;D.externinta;正確答案:D解析:程序中的a為全局變量,當(dāng)全局變量定義在后,引用它的函數(shù)在前時,應(yīng)該在引用它的函數(shù)中用extern對此全局變量進行說明,以便通知編譯程序:該變量是一個已在外部定義了的全局變量,選項D正確;本題答案為D。35.對于語句void*p=malloc(sizeof(int)*250);,下面說法正確的是()。A.經(jīng)強制類型轉(zhuǎn)換后,該語句所申請的內(nèi)存可以作為125個double元素的一維數(shù)組來使用B.利用指針p,所申請的內(nèi)存可作為250個int元素的一維數(shù)組來使用C.這條語句存在語法錯誤D.該語句所申請內(nèi)存只能存儲int數(shù)據(jù)正確答案:A解析:經(jīng)強制類型轉(zhuǎn)換后,double型占8個字節(jié),int型占4個字節(jié),250個int型元素內(nèi)存空間,可以存放125個double類型元素,選項A正確;在使用指針p前,必須先把malloc函數(shù)返回的void指針轉(zhuǎn)換為整型指針,然后賦給指針p,再使用,選項B錯誤;該語句沒有語法錯誤,選項C錯誤;調(diào)用malloc內(nèi)存分配函數(shù)成功會返回內(nèi)存地址,返回類型是void*,又稱萬能指針(可以賦值給任何類型的指針變量),選項D錯誤;本題答案為A。36.有以下程序段#include<stdio.h>#include<stdlib.h>#defineMemory(X,num)malloc(num*sizeof(x))voidmain(){inta=5;charc=10:floatf=100.0:doubled=50.0:int*pi=Memory(a,100);char*pc=Memory(c,100);float*pf=Memory(f,100);double*pd=Memory(d,100);}針對此程序段,以下說法正確的是()。A.系統(tǒng)動態(tài)分配的int型數(shù)組為500字節(jié)B.系統(tǒng)動態(tài)分配的數(shù)組都是100個元素C.系統(tǒng)動態(tài)分配的char型數(shù)組為1000字節(jié)D.系統(tǒng)動態(tài)分配的float與double型數(shù)組均為400字節(jié)正確答案:B解析:Memory(x,num)malloc(num*sizeof(x)),其中x為某種數(shù)據(jù)類型的變量,num為該數(shù)據(jù)類型元素的數(shù)量,并給其分配內(nèi)存。a為int型,占4個字節(jié)int*pi=Memory(a,100)即為malloc(100*sizeof(a)),系統(tǒng)動態(tài)分配的int型數(shù)組為400字節(jié),選項A錯誤;num為各數(shù)據(jù)類型元素的數(shù)量,其值都為100,選項B正確;char型占1個字節(jié),系統(tǒng)動態(tài)分配的char型數(shù)組為100字節(jié),選項C錯誤;float類型占4個字節(jié),double類型占8個字節(jié),所以選項D錯誤;本題答案為B。37.若有如下定義和語句typedefstruct{intn;doubledt;}IANDF,*PIF;PIFp=(PIF)malloc(sizeof(IANDF));則下述說法中正確的是()。A.指針變量p指向結(jié)構(gòu)體存儲單元的首地址B.指針變量p指向了IANDFC.IANDF與PIF都有各自的存儲單元D.IANDF和PIF都可以作為結(jié)構(gòu)體變量名使用正確答案:A解析:在C語言中,使用typedef關(guān)鍵字為結(jié)構(gòu)體起一個別名,IANDF、*PIF即為該結(jié)構(gòu)體的別名,*PIF為指針類型。指針變量p為結(jié)構(gòu)體指針,指向結(jié)構(gòu)體存儲單元的首地址,選項A正確;指針p為結(jié)構(gòu)體指針變量,指向結(jié)構(gòu)體,不是指向IANDF,選項B錯誤;IANDF、*PIF只是結(jié)構(gòu)體的別名,沒有自己的存儲單元,選項C錯誤;IANDF、*PIF為結(jié)構(gòu)體別名,相當(dāng)于類型名,不能作為結(jié)構(gòu)體變量名使用,選項D錯誤;本題答案為A。38.有以下程序#include<stdio.h>structdate{intyear,month,day;};structtime{inthour,minute,second;};structstu{structdatedt;structtimett;};voidmain(){structstureed[3]={{{2016,3,5},{12,25,30}},{{2017,5,8},{8,45,55}},{{2015,6,8},{22,15,26}}};inti;for(i=1;i<3;i++){if(reed[i].dt.year>=2016)printf(‘‘%d-%d’’,reed[i].dt.month,recd[i].dt.day);elseprintf(‘‘%d-%d’’,reed[i].tt.minute,recd[i].tt.second);printf(‘‘\n’’);}}程序執(zhí)行后的輸出結(jié)果是()。A.5-815-26B.3-525-30C.6-815-26D.3-545-55正確答案:A解析:定義了結(jié)構(gòu)體date和time來存放年月日和時分秒,并在reed結(jié)構(gòu)體數(shù)組中存放了三組數(shù)據(jù),在執(zhí)行循環(huán)語句時,i=1,recd[1].dt.year即訪問結(jié)構(gòu)體數(shù)組中的第二組數(shù)據(jù)中的year變量,返回值為2017大于2016,執(zhí)行if語句,輸出該組數(shù)據(jù)的month和day變量,結(jié)果為5-8,當(dāng)i=2時,reed[2].dt.year即訪問結(jié)構(gòu)體數(shù)組中的第三組數(shù)據(jù)中的year變量,返回值為2015小于2016為假,執(zhí)行else語句,輸出該組數(shù)據(jù)的minute和second變量,輸出結(jié)果為15-26,選項A正確;本題答案為A。39.若有定義:inta=5,b=8;,則以下表達式的邏輯值為假的是()。A.a(chǎn)|bB.b%aC.a(chǎn)&&bD.a(chǎn)&b正確答案:D解析:“|”為“位或”運算符,先將a與b化成二進制,然后對齊排列,在同一縱列中有一個數(shù)1那么結(jié)果就為1;只有兩個都是0,結(jié)果才為0,aIb結(jié)果為13,為真,選項A正確;b%a結(jié)果為3,為真,選項B正確;a&&b為真,選項C正確;&為位與運算,先將a與b化成二進制,然后對齊排列,同一縱列中都為1則結(jié)果為1,否則為0,5&8為0,為假,選項D正確;本題答案為D。40.有以下程序#include<stdio.h>#include<stdlib.h>voidmain(){inta[100],i;FILE*fp;for(i=0;i<20;i++)a[i]=rand()%100+1;fp=fopen(‘‘data.txt’’,’’w+b’’);fwrite(a,sizeof(int),20,fp);fclose(fp);}當(dāng)程序成功打開文件并成功寫入數(shù)據(jù)后,下面說法正確的是()。A.向文件寫入了20個int型數(shù)據(jù)B.向文件寫入了100個int型數(shù)據(jù)C.向文件寫入了1個int型數(shù)據(jù)D.向文件寫入了20個隨機實型數(shù)據(jù)正確答案:A解析:在C語言中fopen()函數(shù)用于打開指定路徑的文件,返回該文件的指針,fwrite()函數(shù)的作用將一塊內(nèi)存區(qū)域中的數(shù)據(jù)寫入到文本文件,rand()的功能是產(chǎn)生一個0-32767之間的隨機數(shù),rand()%100即為得到一個0-99之間的隨機數(shù),再加上1,即為得到一個1-100之間的隨機數(shù),執(zhí)行for循環(huán)后,往數(shù)組a中存了20個1-100之間的隨機數(shù),:fwrite()函數(shù)中又規(guī)定了數(shù)據(jù)個數(shù)為20,所以選項A正確;本題答案為A。程序填空題41.使用VC++2010打開考生文件夾下blank1中的解決方案。此解決方案的項目中包含一個源程序文件blank1.c。函數(shù)fun根據(jù)所給n名學(xué)生的成績,計算出所有學(xué)生的平均成績,把高于平均成績的學(xué)生成績求平均值并返回。例如,若有成績?yōu)椋?0,60,70,80,90,100,55,65,75,85,95,99,則運行結(jié)果應(yīng)為:91.5請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。注意:源程序存放在文件BLANK1.C中,不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include<stdio.h>#pragmawarning(disable:4996)doublefun(doublex[],intn){inti,k=0;doubleavg=0.0,sum=0.0;for(i=0;i<n;i++)avg+=x[i];/**********found**********/avg/=__【1】__;for(i=0;i<n;i++)if(x[i]>avg){/**********found**********/__【2】___+=x[i];k++:}/**********found**********/return__【3】__;main(){doublescore[12]={50,60,70,80,90,100,55,65,75,85,95,99};doubleaa;aa=fun(score,12);printf(‘‘%d\n’’,aa);}正確答案:(1)n(2)sum(3)sum/k解析:填空1:fun()函數(shù)有兩個參數(shù),第一個為數(shù)組x,第二個為數(shù)組元素個數(shù)n,首先利用第一個for循環(huán)將傳入的所有數(shù)組元素加起來存入變量avg中,因為求的是平均值,所以需要除以元素個數(shù),所以該空填數(shù)組元素個數(shù)n。答案為n。填空2:第二個for循環(huán)將數(shù)組中每個元素值與平均成績進行比較,把高于平均值的元素值加起來以便后期求其平均,此時需要一個變量用來存放高于平均成績的元素總和,所以該空填sum。答案為sum。填空3:變量k的作用為統(tǒng)計高于平均成績的元素個數(shù),因為題目要求把高于平均成績的學(xué)生成績求平均值并返回,所以用高于平均成績的分?jǐn)?shù)總數(shù)除以元素個數(shù),所以該空填sum/k。答案為sum/k。程序修改題42.使用VC++2010打開考生文件夾下modi1中的解決方案。此解決方案的項目中包含一個源程序文件modi1.c。函數(shù)fun將字符串s1和s2交叉合并形成新字符串s3,合并方法為:先取s1的第1個字符存入s3,再取s2的第1個字符存入s3,以后依次類推;若s1和s2的長度不等時,較長字符串多出的字符順序放在新生成的s3后。例如,當(dāng)s1為:’’123456789’’,s2為:’’abcdefghijk’’時,輸出結(jié)果應(yīng)該是:1a2b3c4d5e6f7g8h9ijk請改正函數(shù)fun中指定部位的錯誤,使它能得出正確的結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。#include<stdio.h>#include<string.h>#ragmawarning(disable:4996)voidfun(char*s1,char*s2,char*s3){inti,j;/**********found**********/for(i=0,j=0;(s1[i]!=‘\0’)&&(s2[i]!=‘\0’);i++,j=j+1){s3[j]=s1[i];s3[j+1]=s2[i];}if(s2[i]!=‘\0’){for(;s2[i]!=‘\0’;i++,j++)/**********found
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度商鋪租賃合同終止及市場租金指數(shù)掛鉤協(xié)議
- 2025年度股東股份協(xié)議書:智慧城市建設(shè)項目股權(quán)分配及合作協(xié)議
- 自建房安全質(zhì)量監(jiān)督承包協(xié)議書(2025年度)
- 農(nóng)村自建房建筑工程保險合同(2025年度)
- 二零二五年度教育機構(gòu)學(xué)費返利合同
- 二零二五年度高端基金份額代持保密協(xié)議書
- 2025年度磚廠安全生產(chǎn)承包管理合同
- 二零二五年度汽修廠汽車維修技師職業(yè)健康檢查合同
- 2025年度煙草店店鋪轉(zhuǎn)讓與獨家銷售區(qū)域授權(quán)合同
- 2025年度水平定向鉆施工與施工期環(huán)境保護合同
- 英語課堂教學(xué)技能訓(xùn)練(英語師范專業(yè))全套教學(xué)課件
- 2023年第九屆中國國際互聯(lián)網(wǎng)+大學(xué)生創(chuàng)新創(chuàng)業(yè)大賽解讀
- 直播電商可行性分析
- 建筑工程施工安全管理網(wǎng)絡(luò)圖
- 人教版四年級數(shù)學(xué)下冊教材分析精講課件
- 《龍族設(shè)定全解析》
- 產(chǎn)品手繪設(shè)計表現(xiàn)技法PPT完整全套教學(xué)課件
- GA/T 1988-2022移動警務(wù)即時通信系統(tǒng)功能及互聯(lián)互通技術(shù)要求
- 農(nóng)業(yè)政策學(xué)PPT完整全套教學(xué)課件
- 國家電網(wǎng)招聘之其他工學(xué)類復(fù)習(xí)資料大全
- 天山天池景區(qū)介紹-天山天池景點PPT(經(jīng)典版)
評論
0/150
提交評論