國家二級(C語言)筆試模擬試卷27(共543題)_第1頁
國家二級(C語言)筆試模擬試卷27(共543題)_第2頁
國家二級(C語言)筆試模擬試卷27(共543題)_第3頁
國家二級(C語言)筆試模擬試卷27(共543題)_第4頁
國家二級(C語言)筆試模擬試卷27(共543題)_第5頁
已閱讀5頁,還剩139頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

國家二級(C語言)筆試模擬試卷27(共9套)(共543題)國家二級(C語言)筆試模擬試卷第1套一、公共基礎(chǔ)選擇題(本題共10題,每題1.0分,共10分。)1、下列數(shù)據(jù)結(jié)構(gòu)中,不是線性結(jié)構(gòu)的是()。A、線性鏈表B、帶鏈的隊列C、帶鏈的棧D、二叉鏈表標準答案:8知識點解析:線性鏈表是線性表的鏈式存儲結(jié)構(gòu),帶鏈的棧與帶鏈的隊列分別是棧與隊列的鏈式存儲結(jié)構(gòu)。線性表屬于線性結(jié)構(gòu),棧與隊列是特殊的線性表,因此也屬于線性結(jié)構(gòu)。二叉鏈表是二叉樹的鏈式存儲結(jié)構(gòu),二叉樹屬于非線性結(jié)構(gòu)。2、在深度為6的滿二叉樹中,結(jié)點的個數(shù)為()。A、32B、31C、16D、15標準答案:1知識點解析:深度為m的二叉樹最多有2m-1個結(jié)點,滿二叉樹中葉子結(jié)點的個數(shù)為2m-1個。本題中,26-1=25=32。3、下圖所示的二叉樹的先序遍歷序列是()。A、ABDGCEHIFB、DGBAHEICFC、GDBHIEFCAD、ABCDEFGHl標準答案:1知識點解析:先序遍歷順序應(yīng)該為:訪問根結(jié)點→先序遍歷左子樹→先序遍歷右子樹。按照定義,先序遍歷序列是ABDGCEHIF。4、模塊化程序設(shè)計主要強調(diào)的是()。A、程序的規(guī)模要大B、對程序進行分解C、程序的執(zhí)行效率D、程序的可移植性標準答案:2知識點解析:模塊化設(shè)計是指把一個大程序按人們能理解的大小規(guī)模進行分解。5、結(jié)構(gòu)化程序設(shè)計的主要特點是()。A、每個控制結(jié)構(gòu)要模塊化B、每個控制結(jié)構(gòu)具有封裝性C、每個控制結(jié)構(gòu)具有獨立性D、每個控制結(jié)構(gòu)只有一個入口和一個出口標準答案:8知識點解析:結(jié)構(gòu)化程序設(shè)計中,要求把程序結(jié)構(gòu)限制為順序、選擇和循環(huán)3種基本結(jié)構(gòu),特點是:以控制結(jié)構(gòu)為單位,只有一個入口和一個出口,接口簡單,每個單位容易理解;縮小了程序靜態(tài)結(jié)構(gòu)與動態(tài)執(zhí)行之間的差異,易于方便、正確地理解程序功能。6、下列敘述中錯誤的是()。A、測試是程序執(zhí)行的過程,目的在于發(fā)現(xiàn)錯誤B、一個好的測試在于能發(fā)現(xiàn)至今未發(fā)現(xiàn)的錯誤C、一個成功的測試是發(fā)現(xiàn)了至今未發(fā)現(xiàn)的錯誤D、上述說法都不對標準答案:8知識點解析:選項A、B、C中的說法都正確。測試的目的是設(shè)法暴露程序中的錯誤和缺陷,它是程序執(zhí)行的過程,目的在于發(fā)現(xiàn)錯誤;好的測試在于能發(fā)現(xiàn)至今未發(fā)現(xiàn)的錯誤;成功的測試是發(fā)現(xiàn)了至今未發(fā)現(xiàn)的錯誤。7、對于白箱(盒)測試用例的各設(shè)計準則,下列敘述中正確的是()。A、分支覆蓋準則比語句覆蓋準則嚴密B、條件覆蓋要比分支覆蓋優(yōu)越。因此,條件覆蓋能完全滿足分支覆蓋C、組合條件覆蓋準則既能滿足分支覆蓋準則,也能滿足條件覆蓋準則。因此,組合條件覆蓋準則是一種完全測試D、上述說法都不對標準答案:1知識點解析:白箱(盒)測試是根據(jù)對程序內(nèi)部邏輯結(jié)構(gòu)的分析宋選取測試用例。白箱(盒)測試用例的設(shè)計準則有:語句覆蓋、分支覆蓋、條件覆蓋和組合條件覆蓋。分支覆蓋通過足夠多的測試用例,使程序中的每個分支至少通過一次。分支覆蓋準則比語句覆蓋準則嚴密一些,選項A正確;條件覆蓋通過執(zhí)行足夠多的測試用例,使每個判定中的每個條件都能取到兩種不同的結(jié)果(“真”與“假”)。雖然條件覆蓋要比分支覆蓋優(yōu)越,但并不能完全滿足分支覆蓋,選項B錯誤;組合條件覆蓋要求通過足夠多的測試用例,使每個判定中各條件的各種可能組合至少出現(xiàn)一次,它則既能滿足分支覆蓋準則,也能滿足條件覆蓋準則,但也不是完全測試,選項C錯誤。8、下列敘述中正確的是()。A、數(shù)據(jù)庫設(shè)計是指設(shè)計數(shù)據(jù)庫系統(tǒng)B、數(shù)據(jù)庫設(shè)計是指設(shè)計數(shù)據(jù)庫管理系統(tǒng)C、數(shù)據(jù)庫設(shè)計是指在已有數(shù)據(jù)庫管理系統(tǒng)的基礎(chǔ)上建立數(shù)據(jù)庫D、以上三種說法都不對標準答案:4知識點解析:數(shù)據(jù)庫設(shè)計是指,在已有數(shù)據(jù)庫管理系統(tǒng)的基礎(chǔ)上建立數(shù)據(jù)庫的過程,選項A與B錯誤,選項C正確。9、關(guān)系數(shù)據(jù)庫管理系統(tǒng)能實現(xiàn)的專門關(guān)系運算包括()。A、排序、索引、統(tǒng)計B、選擇、投影、連接C、關(guān)聯(lián)、更新、排序D、顯示、打印、制表標準答案:2知識點解析:在關(guān)系模型的數(shù)據(jù)語言中,除了常規(guī)的集合運算外,還定義了一些專門的關(guān)系運算,如投影、選擇、連接等運算。10、下列數(shù)據(jù)模型中,具有堅實理論基礎(chǔ)的是()。A、關(guān)系模型B、網(wǎng)狀模型C、層次模型D、以上三個都是標準答案:1知識點解析:在層次模型和網(wǎng)狀模型的系統(tǒng)研究和數(shù)據(jù)庫設(shè)計中,其性能和質(zhì)量主要決定于設(shè)計者的經(jīng)驗和技術(shù)水平,缺乏一定的理論指導(dǎo)。關(guān)系模型有堅實的理論基礎(chǔ),它以數(shù)學(xué)理論為基礎(chǔ),從而避免了層次模型和網(wǎng)狀模型系統(tǒng)中存在的問題。二、選擇題(1分)(本題共10題,每題1.0分,共10分。)11、一個算法應(yīng)該具有“確定性”等5個特性,下面對另外4個特性的描述中錯誤的是()。A、有零個或多個輸入B、有零個或多個輸出C、有窮性D、可行性標準答案:2知識點解析:算法是為解決某個特定問題而采取的確定的且有限的步驟,一個算法應(yīng)當(dāng)具有以下5個基本特性:有窮性、確定性、可行性、有零個或多個輸入、有一個或多個輸出。由此可知選項B不正確,故4個選項中選項B符合題意。12、C語言中用于結(jié)構(gòu)化程序設(shè)計的3種基本結(jié)構(gòu)是()。A、順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)B、if、switch、breakC、for、while、do-whileD、if、for、continue標準答案:1知識點解析:結(jié)構(gòu)化程序設(shè)計是由3種基本結(jié)構(gòu)組成的,它們是順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。所以,A選項為所選。13、在一個C程序中()。A、main函數(shù)必須出現(xiàn)在所有函數(shù)之前B、main函數(shù)可以在任何地方出現(xiàn)C、main函數(shù)必須出現(xiàn)在所有函數(shù)之后D、main函數(shù)必須出現(xiàn)在固定位置標準答案:2知識點解析:一個完整的C語言程序有且僅有一個主函數(shù)(main()函數(shù))。程序總從main()函數(shù)的第一條語句開始執(zhí)行,到main()函數(shù)的最后一條語句結(jié)束,其他函數(shù)都是在執(zhí)行main()函數(shù)時,通過函數(shù)調(diào)用或嵌套調(diào)用而得以執(zhí)行的。C語言規(guī)定,main()函數(shù)在程序中的位置是任意的,故選項A、選項C和選項D均不正確。所以,B選項為所選。14、下列敘述中正確的是()。A、C語言中既有邏輯類型也有集合類型B、C語言中沒有邏輯類型但有集合類型C、C語言中有邏輯類型但沒有集合類型D、C語言中既沒有邏輯類型也沒有集合類型標準答案:8知識點解析:在C語言中沒有邏輯類型,邏輯類型用整型來表示,故選項A和選項C不正確:C語言中沒有集合類型,故選項B不正確。所以,D選項為所選。15、若以下選項中的變量已正確定義,則正確的賦值語句是()。A、x1=26.8%3;B、1+2=x2C、x3=0x12;D、x4=1+2=3;標準答案:4知識點解析:賦值的一般形式為:變量名:表達式;,賦值的方向為由右向左,即將:右側(cè)表達式的值賦給:左側(cè)的變量,執(zhí)行步驟是先計算再賦值。選項A中運算符%的運算對象必須為整數(shù),而選項A中26.8不為整數(shù),故選項A不正確;選項B將一個變量賦值給一個常量,這在C語言中是不允許的,故選項B不正確;選項D中也是將一個常量3賦值給一個常量,故選項D不正確;所以,4個選項中選項C符合題意。16、設(shè)有以下定義:inta=0;doubleb=1.25;charc=’A’;#defined2則下面語句中錯誤的是()。A、a++;B、b++;C、c++;D、d++;標準答案:8知識點解析:自加運算對象可以是整型變量也可以是實型變量,但不能是表達式和常量。本題中,#defined2定義了d為常數(shù)2,d是符號常量不能進行自加運算。故選項D是個不正確的語句。17、若有如下定義:intx=6,y=3,z=2;則表達式x=y||y<z&&z==z的值是()。A、0B、1C、4D、6標準答案:2知識點解析:<優(yōu)先級高于==高于&&高于||高于=。首先計算表達式y(tǒng)<z的值,y<z為假,表達式的值為0,則邏輯表達式y(tǒng)<z&&z==z的值也為0,||左側(cè)y的值為非零值3,所以表達式的值為1,將1賦值給x,賦值表達式的值是1。18、設(shè)有如下程序段:x=2002,y=2003;printf("%d\n",(x,y));則以下敘述中正確的是()。A、輸出語句中格式說明符的個數(shù)少于輸出項的個數(shù),不能正確輸出B、運行時產(chǎn)生出錯信息C、輸出值為2002D、輸出值為2003標準答案:8知識點解析:“x,y”是一個逗號表達式,逗號運算符的結(jié)合性為從左到右,逗號表達式一般形式為“表達式1,表達式2…,表達式n”,整個表達式的值為表達式n的值,故本題是輸出y的值2003。所以,4個選項中選項D符合題意。19、有以下程序:main(){inta=666,b=888;printf("%d\n",a,b);}程序運行后的輸出結(jié)果是()。A、錯誤信息B、666C、888D、666,888標準答案:2知識點解析:程序中的printf()函數(shù)的輸出格式部分只說明了一個%d,而輸出成員列表卻有兩個成員a和b,在這里將只輸出第一個成員a值為666,所以,4個選項中選項B符合題意。20、有以下程序:main(){inti;for(i=0;i<3;i++)switch(i){case0:prinft("%d",i);Case2:prinft("%d",i);default:prinft("%d",i);}}程序運行后的輸出結(jié)果是()。A、22111B、21021C、122D、12標準答案:4知識點解析:程序中for循環(huán)了三次,第一次i=O,執(zhí)行switch語句中case0:分支,直到遇到default語句,退出switch,這里共執(zhí)行了3個輸出語句分別輸出0、0、0,第二次循環(huán)i=1,switch語句中沒有匹配的分支,故只執(zhí)行default語句輸出1,退出switch語句;第三次循環(huán)i=2,從switch語句中的case2:開始執(zhí)行,共執(zhí)行了兩個輸出語句輸出2、2。最后輸出的結(jié)果為000122。所以,4個選項中選項C符合題意。三、選擇題(2分)(本題共30題,每題1.0分,共30分。)21、有以下程序:inta=3;main(){ints=0;{inta=5;s+=a++;)s+=a++;printf(’%d\n’,s);}程序運行后的輸出結(jié)果是()。A、8B、10C、7D、11標準答案:1知識點解析:本題中定義一個全局變量a和一個局部變量a。局部變量和全局變量的不同在于,局部變量的存儲單元都是在進入這些局部變量所在的函數(shù)體(或復(fù)合語句)時生成,退出其所在的函數(shù)體(或復(fù)合語句)時消失,而全局變量是在函數(shù)外部任意位置上定義的變量,它的作用域從變量定義開始,到整個源文件結(jié)束為止。若全局變量和某一函數(shù)中的局部變量同名,則在該函數(shù)中,此全局變量被屏蔽,在該函數(shù)內(nèi),起作用的將是局部變量,與同名的全局變量不發(fā)生任何關(guān)系。在程序中首先定義了變量s并賦值為0,接著在嵌套的復(fù)合語句{}中定義了變量a并賦初值為5,接著執(zhí)行語句“s+=a++;”在這條語句中a加1,但表達式a++還是原來的值,故s=s+5,s為5,程序執(zhí)行到外層,此時{}內(nèi)定義的變量a不再有效,變量a為{}之前定義的且初值為3,接著執(zhí)行{}后面的語句“s+=a++;”,相當(dāng)于執(zhí)行語句“s=s+(a++);”即s=5+3,最后值為8,所以輸出的s值為8。故4個選項中A正確。22、閱讀下述程序段:y=-1;if(x!=0)if(x>0)y=1;elsey=0;該程序段所描述的數(shù)學(xué)關(guān)系是()。A、B、C、D、標準答案:4知識點解析:y的初值為-1,第一個if語句的判斷條件為x!=0,即當(dāng)x!=0時y的值變化,x=0時y的值不變,仍為-1。第二個if語句的判斷條件為x>O,如果x>0則y=1,否則y=0,即x<O時,y=O。4個選項中C符合題意。23、有如下程序:main(){intx=23;do{printf("%d",x--);}while(!x);}程序運行后的輸出結(jié)果是()。A、321B、23C、不輸出任何內(nèi)容D、陷入死循環(huán)標準答案:2知識點解析:本題中使用do-while循環(huán),每執(zhí)行一次循環(huán)體輸出x的值后將x減1。當(dāng)x=23,執(zhí)行循環(huán)體輸出x為23,X=X-1=23-1=22,判斷循環(huán)條件是否成立,因為x=22,!x的值為0,終止循環(huán),因此只輸出23。24、要求以下程序的功能是計算s=1+1/2+1/3+…+1/10main(){intn;floats;s=1.0;for(n=1O;n>1;n--)s=s+1/n;printf("%6.4f\n",s);}程序運行后輸出結(jié)果錯誤,導(dǎo)致錯誤結(jié)果的程序行是()。A、s=1.0;B、for(n=1O;n>l;n--)C、s=s+1/n;D、printf("%6.4f\n",s);標準答案:4知識點解析:程序中由于n為整型,所以1/n的結(jié)果始終為0,故程序最后輸出的結(jié)果為0,其結(jié)果錯誤,原因為在表達式1/n中1和n均為整型,所以應(yīng)該將1改為1.0,這樣表達式1.0/n的值不為0,為該數(shù)學(xué)表達式的值,因此可以知道導(dǎo)致程序運行后輸出結(jié)果錯誤的行為“s=s+1/n;”,所以,4個選項中選項C符合題意。25、有以下程序:main(){intk=4,n=0;for(;n<k;){n++;if(n%3!=O)continue;k--;}printf("%d,%d\n",k,n);}程序運行后的輸出結(jié)果是()。A、1,1B、2,2C、3,3D、4,4標準答案:4知識點解析:在本程序的for循環(huán)中,用到了一個continue語句,continue語句的作用是停止本次循環(huán),不執(zhí)行循環(huán)體內(nèi)continue語句后面的其他語句,繼續(xù)下次循環(huán)的條件判斷。首先在for循環(huán)中n自加1(值變?yōu)?),然后執(zhí)行后面的if語句,由于if語句后面括號的表達式1%3!=0的值為真,程序執(zhí)行continue語句,回到for循環(huán)的開始部分,并且判斷for循環(huán)中的條件表達式(n<k)為真,重復(fù)執(zhí)行“n++;”語句,如此循環(huán)直到n=3時,if語句判定條件中表達式3%3!=0的值為假,程序執(zhí)行if語句后面的“k--;”語句,此時k的值為3,不滿足n<k,退出for循環(huán)。故最后的k和n的值為3和3,選項C符合題意。26、有以下程序:floatfun(intx,inty){return(x+y);}main(){inta=2,b=5,C=8;printf("%3.0f\n",fun((int)fun(a+c,b),a-c));}程序運行后的輸出結(jié)果是()。A、編譯出錯B、9C、21D、9標準答案:2知識點解析:fun((int)fun(a+c,b),a-c))是用函數(shù)的返回值做實參。第一次調(diào)用fun(a+c,b),x+y=a+c+b=2+5+8=15,由于函數(shù)fun()的返回值類型被定義為float型,返回值為15.000000,在主函數(shù)中被強制轉(zhuǎn)換為int型變?yōu)?5。第二次調(diào)用后fun(15,a-c),x+y=15+a-c=15+2-8=9,返回值為9.000000,輸出格式要求小數(shù)位為0且數(shù)據(jù)寬度為3,則輸出9。27、有以下程序:intf1(intx,inty){returnx>y?x:y;}intf2(intx,inty){returnx>y?y:x;}main(){inta=4,b=3,c=5,d,e,f;d=fl(a,b);d=f1(d,c);e=f2(a,b);e=f2(e,c);f=a+b+c-d-e;printf("%d,%d,%d\n",d,f,e);}執(zhí)行后輸出結(jié)果是()。A、3,4,5B、5,3,4C、5,4,3D、3,5,4標準答案:4知識點解析:函數(shù)f1()的作用是返回形參x和y的較大值,函數(shù)f2()的作用是返回形參x和y的較小值,在main()函數(shù)中通過調(diào)用兩次f1()函數(shù),求得a、b、c的最大值并存放在變量d中,通過調(diào)用兩次f2()函數(shù),求得a、b、c的最小值并存放到變量e中。由程序可知d值為5,f的值為4,e的值為3,因此最后輸出的d、f、e的值為5、4、3。所以C選項為所選。28、有如下程序:voidf(intx,inty){intt;if(x<y){t=x;x=y;y=t;}}main(){inta=4,b=3,C=5,f(a,b);f(a,c);f(b,c);printf("%d,%d,%d\n",a,b,C);}執(zhí)行后輸出結(jié)果是()。A、3,4,5B、5,3,4C、5,4,3D、4,3,5標準答案:8知識點解析:C語言規(guī)定,在函數(shù)調(diào)用時變量作為參數(shù)傳遞是傳值的,在函數(shù)體中對形參變量的修改不能影響到對應(yīng)的實參變量。本題定義了一個函數(shù)f(),用變量作為形參,在main()函數(shù)中調(diào)用了3次f()函數(shù),由于變量作為參數(shù)進行傳遞,所以對應(yīng)的實參的值并沒有被交換。故輸出的a、b、c依舊是原來的值4、3、5。D選項為所選。29、以下選項中,正確運用指針變量的程序段是()。A、int*i=NULL;B、float*f=NULL;scanf("%d",i);*f=10.5;C、chart=’m’,*C=&t;D、long*L;*C=&t;L=’0’;標準答案:8知識點解析:選項A定義了一個整型變量i,并且初始化讓它指向NULL,接著通過scarnf()函數(shù),改變i指向的存儲空間的值,選項A中首先定義了整型指針變量i并初始化為NULL,即表示指針i不指向任何存儲單元,即此時還沒有為i在內(nèi)存中開辟存儲單元,而在scanf()函數(shù)中第二個參數(shù)是地址參數(shù),顯然在這里i不表示地址,所以下面的scanf("%d",i)語句是不正確的,故選項A不正確。選項B定義了一個實型指針變量f并初始化使它指向NULL,即還沒有為f在內(nèi)存中開辟存儲單元,不能向*f代表的存儲單元(不存在)中寫數(shù)據(jù),故選項B錯誤;選項C中首先定義了一個字符變量t并給它賦初值’m’,然后定義一個字符型指針c并讓它指向了變量t,這一部分正確,然后接著用了一個語句“*c=&t;”應(yīng)該將該語句中c前的*去掉,故選項C運用指針變量不正確。選項D中的’\0’是一個轉(zhuǎn)移字符,稱作“空值”,可以給指針變量L賦值。所以,4個選項中選項D符合題意。30、有以下程序:#include<stdio.h>main(){printf("%d\n",NULL));程序運行后的輸出結(jié)果是()。A、0B、1C、-1D、NULL沒定義,出錯標準答案:1知識點解析:在C語言中NULL的ASCII碼值為0,而輸出函數(shù)要求以整形格式輸出,故最后的輸出數(shù)為0。所以,4個選項中選項A符合題意。31、已定義c為字符型變量,則下列語句中正確的是()。A、c=’97’;B、c="97";C、c=97;D、c="a";標準答案:4知識點解析:用單引號括起來的—介字符稱為字符常量,而選項B和選項D中用的是雙引號,而用雙引號括起來的字符為字符串常量,故選項B和選項D不正確。因為在C語言中,字符常量在存儲時,并不是把該字符本身放到內(nèi)存單元中去,而是將該字符的相應(yīng)ASCII代碼放到存儲單元中,所以C語言使字符型數(shù)據(jù)和整形數(shù)據(jù)之間可以通用,選項C正確。而選項A中,給字符型變量賦值時只能賦一個字符,9,7作為字符時為兩個字符且必須分別為單引號括起來,故選項A不正確,所以,4個選項中選項C符合題意。32、以下不能正確定義二維數(shù)組的選項是()。A、inta[2][12]={{1},{2}};B、inta[][2]={1,2,3,4};C、inta[2][2]={{1},2,3}:D、inta[2][]={{1,2},{3,4}};標準答案:8知識點解析:在定義中如果對所有元素賦初值,其第1維的長度可以省略,故選項B正確;二維數(shù)組初始化也可以只對每行或前若干個行的前若干個元素賦初值,故選項A和選項C正確:在二維數(shù)組定義時不能省略第二維的長度,故選項D錯誤。所以,4個選項中選項D符合題意。33、若有如下程序:main(){chara[3][5]={"name","age","sex"},n;for(n=0;n<3;n++)printf("%s\n",a[n]);}則程序執(zhí)行后的輸出結(jié)果是()。A、nameagesexB、nameC、nameD、nameagexexgeagesexxsex標準答案:4知識點解析:a[3][5]是一個二維數(shù)組,它也可以看成是一個有3個元素的一維數(shù)組a[0]、a[1]、a[2],同時這3個元素也是一維數(shù)組,分別保存字符串“name”、“age”、“sex”。for循環(huán)循環(huán)3次,輸出3個字筘串“name”、“age”、“sex”。所以,C選項為所選。34、有以下程序:main(){intm[][3]={1,4,7,2,5,8,3,6,9}inti,j,k=2;for(i=0;i<3;i++){printf("%d",m[k][i]);}}執(zhí)行后輸出結(jié)果是()。A、456B、258C、369D、789標準答案:4知識點解析:變量k的初值為2,循環(huán)執(zhí)行了3次,分別輸出m[2][0]、m[2][1]和m[2][2],其值分別為3、6、9。所以,C選項為所選。35、執(zhí)行下列程序的結(jié)果是()。#defineN5#defineH(x)((N+2)*x)main(){inta=2,b=3,C;c=H(a+b);printf("%d",c);}A、15B、17C、23D、35標準答案:2知識點解析:用a+b替代宏H(x)中的參數(shù)x,用5替代N,則((N+2)*x)=((5+2)*a=b)=((5+2)*2+3)=17。36、有以下程序:main(){chars[]="\n123\\";printf(’%d,%d\n’,strlen(s),sizeof(s));}執(zhí)行后輸出結(jié)果是()。A、賦初值的字符串有錯B、6,7C、5,6D、6,6標準答案:4知識點解析:本題在定義字符數(shù)組時沒有定義數(shù)組長度,但用字符常量給數(shù)組賦了初值,這時初值的個數(shù)即為數(shù)組的長度,故數(shù)組長度為6(包括’\0’)。字符串的長度為有效字符的個數(shù)5。strlen(s)返回值為串中字符的個數(shù)(不計最后的’\0’),則輸出值為5。sizeof(s)計算數(shù)組所占的字節(jié)數(shù),包含’\0’,則輸出值為6。因此,C選項正確。37、閱讀以下函數(shù):fun(char*s1,char*s2){inti=0;while(s1[i]==s2[i]&&s2[i]!=’\0’)i++;return(s1[i]==&&s2{i)!==’\0’);}此函數(shù)的功能是()。A、將s2所指字符串賦給s1B、比較s1和s2所指字符串的大小,若s1比s2的大,函數(shù)值為1,否則函數(shù)值為0C、比較s1和s2所指字符串是否相等,若相等,函數(shù)值為1,否則函數(shù)值為0D、比較s1和s2所指字符串的長度,若s1比s2的長,函數(shù)值為1,否則函數(shù)值為0標準答案:4知識點解析:在函數(shù)fun()中有兩個字符型指針變量s1和s2,在函數(shù)中程序執(zhí)行while循環(huán),該循環(huán)退出條件有兩個:一個是s1[i]!=s2[i](兩個字符串不相等);第二個是s1[i]和s2[i]相等均為\0(兩個字符串相等)。循環(huán)退出后,執(zhí)行return語句,即兩個字符串相等則返回1,不相等則返回0。所以,C選項為所選。38、以下敘述中正確的是()。A、全局變量的作用域一定比局部變量的作用域范圍大B、靜態(tài)(static)類別變量的生存期貫穿于整個程序的運行期間C、函數(shù)的形參都屬于全局變量D、未在定義語句中賦初值的auto變量和static變量的初值都是隨機值標準答案:2知識點解析:若在函數(shù)中定義與全局變量名字相同的局部變量,則全局變量在該函數(shù)中將不起作用,因此全局變量的作用域并不一定比局部變量的作用域大,故選項A不正確;靜態(tài)變量一旦定義,將在整個程序的運行期間都存布,故選項B正確;函數(shù)的形參只在函數(shù)調(diào)用的時候分配存儲空間,在退出函數(shù)時收回存儲空間,因此是局部的,故選項C不正確;沒有賦值的auto型變量的初值是隨機的,沒有賦值的static型變量的初值是0,故選項D不正確。所以,B選項為所選。39、設(shè)有如下說明:typedefstruct{intn;charc;doublex;)STD;則以下選項中,能正確定義結(jié)構(gòu)體數(shù)組并賦初值的語句是()。A、STDtt[2]={{1,’A’,62},{2,’B’,75}};B、STDtt[2]={1,"A",62},2,"B",75};C、stmctt[2]={{1,’A’),{2,’B’}};D、structt[2]={{1,"A",62.5),{2,"B",75.0}};標準答案:1知識點解析:本題定義了一個結(jié)構(gòu)體類型并自定義類型名為STD,用戶自定義類型后,就可以利用它進行變量與數(shù)組的定義。定義的方法,與C語言中其他類型的定義完全一樣,定義結(jié)構(gòu)型數(shù)組并賦初值時,每個元素用一對{和}括起來,字符型元素用,括起來,選項A、B、C、D中只有選項A符合條件。所以,A選項為所選。40、在下列定義中的共用體所占內(nèi)存字節(jié)數(shù)是()。union{chark[6];struct{intm;floarf;}a;doubled;}b;A、8B、14C、18D、10標準答案:1知識點解析:結(jié)構(gòu)體變量所占的存儲空間是各個分量所占空間的總和。共用體變量中的所有成員占有同一個存儲空間,其字節(jié)數(shù)與成員中占字節(jié)數(shù)最多的那個成員相等。m占2個字節(jié),f占4個字節(jié),因此結(jié)構(gòu)體變量a所占的存儲空間為6字節(jié)。k[6]占6個字節(jié),d占8個字節(jié)。共用體變量b所占的存儲空間與占存儲空間最多的d所占存儲空間的字節(jié)數(shù)相同。所以,A選項為所選。41、若有以下結(jié)構(gòu)體,則正確的定義或引用是()。structTest{intx;inty;}v1;A、Test.x=10;B、Testv2;v2.x=10;C、structTestv2;v2.x=10;D、structTest.v2=10;標準答案:4知識點解析:定義結(jié)構(gòu)體類型的變量的方式有:①緊跟在結(jié)構(gòu)體類型說明之后進行定義,如題目中給出的;②在說明對結(jié)構(gòu)成員的引用形式為結(jié)構(gòu)體變量名.成員名選項A對結(jié)構(gòu)成員的引用的形式是錯誤的,Test是結(jié)構(gòu)體名,不能用來引用結(jié)構(gòu)成員。選項B中定義結(jié)構(gòu)體類型的變量的形式是錯誤的,Test是結(jié)構(gòu)體名,不能用宋定義結(jié)構(gòu)體類型的變量。選項D中對結(jié)構(gòu)成員的引用的形式是錯誤的,對結(jié)構(gòu)成員的引用的形式為:結(jié)構(gòu)體變量名.成員名。4個選項中只有選項C是正確的定義或引用。42、有以下程序:main(){chars[]="Yes\n/No",*ps=s;puts(ps+4);*(ps+4)=0;puts(s);}程序運行后的輸出結(jié)果是(選項D中的第一行是空行)()。A、n/NoYes/NoB、/NoYesC、n/NoYes/NoD、/NoYes標準答案:2知識點解析:主函數(shù)中定義了一個字符數(shù)組s并賦初值,一個字符串指針變量ps并讓它指向s。程序中p+4的地址為數(shù)組第5個元素的地址,而調(diào)用put(str_adr)函數(shù)時,將從str_adr這一地址開始,依次輸出存儲單元中的字符,遇到第一個\0時結(jié)束輸出,并自動輸出一個換行符。所以put(p+4)將輸出n/No,put(s)將從s第一個元素開始輸出到第3個元素結(jié)束(因為執(zhí)行*(p+4)=0語句后s中的第5個元素的值為0,而s中的第4個元素為\,puts將遇到\0,結(jié)束輸出),即輸出yes。所以,4個選項中選項B符合題意。43、有以下程序:voidfun(int*a,inti,intj){intt;if(i<j){t=a[i];a[i]=a[j];a[j]=t;fun(a,++i,--j);}}main(){inta[]={1,2,3,4,5,6),i;fun(a,0,5)for(i=0;i<6;i++)printf("%d",a[i]);}執(zhí)行后的輸出結(jié)果是()。A、654321B、432156C、456123D、123456標準答案:1知識點解析:函數(shù)fun()中有3個參數(shù),參數(shù)a為一個指針變量,接收的實參可以是數(shù)組名,參數(shù)i和j分別表示數(shù)組元素的下標,當(dāng)下標i小于下標j時,a[i]和a[j]交換,然后對自身進行調(diào)用,可見這是一個遞歸函數(shù)。其實現(xiàn)的功能是把數(shù)組a從下標為i的元素到下標為j的元素之間的所有元素反序存放。在主函數(shù)中調(diào)用fun()函數(shù),把a數(shù)組從a[0]到a[5]之間的所有元素反序存放,最后輸出從a[0]到a[5]的值,因此輸出的值為6、5、4、3、2、1,.所以,A選項為所選。44、假定下列程序的可執(zhí)行文件名為filel.exe,在該程序的子目錄下輸入命令行:file1ChinaBejing<回車>main(intargc,char*argv[]){while(argc-->1)printf("%s\n",*++argv);}則程序運行后的輸出結(jié)果是()。A、filelChinaBejingB、ChinaBejingC、ChinaD、Bejing標準答案:2知識點解析:主函數(shù)的第一個參數(shù)argc為整形參數(shù),記下從命令行輸入的參數(shù)的個數(shù);第二個參數(shù)argv是一個字符型的指針數(shù)組,它的每一個指針指向命令行輸入的參數(shù)字符數(shù)。在本例中argc的值為3,argv[0]指向字符串.“filel”,argv[l]指向參數(shù)字符串“China”,argv[2]指向字符串“Bejing”。在main()函數(shù)中,while循環(huán)執(zhí)行了2次。第1次循環(huán),argc=3,3>1為真,argc-1=3-1=2,執(zhí)行循環(huán)體輸出*++argv,argv為字符型的指針數(shù)組的數(shù)組名,代表數(shù)組的首地址,同時也是數(shù)組第1個元素的地址,++argv指向數(shù)組的第2個元素,第2個元素是一個指針,它指向字符串“China”。第2次循環(huán),argc=2,2>1為真,argc-1=2-1=1,執(zhí)行循環(huán)體輸出*++argv,這次循環(huán)畔++argv指向數(shù)組的第3個元素,第3個元素是一個指針,它指向字符串“Bejing”。argc=1時,1>1為假,退出循環(huán)。所以,4個選項中選項B符合題意。45、有如下說明和定義語句:structstudent{intage;charnum{8};};structstudentstu[3]={{20,"200401"},{21,"200402"),{19,"200403"}};structstudent*p=stu;以下選項中引用結(jié)構(gòu)體變量成員的表達式錯誤的是()。A、(p++)->numB、p->numC、(*p).numD、stu[3].age標準答案:8知識點解析:結(jié)構(gòu)體變量也有地址,因此可以把它的地址賦值給一個指針變量,然后通過該指針變量來引用結(jié)構(gòu)體的成員,選項A和選項B就是通過指針變量來引用結(jié)構(gòu)體的成員,故選項A和選項B都正確,也可以通過結(jié)構(gòu)體數(shù)組元素的成員引用,選項C和選項D屬于這種情況,而在選項D中stu[3].age不正確,因為結(jié)構(gòu)體數(shù)組stu共有3個元素,其下標應(yīng)該為0,1,2。所以,4個選項中選項D符合題意。46、若要說明一個類型名STP,使得定義語句STPs等價于char*s,以下選項中正確的是()。A、typedefSTPchar*s;B、typedef*charSTP;C、typedefSTP*char;D、typedefchar*STP;標準答案:8知識點解析:指針類型的白定義形式如下:typedef類型說明符*用戶類型名。不難看出只有選項D是正確的定義形式。所以,D選項為所選。47、下面程序的輸出結(jié)果為()。structst{intx;int*y;}*p;intdt[4]={10,20,30,40);structstaa[4]={50,&dt[0],60,&dt[1],70,&dt[2],80,&dt[3]};main(){p=aa;printf("%d\n",++p->x);printf("%d|n",(++p)->x);printf("%d\n",++(*p->y));}A、102020B、506021C、516021D、607031標準答案:4知識點解析:第1個輸出語句中由于->的優(yōu)先級高于++,因此先取結(jié)構(gòu)體的分量x,再對x的值加1,再輸出。p的初值為結(jié)構(gòu)體數(shù)組aa的首地址即a[0]的地址,a[0]的x分量值為50,加1后輸出51。第2個輸出語句中++p被括號括起來,括號的優(yōu)先級與->相同,自左至右結(jié)合,因此先對p加1,再取p所指向的元素的x分量的值。p加1后p指向數(shù)組元素a[1],a[1]的x分量的值為60,輸出60。第3個輸出語句中括號的優(yōu)先級高于++,因此先求括號中表達式的值,又由于->的優(yōu)先級高于*,所以先取p所指向的數(shù)組元素的y分量的值,p所指向的元素為a[1],y分量的值為&dt[1]。&dt[1]是一個存儲單元的地址,是數(shù)組dt第2個元素的地址值,再取該存儲單元中的值為20,最后對20加1,輸出21。選項C為所選。48、表達式“~9&9<<1|4”的值為()。A、0B、4C、5D、22標準答案:8知識點解析:優(yōu)先級由高到低的順序為~、<<、&、|。9的二進制形式為00001001,4的二進制形式為00000100?!?即11110110。9<<1為00010010,11110110&00010010=00010010,00010010|00000100=10110即22。49、以下敘述中不正確的是()。A、C語言中的文本文件以ASCII碼形式存儲數(shù)據(jù)B、C語言中對二進制文件的訪問速度比文本文件快C、C語言中,隨機讀寫方式不適用于文本文件D、C語言中,順序讀寫方式不適用于二進制文件標準答案:8知識點解析:在C語言中文本文件是以ASCII碼形式存放的,每個字符占一個字節(jié)。由于數(shù)據(jù)在計算機中是以二進制形式存放的,因此二進制文件中的數(shù)據(jù)可以直接讀出,而不需要像文本文件那樣把ASCII碼轉(zhuǎn)換成二進制,因此速度較快。在文本文件葉,,數(shù)據(jù)以ASCII碼形式存放,用戶很難判定一個數(shù)據(jù)到底占幾個字節(jié),所以不適合使用隨機讀寫方式。數(shù)據(jù)以二進制形式存放,占有的字節(jié)數(shù)是固定的,所以可以進行隨機讀寫,當(dāng)然也可以順序讀寫。故D選項為所選。50、有以下程序(提示,程序中fseek(fp,-2L*sizeof(int),SEEK_END);語句的作用是使位置指針從文件末尾向前移2*sizeof(int)字節(jié)):#include<stdio.h>main(){FILE*fp;inti,a[4]={l,2,3,4},b;fp=fopen("data.dat","wb");for(i=0;i<4;i++)fwrite(&a[i],sizeof(int),1,fp);fclose(fp);fp=fopen("data.dar","rb");fseek(fp,-2L*sizeof(int),SEEKEND);fread(&b,sizeof(int),1,fp);/*從文件中讀取sizeof(int)字節(jié)的數(shù)據(jù)到變量b中*/fclose(fp);printf("%d\n",b);}執(zhí)行后輸出結(jié)果是()。A、2B、1C、4D、3標準答案:8知識點解析:函數(shù)fopen(constchar*filename,constchar*mode)的功能足以mode指定的模式打開filename指定的磁盤文件;fclose(FILE*fp)的功能是關(guān)閉文件指針fp指向的文件;函數(shù)fscanf(FILE*fp,constchar*format[,address,--])的功能是根據(jù)format中的格式從fp指向的文件中讀取數(shù)據(jù),并存入到相應(yīng)的address指向的變量中。函數(shù)fprintf(FILE*fp,constchar*format[,argument,--])的功能是把argument列表中的表達式值寫到fp所指向的文件中;函數(shù)fwrite(void*ptr,intsize,intn,FILE*fp)的功能足把ptr指向的緩沖區(qū)中的size×n個字節(jié)寫到文件指針fp指向的文件中。本題中首先定義了一個文件指針fp,然后通過函數(shù)fopen以可wb的方式打開文件data.dat,直接通過一個for循環(huán),每循環(huán)一次調(diào)用函數(shù)fwrite將數(shù)組中的元素a[i]的值寫進fp所指的文件中,該循環(huán)共循環(huán)4次,循環(huán)完后fp所指文件的內(nèi)容為123,然后通過fclose函數(shù)關(guān)閉fp所指文件。接著通過函數(shù)fopen以rb的方式打開文件data.dat,通過fseek函數(shù)讓指針fp從文件末尾向前移動兩個血型大小字節(jié),再通過函數(shù)fread從fp所指的文件畔,讀取一個int型大小的數(shù)據(jù)到變量b中,故此時b的值為3,因此最后輸出b的值為3,所以,4個選項中選項D符合題意。四、公共基礎(chǔ)填空題(本題共5題,每題1.0分,共5分。)51、在一個容量為25的循環(huán)隊列中,若頭指針front=16,尾指針rear=9,則該循環(huán)隊列中共有【】個元素。標準答案:18知識點解析:設(shè)循環(huán)隊列的容量為n。若rear>front,則循環(huán)隊列中的元素個數(shù)為rear-front;若rear<front,則循環(huán)隊列中的元素個數(shù)為n+(rear-front)。題中,front=16,rear=9,即rear<front,所以,循環(huán)隊列中的元素個數(shù)為m+(rear-front)=25+(9-16)=18。52、在面向?qū)ο蠓椒ㄖ?,屬性與操作相似的一組對象稱為【】。標準答案:類知識點解析:在面向?qū)ο蠓椒ㄖ校惷枋龅氖蔷哂邢嗨菩再|(zhì)的一組對象。所以,屬性與操作相似的一組對象稱為類。53、在軟件開發(fā)中,結(jié)構(gòu)化方法包括結(jié)構(gòu)化分析方法、結(jié)構(gòu)化設(shè)計方法和結(jié)構(gòu)化程序設(shè)計方法。詳細設(shè)計階段所采用的是【】方法。標準答案:結(jié)構(gòu)化設(shè)計知識點解析:在軟件開發(fā)中,結(jié)構(gòu)化方法包括結(jié)構(gòu)化分析方法、結(jié)構(gòu)化設(shè)計方法和結(jié)構(gòu)化程序設(shè)計方法。詳細設(shè)計階段所采用的是結(jié)構(gòu)化設(shè)計方法。54、在關(guān)系模型中,把數(shù)據(jù)看成一個二維表,每一個二維表稱為一個【】。標準答案:關(guān)系知識點解析:在關(guān)系模型中,把數(shù)據(jù)看成一個二維表,每一個二維表稱為一個關(guān)系。55、實體之間的聯(lián)系可以歸結(jié)為一對一的聯(lián)系,一對多的聯(lián)系與多對多的聯(lián)系。如果一個學(xué)校有許多教師,而一個教師只歸屬于一個學(xué)校,則實體集學(xué)校與實體集教師之間的聯(lián)系屬于【】的聯(lián)系。標準答案:一對多知識點解析:實體之間的聯(lián)系可歸結(jié)為一對一、一對多與多對多的聯(lián)系。如一個學(xué)校有許多教師,一個教師只歸屬于一個學(xué)校,則實體集學(xué)校與實體集教師之間的聯(lián)系屬于一對多的聯(lián)系。五、填空題(本題共12題,每題1.0分,共12分。)56、已知字符A的ACSII碼值為65,以下語句的輸出結(jié)果是【】。charch=’B’;printf("%c%d\n",ch,ch);標準答案:B66知識點解析:printf函數(shù)的功能是按照指定的格式,在標準輸出設(shè)備上輸出數(shù)據(jù),它有兩種參數(shù):格式控制參數(shù)和輸出項參數(shù)。本題中,printf("%c%d\n",ch,ch)表示以字符格式和十進制整數(shù)格式輸出ch,B的ACSII碼值為66,即在計算機中B的十進制整數(shù)格式是66。所以,輸出為B66。57、以下程序段的輸出結(jié)果是【】。main(){inta=2,b=2,c=4;a*=16+(b++)-(++C);printf("%d",a);}標準答案:26知識點解析:a*=16+(b++)-(++c)等價于a*=a*(16+(b++)-(++c))=2*(16+(2-5)=26。b++是先使用b的值參加運算,再對b加1;++c是先c加1,再使用c的值參加運算。58、有以下程序main(){intt=1,i=5;for(;i>=0;i--)t*=i;printf("%d\n",t);}執(zhí)行后輸出結(jié)果是【】。標準答案:0知識點解析:本題中的for循環(huán)共執(zhí)行了6次,每執(zhí)行一次將相應(yīng)i的值相乘,最后當(dāng)i=-1時停止循環(huán)。該for循環(huán)執(zhí)行完后t的值為5*4*3*2*1*0=0,故最后輸出t的值為0。59、若有以下程序:main(){inta=4,b=3,c==5,t=0;if(a<b)t=a;a=b;b=t;if(a<c)t=a;a=c;c=t;printf("%d%d%d\n",a,b,C);}執(zhí)行后輸出結(jié)果是【】。標準答案:503知識點解析:先判斷表達式a<b為假,不執(zhí)行t=a,但執(zhí)行“a=b;b=t;”,a的值為3,b的值為0。再判斷表達式a<C,值為真,所以執(zhí)行后面的3條語句“t=a;a=c;c=t”,結(jié)果a的值為5,c的值為3,所以最后輸出的結(jié)果為5、0和3。60、有以下程序:#include<stdio.h>main(){charch1,ch2;intn1,n2;ch1=getchar();ch2=getchar();n1=ch1-’0’;n2=n1*10+(ch2-’0’);printf("%d\n",n2);;}程序運行時輸入12<回車>,執(zhí)行后輸出結(jié)果是【】。標準答案:12知識點解析:字符類型的數(shù)據(jù)在內(nèi)存中以相應(yīng)的ASCII碼存放,在C語言中,字符數(shù)據(jù)可以等價為與其相應(yīng)的ASCII碼的整數(shù),還可以作為整數(shù)參加運算。在本題中,n1=ch1-’0’=’1-’0’=49-48=1,n2=n1*10+(ch2-’0’)=1*10+(’2’-’0’)=10+2=12,所以,最后輸出為12。61、有以下程序:voidf(inty,int*x){y=y+*x;*x=*x+y;}main(){intx=2,y=4;f(y,&x);ptintf("%d%d\n",x,y);}執(zhí)行后輸出結(jié)果是【】。標準答案:84知識點解析:“值傳遞”指實參將值傳遞給形參后,實參與形參再無聯(lián)系。也就是說對行參的改變將不影響實參;地址傳遞是指地址或數(shù)組名作為形參時的參數(shù)傳遞,這種情況下對形參的改變將對實參產(chǎn)生影響。函數(shù)f(y,*x)的作用是讓y的值加上指針x所指向變量的值,讓指針x所指向變量的值加上y的值。由于形參y是傳值的,形參x是傳地址的,故調(diào)用該函數(shù)后,作為實參y的值將不改變,而實參x的值將改變,故最后輸出的y值為4,而x的值為8。62、若x、y和z均是int型變量,則執(zhí)行下面表達式后的x值為【】。x=(y=4)+(z=3)標準答案:7知識點解析:x=(y=4)+(z=3)等價于y=4,z=3,x=y+z=4+3=7。63、以下程序中,for循環(huán)體執(zhí)行的次數(shù)是【】。#defineN2#defineMN+1#defineKM+1*M/2main(){inti;for(i=1;i<K;i++){...}}標準答案:4知識點解析:將程序中所有的宏替換掉可得:M=2+1,K=2+1*2+1/2=4,所以for循環(huán)共循環(huán)了K-1+1次,即4-1+1共4次。64、設(shè)有如下變量說明,則a+(int)((int)b+c)>>(int)(b-c)的值為【】。inta=5;floatb=7.2,c=3.6;標準答案:1知識點解析:在表達式a+(int)((int)b+c)>>(int)(b-c)中圓括號最優(yōu)先,其次為類型轉(zhuǎn)換(int)、加法+、減法-、右移運算>>。所以先看兩個圓括號((int)b+c)和(b-c),前者b先被轉(zhuǎn)換為int型7,然后與c相加得10.6,后者結(jié)果是3.6,現(xiàn)在表達式為a+(iot)10.6>>(int)3.6。C語言中,float型轉(zhuǎn)換為int型是截尾取整,所以表達式進一步簡化為5+10>>3=>15>>3。由于15的二進制為000011112(下標),所以15>>3的結(jié)栗是000000012(下標),即1。65、main(){printf("Thesum=%d\n",SunFun(10));}SunFun(intn){intx,s=0;for(x=0;x<=n;x++)s+=F(【】);returns;}F(intx){return(【】);)標準答案:xx*x+1或1+x*x知識點解析:題目中要求從x=0開始將f(x)的值累加起來,直到x=10。在SunFun()函數(shù)中用了一個for循環(huán),每循環(huán)一次將f(x)累加到s中,所以在本題的第一個空白處應(yīng)該填x,然后x+1,共循環(huán)10次。F()函數(shù)的功能應(yīng)該是求數(shù)學(xué)表達式f(x)的值,所以其返回值應(yīng)該為x*x+1。66、若有如下程序:main(){intx=5,y,*t;t=&x;y=++(*t);printf("%d,%d",x,y);}則程序執(zhí)行后的x值為【】,y的值為【】。標準答案:66知識點解析:本題定義兩個iht型變量x、y,一個int型指針t,并將x初始化為5,t指向變量x。表達式y(tǒng)=++(*t)的意思是:讓t所指地址內(nèi)容自增1,然后賦給y。所以執(zhí)行后t所指的內(nèi)容(即變量x的值為6)y也為6。故本題的兩個空都應(yīng)該填6。67、下面函數(shù)用來求兩個單精度數(shù)之和,并通過形參將結(jié)果傳回,請?zhí)羁?。voidsub(floatx,floaty,【】z){【】=x+y;}標準答案:float**z知識點解析:C程序中可以通過傳送地址的方式在被調(diào)用函數(shù)中直接改變被調(diào)用函數(shù)中變量的值,從而達到函數(shù)之間數(shù)據(jù)的傳遞。國家二級(C語言)筆試模擬試卷第2套一、公共基礎(chǔ)選擇題(本題共10題,每題1.0分,共10分。)1、下列選項中,不是一個算法的基本特征的是()。A、完整性B、可行性C、有窮性D、擁有足夠的情報標準答案:1知識點解析:作為一個算法,一般應(yīng)該具有下列4個特征:①可行性,即考慮到實際的條件能夠達到一個滿意的結(jié)果;②確定性,算法中的第一個步驟都必須是有明確定義的:③有窮性,一個算法必須在有限的時間內(nèi)做完;④擁有足夠的情報。2、下列數(shù)據(jù)結(jié)構(gòu)中,屬于非線性的是()。A、線性表B、隊列C、樹D、棧標準答案:4知識點解析:線性結(jié)構(gòu),是指數(shù)據(jù)元素只有一個直接前件元素和直接后件元素。線性表是線性結(jié)構(gòu)。棧和隊列是指對插入和刪除操作有特殊要求的線性表,樹是非線性結(jié)構(gòu)。3、下列敘述中錯誤的是()。A、線性表是由n個元素組成的一個有限序列B、線性表是一種線性結(jié)構(gòu)C、線性表的所有結(jié)點有且僅有一個前件和后件D、線性表可以是空表標準答案:4知識點解析:線性表是一種線性結(jié)構(gòu),由n(n≥0)個元素組成,所以線性表可以是空表。但是在線性表中,第一個結(jié)點沒有前件,最后一個結(jié)點沒有后件,其他結(jié)點有且只有一個前件和后件,所以C是錯誤的。4、按照“先進先出”組織數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)是()。A、隊列B、棧C、雙向鏈表D、二叉樹標準答案:1知識點解析:隊列是一種特殊的線性表,只允許在表的一端插入元素,在表的另一端刪除元素,插入元素的一端叫“隊尾”,刪除元素的一端叫“隊頭”,先插入的元素先被刪除,是按“先進先出”的原則組織數(shù)據(jù)的。5、下列關(guān)于線性鏈表的描述中正確的是()。A、存儲空間不一定連續(xù),且各元素的存儲順序是任意的B、存儲空間不一定連續(xù),且前件元素一定存儲在后件元素的前面C、存儲空間必須連續(xù),且各前件元素一定存儲在后件元素的前面D、存儲空間必須連續(xù),且各元素的存儲順序是任意的標準答案:1知識點解析:線性表的鏈式存儲結(jié)構(gòu)中的結(jié)點空間是動態(tài)生成的,它們在內(nèi)存中的地址可能是連續(xù)的,也可能是不連續(xù)的。6、某二叉樹共有60個葉子結(jié)點與50個度為1的結(jié)點,則該二叉樹中的總結(jié)點數(shù)為()。A、148B、169C、182D、198標準答案:2知識點解析:葉子結(jié)點總是比度為2的結(jié)點多一個。所以,具有60個葉子結(jié)點的二叉樹有59個度為2的結(jié)點。總結(jié)點數(shù)=60個葉子結(jié)點+59個度為2的結(jié)點+50個度為1的結(jié)點=169個結(jié)點。7、下列數(shù)據(jù)結(jié)構(gòu)中,能用二分法進行查找的是()。A、順序存儲的有序線性表B、結(jié)性鏈表C、二叉鏈表D、有序線性鏈表標準答案:1知識點解析:二分法查找只適用于順序存儲的有序線性表,對于順序存儲的非有序線性表和線性鏈表。都只能采用順序查找。8、簡單的交換排序方法是()。A、快速排序B、選擇排序C、堆排序D、冒泡排序標準答案:8知識點解析:所謂的交換類排序方法是指借助數(shù)據(jù)元素之間的互相交換進行排序的一種方法,包括冒泡排序和快速排序,冒泡排序是一種最簡單的交換排序方法,它通過相鄰元素的交換,逐步將線性表變成有序。9、對于長度為n的線性表,在最壞情況下,下列各種排序法所對應(yīng)的比較次數(shù)中正確的是()。A、冒泡排序為n/2B、冒泡排序為nC、快速排序為nD、快速排序為n(n-1)/2標準答案:8知識點解析:在最壞情況下,冒泡排序和快速排序的比較次數(shù)都是n(n-1)/2。所謂冒泡排序,就是將相鄰的兩個數(shù)據(jù)相比較,如前面的數(shù)據(jù)大于后面的,則位置互換。這樣不停地比較、互換,其實就是把大的數(shù)往后排,小的數(shù)往前排(就像冒泡一樣冒出來了)。10、結(jié)構(gòu)化程序設(shè)計的3種基本結(jié)構(gòu)是()。A、過程、子程序和分程序B、順序、選擇和重復(fù)C、遞歸、堆棧和隊列D、調(diào)用、返回和轉(zhuǎn)移標準答案:2知識點解析:程序的3種基本控制結(jié)構(gòu)包括順序、選擇和重復(fù)(循環(huán)),這3種結(jié)構(gòu)就足以表達出各種其他形式的結(jié)構(gòu)。二、選擇題(1分)(本題共10題,每題1.0分,共10分。)11、C語言可執(zhí)行程序的開始執(zhí)行點是()。A、包含文件中的第一個函數(shù)B、程序中第一個函數(shù)C、程序中的main()函數(shù)D、程序中第一條語句標準答案:4知識點解析:每個C程序有且只有一個主函數(shù)main(),且程序必須從main函數(shù)開始執(zhí)行,并在main()函數(shù)中結(jié)束。12、可以在C語言程序中用做用戶標識符的一組標識符是()。A、void123BBNB、aaabccasC、as+b3-123IfD、6fDoSIG標準答案:2知識點解析:C語言規(guī)定,標識符是由字母、數(shù)字或下畫線組成,并且它的第一個字符必須是字母或者下畫線。13、下列正確的實型常量是()。A、E3.4B、-12345C、2.2e0.8D、4標準答案:2知識點解析:實型常量有兩種書寫形式。①小數(shù)形式,它由符號、整數(shù)部分、小數(shù)點及小數(shù)部分組成;②指數(shù)形式,由十進制小數(shù)形式加上指數(shù)部分組成,其形式為:十進制小數(shù)e指數(shù)或十進制小數(shù)E指數(shù)。注:e或E后面的指數(shù)必須是整數(shù),并且在e或E的前面必須有數(shù)字。本題中,選項A)中E的前面沒有數(shù)字,因此錯誤。選項C)中0.8不是整數(shù),因此錯誤。選項D)中4是整型常量而不是實型常量。14、下列表達式中,可以正確表示x≤0或x)1的關(guān)系是()。A、(x>=1)||(x<=0)B、x>l||x=0C、x>=1ORx<=0D、x>=1&&x<=0標準答案:1知識點解析:題中要求x的取值是小于等于0或者大于等于1,這說明表達式是或的關(guān)系,所以在寫成C語言表達式應(yīng)是邏輯或的關(guān)系,邏輯或運算符是“||”。15、若有定義inta=5,b=7;,則表達式a%=(b%2)運算后,a的值為()。A、0B、1C、11D、3標準答案:1知識點解析:本題考查“%”運算符的使用。運算符“%”要求兩個運算對象都為整型,其結(jié)果是整數(shù)除法的余數(shù)。本題中表達式a%=(b%2)等價于a=a%(b%2)=5%(7%2)=5%1=0。16、已知i、j、k為int型變量,若要從鍵盤輸入2、3、4<CR>,使i、j、k的值分別為2、3、4下列正確的輸入語句是()。A、scanf(“%3d,%3d,%3d”,&i,&j,&k);B、scanf(“%d,%d,%d”,&i,&j,&k);C、scanf(“%d%do/od”,&i,&j,&k);D、scaaf(“i=%d,j=%d,k=%d”,&i,&j,&k);標準答案:2知識點解析:函數(shù)scanf()的調(diào)用形式是:scanf(格式字符串,輸入項地址表)。其中,“格式字符串”是要輸入的變量的格式符;“輸入項地址表”是要輸入的變量的地址。若在格式符中插入了其他字符,則在輸入時要求按一一對應(yīng)的位置原樣輸入這些字符,其中的逗號也必須輸入。17、下列程序的輸出結(jié)果是()。main(){intp[8]={11,12,13,14,15,16,17,18},i=0,j=0;while(i++<7)if(p[i]%2)j+=p[i];printf("%d\n",j);}A、42B、45C、56D、60標準答案:2知識點解析:在C語言中,數(shù)組的下標默認為0,因此數(shù)組p的下標范圍為:0~7。程序循環(huán)過程為:第1次循環(huán)i=0,執(zhí)行循環(huán),并且i自加,得i=1,因此p[i]為p[1]=12,12%2=0,不執(zhí)行后面的語句;接著進行第2次循環(huán),此時i=1,小于7執(zhí)行循環(huán),并且i自加,得i=2,因此p[i]為p[2]=13,13%2=1,執(zhí)行后面的語句;這樣一直到退出循環(huán)。最后j的值為j=13+15+17=45。18、若有下列定義(設(shè)int類型變量占2個字節(jié)):inti=8,j=9;則下列語句:printf("i=%u,j=%x\n",i,j);輸出的結(jié)果是()。A、i=8,j=9B、8.9C、89D、i=8,j=8標準答案:1知識點解析:本題考查函數(shù)printf()的格式。“%x”表示以十六進制輸出整型數(shù)據(jù);“%u”表示以十進制無符號型輸出整型數(shù)據(jù)。printf函數(shù)中格式說明符之前插入的任何字符都原樣輸出。19、設(shè)有定義:intk=1,m=2;floatf=7;則下列選項中錯誤的表達式是()。A、k=k>=kB、-k++C、k%int(f)D、k>=f>=m標準答案:4知識點解析:在C語言中,求余運算符“%”兩邊的運算對象都應(yīng)為整型數(shù)據(jù),所以需要對變量f進行強制類型轉(zhuǎn)換,正確的寫法為k%(int)f。在C語言中,邏輯運算符與賦值運算符、算術(shù)運算符、關(guān)系運算符之間從高到低的運算優(yōu)先次序是:!(邏輯“非”)、算術(shù)運算符、關(guān)系運算符、&&(邏輯“與”)、||(邏輯“或”)、賦值運算符。根據(jù)運算符的優(yōu)先級與結(jié)合性,對于選項A),先計算k>=k的值(為真,即1),再用1對k進行賦值。對于選取項B),先計算k++的值,再對其取負數(shù)。對于選項D),先計算k>=f的值(為假,即0),再用0與出進行比較,故最終結(jié)果為0。20、若執(zhí)行下列程序時從鍵盤上輸入2,則輸出結(jié)果是()。#include<stdio.h>main(){inta;scanf("%d",&a);if(a++<3)printf("%d\n",a);elseprintf("%d\n",va--);}A、1B、3C、2D、4標準答案:2知識點解析:本題考查ifelse語句。程序中首先使用函數(shù)scanf()通過鍵盤讀入a的值,并通過第1個if語句,先判斷條件,取a的值2和3比較,然后將a的值加1,發(fā)現(xiàn)條件成立,執(zhí)行下列的printf語句,輸出a的值3。三、選擇題(2分)(本題共20題,每題1.0分,共20分。)21、有下列程序段:intk=0,a=1,b=2,c=3;k=a<b?b:a;k=k>c?c:k;執(zhí)行該程序段后,k的值是()。A、3B、2C、1D、0標準答案:2知識點解析:因為a<b成立,所以條件表達式a<b?b:a的值等于b的值等于2,因此變量k的值等于2。又因為k=2>c=3不成立,所以條件表達式k>c?e:k的值等于k的值等于2。把條件表達式k>c?e:k的值賦給變量k,因而變量k的值等于2。因此,選項B)為正確答案。22、有下列程序:main(){inty=20;do{y--;}while(--y);printf("%d\n",y--);}當(dāng)執(zhí)行程序時,輸出的結(jié)果是()。A、-1B、1C、4D、0標準答案:8知識點解析:本題考查do…while循環(huán)。當(dāng)-y是0(即y是0)時結(jié)束循環(huán),輸出y--是先輸出y的值再將y的值減1。23、有下列程序段:structSt{intx;int*y;)*pt;inta[]={1,2),b[]={3,4);structstc[2]={10,a,20,b);pt=c;下列選項中表達式的值為11的是()。A、*pt->yB、pt->xC、++pt->xD、(pt++)->x標準答案:4知識點解析:由題目的已知條件可知,pt指向結(jié)構(gòu)體數(shù)組c[2]的第一元素c[0],所以pt->x=10,執(zhí)行自加運算后為11。24、表達式’8’-’2’的值是()。A、整數(shù)6B、字符6C、表達式不合法D、字符8標準答案:1知識點解析:在C語言中,雖然字符都是變?yōu)槠鋵?yīng)的ASCII碼值來參與算術(shù)運算的,但字符間的相對位置關(guān)系還是不變的,字符8和字符2的ASCII碼值相差仍是6。25、在嵌套使用if語句時,C語言規(guī)定else總是()。A、和之前與其具有相同縮進位置的if配對B、和之前與其最近的if配對C、和之前與其最近的且不帶else的if配對D、和之前的第一個if配對標準答案:4知識點解析:C語言的語法規(guī)定:else子句總是與前面最近的不帶else的if相結(jié)合,與書寫格式無關(guān)。所以選項C)為正確答案。26、下列函數(shù)值的類型是()。fun(doublex){floaty;y=3*x-4;returny;}A、intB、不確定C、voidD、float標準答案:1知識點解析:本題考查默認函數(shù)的函數(shù)值的類型。在函數(shù)調(diào)用時,盡管y的類型是float,x的類型是double,但是因為函數(shù)定義時省去類型說明,系統(tǒng)默認函數(shù)值的類型為int型,所以計算后的y的類型是int型。27、有下列程序:main(){intk=5,n=0;do{switch(k){case1:case3:n+=1;k--;break;default:n=0;k--;case2:case4;n+=2;k--;break;}printf("%d",n);}while(k>0&&n<5);}程序運行后的輸出結(jié)果是()。A、235B、235C、2356D、2356標準答案:2知識點解析:因為變量的初始值分別為k=5,n=0,所以程序第1次進入循環(huán)時,執(zhí)行default語句,輸出0,k減1;這時n=0,k=4,程序進行第2次循環(huán),執(zhí)行case4:這個分支,結(jié)果是n=2,k=3,打印出2;這時n=2,k=3,程序進行第3次循環(huán),執(zhí)行case3:這個分支,結(jié)果是n=3,k=2,打印出3;這時n=3,k=2,程序然后進行第4次循環(huán),執(zhí)行case2:case4:這個分支,結(jié)果是n=5,k=1,打印出5,這時因為n=5不滿足n<5的循環(huán)條件,因此退出循環(huán),程序運行結(jié)束。所以在屏幕上打印出的結(jié)果是0235。28、下列程序執(zhí)行輸出的結(jié)果是()。#include<stdio.h>f(inta){intb=0;staticc=3;a=c++;b++;return(a);}main(){inta=2,i,k;for(i=0;i<2;i++)k=f(a++);printf("%d\n",k);}A、3B、4C、5D、6標準答案:2知識點解析:本題考查函數(shù)調(diào)用時的參數(shù)傳遞。在函數(shù)調(diào)用時,static變量在函數(shù)調(diào)用結(jié)束后所做的所有變化均保持(即上次調(diào)用結(jié)束時的值)。在主函數(shù)中,第一次循環(huán),i=0,調(diào)用k=f(a++)=f(2),調(diào)用完之后才將a加1,a變?yōu)?,在f(2)中,先將c=3賦值給a返回,然后將c加1,得到k=a=3,c=4。第二次循環(huán),i=1,調(diào)用k=f(a++)=f(3),調(diào)用完之后才將a加1,a變?yōu)?,在f(3)中,先將c=4賦值給a返回,然后將c加1,得到k=a=4,c=5。29、設(shè)有下列的程序段:charstr[]="HelloWorld";char*ptr;ptr==str;執(zhí)行上面的程序段后,*(ptr+10)的值為()。A、’\0’B、’0’C、不確定的值D、’0’的地址標準答案:1知識點解析:本題涉及字符數(shù)組和指針兩個知識點:①在C語言中,字符型數(shù)組在存放字符串時會自動在末尾加上’\0’,所以題中數(shù)組str有11個元素;②ptr指向數(shù)組str的首地址,ptr+10是指向str[10],*(ptr+10)是引用str[10]的值。30、分析下列程序:#include<stdio.h>main(){int*p1,*p2,*p;inta=6,b=9;p1=&a;p2=&b;if(a<b){p=p1;p1=p2;p2=p;}printf("%d,%d",*p1,*p2);printf("%d,%d",a,b);}程序的輸出結(jié)果為()。A、9,66,9B、6,99,6C、6,96,9D、9,69,6標準答案:1知識點解析:通過p1=&a,p2=&b分別將a、b的地址賦給指針p1、p2,接著執(zhí)行if語句,發(fā)現(xiàn)a<b成立,則通過交換p1、p2的值,即交換a、b所在存儲單元的地址,但是a、b的值并沒有發(fā)生變化。31、若有定義inta[10],*p=a,則p+6表示()。A、數(shù)組元素a[5]的值B、數(shù)組元素a[5]的地址C、數(shù)組元素a[6]的地址D、數(shù)組元素a[0]的值加上5標準答案:4知識點解析:指針中存放的是變量的地址,指針也可以進行加減運算,這時指針移動的最小單位是一個存儲單元,而不是一個字節(jié)。所以題中p+6指的是將指針向后移動了6個存儲單元,指向a[6],存放的是a[6]的地址。32、下列說法正確的是()。A、在C語言中,可以使用動態(tài)內(nèi)存分配技術(shù),定義元素個數(shù)可變的數(shù)組B、在C語言中,數(shù)組元素的個數(shù)可以不確定,允許隨機變動C、在C語言中,數(shù)組元素的數(shù)據(jù)類型可以不一致D、在C語言中,定義了一個數(shù)組后,就確定了它所容納的元素的個數(shù)標準答案:8知識點解析:本題考查數(shù)組的兩個知識點:①在C語言中,數(shù)組元素的個數(shù)是確定的,不允許隨機變動,數(shù)組定義好之后,它所能容納的元素的個數(shù)也就確定了;②同一個數(shù)組中所有元素的類型是一樣的。33、下列的程序用來輸出兩個字符串前7個字符中對應(yīng)相等的字符及其位置號,程序空白處應(yīng)該填寫的是()。#include<stdio.h>main(){chars1[]="chinese",s2[]="japnese";inti;for(i=0;s1[i]!=’\0’&&s2[i]!=’\0’;i++)if(s1[i]==s2[i]&&i<7)__________________;}A、putchar(s2[i]);putchar(i)B、puts(s1[i],i)C、printf("%c%d\n",s2[i],i)D、printf("%c",s1[i]);printf("%d\n",i)標準答案:4知識點解析:putchar(s)的功能是把字符s輸出到標準輸出設(shè)備;puts(s1)是把s1指向的字符串輸出到標準輸出設(shè)備。34、若已包括頭文件<stdio.h>和<string.h>,運行下列程序段時輸出結(jié)果是()。inti=0;chars1[10]="ABCD",s2[10]="EFG";strcat(s1,s2);while(s2[i++]!=’\0’)s2[i]=s1[i];puts(s2);A、ABCB、ABCDEFC、EBCDEFGD、CBD標準答案:4知識點解析:strcat(s1,s2)把s2連接到s1的后面,s1=ABCDEFG,執(zhí)行while(s2[i++]!=’\0’)后i的值變?yōu)?,往后執(zhí)行s2[i]=s1[i]時是從把s1的第二位給s2的第二位開始,把s1賦給s2。35、下列程序的運行結(jié)果是()。#include<stdio.h>main(){staticchara[]="Languagef",b[]="programe";char*p1,*p2;intk;p1=a;p2=b;for(k=0;k<=8;k++)if(*(p1+k)==*(p2+k))printf("%c",*(p1+k));}A、gaeB、angC、programD、有語

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論