




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
2006年9月國家二級(C語言)筆試真題試卷(題后含答案及解析)題型有:1.選擇題2.填空題選擇題(1-10、21-40每題2分,11-20每題1分,共70分)下列各題A、B、C、D四個選項中,只有一個選項是正確的,請將正確選項涂寫在答題卡相應(yīng)位置上。1.下列選項中不符合良好程序設(shè)計風(fēng)格的是______。A.源程序要文檔化B.?dāng)?shù)據(jù)說明的次序要規(guī)范化C.避免濫用goto語句D.模塊設(shè)計要保證高耦合、高內(nèi)聚正確答案:D解析:良好的程序設(shè)計風(fēng)格可以使程序結(jié)構(gòu)清晰合理,使程序代碼便于維護(hù),因此,程序設(shè)計風(fēng)格對保證程序的質(zhì)量很重要。主要應(yīng)注意和考慮下述—些因素:1、源程序要文擋化;2、數(shù)據(jù)說明的次序要規(guī)范化;3、語句的結(jié)構(gòu)應(yīng)該簡單直接,不應(yīng)該為提高效率而把語句復(fù)雜化,避免濫用goto語句。模塊設(shè)計要保證低耦合、高內(nèi)聚。2.從工程管理角度,軟件設(shè)計—般分為兩步完成,它們是______。A.概要設(shè)計與詳細(xì)設(shè)計B.過程控制C.軟件結(jié)構(gòu)設(shè)計與數(shù)據(jù)設(shè)計D.程序設(shè)計與數(shù)據(jù)設(shè)計正確答案:A解析:從工程管理角度看,軟件設(shè)計分為兩步完成:概要設(shè)計與詳細(xì)設(shè)計。概要設(shè)計(義稱結(jié)構(gòu)設(shè)計)將軟件需求轉(zhuǎn)化為軟件體系結(jié)構(gòu)、確定系統(tǒng)級接口、全局?jǐn)?shù)據(jù)結(jié)構(gòu)或數(shù)據(jù)庫模式;詳細(xì)設(shè)計確立每個模塊的實現(xiàn)算法和局部數(shù)據(jù)結(jié)構(gòu),用適當(dāng)方法表示算法和數(shù)據(jù)結(jié)構(gòu)的細(xì)節(jié)。3.下列選項中不屬于軟件生命周期開發(fā)階段任務(wù)的是______。A.軟件測試B.概要設(shè)計C.軟件維護(hù)D.詳細(xì)設(shè)計正確答案:C解析:軟件生命周期分為軟件定義、軟件開發(fā)及軟件維護(hù)。其中軟件開發(fā)階段的任務(wù)中軟件設(shè)計階段可分解成概要設(shè)計階段和詳細(xì)設(shè)計骱段;軟件維護(hù)不屬于軟件開發(fā)階段。4.在數(shù)據(jù)庫系統(tǒng)中,用戶所見數(shù)據(jù)模式為______。A.概念模式B.外模式C.內(nèi)橫式D.物理模式正確答案:B解析:數(shù)據(jù)庫管理系統(tǒng)的三級模式結(jié)構(gòu)由外模式、模式和內(nèi)模式組成。夕模式,或子模式,或用戶模式,是指數(shù)據(jù)庫用戶所看到的數(shù)據(jù)結(jié)構(gòu),是用戶看到的數(shù)據(jù)視圖。模式,或邏輯模式,是數(shù)據(jù)庫中對全體數(shù)據(jù)的邏輯結(jié)構(gòu)和特性的描述,是所有用戶所見到的數(shù)據(jù)視圖的總和。外模式是模式的—部分。內(nèi)模式,或存儲模式,或物理模式,是指數(shù)據(jù)在數(shù)據(jù)庫系統(tǒng)內(nèi)的存儲介質(zhì)上的表示,即對數(shù)據(jù)的物理結(jié)構(gòu)和存取力式的描述。5.?dāng)?shù)據(jù)庫設(shè)計的四個階段是:需求分析、概念設(shè)計、邏輯設(shè)計和______。A.編碼設(shè)計B.測試階段C.運行階段D.物理設(shè)計正確答案:D解析:數(shù)據(jù)庫設(shè)計方法和步驟:需求分析、概念設(shè)計、邏輯設(shè)計和物理設(shè)計的相關(guān)策略。數(shù)據(jù)庫設(shè)計以下6個設(shè)計階段:需求分析階段、概念設(shè)計階段、邏輯設(shè)計階段、物理設(shè)計階段、實施階段及數(shù)據(jù)庫運行和維護(hù)階段。6.設(shè)有如下三個關(guān)系表下列操作中正確的是______。A.T=R∩SB.R∪SC.T=R×SD.T=R/S正確答案:C解析:從圖中可以看出,關(guān)系T是關(guān)系R和關(guān)系S的簡單擴充,而擴充的符號為×,所以答案為T=R×S。7.下列敘述中正確的______。A.一個算法的空間復(fù)雜度大,則其時間復(fù)雜度也必定大B.一個算法的空間復(fù)雜度大,則其時間復(fù)雜度必定小C.一今算法的時間復(fù)雜度大,則其空間復(fù)雜度必定小D.上述三種說法都不對正確答案:D解析:算法的復(fù)雜度主要包括時間復(fù)雜度和空間復(fù)雜度:算法在運行過程中需輔助存儲空間的大小稱為算法的空間復(fù)雜度;算法的時間復(fù)雜度是指執(zhí)行算法所需要的計算工作量,即算法執(zhí)行過程中所需要的基本運算次數(shù),為了能夠比較客觀地反映出—個算法的效率,在度量—個算法的工作量時,不僅應(yīng)該與所使用的計算機、程序設(shè)計語言以及程序編制者無關(guān),而且還應(yīng)該與算法實現(xiàn)過程中的許多細(xì)節(jié)無關(guān)。為此,可以用算法在執(zhí)行過程中所需基本運算的執(zhí)行次數(shù)來度量算法的工作量。8.在長度為64的有序線性表中進(jìn)行順序查找,最壞情況下需要比較的次數(shù)為______。A.63B.64C.6D.7正確答案:B解析:在進(jìn)行順序查找過程中,如果線性表中的第1個元素就是被查找元素,則只需做—次比較就查找成功,查找效率最高;但如果被查找的元素是線性表中的最后—個元素,或者被查找的元素根本就不在線性表中,則為了查找這個元素需要與線性表中所有的元素進(jìn)行比較,這是順序查找的最壞情況。所以對長度為n的線性表進(jìn)行順序查找,在最壞情況下需要比較n次。9.?dāng)?shù)據(jù)庫技術(shù)的根本目標(biāo)是解決數(shù)據(jù)的______。A.存儲問題B.共享問題C.安全問題D.保護(hù)問題正確答案:B解析:由于數(shù)據(jù)的集成性使得數(shù)據(jù)可為多個應(yīng)用所共享,特SU是在網(wǎng)絡(luò)發(fā)達(dá)的今天,數(shù)據(jù)庫與網(wǎng)絡(luò)的結(jié)合擴大了數(shù)據(jù)關(guān)系的應(yīng)用范圍。數(shù)據(jù)的共享本身又可極大地減少數(shù)據(jù)冗余性,不僅減少了不必要的存儲空間,更為重要的是可以避免數(shù)據(jù)的不—致性。因此,數(shù)據(jù)庫設(shè)計的根本目標(biāo)是要解決數(shù)據(jù)共享問題。10.對下列二叉樹進(jìn)行中序遍歷的結(jié)果是______。A.ACBDFEGB.ACBDFGEC.ABDCGEFD.FCADBEG正確答案:A解析:二叉樹的中序遍歷指在訪問根結(jié)點、遍歷左子樹與遍歷右子樹這三者中,首先遍歷左子樹,然后訪問根結(jié)點,最后遍歷右子樹;并且遍歷左、右子樹時,仍然先遍歷左子樹,然后訪問根結(jié)點,最后遍歷右子樹。11.下列敘述錯誤的是______。A.一個C語言程序只能實現(xiàn)—種算法B.C程序可以由多個程序文件組成C.C程序可以由—個或多個函數(shù)組成D.一個C函數(shù)可以單獨作為—個C程序文件存在正確答案:A解析:一個C語言程序可以實現(xiàn)多種算法?!獋€C程序可以由—個或多個源程序文件組成,—個源程序文件由—個或多個函數(shù)組成,構(gòu)成C語言程序的基本單位是函數(shù),函數(shù)也是C程序中模塊化程序設(shè)計的基礎(chǔ),C函數(shù)可分為標(biāo)準(zhǔn)庫函數(shù)和用戶定義函數(shù)兩類。12.下列敘述中正確的是______。A.每—個C程序文件中都必須要有—個main()函數(shù)B.在C程序中main()函數(shù)的位置是固定的C.C程序中所有函數(shù)之間都可以相互調(diào)用,與函數(shù)所在位置無關(guān)D.在C程序的函數(shù)中不能定義另—個函數(shù)正確答案:D解析:每—個C程序由多個C程序文件組成,而每個C程序都必須有一個main()函數(shù),故每—個C程序文件中都必須有—個main()函數(shù)的說法是錯誤的。在C程序中所有函數(shù)都是平行的,即在定義函數(shù)時是相互獨立的,—個函數(shù)并不能從屬于另—個函數(shù),即函數(shù)不能嵌套定義,函數(shù)間可以相互調(diào)用,但不能調(diào)用main()函數(shù),main()函數(shù)的位置也不是固定的。13.下列定義變量的語句中錯誤的是______。A.int_int;B._;C.charFor;D.floatUS$;正確答案:D解析:C語言中用來標(biāo)識變量名、符號常量名、函數(shù)名、數(shù)組名、類型名、文件名的有效字符序列稱為標(biāo)識符,C語言規(guī)定標(biāo)識符能由字母、數(shù)字和下劃線三種字符組成,且第—個字符必須為字母或下劃線。選項D中含有“$”,故不符合標(biāo)識符的定義。14.若變量x、y己正確定義并賦值,以下符合C語言語法的表達(dá)式是______。A.++x,y=x-B.x+1=yC.x=x+10=x+yD.double(x)/10正確答案:A解析:賦值表達(dá)式的左邊不能為算式,故選項B、c錯誤;選項D為強制類型的轉(zhuǎn)換,其書寫形式為:(類型名)(表達(dá)式),即正確書寫應(yīng)為:(double)x/10或(double)(x/10);選項A為逗號表達(dá)式符合C語言語法。15.以下關(guān)于邏輯運算符兩側(cè)運算對象的敘述中正確的是______。A.只能是整數(shù)0或1B.只能是整數(shù)0或非0整數(shù)C.可以是結(jié)構(gòu)體類型的數(shù)據(jù)D.可以是任意合法的表達(dá)式正確答案:D解析:邏輯運算符兩側(cè)的運算對象不但可以是0和1,也可以是任意基本類型或指針類型的數(shù)據(jù),還可以是任意合法表達(dá)式。16.若有定義intx,y;并已正確給變量賦值,則以下選項中與表達(dá)式(x-y)?(x++):(y++)中的條件表達(dá)式(x-y)等價的是______。A.(x-y>O)B.(x-y<O)C.(x-y<0||x-y>0)D.(x-y=0)正確答案:C解析:“(x-y)?(x++):(y++)”的求解順序是:先判斷x-y的值,如果為非0(真),則執(zhí)行X++,從而表達(dá)式返回X++的值;如果0(假),則執(zhí)行y++,從而表達(dá)式返回y++的值。相當(dāng)于“或”的關(guān)系,所以選項C正確。17.有以下程序main(){intx,y,z;x=y=1;z=x++,y++,++y;printf(“%d,%d,%d\n”,x,y,z);}程序運行后的輸出結(jié)果是______。A.2,3,3B.2,3,2C.2,3,1D.2,2,1正確答案:C解析:x++:表示在使用x之后,使x的值加1;y++:表示在使用y之后,使y的值加1;++y:表示在使用y之前,使y的值加1。此題中執(zhí)行z=x++,是將x的值先賦給z,所以z=1,接下來x自行加1,其結(jié)果為2:執(zhí)行y++后,y=2,執(zhí)行++后,y=3;故答案選C。18.設(shè)有定義:inta;floatb;執(zhí)行scanf(“%2d%f”,&a,&b);語句時,若從鍵盤輸入876543.0<回車>,a和b的值分別是______。A.876和543.000000B.87和6.000000C.87和543.000000D.76和543.000000正確答案:B解析:對于unsigned型數(shù)據(jù)可以指定數(shù)據(jù)的輸入域?qū)抴,系統(tǒng)秒將自動按w值截取所需長度的數(shù)據(jù),此題中指定輸入域?qū)挒?,所以把前兩個數(shù)送給a,即a=87.后面的數(shù)值應(yīng)送給變量b,由于6后面是空格分隔符,所以系統(tǒng)認(rèn)為該數(shù)據(jù)到此結(jié)束,即將6賦給了b,所以答案選B。19.有以下程序main(){inta=0,b=0;a=10;/*給a賦值b=20;給b賦值*/printf(“a+b=%d\n”,a+b);/*輸出計算結(jié)果*/}程序運行后的輸出結(jié)果是______。A.a(chǎn)+b=10B.a(chǎn)+b=30C.30D.出錯正確答案:A解析:在C語言中,注釋是用于協(xié)助讀者更好地理解程序,它不會被系統(tǒng)編譯執(zhí)行,此題中第—處的注釋內(nèi)容包括:“/*給a賦值b=20;給b賦值*/”,故本題中“b=20;”在程序中不起作用,所以輸出語句執(zhí)行的a+b的值為10+0的值,即輸出為“a+b=10”。20.在嵌套使用if語句時,C語言規(guī)定else總是______。A.和之前與其具有相同縮進(jìn)位置的if配對B.和之前與其最近的if配對C.和之前與其最近的且不帶else的if配對D.和之前的第—個if配對正確答案:C解析:在嵌套使用if語句時,C語言規(guī)定else總是和之前與其最近的且不帶else的if配對。21.下列敘述中正確的是______。A.break語句只能使用switch語句B.在switch語句中必須使用defaultC.break語句必須與switch語句中的case配對使用D.在switch語句中,不一定使用break語句正確答案:D解析:在switch語句中,break語句主要起到在執(zhí)行一個case分支后,使流程跳出switch結(jié)構(gòu),即終止switch語句的執(zhí)行,但最后—個分支(default)可以不加break語句。22.有以下程序main(){intk=5;while(-k)printf(“%d”,k-=3);printf(“\n”);}執(zhí)行后的輸出結(jié)果是______。A.1B.2C.4D.死循環(huán)正確答案:A解析:此題中首先給k賦初值5,執(zhí)行while語句:中的表達(dá)式“--k”,k先自行減1結(jié)果為4,滿足while執(zhí)行條件輸出:k=k-3=4-3=1;此時輸出結(jié)果為1。返回執(zhí)行while語句,重復(fù)上面的操作,while后的表達(dá)式為0,退出循環(huán),所以最后的輸出結(jié)果為1。23.有以下程序main(){inti;for(i=1;i<=40;i++){if(i++%5=0)if(++i%8=0)printf(“%d”,i);}printf(“\n”);}A.5B.24C.32D.40正確答案:C解析:在滿足for語句條件下,第—個if語句的條件是指i先對5取余后,再自行加1;第二個if語句的條件是指:i=i+1后,再對8取余。設(shè)可以滿足第—個if語句的值為:x,那么可以滿足第二個if語句的值為:x+2,轉(zhuǎn)換為方程組:x=32,所以答案選C。24.以下選項中,值為1的表達(dá)式是______。A.1-’0’B.1-’、0’C.’1’-0D.’\0’-’0’正確答案:B解析:‘0’代表ASCⅡ碼為48的字符,‘\0’代表ASCⅡ碼為0的字符,‘1’代表ASCⅡ碼為49的字符,所以只有選項B的表達(dá)式的值為1。25.有以下程序fun(intx,inty){return(x+y);}main(){inta=1,b=2,c=3,sum;sum=fun((a++,b++,a+b),c++);printf(“%d\n”,sum);}A.6B.7C.8D.9正確答案:C解析:在fun((a++,b++,a+b),c++)中,先算括號內(nèi)的(a++,b++,a+b)逗號運算,即先算出a++的值,a=2;再算出b++的值,b=3;最后算出a+b的值,a+b=2+3=5,整個逗號表達(dá)式的值為最后a+b的值即為5;接下來調(diào)用fun函數(shù),此時原語句變?yōu)椋簊mn=fun(5,C++);進(jìn)行運算,c++表示在使用c以后再將c的值加1,所以結(jié)果為:5+3=8。26.有以下程序main(){chars[]=“abcde”;s+=2;printf(“%d\n”,s[0]);}執(zhí)行后的結(jié)果是______。A.輸出字符a的ASCⅡ碼B.輸出字符c的ASCⅡ碼C.輸出字符cD.程序出錯正確答案:D解析:此題中s是—個字符數(shù)組,而字符數(shù)紐是在編繹時為它分配內(nèi)存單元的,即此字符數(shù)組的地址在編譯時是確定的,所以對此地址變量并不能賦值,故語句“s+=2;”錯誤,故程序出錯。27.有以下程序fun(intx,inty){m=0,i=2;i+=m+1;m=i+x+y;returnm;}main(){intj=1,m=1,k;k=fun(j,m);printf(“%d,”,k);k=fun(j,m);printf(“%d\n”,k);}執(zhí)行后的輸出結(jié)果是______。A.5,5B.5,11C.11,11D.11,5正確答案:B解析:將j和m的值帶入函數(shù)fun中,第—次調(diào)用完fun()后,m和i的值分別為5和3且要保留,并在第二次調(diào)用時使用,這是因為兩者都是局部靜態(tài)變量。所以最后的結(jié)果是5和11。28.有以下程序fun(intx){intp;if(x=0||x=1)return(3);p=x-fun(x-2);returnp;}main0{printf(“%d\n”,fun(7));}執(zhí)行后的輸出結(jié)果是______。A.7B.3C.2D.0正確答案:C解析:函數(shù)fun是—個遞歸調(diào)用函數(shù),首先主函數(shù)將實參7傳遞給函數(shù)fun中的形參x,由于7≠0,7≠1,不滿足if條件,所以執(zhí)行下面的p=x-fun(x-2);語句,此語句繼續(xù)調(diào)用它本身,直到當(dāng)x=1時,返回函數(shù)值3代入到調(diào)用它的表達(dá)式中,依此類推……,最終p的值為2。29.在16位編譯系統(tǒng)上,若有定義inta[]={10,20,30},*p=&a;,少逗號當(dāng)執(zhí)行p++;后,下列說法錯誤的是______。A.p向高地址移了一個字節(jié)B.p向高地址移了一個存儲單元C.p向高地址移了兩個字節(jié)D.p與a+1等價正確答案:A解析:題目中p=&a表示指針p指向第—個元素a[0],執(zhí)行p++是指使p指向下—個數(shù)據(jù)對象的地址,也就是向高地址移了—個存儲單元;因為int數(shù)據(jù)占兩個字節(jié),所以p相當(dāng)于向高地址移了兩個字節(jié),所以選項A錯誤。30.有以下程序main0{inta=l,b=3,c=5;int*p1=&a,*p2--&b,*p=&c;*p-~pl*(*p2);print~”%dXn”,c);}執(zhí)行后的輸出結(jié)果是______。A.1B.2C.3D.4正確答案:C解析:p1=&a表示指針變量p1指向元素1的地址;p2=&b表示指針變量p2指向元素3的地址;p=&c表示指針變量p指向元素5的地址;執(zhí)行*p=*p1*(*p2)=1*3=3,所以最后的結(jié)果為:3。31.若有定義:intw[3][5];,則以下不能正確表示該組元素的表達(dá)方式是______,A.*(*w+3)B.*(w+1)[4]C.*(*(w+1))D.*(&w[0][0]+1)正確答案:B解析:選項A:*(*w+3)=*(*(w+0)+3)=*(w[0]+3)=w[0][3],符合數(shù)組定義的范圍可以正確表示數(shù)據(jù)元素。選項B:*(w+1)[4]=*(*(w+1)4=*w[5]=w[5][0],超出了數(shù)據(jù)定義的范圍。選項C:*(*(w+1))=*w[1]=w[1][0],符合數(shù)組定義的范圍可以正確表示數(shù)據(jù)元素。選項D:*(&w[0][0]+1);=*(w[0]+1)w[0][1],符合數(shù)組定義的范圍可以正確表示數(shù)據(jù)元素。32.若有以下函數(shù)首部intfun(doublex[lO],int*n)則下面針對此函數(shù)的函數(shù)聲明語句中正確的是______。A.intfun(doublex,int*n);B.intfun(double,int);C.intfun(double*x,intn);D.ihtfun(double*,int*);正確答案:D解析:函數(shù)聲明可以照寫已定義的函數(shù)的首部,再加一個號就成為了對函數(shù)的聲明,在函數(shù)聲明中也可以不寫形參名,而只寫形參的類型,但要保證與函數(shù)首部寫法上的—致,即函數(shù)類型、函數(shù)名、參數(shù)個數(shù)、參數(shù)類型和參數(shù)順序相同。字符數(shù)組可用指針來表示,所以選頂D正確。33.若有定義語句:intk[2][3],*pk[3];,則以下語句中正確的是______。A.pk=k;B.pk[0]=&k[1][2];C.pk=k[0];D.pk[1]=k;正確答案:B解析:*pk[3]:由于[]比*優(yōu)先級高,因此p先與[3]結(jié)合,形成p[3]數(shù)組,有3個元素。然后再與p前面的“*”結(jié)合,“*”表示此數(shù)組是指針類型的,每個數(shù)組元素(相當(dāng)于—個指針變量)都可以指向—個整型變量。34.有以下程序voidchange(intk[]){k[0]=k[5];}main(){intx[10]={1,2,3,4,5,6,7,8,9,10},n=0;while(n<=4){change(&x[n]);n++;}for(n=0;n<5;n++)printf(“%d”,x[n]);printf(“\n”);}程序運行后輸出的結(jié)果是______。A.678910B.13579C.12345D.62345正確答案:A解析:本題考點為數(shù)組名作函數(shù)參數(shù),當(dāng)n=O時,把x[0]的地址傳紿被調(diào)函數(shù)change,即將形參k與實參x指向同一個存儲單元x[0],執(zhí)行被調(diào)函數(shù)后,k[0]=6,即x[0]=6:當(dāng)n=1時,形參k指向x數(shù)組的第1個數(shù)組元素所在單元,即k[0]與x[1]共用同一存儲單元,執(zhí)行被調(diào)函數(shù)后,k[0]=7,即x[1]=7,依次類推得出x[0]到x[4]的值分別為6、7、8、9、10。35.若要求定義具有1O個int型元素的一維數(shù)組a,則以下定義語句中的錯誤的是______。A.#defineN10inta[N];B.#a[2*n]C.inta[5+5];D.intn=10,a[n];正確答案:D解析:—維數(shù)組的定義方式為:類型說明符數(shù)組名[常量表達(dá)式];常量表達(dá)式表示元素的個數(shù),即數(shù)組的長度。常量表達(dá)式可以包括常量和符號常量,但不能包含變量。所以選項D錯誤。36.有以下程序main(){intx[3][2]={0},i;for(i=0;i<3;i++)scanf(“%d”,x[i]);printf(“%3d%3d%3d\n”,x[0][0],x[0][1],x[1][0]);}若運行時輸入:246<回車>,則輸出結(jié)果為______。A.200B.204C.240D.246正確答案:B解析:此題中“scanf(“%d”,x[i]);”相當(dāng)于“scarf(“%d”,x[i][0]);”。輸入246,執(zhí)行for語句也就是x[0][0]=2,x[1][0]=4,x[2][0]=6,其余的數(shù)組元素為0:所以x[0][0]=2,x[0][1]=0,x[1][0]=4。37.有以下程序main(){chars[]={“aeiou”},*ps;ps=s;printf(“%c\n”,*ps+4);}程序運行后輸出的結(jié)果是______。A.a(chǎn)B.eC.uD.元素s[4]的地址正確答案:B解析:此題中先定義一個指針變量ps,并將s的首地址賦給此指針變量,*ps+4相當(dāng)于先從指針變量ps指向的地址中取出相應(yīng)數(shù)據(jù)“a”后,對此數(shù)據(jù)加4,a的ASCⅡ碼為32,32+4=36,對應(yīng)于字符e,所以答案選B。38.在以下語句中存在語法錯誤的是______。A.charss[6][20];ss[1]=“right?”;B.charss[][20]={“fight?”};C.char*ss[6];ss[1]=“right?”;D.char*ss[]={“right?”};正確答案:A解析:此題需要了解字符數(shù)組和字符指針變量的區(qū)別,字符數(shù)組由若干個元素組成,每個元素中放一下字符,而字符指針變量中放的是地址(字符串的首地址),決不是將字符串放到指針變量中,選項D是指在定義字符指針變量時讓字符指針指向字符串“right?”的首地址;選項C是先定義字符指針數(shù)組,再讓指針數(shù)紐指向字符串”right?”的首地址;選項B是在定義數(shù)組時將字符賦給數(shù)組,而選項A的這種先定義,再用賦值語句賦值的形式是錯誤的,因為數(shù)組可以在變量定義時整體賦初值,而不能在賦值語句中整體賦值。39.若有定義:char*x=“abcdefghi”;,以下選項中正確運用了strcpy函數(shù)的是______。A.chary[10];strcpy(y,x[4]);B.chary[10];strcpy(++y,&x[1]);C.chary[10],*s;strcpy(s=y+5,x);D.chary[10],*s;strcpy(s=y+1,x+1);正確答案:D解析:選項A中x[4]是取字符e,也就是將字符復(fù)制到y(tǒng)中,strcpy實現(xiàn)的是地址的復(fù)制所以選項A錯誤;選項B中++y是錯誤的,不允許對常量進(jìn)行自加運算(y是—個確定的地址值),所以選項B錯誤;選項C指針變量s指向了y向后的第5位,則存放x時會出現(xiàn)越界問題,所以選項C錯誤;選項D中,指針變量s指向了y向后的第—位,此時s可存放數(shù)據(jù)的長度為9,而地址“x+1”起的字符串的地址長度也剛好為9(包括“\0”),所以開始復(fù)制不會出現(xiàn)地址越界問題,故選項D正確。40.有以下程序ihtadd(inta,intb){return(a+b);}mian(){intk,(*f)(),a=5,b=10;f=add;…}則以下函數(shù)調(diào)用語句錯誤的是______。A.k=(*f)(a,b);B.k=add(a,b);C.k=*f(a,b);D.k=f(a,b);正確答案:C解析:此題定義了指向函數(shù)的指針變量f指向了函數(shù)add的入口地址,所以,要調(diào)用函數(shù),可以通過函數(shù)名(選項B的形式)或函數(shù)指針變量(選項A、D的形式)調(diào)用即可,而選項C中是先進(jìn)行函數(shù)調(diào)用,然后對調(diào)用后返回的整型值求其指針值,事實上,對常量求指針值是不合理的,所以選項C錯誤。41.有以下程序#include<string.h>main(intargc,char*argv[]){inti=1,n=0;while(i<argc){n=n+strlen(argv[i]);i++;}printf(“%d\n”,n);}該程序生成的可執(zhí)行文件名為:proc.exe。若運行時輸入命令行:proc1234567則程序的輸出結(jié)果是______。A.3B.5C.7D.11正確答案:C解析:main()可以帶有參數(shù),并且參數(shù)只能有兩個,第一個參數(shù)(argc)類型為整型用來記下命令行的參數(shù)個數(shù),第二個參數(shù)(argv)為—個字符型指針數(shù)組,其各個元素用來記下命令行各參數(shù)字符串的首地址。此題執(zhí)行時,argc的值為4,在循環(huán)中依次使用strlen()函數(shù)求出argv(1)、argv(2)、argv(3)指向的字符串(123、45、67)的長度并把他們加到變量n中,得到n的值為7。42.有以下程序voidfun2(chara,charb){printf(“%c%c”,a,b);}chara=‘A’,b=‘B’;voidfun1(){a=‘C’;b=‘D’;}main(){fun1();printf(“%c%c”,a,b);fun2(‘E’,’F’);}程序的運行結(jié)果是______。A.CDEFB.ABEFC.ABCDD.CDAB正確答案:A解析:本題主要是要區(qū)分全局變量和局部變量,全局變量是指在函數(shù)之外定義的變量,它的有效范圍是從定義變量的位置開始到本源文件結(jié)束,函數(shù)fun1中用的變量a、b就是全局變量,雖然在定義時給a、b分別賦值為A、B,但在fun1函數(shù)中對其值進(jìn)行了改變,所以調(diào)用fun1后輸出的a、b的值為’C’和’D’;而fun2中輸出的是兩個局部形參變量a、b的值,這兩變量的值由主函數(shù)在調(diào)用時賦給它,故輸出結(jié)果為:E、F。43.有以下程序#include<stdio.h>#defineN5#defineMN+1#definef(x)(x*M)main(){inti1,i2;i1=f(2)i2=f(1+1);printf(“%d%d\n”,i1,i2);}程序的運行結(jié)果是______。A.1212B.117C.1111D.127正確答案:B解析:在編譯時預(yù)處理程序用“替換文本”來替換宏,并用對應(yīng)的實參來替換“替換文本”。此題中的替換文本分別為:N+1、(x*M)。引用帶參的宏名i1=f(2),在經(jīng)過宏替換后i1=2’N+1=2’5+1=11(注:因為對宏M的替換中N+1沒有加括號,所以對宏f(x)的替換文本展開后就變?yōu)椋簒*N+1形式);與上相同i2在引用帶參的宏名并替換展開后變?yōu)椋篿2=1+1*N+1=1+1*5+1=7,所以答案選B。44.設(shè)有以下語句typedefstructTT{charc;inta[4];}CIN;則下面敘述中正確的是______。A.可以用TT定義結(jié)構(gòu)體變量B.TT是struct類型的變量C.可以用CIN定義結(jié)構(gòu)體變量D.CIN是structTT類型的變量正確答案:D解析:此題中說明了—個結(jié)構(gòu)體類型structTT的同時,定義了一個結(jié)構(gòu)體變量CIN,結(jié)構(gòu)體變量中的各成員在內(nèi)存中按說明中的順序依次排序。45.有以下結(jié)構(gòu)體說明、變量定義和賦值語句structSTD{[10];intage;charsex;}s[5],*ps;ps=&s[0];則以下scanf函數(shù)調(diào)用語句中錯誤引用結(jié)構(gòu)體變量成員的是______。A.scanf(“%s”,s[0].name);B.scanf(“%d”,&s[0].age);C.scanf(“%c”,&(ps->sex));D.scanf(“%d”,ps->age);正確答案:D解析:要給結(jié)構(gòu)體成員輸入數(shù)據(jù),在scanf語句中需要使用結(jié)構(gòu)體成員的地址。函數(shù)scanf是C語言的標(biāo)準(zhǔn)輸入函數(shù),其作用是在終端設(shè)備上輸入數(shù)據(jù),而且要求輸入項必須是某個存儲地址。選項A中是引用結(jié)構(gòu)體數(shù)組s的第0個元素s[0]的name成員,name是包含10個元素的數(shù)組,數(shù)組名就表示數(shù)組的地址,也就代表s[0].name的地址,所以選項A是正確的。選項B顯然也是正確的,選項C是先用指針變量引用結(jié)構(gòu)體的成員sex后取它的地址,也是正確的。選項D用指針變量引用結(jié)構(gòu)體的成員sex后沒有再繼續(xù)取其地址,所以是錯誤的。46.若有以下定義和語句uniondate{inti;charc;fioatf;}x;inty;則以下語句正確的是______。A.x=10.5;B.x.c=101;C.y=x;D.printf(“%d\n”,x);正確答案:B解析:本題定義了共用體變量x及整型變量y,需要說明的是共用體變量不能直接引用,而只能用共用體變量中的成員,故選項A、C、D均錯誤。47.程序中已構(gòu)成如下圖所示的不帶頭結(jié)點的單向鏈表結(jié)構(gòu),指針變量s、p、q均已正確定義,并用于指向鏈表結(jié)點,指針變量s總是作為頭指針向鏈表的第—個結(jié)點。若有以下程序段q=s;s=s->next;p=s;while(p->next)p=p->next;P->next=q;q->next=NULL;該程序段實現(xiàn)的功能是______。A.首結(jié)點成為尾結(jié)點B.尾結(jié)點成為首結(jié)點C.刪除首結(jié)點D.刪除尾結(jié)點正確答案:A解析:根據(jù)語句q=s得知指針q指向結(jié)點a;由s=s->next;p=s得知指針p和s均指向接點b;在滿足while語句的情況下,抽行p=p->next;得知p現(xiàn)在指向結(jié)點c;由p->next=q得知p指向的結(jié)點是a,a移到c的后面;由q->next=NULL得知結(jié)點a與結(jié)點b的指針斷開。移動后的結(jié)構(gòu)圖如圖所示:48.若變量已刪除正確定義,則以下語句的輸出結(jié)果是______。件并進(jìn)行了寫操作后,原有文件中的全部數(shù)據(jù)必定被覆蓋C.在—千程序中當(dāng)對文件進(jìn)行了寫操作后,必須先關(guān)閉該文件然后再打開,才能讀到第1個數(shù)據(jù)D.當(dāng)對文件的讀(寫)操作完成之后,必須將它關(guān)閉,否則可能導(dǎo)致數(shù)據(jù)丟失正確答案:D解析:C語言中,有兩種對文件的存取方式:順序存取和直接存取,所以選項A錯誤;在對文件進(jìn)行讀、寫操作前,先要使用庫函數(shù)fopen“打開”文件來實現(xiàn)程序中要讀、寫的文件與實際數(shù)據(jù)文件間的聯(lián)系。在進(jìn)行打開文件操作時可以指定其打開方式,如果使用“r+”方式則在寫新數(shù)據(jù)時,只覆蓋新數(shù)據(jù)所占的空間,其后的老數(shù)據(jù)并不丟失,所以選項B錯誤;在對文件進(jìn)行操作后關(guān)閉文件是為了防止文件緩沖區(qū)中的剩余數(shù)據(jù)的丟失,所以選項D正確。50.有以下程序#include<stdio.h>main(){FILE*fp;inti;charch[]=“abcd”,t;fp=fopen(“abc.dat”,”wb++”);for(i=O;i<4;i++)fwrite(&ch[i],1,1,fp);fseek(fp,-2L,SEEK_END);fread(&t,1,1,fp);fclose(fp);printf(“%c\n”,t);}程序執(zhí)行后的輸出結(jié)果是______。A.dB.cC.bD.a(chǎn)正確答案:A解析:此題考核的是文件的讀寫,定義—個FILE類型結(jié)構(gòu)體的指針fp,以“可以由位置函數(shù)設(shè)置讀和寫”方式打開一個abc.dat文件,并向文件輸入數(shù)組變量ch指向的字符串,則文件內(nèi)的內(nèi)容為“abcd”,執(zhí)行fseek函數(shù),則文件類型指針fp指向文件尾向前移動2個字節(jié)的位置處,即指針指向“b”,所以最后的輸出結(jié)果為b,答案選C。填空題(每空2分,共30分)請將每一個空的正確答案寫在答題卡上。注意:以命令關(guān)鍵字填空的必須拼寫完整。51.下列軟件系統(tǒng)結(jié)構(gòu)圖的寬度為[]。正確答案:3解析:軟件系統(tǒng)結(jié)構(gòu)圖的寬度:整體控制跨度(最大模塊數(shù)的層)的表示。52.[]的任務(wù)是診斷和改正程序中的錯誤。正確答案:程序調(diào)試解析:程序調(diào)試的任務(wù)是診斷和改正程序中的錯誤。它與軟件測試不同,軟件測試是盡可能多地發(fā)現(xiàn)軟件中的錯誤。先要發(fā)現(xiàn)軟件的錯誤,然后借助于一定的調(diào)試工具去找出軟件錯誤的具體位置。軟件測試貫穿整個軟件生命期,調(diào)試主要在開發(fā)階段。53.—個關(guān)系表的行稱為[]。正確答案:元組解析:設(shè)計數(shù)據(jù)庫的目的實質(zhì)上是設(shè)計出滿足實際應(yīng)用需求的實際關(guān)系模型;關(guān)系中的行稱為元組,對應(yīng)存儲文件中的記錄,關(guān)系中的列稱為屬性,對應(yīng)存儲文件中的字段。54.按“先進(jìn)后出”原則組織數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)是[]。正確答案:棧解析:棧和隊列都是—種特殊的操作受限的線性表,只允許在端點處進(jìn)行插入和刪除。二者的區(qū)別是:棧只允許在表的—端進(jìn)行插入或刪除操作,是—種“先進(jìn)后出”的線性表;而隊列只允許在表的—端進(jìn)行插入操作,在另—端進(jìn)行刪除操作,是—種“先進(jìn)先出”的線性表。55.?dāng)?shù)據(jù)結(jié)構(gòu)分為線性結(jié)構(gòu)和非線性結(jié)構(gòu),帶鏈的隊列屬于[]。正確答案:線性結(jié)構(gòu)解析:與棧類似,隊列也是線性表,也町以采用鏈?zhǔn)酱鎯Y(jié)構(gòu)。56.設(shè)有定義:floatx=123.4567;,則執(zhí)行以下語句后的輸出結(jié)果是[]。printf(“%f\n”(int)(x*100+0.5)/100.1;正確答案:123.46解析:輸出語句的表達(dá)式:(int)(x*100+0.5)/100.0是指先運算表達(dá)式中的“x*100+0.5”,然后將其結(jié)果強制轉(zhuǎn)換為int型,即:(int)(l23.4567*100+O.5)=(int)12346.17=12346,接下來進(jìn)行”/100.0”的運算即:12346/100.0=123.46,原因是除運算是雙目運算,當(dāng)—邊是整型數(shù),—邊是實型數(shù)時,系統(tǒng)自動將整型轉(zhuǎn)換為實型數(shù),然后進(jìn)行運算,又因為最后的的輸出格式是float類型的實數(shù),所以結(jié)果為123.460000。57.以下程序運行后的輸出結(jié)果是[]。main(){intm=011,n=11;printf(“%d%d\n”,++m,n++);}正確答案:1011解析:此題中定義兩個變量m和n,首先將一個八進(jìn)制數(shù)賦給m,十進(jìn)制數(shù)賦給n;在輸出之前先進(jìn)行運算,++n:是指在輸出變量m前先對其進(jìn)行加1,(011)8+l=(9)10+1=10;n++:是指在進(jìn)行輸出操作后n再進(jìn)行加1操作,所以輸出時n=11。“%d%d”表示輸出的是兩個帶符號的十進(jìn)制整型數(shù),所以最后的輸出結(jié)果為:1011。58.以下程序運行后的輸出結(jié)果是[]。main(){intx,a=1,b=2,c=3,d=4;x=(a<b)?a:b;x=(x<c)?x:c;x=(d>x)?x:d;printf(“%d\n”,x);}正確答案:1解析:條件運算符優(yōu)先于賦值運算,但低于邏輯運算、關(guān)系運算、算術(shù)運算。條件運算的一般形式為(表達(dá)式1)?(表達(dá)式2):(表達(dá)式3),當(dāng)(表達(dá)式1)值為真時,(表達(dá)式2)的值為整個表達(dá)式的值;當(dāng)(表達(dá)式1)的值為假時,(表達(dá)式3)的值為整個表達(dá)式的值。題中執(zhí)行表達(dá)式“x=(a<b)?a:b”后,x=1;再執(zhí)行表達(dá)式“x=(x<c)?x:c”后,x=1,將此值代入后—個表達(dá)式“x=(d>x)?x:d”,由于“d>x”值為真,故x的值為1。59.有以下程序,若運行時從鍵盤輸入:18,11<回車>,則程序的輸出結(jié)果是[]。main(){inta,b;printf(“Entera,b:”);scanf(“%d,%d”,&a,&b);while(a!=b){while(a>b)a-=b);white(b>a)b-=a;}printf(“%3d%3d\n”,a,b);}正確答案:11解析:此題中定義兩個變量a和b并通過scanf語句對其進(jìn)行賦值,當(dāng)滿足“a!=b”循環(huán)條件時進(jìn)行其下的條件的判斷,直到最外層的條件不再被滿足后進(jìn)行數(shù)據(jù)的輸出。自先給a和b分別賦值18和11。條件:18!=11,所以執(zhí)行其下的條件判斷“a>b”條件滿足,a=a-b=18-7=7,然后繼續(xù)判斷條件a>b是否成立,此時7>11不成立,退出內(nèi)循環(huán)中的第一個while循環(huán),執(zhí)行內(nèi)循環(huán)的第二個while循環(huán),比較其條件b>a是否成立,此條件成立,所以b=b-a=4,繼續(xù)判決條件b>a是否成立,若成立,則繼續(xù)執(zhí)行b-=a;,否則退出內(nèi)循環(huán)的第二個while循環(huán),同時繼續(xù)比較外循環(huán)條件a!=b是否成立,依此類推,直到a=1,b=1條件不再被滿足后進(jìn)行數(shù)據(jù)的輸出,所以最后的結(jié)果為:11。60.以下程序的功能是:將輸入的正整數(shù)按逆序輸出。例如:若輸入135則輸出531。請?zhí)羁铡?include<stdio.h>main(){intn,s;printf(“Enteranumber:”);scanf(“%d”,&n);printf(“Output:“);do{s=n%10;printf(“%d”,s);[];}while(n!=0);printf(“\n’);}正確答案:n/=10或n=n/10或n=(n-s)/10或n=(n-n%10)/10解析:根據(jù)s=n%10可知:此操作可以將輸入的數(shù)據(jù)n的最后—位賦給s,根據(jù)題目的要求是要將輸入的數(shù)據(jù)逆序輸出,現(xiàn)在已經(jīng)將原數(shù)據(jù)的個位輸出,在其后如果執(zhí)行n/=10司將原數(shù)據(jù)的個位數(shù)去掉,滿足do....while的條件繼續(xù)s=n%10操作,此時可求出十位上的數(shù)進(jìn)行輸出,繼續(xù)執(zhí)行n/=10操作,與上相同最后將百位上的數(shù)進(jìn)行輸出,所以該題答案為:n/=10。61.下面程序的運行結(jié)果是[]。#include<stdio.h>intf(inta[],intn){if(n>1)returna[0]+f(a+1,n-1);elsereturna[0];}main(){intaa[10]={12,3,4,5,6,7,8,9,10},s;s=f(aa+2,4);printf(“%d\n”,s);}正確答案:18解析:實參中aa+2是指將數(shù)組元素3的地址傳遞紿形參a,應(yīng)當(dāng)注意—點,用數(shù)紐名作函數(shù)實參時,不是把數(shù)組的值傳給形參,而是把實參數(shù)組的地址傳紿形參數(shù)組,兩個數(shù)組共用一段內(nèi)存單元。所以a[]={3,4,5,6,7,8,9,10),n=4,a[0]=3。形參中a+1表示數(shù)組元素4的地址傳遞紿形參a,所以a[0]+f(a+1,n-1)=3+f(a+1)),3),此時a[]={4,5,6,7,8,9,10),n=3,a[0]=4。n=3同樣滿足n>1的條件a[0]+f(a+1,n-1)=4+f(a+1,2)此時a[]={5,67,8,9,10},n=2,a[0]=5。n=2同樣滿足n>1的條件a[0]+f(a+1,n-1)=5+f(a+1,2)此時a[]={6,7,8,9,10},n=1,a[0]=6。n=1不再滿足條件返回a[0]=6,6+5+4+3=18,所以最后的結(jié)果為18。62.下面程序由兩個源程序文件:t4.h和t4.c組成,程序編譯運行的結(jié)果是:[]。t4.h的源程序為:#defineN10#definet2(x)(x*N)t4.c的源程序為:#include<stdio.h>#defineM8#definef(x)((x)*M)#include“t4.h”main(){inti,j;i=f(1+1);j=f2(1+1);printf(“%d%d\n”,i,j);}正確答案:1611解析:在編譯時預(yù)處理程序用“替換文本”來替換宏,并用劉應(yīng)的實參來替換“替換文本”。此題中的替換文本分別為:x*N、(x)*M。弓,用帶參的宏名i=f(1+1),在經(jīng)過宏替換后將成為:i=(1+1)*M=2*8=16。與上相同j在引用帶參的宏名并替換展開后變?yōu)椋籮=1+1*N=1+1*10=11(注:因為在對宏f2(x)的替換中x沒有加括號,所以對宏f2(x)的替換文本展開后就變?yōu)椋?+1*N形式),所以答案為1611。63.下面程序的功能是建立一個有3個結(jié)點的單循環(huán)鏈表,然后求各個結(jié)點數(shù)值域data中數(shù)據(jù)的和,請?zhí)羁铡?include<stdio.h>#include<stdlib.h>structNODE{intdata;structNODE*next;};main(){structNODE*p,*q,*r;intsum=0;p=(structNODE*)malloc(sizeof(structNODE));q=(structNODE*)malloc(sizeof(structNODE));r=(structNODE*)malloc(sizeof(structNODE));p->data=100;q->data=200;r->data=300;p->next=q;q->next=r;r->next=p;sum=p->data+p->next->data+r->next->next[];printf(“%d\n”,sum);}正確答案:->next->data解析:自定義結(jié)構(gòu)體類型名為Node,并定義指向結(jié)點類型的指針*p,*q,*r。它們共有兩個成員:成員data是整型,成員next是指針類型,題目要求求結(jié)點數(shù)值域的和,也就是求p->data+q->data+r->data的值,p->data表示取p所指結(jié)點的值,p->next->data表示取q指針?biāo)附Y(jié)點中的值,現(xiàn)在p所指結(jié)點和q所指結(jié)點的值已經(jīng)取到,就差r所指結(jié)點中的值,題目中已知r->next指向的是p->data,如果想得到r指針?biāo)附Y(jié)點的值需要將最后的指針指向r->data,所以答案為->next->data。64.有以下程序,其功能是:以二進(jìn)制”寫”方式打開文件d1.dat,寫入1~100這100個整數(shù)后關(guān)閉文件。再以二進(jìn)制“讀”方式打開文件d1.dat,將這100個整數(shù)讀入到另一個數(shù)組b中,并打印輸出。請?zhí)羁铡?include<stdio.h>main(){FILE*fp;inti,a[100],b[100];fp=fopen(“d1.dat”,”wb”);for(i=0;i
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度二手車寄售代理服務(wù)合同
- 2025年度吊車租賃與施工現(xiàn)場管理服務(wù)協(xié)議
- 2025年車貸居間服務(wù)收費標(biāo)準(zhǔn)合同范本
- 建立適應(yīng)性強的財務(wù)體系計劃
- 學(xué)生領(lǐng)導(dǎo)力培養(yǎng)課程計劃
- 教學(xué)工作創(chuàng)新方向計劃
- 年度戰(zhàn)略性談判的技巧分享計劃
- 市場調(diào)研與分析工作安排計劃
- 特色課程開發(fā)與實施方案計劃
- 高危作業(yè)的安全保障措施優(yōu)化計劃
- 1.2《友邦驚詫論》教學(xué)設(shè)計-【中職專用】高二語文同步講堂(高教版2024·拓展模塊上冊)
- 《紡織服裝材料》課件-0緒論
- 盤扣式卸料平臺施工方案
- 繪本故事在小學(xué)道德與法治課堂中的有效教學(xué)策略分析
- 2023年江蘇省鹽城市中考數(shù)學(xué)試卷及答案
- 胃癌影像診斷(共42張)
- 2024新高考英語1卷試題及答案(含聽力原文)
- G -B- 43068-2023 煤礦用跑車防護(hù)裝置安全技術(shù)要求(正式版)
- 劍橋KET詞匯表(中英對照)
- 2024年湖南高速鐵路職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試題庫附答案
- 2024年4月浙江省00015英語二試題及答案含評分參考
評論
0/150
提交評論