版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
國家二級C語言機試(選擇題)模擬試卷3(共9套)(共270題)國家二級C語言機試(選擇題)模擬試卷第1套一、選擇題(本題共25題,每題1.0分,共25分。)1、某完全二叉樹按層次輸出(同一層從左到右)的序列為ABCDEFGH。該完全二叉樹的前序序列為()。A、ABCDEFGHB、ABDHECFGC、HDBEAFCGD、HDEBFGCA標準答案:B知識點解析:完全二叉樹的特點是除最后一層外,每一層上的結(jié)點數(shù)均達到最大值;在最后一層上只缺少右邊的若干結(jié)點。根據(jù)這一特點,再根據(jù)題意輸出序列為ABCDEFGH,可以得到該二叉樹的結(jié)構(gòu)如下:故此完全二叉樹的前序序列為ABDHECFG。2、若主函數(shù)中有定義語句:inta[10],b[10],c;,在主函數(shù)前定義的fun函數(shù)首部為:voidfun(intx[]),則以下選項中錯誤的調(diào)用語句是()。A、fun(b);B、fun(&c);C、fun(&a[3]);D、fun(b[11]);標準答案:D知識點解析:fun函數(shù)的形式參數(shù)應為一個數(shù)組,而b[11]是一個整型元素,參數(shù)類型不一致,且b[11]已經(jīng)溢出,所以D選項錯誤。3、線性表的鏈式存儲結(jié)構(gòu)與順序存儲結(jié)構(gòu)相比,鏈式存儲結(jié)構(gòu)的優(yōu)點有A、節(jié)省存儲空間B、插入與刪除運算效率高C、便于查找D、排序時減少元素的比較次數(shù)標準答案:B知識點解析:順序存儲時,相鄰數(shù)據(jù)元素的存放地址也相鄰(邏輯與物理統(tǒng)一);要求內(nèi)存中可用存儲單元的地址必須是連續(xù)的。優(yōu)點是存儲密度大(=1),存儲空間利用率高;缺點是插入或刪除元素時不方便。鏈式存儲時,相鄰數(shù)據(jù)元素可隨意存放,但所占存儲空間分兩部分,一部分存放結(jié)點值,另一部分存放表示結(jié)點間關系的指針優(yōu)點是插入或刪除元素時很方便效率高,使用靈活。缺點是存儲密度小(<1),存儲空間利用率低,故選項B正確。4、語句strlen("abcdcfiog\0\hi")的結(jié)果是()。A、4B、6C、11D、12標準答案:B知識點解析:字符串的字符’\0’,它在C語言的字符串中具有特殊的意義,字符’\0’標志字符串的結(jié)束,計算串長時,只計算字符’\0’之前的字符數(shù)量,而不計算’\0’之后有什么字符。5、下列方法中,屬于白盒法設計測試用例的方法的是()。A、錯誤推測B、因果圖C、基本路徑測試D、邊界值分析標準答案:C知識點解析:白盒測試方法也稱為結(jié)構(gòu)測試或邏輯測試,主要方法有邏輯覆蓋測試、基本路徑測試等。6、下列敘述中錯誤的是()。A、C程序可以由一個或多個函數(shù)組成B、C程序可以由多個程序文件組成C、一個C語言程序只能實現(xiàn)一種算法D、一個C函數(shù)可以單獨作為一個C程序文件存在標準答案:C知識點解析:一個C程序可以有一個或多個程序文件,也可以有一個或多個函數(shù),所以一個C語言程序可以實現(xiàn)多種算法,答案選C。7、軟件測試的目的是A、評估軟件可靠性B、發(fā)現(xiàn)并改正程序中的錯誤C、改正程序中的錯誤D、發(fā)現(xiàn)程序中的錯誤標準答案:D知識點解析:軟件測試的目的是為了發(fā)現(xiàn)程序中的錯誤,而軟件調(diào)試是為了更正程序中的錯誤。8、設表的長度為20。則在最壞情況下,冒泡排序的比較次數(shù)為A、90B、20C、19D、190標準答案:D知識點解析:假設線性表的長度為n,則在最壞情況下,冒泡排序的比較次數(shù)為n(n-1)/2。本題中,n=20,所以20*19/2=190。所以選項D正確。9、有以下程序main(){inti=5;do{if(i%3=1)if(i%5=2){printf(’’*%d’’,i);break;}i++:}while(i!=0);printf(’’\n’’);}程序的運行結(jié)果是A、*3*5B、*5C、*7D、*2*6標準答案:C知識點解析:由于循環(huán)變量i的初值等于5,所以第一、二次進入do…,while循環(huán)語句時,條件語句if(i%3=1),if(i%5:=2){printf(“*%d”,i);break;)不執(zhí)行,只執(zhí)行i++語句。當i=7時,滿足條件語句if(i%3=1),if(i%5=2){printf(’’*%d’’,i);break;},所以輸出*7,結(jié)束循環(huán)。10、數(shù)據(jù)庫管理系統(tǒng)是A、操作系統(tǒng)的一部分B、在操作系統(tǒng)支持下的系統(tǒng)軟件C、一種編譯系統(tǒng)D、一種操作系統(tǒng)標準答案:B知識點解析:數(shù)據(jù)庫管理系統(tǒng)是數(shù)據(jù)庫的機構(gòu),它是一種系統(tǒng)軟件,負責數(shù)據(jù)庫中的數(shù)據(jù)組織、數(shù)據(jù)操縱、數(shù)據(jù)維護、控制及保護和數(shù)據(jù)服務等。11、我們所寫的每條C語句,經(jīng)過編譯最終都將轉(zhuǎn)換成二進制的機器指令。關于轉(zhuǎn)換以下說法錯誤的是A、一條C語句可能會被轉(zhuǎn)換成多條機器指令B、一條C語句對應轉(zhuǎn)換成一條機器指令C、一條C語句可能會被轉(zhuǎn)換成零條機器指令D、某種類型和格式的C語句被轉(zhuǎn)換成機器指令的條數(shù)是固定的標準答案:B知識點解析:由C語言編寫的程序,通過編譯、鏈接轉(zhuǎn)換成可以讓機器識別的01二進制指令。這些二進制指令命令機器計算,這些就是機器指令,而C語言的語句條數(shù)和機器指令的條數(shù)不是一對一的關系。12、以下選項中正確的定義語句是()。A、doublea=7,b=7;B、doublea=b=7;C、doublea;b;D、double,a,b;標準答案:A知識點解析:選項B)錯誤,定義時不能連續(xù)賦值;選項C)錯誤,分號表明一句語句的結(jié)束,所以變量b沒有正確定義;選項D)錯誤,在定義變量的時候,類型后面不能跟逗號。所以答案選A)。13、設有定義“char*c;”,以下選項中能夠使c正確指向一個字符串的是()。A、charstr[]="string";c=str;B、scanf("%s",c);C、c=getchar();D、*c="string";標準答案:A知識點解析:選項A為正確用法,先將字符串存于字符數(shù)組中,然后將數(shù)組名賦給字符指針(數(shù)組名代表數(shù)組首地址,定義數(shù)組時為其分配確定的地址)。C選項錯誤,getchar()函數(shù)輸入一個字符給字符型變量,而不是字符指針。B選項和D選項有類似的錯誤,兩個選項并無語法錯誤,但運行時可能會出現(xiàn)問題。因為在B選項和D選項中,字符指針沒有被賦值,是個不確定的值,指向一個不確定的內(nèi)存區(qū)域,這個區(qū)域可能存放有用的指令或數(shù)據(jù)。在這個不確定的區(qū)域重新存放字符串,可能會發(fā)生無法預知的錯誤。14、下列關于二叉樹的敘述中,正確的是()。A、葉子結(jié)點總是比度為2的結(jié)點少一個B、葉子結(jié)點總是比度為2的結(jié)點多一個C、葉子結(jié)點數(shù)是度為2的結(jié)點數(shù)的兩倍D、度為2的結(jié)點數(shù)是度為1的結(jié)點數(shù)的兩倍標準答案:B知識點解析:根據(jù)二叉樹的基本性質(zhì)3:在任意一棵二叉樹中,度為0的葉子結(jié)點總是比度為2的結(jié)點多一個。所以選擇B)。15、軟件生命周期中的活動不包括()。A、市場調(diào)研B、需求分析C、軟件測試D、軟件維護標準答案:A知識點解析:軟件生命周期可以分為軟件定義、軟件開發(fā)與軟件運行維護三個階段。主要活動階段是:可行性研究與計劃階段,需求分析,軟件設計,軟件實現(xiàn),軟件測試,運行和維護,所以選擇A)。16、若要求從鍵盤讀入含有空格字符的字符串,應使用函數(shù)A、getc()B、gets()C、getchar()D、scanf()標準答案:B知識點解析:scanf()語句中用“空格”間隔不同的字符串,空格將被全部忽略掉,所以用scanf()函數(shù)不能輸入空格;getchar()函數(shù)用于輸入字符,其調(diào)用形式為:ch=getchar(),getchar()函數(shù)從終端讀入一個字符作為函數(shù)值,把讀入的一個字符賦給變量ch。在輸入時,空格、回車符都將用于字符讀入,而且只有在用戶敲入Enter鍵時,讀入才開始執(zhí)行。gets()函數(shù)的調(diào)用形式為:gets(str_adr),其中str_adr是存放輸入字符串的起始地址,可以是字符數(shù)組名、字符數(shù)組元素的地址或字符指針變量。gets()函數(shù)用來從終端鍵盤讀入字符串(包括空格符),直到讀入一個換行符為止。getc()函數(shù)的調(diào)用形式為:ch=getc(pD其中pf是文件指針。函數(shù)的功能是從pf指定的文件中讀入一個字符,并把它作為函數(shù)值返回。17、有以下程序#include<stdio.h>#include<stdio.h>intfun(intn){int*p;p=(int*)malloc(sizeof(int));*p=n;return*p;}main(){inta;a=fun(10);printf(’’%d\n’’.a(chǎn)+fun(10));}程序的運行結(jié)果是A、10B、20C、0D、出錯標準答案:B知識點解析:函數(shù)fun(intn)的功能是在內(nèi)存中每次動態(tài)的申請一個整型變量的存儲空間,把整型變量n的值存入這個存儲空間中。所以當在主函數(shù)中執(zhí)行輸出語句時,a+fun(10)的值等于20。18、在數(shù)據(jù)庫管理系統(tǒng)提供的數(shù)據(jù)語言中,負責數(shù)據(jù)模式定義的是A、數(shù)據(jù)定義語言B、數(shù)據(jù)管理語言C、數(shù)據(jù)操縱語言D、數(shù)據(jù)控制語言標準答案:A知識點解析:數(shù)據(jù)庫管理系統(tǒng)一般提供相應的數(shù)據(jù)語言,它們分別是:數(shù)據(jù)定義語言,負責數(shù)據(jù)的模式定義與數(shù)據(jù)的物理存取構(gòu)建;數(shù)據(jù)操縱語言,負責數(shù)據(jù)的操縱,包括查詢及增、刪、改等操作;數(shù)據(jù)控制語言,負責數(shù)據(jù)完整性、安全性的定義與檢查以及并發(fā)控制、故障恢復等功能。19、若有定義語句:inta=3,b=2,c=1;以下選項中錯誤的賦值表達式是A、a=b=c+1;B、a=(b=4)=3;C、a=(b=4)+c;D、a=1+(b=c=4);標準答案:B知識點解析:本題主要考查賦值表達式,對于賦值表達式來說,賦值號“=”的左邊一定為變量名,右邊為一個C語言合法的表達式。20、有以下程序#includemain(){inty=1,x,a[]={2,4,6,8,10},*p;p=&a[1];for(x=0;x<3;x++)y=y+*(p+x);printf("%d\n",y);}程序運行后的輸出結(jié)果是A、17B、19C、18D、20標準答案:B知識點解析:本題通過語句"p=&a[1]將指針變量p指向了存儲單元a[1],即使得p[0]的值為4。然后通過3次for循環(huán),x=0時,*(p+x)=*p=a[1]=4所以y=1+4=5;x=1時,*(p+x)=*(p+1)=a[2]=6,所以y=5+6=11;x=2時,*(p+x)=*(p+2)=a[3]=8,所以y=11+8=19。因此B選項正確。21、若有定義語句:inta[2][3],*p[3];,則以下語句中正確的是A、p=a;B、p[0]=a;C、p[0]=a[1][2];D、p[1]=a;標準答案:C知識點解析:本題考查多維數(shù)組和數(shù)組指針。a是一個二維數(shù)組,p是一個指針數(shù)組,該數(shù)組有3個元素,每個元素都是一個指向整型對象的指針。選項A錯誤,等號的左邊是一個數(shù)組地址,不是變量;選項B數(shù)據(jù)類型不匹配,p[0]是指向一個整型對象,而a是一個二維數(shù)組首地址;選項C正確,是把元素a[1][2]賦值給p[0];選項D和選項B一樣屬于數(shù)據(jù)類型不匹配,p[1]是指向一個整型對象,而a是一個二維數(shù)組首地址。22、若有以下程序段charstr[4][12]={"aa,bbb","ccccc","d"},*strp[4];inti;for(i=0;i<4;i++)strp[i]=str[i];不能正確引用字符串的選項是A、strpB、str[0]C、strp[3]D、*strp標準答案:A知識點解析:程序段中定義指針數(shù)組*strp,含有4個元素,for循環(huán)strp分別保存了二維數(shù)組str中的4個字符串的首地址,因此strp為二級地址,不能保存字符串的首地址,*strp或者strp[0]中存放了字符串"aa"的”首地址,所以不能正確引用字符串的為選項A。23、有以下函數(shù)intaaa(char*s){char*t=s;while(*t++);t--;return(t-s);}以下關于aaa函數(shù)功能敘述正確的是()。A、求字符串s的長度B、比較兩個串的大小C、將串s復制到串tD、求字符串s所占字節(jié)數(shù)標準答案:A知識點解析:數(shù)組名代表該數(shù)組的首地址。而函數(shù)循環(huán)"while(*t++);"的結(jié)束條件為t到達了當前字符串的尾部,即*t==?\0?成立,之后執(zhí)行語句"t++"。循環(huán)結(jié)束后繼續(xù)執(zhí)行語句"t--",此時指針*t==?\0?,所以t-s計算的是該字符串首尾(不連帶字符串結(jié)束符)之間間隔了幾個元素,即計算了s所指字符串的實際長度,答案選A。24、有以下程序:#includemain(){intx=1,y=0,a=0,b=0;switch(x){case1:switch(y){case0:a++;break;case1:b++;break;}case2:a++;b++;break;case3:a++;b++;}printf("a=%d,b=%d\n",a,b);}程序的運行結(jié)果是()。A、a=2,b=2B、a=2,b=1C、a=1,b=1D、a=1,b=0標準答案:B知識點解析:case常量表達式只是起語句標號作用,并不是該處進行條件判斷。在執(zhí)行switch語句時,根據(jù)switch的表達式,找到與之匹配的case語句,就從此case子句執(zhí)行下去,不在進行判斷,直到碰到break或函數(shù)結(jié)束為止。所以執(zhí)行內(nèi)層switch(y)時只執(zhí)行了a++,此時a的值為1。然后執(zhí)行外層case2語句的a++;b++;a為2,b為1。所以結(jié)果為B。25、下面結(jié)構(gòu)體的定義語句中,錯誤的是()。A、structord{intx;inty;intz;}structorda;B、structord{intx;inty;intz;};structorda;C、structord{intx;inty;intz;}a;D、struct{intx;inty;intz;}a;標準答案:A知識點解析:A)選項structord{intx;inty;intz;}structorda;錯誤,不能在定義結(jié)構(gòu)體的同時,又用結(jié)構(gòu)體類型名定義變量。應該寫成B)選項或者D)選項的格式。國家二級C語言機試(選擇題)模擬試卷第2套一、選擇題(本題共25題,每題1.0分,共25分。)1、下列敘述中正確的是()。A、能采用順序存儲的必定是線性結(jié)構(gòu)B、所有的線性結(jié)構(gòu)都可以采用順序存儲結(jié)構(gòu)C、具有兩個以上指針的鏈表必定是非線性結(jié)構(gòu)D、循環(huán)隊列是隊列的鏈式存儲結(jié)構(gòu)標準答案:B知識點解析:所有的線性結(jié)構(gòu)都可以用數(shù)組保存,即都可以采用順序存儲結(jié)構(gòu)。而反過來不可以,完全二叉樹也能用數(shù)組保存(按層次依次存放到數(shù)據(jù)元素中),但完全二叉樹不屬于非線性結(jié)構(gòu)。雙向鏈表具有兩個以上的指針,但屬于線性結(jié)構(gòu)。循環(huán)隊列是隊列的順序存儲結(jié)構(gòu)。2、下列敘述中正確的是A、算法就是程序B、設計算法時只需要考慮數(shù)據(jù)結(jié)構(gòu)的設計C、設計算法時只需要考慮結(jié)果的可靠性D、設計算法時要考慮時間復雜度和空間復雜度標準答案:D知識點解析:算法復雜度,即算法在編寫成可執(zhí)行程序后,運行時所需要的資源,資源包括時間資源和內(nèi)存資源。算法分析的目的在于選擇合適算法和改進算法。一個算法的評價主要從時間復雜度和空間復雜度來考慮。3、下列各組的排序方法中,最壞情況下比較次數(shù)相同的是A、冒泡排序與快速排序B、簡單插入排序與希爾排序C、堆排序與希爾排序D、快速排序與希爾排序標準答案:A知識點解析:最壞情況下冒泡排序需要比較n(n-1)/2次,即序列逆序的情況。簡單插入排序,無論是否最壞情況,都需要n(n-1)/2次。直接插入排序,最壞情況需要比較次n(n-1)/2次。堆排序,無論是否最壞都要比較O(nlog2n)次??焖倥判?,最壞情況退化為冒泡排序,需要比較n(n-1)/2次。在最壞情況下,希爾排序所需要的比較次數(shù)為O(n1.5)。4、在軟件開發(fā)中,需求分析階段產(chǎn)生的主要文檔是()。A、可行性分析報告B、軟件需求規(guī)格說明書C、概要設計說明書D、集成測試計劃標準答案:B知識點解析:A選項錯誤,可行性分析階段產(chǎn)生口J行性分析報告。C選項錯誤,概要設計說明書是總體設計階段產(chǎn)生的文檔。D選項錯誤,集成測試計劃是在概要設計階段編寫的文檔。B選項正確,需求規(guī)格說明書是后續(xù)工作如設計、編碼等需要的重要參考文檔。5、對軟件設計中應遵循的準則描述正確的是()。A、高耦合低內(nèi)聚B、高內(nèi)聚低耦合C、模塊獨立性僅與內(nèi)聚度相關D、內(nèi)聚與耦合無關標準答案:B知識點解析:軟件設計應遵循的準則有抽象、逐步求精和模塊化、信息隱蔽和局部化、模塊獨立性。模塊的獨立性程度是評價設計好壞的重要程度標準,有兩個定性標準度量,即模塊間的耦合性和模塊內(nèi)的內(nèi)聚性。耦合性是模塊間互相連接的緊密程度的度量。一個模塊的耦合性越高則該模塊的獨立性越弱。內(nèi)聚性是指一個模塊內(nèi)部各個元素間彼此結(jié)合的緊密程度。一個模塊的內(nèi)聚性越高則該模塊的獨立性越強。好的軟件設計,應盡量做到高內(nèi)聚、低耦合。6、下面不能作為軟件設計工具的是()。A、PAD圖B、程序流程圖C、數(shù)據(jù)流程圖(DFD圖)D、總體結(jié)構(gòu)圖標準答案:C知識點解析:軟件設計可以使用的工具有總體結(jié)構(gòu)圖、程序流程圖、N-S圖、PAD圖、PDL。數(shù)據(jù)流程圖(DFD圖)是需求分析使用的工具。7、若有定義語句:inta=3,b=2,c=1;,以下選項中錯誤的賦值表達式是()。A、a=(b=4)=3;B、a=b=c+1;C、a=(b=4)+c;D、a=1+(b=c=4);標準答案:A知識點解析:這道題目主要考察賦值表達式,對于賦值表達式來說,賦值號“=”的左邊一定為變量名,右邊為一個C語言合法的表達式。8、學校的數(shù)據(jù)庫中有表示系和學生的關系:系(系編號,系名稱,系主任,電話,地點),學生(學號,姓名,性別,入學日期,專業(yè),系編號),則關系學生中的主鍵和外鍵分別是()。A、學號,B、學號,專業(yè)C、學號,姓名D、學號,系編號標準答案:D知識點解析:一個屬性(即一列),在某張表中不是主鍵(主碼),但在其他表中是主鍵(主碼),則它是第一張表的外鍵(外碼)。在“系”表中,“系編號”為主鍵;在“學生”表中,“學號”是主鍵,“系編號”不是主鍵,則“系編號”是表“學生”的外鍵。9、下面不屬于軟件工程的3個要素是A、工具B、過程C、方法D、環(huán)境標準答案:D知識點解析:軟件工程的3個要素是工具、過程和方法。10、數(shù)據(jù)字典(DD)所定義的對象都包含于A、數(shù)據(jù)流圖(DFD圖)B、程序流程圖C、軟件結(jié)構(gòu)圖D、方框圖標準答案:C知識點解析:本題考查數(shù)據(jù)流程圖DFD的概念。對于面向數(shù)據(jù)流的結(jié)構(gòu)化分析方法,按照DeMarco的定義,“結(jié)構(gòu)化分析就是使用數(shù)據(jù)流圖(DFD)、數(shù)據(jù)字典(DD)、結(jié)構(gòu)化英語、判定表和判定樹等工具,來建立一種新的、稱為結(jié)構(gòu)化規(guī)格說明的目標文檔”。結(jié)構(gòu)化分析方法的實質(zhì)是著眼于數(shù)據(jù)流,自頂向下,逐層分解,建立系統(tǒng)的處理流程,以數(shù)據(jù)流圖和數(shù)據(jù)字典為主要工具,建立系統(tǒng)的邏輯模型。數(shù)據(jù)流圖(DFI)——DataFlowDiagram)是描述數(shù)據(jù)處理過程的工具,是需求理解的邏輯模型的圖形表示,它直接支持系統(tǒng)的功能建模。數(shù)據(jù)流圖從數(shù)據(jù)傳遞和加工的角度,來刻畫數(shù)據(jù)流從輸入到輸出的移動變換過程。由此可得數(shù)據(jù)流程圖是結(jié)構(gòu)化方法的需求分析工具。11、在關系模型中,每一個二維表稱為一個A、關系B、屬性C、元組D、主碼(鍵)標準答案:A知識點解析:每個二維表代表一個關系,由表框架及表的元組組成。12、有以下程序:#include<stdio.h>doublef(doublex);main(){doublea=0;inti;for(i=0;i<30;i+=10)a+=f((double)i);printf("%3.0f\n",a);}doublef(doublex){returnx*x+1:}程序的運行結(jié)果是()。A、500B、401C、503D、1404標準答案:C知識點解析:本題重點考查函數(shù)的定義和調(diào)用。第一次循環(huán),a=0,i=0,返回值a=0*0+1=1;第二次循環(huán),a=1,i=10,返回值a=10*10+1+1=102;第三次循環(huán),a=102,i=20,返回值a=20*20+1+102=503;第四次循環(huán),a=503,i=30,不符合i<30,跳出循環(huán),最后結(jié)果輸出a=503。13、有以下程序#include<stdio.h>intflintx,inty){retum((y-x)*x);}main(){inta=3,b=4,c=5,d;d=flfla,b),f(a,c));printf(’’%d\n’’,d);}程序運行后的輸出結(jié)果是A、10B、8C、9D、7標準答案:C知識點解析:本題考查函數(shù)的嵌套調(diào)用。首先計算f(a,b)與f(a,C,f(a,b)=(b—a)*a=3,f(a,C=(c.a(chǎn))*a=6,然后計算f(3,6)=(6-3)*3=9。14、設有定義語句:char*aa[2]={"abcd","ABCD"};則以下敘述正確的是A、aa數(shù)組的兩個元素只能存放含有4個字符的一維數(shù)組的首地址B、aa數(shù)組的值分別是字符串"abcd"和"ABCD"C、aa是指針變量,它指向含有兩個元素的字符型數(shù)組D、aa[0]存放了字符串"abcd"的首地址標準答案:D知識點解析:題目中char*aa[2],定義了指針數(shù)組aa,有兩個元素,aa[0]存放"abcd"地址,而aa[1]存放”ABCD"地址。15、有以下程序#include#defineSUB(a)(a)-(a)main(){inta=2,b=3,c=5,d;d=SUB(a+b)*c;printf("%d\n",d);}程序運行后的輸出結(jié)果是A、0B、-12C、-20D、10標準答案:C知識點解析:本題考查宏定義,宏定義只是做簡單的替換,所以本題中SUB(a+b)*c=(a+b)-(a+b)*c=-20,所以答案為C選項。16、設有以下函數(shù):voidfun(intn,char*s){……}則下面對函數(shù)指針的定義和賦值均正確的是A、void(*pf)(int,char);pf=&fun;B、void*pf();pf=fun;C、void*pf();*pf=fun;D、void(*pf)(int,char*);pf=fun;標準答案:D知識點解析:函數(shù)的參數(shù)可以是指針類型。它的作用是將一個變量的地址傳送到另一個函數(shù)中。函數(shù)名代表函數(shù)的入口地址,指向函數(shù)的指針應該定義為void(*pf)()。如果定義為void*pf(),則表示函數(shù)pf返回值為一個基類型為void的指針。因此D選項正確。17、若有以下程序段doublex=5.16894;printf("%f\n",(int)(x*1000+0.5)/(double)1000);則程序段的輸出結(jié)果是A、5.175000B、5.169000C、5.170000D、5.168000標準答案:B知識點解析:(int)(x*1000+0.5)/(double)1000表達式功能,保存數(shù)據(jù)x的后三位小數(shù),把第四位四舍五入。18、有以下程序yoidfun(char*S){chara[10];strcpy(a,’’STRING’’);S=a;}main(){char*p=’’PROGRAM’’;fun(P);printf(’’%s\n’’,p);)程序運行后的輸出結(jié)果是(此處□代表空格)A、STRNG□□□□B、PROGRAMC、STRING□□□D、STRING標準答案:B知識點解析:函數(shù)fun的主要功能是把字符串’’STRING’’,存放到字符數(shù)組a中,s指向該字符串,函數(shù)調(diào)用結(jié)束以后,釋放s和a指向的空間。主函數(shù)調(diào)用fun(p),并不能更改p的值,因此p的指向沒有改變。19、有以下程序#include<stdio.h>intfun(int(*s)[4],intn,intk){intm,i;m=s[0][k];for(i=1;i<n;i++)if(s[i][k]>m)m=s[i][k];returnm;)main(){inta[4][4]={{1,2,3,4),{11,12,13,14},{21,22,23,24},{31,32,33,34}};printf("%d\n",fun(a,4,0));}程序的運行結(jié)果是A、31B、34C、4D、32標準答案:A知識點解析:函數(shù)fun(int(*s)[4],intn,intk)的功能是返回二維數(shù)組第k列的最大元素。在主函數(shù)中由于二維數(shù)組a[4][4]已經(jīng)初始化.所以fun(a,4,0)的值是二維數(shù)組a[][]第1列中的最大元素31。20、若有定義:inta[2][3];,以下選項中對a數(shù)組元素正確引用的是A、a[2][!1]B、a[2][3]C、a[0][3]D、a[1>2][!1]標準答案:D知識點解析:本題考查數(shù)組的使用,C語言中數(shù)組的下標從0開始。本題中a是一個二維數(shù)組,兩個下標的范圍分別是0-1和0-2。選項A中第一個下標越界,超出了范圍:選項B中第一個和第二個下標都超出了范圍;選項C中第二個下標超出范圍;選項D中,1≥2的值為0.!1的值為0,因此選項D實際是訪問a[0][0]。21、若有以下程序#include<stdio.h>int*f(int*s,int*t){int*k;if(*s<*t){k=s;s=t;t=k;}returns;}main(){inti=3,j=5,*p=&i,*q=&j,*r;r=f(p,q);printf("%d,%d,%d,%d,%d\n",i,j9*p,*q,*r);}則程序的輸出結(jié)果是A、3,5,5,3,5B、5,3,5,3,5C、5,3,3,5,5D、3,5,3,5,5標準答案:D知識點解析:本題考查了返回值為指針的函數(shù),函數(shù)f的主要功能為第一個參數(shù)小于第二個參數(shù),那么交換指針的指向,這對于實參指向的數(shù)據(jù)時沒有影響的。最后返回比較大的元素的地址。主函數(shù)中p指向i,q指向j,調(diào)用r=f(p,q)。返回q的地址,因此*p=3,*q=5,*r=5。22、下列關于棧敘述正確的是()。A、棧頂元素最先能被刪除B、棧頂元素最后才能被刪除C、棧底元素永遠不能被刪除D、棧底元素最先被刪除標準答案:A知識點解析:棧是先進后出的數(shù)據(jù)結(jié)構(gòu),所以棧頂元素最后入棧卻最先被刪除。棧底元素最先入棧卻最后被刪除。所以選擇A)。23、定義無符號整數(shù)類為UInt,下面可以作為類UInt實例化值的是()。A、-369B、369C、0.369D、整數(shù)集合{1,2,3,4,5}標準答案:B知識點解析:只有B)選項369可以用無符號整數(shù)來表示和存儲。A)選項-369有負號,選項C)0.369是小數(shù)都不能用無符號整數(shù)類存儲。選項D)是一個整數(shù)集合得用數(shù)組來存儲。24、若變量已正確定義,以下選項中非法的表達式是A、a!=4||’b’B、’a’=1/2*(x=y=20,x*3)C、’a’%4D、’A’+32標準答案:B知識點解析:A選項中’a’即表示a為字符常量,再給’a’賦值1/2*(x=y=20,x*3),是不正確的。因此B選項正確。25、有以下程序:#includemain(){intx=1,y=0,a=0,b=0;switch(x){case1:switch(y){case0:a++;break;case1:b++;break;}case2:a++;b++;break;case3:a++;b++;}printf("a=%d,b=%d\n",a,b);}程序的運行結(jié)果是()。A、a=2,b=2B、a=2,b=1C、a=1,b=1D、a=1,b=0標準答案:B知識點解析:case常量表達式只是起語句標號作用,并不是該處進行條件判斷。在執(zhí)行switch語句時,根據(jù)switch的表達式,找到與之匹配的case語句,就從此case子句執(zhí)行下去,不在進行判斷,直到碰到break或函數(shù)結(jié)束為止。所以執(zhí)行內(nèi)層switch(y)時只執(zhí)行了a++,此時a的值為1。然后執(zhí)行外層case2語句的a++;b++;a為2,b為1。所以結(jié)果為B。國家二級C語言機試(選擇題)模擬試卷第3套一、選擇題(本題共40題,每題1.0分,共40分。)1、以下敘述中錯誤的是A、算法正確的程序最終一定會結(jié)束B、算法正確的程序可以有零個輸入C、算法正確的程序可以有零個輸出D、算法正確的程序?qū)τ谙嗤妮斎胍欢ㄓ邢嗤慕Y(jié)果標準答案:C知識點解析:算法是指為解決某個特定問題而采取的確定且有限的步驟。一個算法應該具有以下5個特征:①有窮性。一.爪算法包含的操作步驟應該是有限的。也就是說,在執(zhí)行若T個操作步驟之后,算法將結(jié)束,而且每一步都在合理的時間內(nèi)完成。②確定性。算法中的每一條指令必須有確切的含義,不能有二義性,對于相同的輸入必能得出相同的執(zhí)行結(jié)果。③可行性。算法中指定的操作,都可以通過已經(jīng)驗證過可以實現(xiàn)的基本運算執(zhí)行有限次后實現(xiàn)。④有零個或多個輸入。在計算機上實現(xiàn)的算法是用來處理數(shù)據(jù)對象的,在大多數(shù)情況下這些對象需要通過輸入來得到。⑤有一個或多個輸出。算法的目的是為了求”解”,這些”解”只有通過輸出才能得到。2、下面敘述中正確的是A、線性表是線性結(jié)構(gòu)B、棧與隊列是非線性結(jié)構(gòu)C、線性鏈表是非線性結(jié)構(gòu)D、二叉樹是線性結(jié)構(gòu)標準答案:A知識點解析:線性表是最簡單的、最常用的一種線性結(jié)構(gòu)。所謂線性鏈表指的是采用鏈式存儲結(jié)構(gòu)的線性表。棧和隊列其實是一種特殊的線性表。樹是一種簡單的非線性結(jié)構(gòu),二叉樹是樹的一種。3、下列與隊列結(jié)構(gòu)有關聯(lián)的是A、函數(shù)的遞歸調(diào)用B、數(shù)組元素的引用C、多重循環(huán)的執(zhí)行D、先到先服務的作業(yè)調(diào)度標準答案:D知識點解析:隊列中最先插入的元素將最先被刪除,最后插入的元素將最后被刪除。4、下列敘述中正確的是A、循環(huán)隊列是隊列的一種鏈式存儲結(jié)構(gòu)B、循環(huán)隊列是隊列的一種順序存儲結(jié)構(gòu)C、循環(huán)隊列是非線性結(jié)構(gòu)D、循環(huán)隊列是一種邏輯結(jié)構(gòu)標準答案:B知識點解析:本題主要考查循環(huán)隊列的概念.循環(huán)隊列作為隊列的一種也應該是線性結(jié)構(gòu)。隊列是一種邏輯結(jié)構(gòu),而循環(huán)隊列是一種順序存儲結(jié)構(gòu)的隊列。5、閱讀以下程序#includetma,in(){intcase:floatprintF;printf("請輸入2個數(shù):"):scanf("%d%f",&case,&printF);printf("%d%t5n",case,printF);}該程序在編譯時產(chǎn)生錯誤,其出錯原因是A、定義語句出錯,printF能用作用戶自定義標識符B、定義語句出錯,case是關鍵字,不能用作用戶自定義標識符C、定義語句無錯,scanf不能作為輸入函數(shù)使用D、定義語句無錯,printf能輸出case的值標準答案:B知識點解析:case是C語言中的一個關鍵字,小能用作用戶標識符米使用,所以這段程序代碼在編譯時就會處錯。6、在結(jié)構(gòu)化方法中,用數(shù)據(jù)流程圖(DFD)作為描述工具的軟件開發(fā)階段是()。A、邏輯設計B、需求分析C、詳細設計D、物理設計標準答案:B知識點解析:軟件開發(fā)階段包括需求分析、總體設計、詳細設計、編碼和測試五個階段。其中,需求分析階段常用的工具是數(shù)據(jù)流圖和數(shù)據(jù)字典。7、下列敘述中錯誤的是()。A、C程序可以由多個程序文件組成B、一個C語言程序只能實現(xiàn)一種算法C、C程序可以由一個或多個函數(shù)組成D、一個C函數(shù)可以單獨作為一個C程序文件存在標準答案:B知識點解析:在一個C語言程序中可以進行多種算法的實現(xiàn),對算法的個數(shù)沒有規(guī)定,所以B選項錯誤。8、數(shù)據(jù)庫系統(tǒng)的數(shù)據(jù)獨立性是指()。A、不會因為存儲策略的變化而影響存儲結(jié)構(gòu)B、不會因為數(shù)據(jù)的變化而影響應用程序C、不會因為系統(tǒng)數(shù)據(jù)存儲結(jié)構(gòu)與數(shù)據(jù)邏輯結(jié)構(gòu)的變化而影響應用程序D、不會因為某些存儲結(jié)構(gòu)的變化而影響其他的存儲結(jié)構(gòu)標準答案:C知識點解析:數(shù)據(jù)庫系統(tǒng)的數(shù)據(jù)獨立性,是指數(shù)據(jù)庫中數(shù)據(jù)獨立于應用程序且不依賴于應用程序,即數(shù)據(jù)的邏輯結(jié)構(gòu)、存儲結(jié)構(gòu)與存取方式的改變不會影響應用程序。數(shù)據(jù)獨立性一般分為物理獨立性和邏輯獨立性兩級。9、數(shù)據(jù)模型的三個要素是()。A、外模式、概念模式、內(nèi)模式B、實體完整性、參照完整性、用戶自定義完整性C、數(shù)據(jù)增加、數(shù)據(jù)修改、數(shù)據(jù)查詢D、數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)操作、數(shù)據(jù)約束標準答案:D知識點解析:數(shù)據(jù)模型是數(shù)據(jù)特征的抽象,所描述的內(nèi)容有三個部分:數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)操作、數(shù)據(jù)約束。數(shù)據(jù)結(jié)構(gòu)主要描述數(shù)據(jù)的類型、內(nèi)容、性質(zhì)以及數(shù)據(jù)間的聯(lián)系等。數(shù)據(jù)操作主要描述在相應數(shù)據(jù)結(jié)構(gòu)上的操作類型與操作方式。數(shù)據(jù)約束主要描述數(shù)據(jù)結(jié)構(gòu)內(nèi)數(shù)據(jù)間的語法、語義聯(lián)系,它們之間的制約與依存關系,以及數(shù)據(jù)動態(tài)變化的規(guī)則,以保證數(shù)據(jù)的正確、有效與相容。10、數(shù)據(jù)流圖中帶有箭頭的線段表示的是A、控制流B、事件驅(qū)動C、模塊調(diào)用D、數(shù)據(jù)流標準答案:D知識點解析:數(shù)據(jù)流圖是從數(shù)據(jù)傳遞和加工的角度,來刻畫數(shù)據(jù)流從輸入到輸出的移動變換過程。其中帶箭頭的線段表示數(shù)據(jù)流,沿箭頭方向傳遞數(shù)據(jù)的通道,一般在旁邊標注數(shù)據(jù)流名。11、設有如下語句:typedefstructDate{intyear;intmonth;intday;}DATE;則以下敘述中錯誤的是()。A、DATE是用戶說明的新結(jié)構(gòu)體類型名B、structDate是用戶定義的結(jié)構(gòu)體類型C、DATE是用戶定義的結(jié)構(gòu)體變量D、struct是結(jié)構(gòu)體類型的關鍵字標準答案:C知識點解析:該定義語句把結(jié)構(gòu)體structDate命名為一個新的類型名“DATE”,DATE相當于“structDate”,是結(jié)構(gòu)體類型名,選項C描述錯誤,答案選C。12、軟件生命周期可分為定義階段,開發(fā)階段和維護階段。詳細設計屬于A、定義階段B、開發(fā)階段C、維護階段D、上述三個階段標準答案:B知識點解析:本題考查軟件生命周期的相關概念。通常,將軟件產(chǎn)品從提出、實現(xiàn)、使用維護到停止使用退役的過程稱為軟件生命周期。也就是說,軟件產(chǎn)品從考慮其概念開始,到該軟件產(chǎn)品不能使用為止的整個時期都屬于軟件生命周期。一般包括可行性研究與需求分析、設計、實現(xiàn)、測試、交付使用以及維護等活動。還可以將軟件生命周期分為軟件定義、軟件開發(fā)及軟件運行維護三個階段。13、有以下程序:#includemain(){ima,b;for(a=0;a<3;a++){seanf(“%d”,&b);switch(b){default:prinff(“%d”,++b);case1.:prinff(“%d”,++b);case2(“%deasepnnu”,++b);}}}執(zhí)行時輸入:123<回車>,則輸出結(jié)果是()。A、233456B、234C、223444D、234344標準答案:A知識點解析:這是一個循環(huán)結(jié)構(gòu)嵌套選擇結(jié)構(gòu),按照外層循環(huán),內(nèi)層選擇一步一步處理即可。本題重點注意,switch語句中并沒有出現(xiàn)break語句,所以內(nèi)層循環(huán)是不會跳出的。14、在黑盒測試方法中,設計測試用例的主要根據(jù)是A、程序內(nèi)部邏輯B、程序外部功能C、程序數(shù)據(jù)結(jié)構(gòu)D、稃序流程圖標準答案:B知識點解析:黑盒測試法指的是根據(jù)程序的外部功能,把程序本身看成一個黑盒子,設計測試用例來驗證程序外部功能的正確性。15、若有以下程序#includemain(){intb=10,a=-11;a%=b%=4;printf("%d%d\n",a,b);}則程序的輸出結(jié)果是A、12B、-1-2C、-12D、1-2標準答案:C知識點解析:對于表達式a%=b%=4為復合的賦值運算,結(jié)合性自右至左,相當于先計算b.b%4,a=a%b;結(jié)果的符號和第一個操作數(shù)的符號相同,因此b為2,a的結(jié)果為.1。16、數(shù)據(jù)結(jié)構(gòu)中,與所使用的計算機無關的是數(shù)據(jù)的()。A、存儲結(jié)構(gòu)B、物理結(jié)構(gòu)C、邏輯結(jié)構(gòu)D、線性結(jié)構(gòu)標準答案:C知識點解析:數(shù)據(jù)的邏輯結(jié)構(gòu)反映的是數(shù)據(jù)元素之間的邏輯關系,與使用的計算機無關。17、某系統(tǒng)結(jié)構(gòu)圖如下圖所示,該系統(tǒng)結(jié)構(gòu)圖的最大扇出數(shù)是A、nB、1C、3D、4標準答案:A知識點解析:扇出指的是由一個模塊直接調(diào)用的其它模塊數(shù)。題干中“某系統(tǒng)”為一個模塊,其扇出數(shù)目為n(n>3),功能1與功能n模塊扇出數(shù)均為2,故選項A正確。18、下列程序段中完全正確的是()。A、int*p;scanf("%d",&p);B、int*p;scanf("%d",p);C、intk,*p=&k;scanf("%d",p);D、intk,*p;*p=&k;scanf("%d",p);標準答案:C知識點解析:A選項中錯在沒有對指針進行初始化,無效指針,并且在scanf("%d",&p)中無須再進行取地址操作;B選項中沒有對指針進行初始化,無效指針;D選項中語句*p=&k;的左端*p是指針所指內(nèi)存空間的值,&k是地址,應為p=&k。C選項正確。19、有以下程序#includemain(){intk=5;while(--k)printf("%d",k-=3);printf("\n");}執(zhí)行后的輸出結(jié)果是A、1B、2C、4D、死循環(huán)標準答案:A知識點解析:--k先自減在使用,所以第一次判斷條件即為while(4),條件為真執(zhí)行打印k的值k=4-3,結(jié)果為1,第二次判斷條件即為while(0),條件為假,結(jié)束循環(huán),打印回車換行符。所以選擇A選項。20、若函數(shù)調(diào)用時的實參為變量時,以下關于函數(shù)形參和實參的敘述中正確的是A、形參只是形式上的存在,不占用具體存儲單元B、函數(shù)的形參和實參分別占用不同的存儲單元C、同名的實參和形參占同一存儲單元D、函數(shù)的實參和其對應的形參共占同一存儲單元標準答案:B知識點解析:在C語言中,函數(shù)的實參單元與形參單元在內(nèi)存中分配不同的存儲單元。在調(diào)用函數(shù)時,給形參分配臨時存儲單元,并將實參對應的值傳遞給形參,在被調(diào)用函數(shù)中對形參存儲單元中的值進行運算,最后通過return語句把函數(shù)值返回調(diào)用函數(shù)。當調(diào)用結(jié)束后,形參單元被釋放,實參單元仍保留并維持原值。21、下列關于C語言文件的敘述中正確的是()。A、當對文件的讀(寫)操作完成之后,必須將它關閉,否則可能導致數(shù)據(jù)丟失B、打開一個已存在的文件并進行寫操作后,原有文件中的全部數(shù)據(jù)必定被覆蓋C、在一個程序中對文件進行寫操作后,必須先關閉該文件然后再打開才能讀到第一個數(shù)據(jù)D、C語言中的文件是流式文件,因此只能順序存取數(shù)據(jù)標準答案:A知識點解析:B選項中打開一個已存在的文件并進行寫操作后,原有文件中的全部數(shù)據(jù)不一定被覆蓋,也可以對源文件進行追加操作等。C選項中在一個程序中對文件進行寫操作后,不是先關閉該文件然后再打開才能讀到第一個數(shù)據(jù),用fseek()函數(shù)進行重新定位即可。D選項中,C語言中的文件可以進行隨機讀寫。22、以下選項中關于C語言常量的敘述錯誤的是A、經(jīng)常被使用的變量可以定義成常量B、常量分為整型常量、實型常量、字符常量和字符串常量C、常量可分為數(shù)值型常量和非數(shù)值型常量D、所謂常量,是指在程序運行過程中,其值不能被改變的量標準答案:A知識點解析:C語言中,常量是指在程序運行過程中其值不能被改變的量,變量是指運行過程中其值可以改變的量,二者不能混淆,所以A選項錯誤。23、以下敘述中正確的是A、C程序書寫格式嚴格,要求一行內(nèi)只能寫一個語句B、C程序書寫格式自由,一個語句可以寫在多行上C、C程序中的注釋只能出現(xiàn)在程序的開始位置和語句的后面D、用C語言編寫的程序只能放在一個程序文件中標準答案:B知識點解析:本題主要考查的是C語言結(jié)構(gòu)中的源程序書寫格式這個知識點,在C浯言中注釋部分對程序的運行結(jié)果不產(chǎn)生任何影響,它可以出現(xiàn)在任意位置:C語言書寫自由,一行內(nèi)可以寫多個語句,一個語句可以寫在多行上;由于C語言編寫的程序有很好的移植性,可以放在多個程序文件中。24、以下C語言用戶標識符中,不合法的是A、_1B、AaBcC、a_bD、a--b標準答案:D知識點解析:本題考查用戶標識符,C語言中,用戶標識符只能由字母、下劃線和數(shù)組組成,且必須以字母或者下劃線開始。選項A)、B)和C)都是正確的,選項D)中的case是C語言關鍵字,不能作為用戶標識符,是錯誤的。25、設有定義語句:char*aa[2]={’’abcd’’,’’abcD’’};則以下敘述正確的是A、aa數(shù)組的兩個元素只能存放含有4個字符的一維數(shù)組的首地址B、aa數(shù)組的值分別是字符串’’abcd’’和’’abcD’’C、aa是指針變量,它指向含有兩個元素的字符型數(shù)組D、aa[0]存放了字符串’’abcd’’的首地址標準答案:D知識點解析:題目中char*aa[2],定義了指針數(shù)組aa,有兩個元素,aa[0]存放”abcd’’地址,而aa[1]存放’’ABCD’’地址。26、以下敘述中正確的是A、語句inta[]={0};是不合法的,遺漏了數(shù)組的大小B、語句chara[2]={"A","B"};是合法的,定義了一個包含兩個字符的數(shù)組C、語句inta[8]={0};是合法的D、語句chara[3];a="AB":是合法的,因為數(shù)組有三個字符空間的容量,可以保存兩個字符標準答案:C知識點解析:當系統(tǒng)為所定義的數(shù)組在內(nèi)存中開辟一串連續(xù)的存儲單元時.這些存儲單元中并沒有確定的值,可以在定義語句中為所定義數(shù)組的各個元素賦初值。數(shù)組初始化賦值是指在數(shù)組定義時給數(shù)組元素賦予初值。初始化賦值的一般形式為:類型說明符數(shù)組名[常量表達式]={值,值,…,};。需要注意的是當所賦初值多于所定義數(shù)組的元素個數(shù)時,在編譯時將給出出錯信息,在指定初值時,第一個初值必定賦給下標為0的元素,然后按這些數(shù)值的排列順序賦初值,只能給元素逐個賦值,不能給數(shù)組整體賦值。如果給全部元素賦值,則在數(shù)組說明中,可以不給出數(shù)組元素的個數(shù)。27、關于typedef的敘述中錯誤的是()。A、用typedef可以說明一種新的類型名B、typedef說明的新類型名必須使用大寫字母,否則會出編譯錯誤C、可以用typedef說明的新類型名來定義變量D、typedef的作用是用一個新的標識符來代表已存在的類型名標準答案:B知識點解析:C語言規(guī)定typedef語句的作用僅僅是用“標識符”來代表已存在的“類型名”,并未產(chǎn)生新的數(shù)據(jù)類型,原來類型名依然有效。為了便于識別,一般習慣將新的類型名用大寫字母表示,但也可以是小寫。28、有以下程序#incluclevoidfun(char*c,intd){*c=*c+1;d=d+1;printf("%c,%c,",*c,d);}main(){charb=’a’,a=’A’;fun(&b,a);printf("%c,%c\n",b,a);}程序運行后的輸出結(jié)果是A、b,B,b,AB、b,B,B,AC、a,B,B,aD、a,B,a,B標準答案:A知識點解析:本題中fun函數(shù)的參數(shù)傳遞方式,形參c是傳地址,形參d是傳值,所以在主函數(shù)中,執(zhí)行fun時,把變量b的地址傳給了c,把a的值傳遞給了d,經(jīng)過運算,輸出的值為b,B。在主函數(shù)的輸出語句中,輸出變量b的值為b,變量a的值為A。29、在數(shù)據(jù)庫中,數(shù)據(jù)模型包括數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)操作和A、查詢B、數(shù)據(jù)類型C、關系運算D、數(shù)據(jù)約束標準答案:D知識點解析:在數(shù)據(jù)庫系統(tǒng)中的數(shù)據(jù)模型有三個要素:數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)操作和數(shù)據(jù)的約束條件。其中數(shù)據(jù)的約束條件包括三種:實體完整性約束條件、參照完整性約束條件和用戶定義的完整性約束條件。因此選項D正確。30、以下程序段中的變量已正確定義for(i=0;i<4;i++,i++)for(k=1;k<3;k++);printf("*");程序段的輸出結(jié)果是A、********B、****C、**D、*標準答案:D知識點解析:本題考查循環(huán)語句,題中第二個(內(nèi)層)for循環(huán)之后有一個分號,意思是每次循環(huán)中的操作為空,不執(zhí)行任何操作。再循環(huán)結(jié)束后執(zhí)行printf語句,即只打出一個*。31、下列敘述中正確的是A、C程序中所有函數(shù)之間都可以相互調(diào)用B、在C程序中main函數(shù)的位置是固定的C、在C程序的函數(shù)中不能定義另一個函數(shù)D、每個C程序文件中都必須要有一個main函數(shù)標準答案:C知識點解析:C程序中主函數(shù)不能被其他函數(shù)調(diào)用,所以A選項錯誤,main函數(shù)可以放在程序開始,也可以放在中間,也可以放在最后,位置不固定,但程序執(zhí)行時必須從main函數(shù)開始,所以B選項錯誤,在C程序的函數(shù)中不能定義另一個函數(shù),可以聲明或調(diào)用另一個函數(shù),所以C選項正確?每個C程序中必須包含一個main函數(shù),但不一定是每個C程序文件中必須有,用戶單獨編寫的某個函數(shù)也可以存儲為一個C程序文件,所以D選項錯誤。32、以下與函數(shù)fseek(fp,OL,SEEK_SET)有相同作用的是A、feof(fp)B、ftell(fp)C、fgetc(fp)D、rewind(fp)標準答案:D知識點解析:本題主要考查文件系IO函數(shù)的使用,fseek函數(shù)用于設置文件指針的位置,feof函數(shù)用于判斷是否已經(jīng)到了文件結(jié)束,ftell函數(shù)返回文件指針的當前位置,fgetc從文件讀取一個字符,rewind函數(shù)將文件指針重新指向文件開始。題目當中fseek(fp,OL,SEEK_SET)表示把文件指針移動到文件的開始位置0,和rcwind函數(shù)功能一致。33、以下敘述中正確的是A、打開一個已存在的文件并進行了寫操作后,原有文件中的全部數(shù)據(jù)必定被覆蓋B、在一個程序中當對文件進行了寫操作后,必須先關閉該文件然后再打開,才能讀到第1個數(shù)據(jù)C、C語言中的文件是流式文件,因此只能順序存取數(shù)據(jù)D、當對文件的讀(寫)操作完成之后,必須將它關閉,否則可能導致數(shù)據(jù)丟失標準答案:D知識點解析:在C語言中,有兩種對文件的存取方式;順序存取和直接存?。蝗绻浴癮”的方式對一個已打開的文件進行寫操作后,則原有文件中內(nèi)容將保存,新的數(shù)據(jù)寫在原有內(nèi)容之后。如果以“a+”的方式為讀和寫而打開一個文件,則既可以對文件進行讀,也可以對文件進行寫,而且在讀和寫操作之間不必關閉文件,可以從頭開始讀。當對文件的讀(寫)操作完成之后,必須將它關閉。34、有以下程序#include<string.h>main(){charp[20]={’a’,’b’,’c’,’d’},q[]="abc",r[]="abcde";strcat(p,r);strcpy(p+strlen(q),q);printf("%d\n",strlen(p));}程序運行后的輸出結(jié)果是A、9B、11C、6D、7標準答案:C知識點解析:字符串連接函數(shù)strcat(p,r)的功能是把字符數(shù)組p[]和r[]連接起來,此時字符數(shù)組p[]的有效字符長度為9,再執(zhí)行strcpy(p+strlen(q),q)字符串復制函數(shù),把字符數(shù)組q[]復制到字符數(shù)組p[]從p[3]開始到p[5]數(shù)組位置中,由于字符數(shù)組q[]中的內(nèi)容為字符串“abc”復制時把字符串結(jié)束標志’\null’也復制到字符數(shù)組p[]中,這時字符函數(shù)strlen(p)返回字符數(shù)組p[]的有效字符長度為6。35、有以下程序#includevoidfun(char*p,intn){charb[6]="abcde";inti;for(i=0,p=b;i<n;i++)p[i]=b[i];}main(){chara[6]="ABCDE";fun(a,5);printf("%s\n",a);}程序運行后的輸出結(jié)果是A、abcdeB、ABCDEC、edcbaD、EDCBA標準答案:B知識點解析:本題考查數(shù)組名作為函數(shù)參數(shù),執(zhí)行f函數(shù)時,傳進去的a指針被重新指向了b,所以原本a數(shù)組的地址內(nèi)容不變,所以輸出結(jié)果為ABCDE,答案為B選項。36、若要求從鍵盤讀入含有空格字符的字符串,應使用函數(shù)A、getc()B、gets()C、getchar()D、scanf()標準答案:B知識點解析:scanf()語句中用“空格”間隔不同的字符串,空格將被全部忽略掉,所以用scanf()函數(shù)不能輸入空格;getchar()函數(shù)用于輸入字符,其調(diào)用形式為:ch=getchar(),getchar()函數(shù)從終端讀入一個字符作為函數(shù)值,把讀入的一個字符賦給變量ch。在輸入時,空格、回車符都將用于字符讀入,而且只有在用戶敲入Enter鍵時,讀入才開始執(zhí)行。gets()函數(shù)的調(diào)用形式為:gets(stradr),其中str_adr是存放輸入字符串的起始地址,可以是字符數(shù)組名、字符數(shù)組元素的地址或字符指針變量。gcts()函數(shù)用來從終端鍵盤讀入字符串(包括空格符),直到讀入一個換行符為止。getc()函數(shù)的調(diào)用形式為:ch=getc(pf)其中pf是文件指針。函數(shù)的功能是從pf指定的文件中讀入一個字符,并把它作為函數(shù)值返回。37、有定義語句:intyear=2009,*p=&year;以下不能使變量year中的值增至2010的語句是A、(*p)++;B、++(*p);C、*p++;D、*p+=1;標準答案:C知識點解析:由于自加運算符++的運算級高于間接運算*的運算級,所以選項A)的表達式*p++不能使變量year中的值增至2010。38、下面關于“EOF”的敘述,正確的是A、EOF的值等于0B、文本文件和二進制文件都可以用EOF作為文件結(jié)束標志C、EOF是在庫函數(shù)文件中定義的符號常量D、對于文本文件,fgetc函數(shù)讀入最后一個字符時,返回值是EOF標準答案:C知識點解析:EOF是在stdio.h庫函數(shù)文件中定義的符號常量,其值等于-1。EOF用作文件結(jié)束標志,在二進制或者文本文件內(nèi)部有一個位置指針,用以指示文件內(nèi)部的當前讀寫位置。使用fgetc函數(shù),每讀寫一次,該指針均向后移動,39、對長度為10的線性表進行冒泡排序,最壞情況下需要比較的次數(shù)為A、9B、10C、45D、90標準答案:C知識點解析:冒泡法是在掃描過程中逐次比較相鄰兩個元素的大小,最壞的情況是每次比較都要將相鄰的兩個元素互換,需要互換的次數(shù)為9+8+7+6+5+4+3+2+1=45,選C。40、若有定義語句:doublea,*p=&a;以下敘述中錯誤的是()。A、定義語句中的*號是一個間址運算符B、定義語句中的*號是一個說明符C、定義語句中的p只能存放double類型變量的地址D、定義語句中,*p=&a把變量a的地址作為初值賦給指針變量p標準答案:A知識點解析:在變量定義doublea,*p=&a;中,*號是一個指針運算符,而非間址運算符,所以A錯誤。國家二級C語言機試(選擇題)模擬試卷第4套一、選擇題(本題共25題,每題1.0分,共25分。)1、下面敘述中正確的是A、線性表是線性結(jié)構(gòu)B、棧與隊列是非線性結(jié)構(gòu)C、線性鏈表是非線性結(jié)構(gòu)D、二叉樹是線性結(jié)構(gòu)標準答案:A知識點解析:線性表是最簡單的、最常用的一種線性結(jié)構(gòu)。所謂線性鏈表指的是采用鏈式存儲結(jié)構(gòu)的線性表。棧和隊列其實是一種特殊的線性表。樹是一種簡單的非線性結(jié)構(gòu),二叉樹是樹的一種。2、下列數(shù)據(jù)結(jié)構(gòu)中,能夠按照“先進后出”原則存取數(shù)據(jù)的是A、循環(huán)隊列B、棧C、隊列D、二叉樹標準答案:B知識點解析:棧按照“先進后出”(FILO)或“后進先出”(LIFO)組織數(shù)據(jù);隊列是“先進先出”(FIFO)或“后進后出”(LILO)的線性表。3、下列各項中,對對象概念描述正確的是()。A、對象間的通信靠消息傳遞B、對象是名字和方法的封裝體C、任何對象必須有繼承性D、對象的多態(tài)性是指一個對象有多個操作標準答案:A知識點解析:對象之間進行通信的構(gòu)造叫作消息,選項A正確。封裝性是指從外面看只能看到對象的外部特征,而不知道也無須知道數(shù)據(jù)的具體結(jié)構(gòu)以及實現(xiàn)操作,選項B錯誤。對象不一定必須有繼承性,選項C錯誤。多態(tài)性是指同一個操作可以是不同對象的行為,選項D錯誤。4、以下選項中非法的C語言字符常量是A、’\b’B、’\007’C、’aa’D、’\xaa’標準答案:C知識點解析:一個字符常量代表ASCII字符集中的一個字符,在程序中用單引號把一個字符括起來作為字符常量。5、若有以下定義,則對數(shù)組元素的正確引用是()。inta[5],*p=a;A、*&a[5]B、(*a)+2C、*p+4D、*(a+2)標準答案:D知識點解析:本題考查通過指針引用數(shù)組元素。選項A、C沒有這種引用形式;選項B,(*a)+2與*a+2相同,表示第一個元素的值加2;選項D,*(a+2)引用數(shù)組的第3個元素。6、下面不屬于軟件設計階段任務的是A、軟件總體設計B、算法設計C、制定軟件確認測試計劃D、數(shù)據(jù)庫設計標準答案:C知識點解析:軟件設計階段總體分為兩部分:概要設計和詳細設計,此階段的主要任務就是將需求規(guī)格說明文檔轉(zhuǎn)換為軟件設計文檔,將需求階段提出的問題,一一解釋,形成詳細設計文檔,并根據(jù)功能要求,定制相應數(shù)據(jù)結(jié)構(gòu)、各種流程圖等,為下一步編碼做準備。7、某二叉樹中度為2的結(jié)點有10個,則該二叉樹中有()個葉子結(jié)點。A、9B、10C、11D、12標準答案:C知識點解析:根據(jù)二叉樹的性質(zhì)3:對任何一棵二叉樹,度為0的結(jié)點(即葉子結(jié)點)總是比度為2的結(jié)點多一個。8、以下選項中與if(a=1)a:b;elsea++;語句功能不同的switch語句是A、switch(a=1){case0:a=b;break;case1:a++;}B、switch(a){case1:a=b;break;default:a++;)C、switch(a){default:a++;break;case1:a=b;}D、switch(a=1){case1:a=b;break;case0:a++;)標準答案:A知識點解析:jfelse語句的含義是,如果變量a的值等于1,則把變量b的值賦給變量a,否則,變量a的值加1。在本題的4個選項中,與其含義不同的是選項A,表示如果變量a的值等于1,則把變量a的值加1,否則,把變量b的值賦給變量a。9、有以下程序main(){inta=1,b=2;for(;a<8;a++){b+=a;a+=2;}printf(’’%d,%d\n’’,a,b);)程序運行后的輸出結(jié)果是A、8,11B、10,14C、7,11D、9,18標準答案:B知識點解析:在這段程序中變量a的初值等于1,變量b的初值等于2。第1次執(zhí)行for循環(huán)語句后,變量a的值等于3,變量b的值等于3。第2次執(zhí)行for循環(huán)后,變量a等于6,變量b的值等于7。第3次執(zhí)行for循環(huán)后,變量a等于9,變量b的值等于14。第4次執(zhí)行for循環(huán)后,變量a等于10,這時退出for循環(huán),此時變量b的值等于14。因而程序輸出變量a,b的值分別為10,14。10、一個教師講授多門課程,一門課程由多個教師講授。則實體教師和課程間的聯(lián)系是A、1:1聯(lián)系B、1:m聯(lián)系C、m:1聯(lián)系D、m:n聯(lián)系標準答案:D知識點解析:一個教師可講授多門課程,一門課程可由多個教師講授,則實體教師和課程的聯(lián)系是多對多的聯(lián)系。11、關于C語言的符號常量,以下敘述中正確的是A、符號常量的符號名是標識符,但必須大寫B(tài)、符號常量在整個程序中其值都不能再被重新定義C、符號常量是指在程序中通過宏定義朋一個符號名來代表一個常量D、符號常量的符號名必須是常量標準答案:C知識點解析:在C語言程序中,用一個符號名來代表一個常量,稱為符號常量。注意:這個符號名必須在程序中進行特別的“指定”,并符合標識符的命名規(guī)則。一般在程序中都是利用宏定義來定義符號常量的,在代碼中可以利用undef來結(jié)束符號常量的定義,然后進行重新定義,符號常量的大小寫并沒有特別的規(guī)定,一般時候為了和變量區(qū)分利用大寫。12、表達式:(int)((double)9/2)-9%2的值是A、0B、4C、3D、5標準答案:C知識點解析:這個表達式的計算過程為,首先求出9除以2的商等于4,再把其強制轉(zhuǎn)化為實型數(shù)據(jù)為4.0,然后再強制轉(zhuǎn)4,減去9對2求余數(shù)1,得到其結(jié)果等于3。13、若有以下程序#includemain(){inta=-11.b=10;a/=b/=-4:printf("%d%d\n",a,B);}則程序的輸出結(jié)果是A、-1-2B、5-2C、4-3D、5-3標準答案:B知識點解析:對于語句a/=b/=-4;相當于a=a/(b=b/-4):a初值為-11,b的初值為10,則運算以后10/-4值為-2,-11/-2值為5。14、設有定義語句intx[61={2,4,6,8,5,7),*p=x,i;要求依次輸出x數(shù)組6個元素中的值不能完成此操作的語句是A、for(i=0;i<6;i++)printf("%2d",*(p++));B、for(i=0;i<6;i++)printf("%2d",*(p+i));C、for(i=0;i<6;i++)printf("%2d",*p++);D、for(i=0;i<6;i++)pfintf("%2d",(*p)++);標準答案:D知識點解析:指針p指向數(shù)組x,因此可以使用p來輸出數(shù)組x的值。選項A)中,*(p++)表示先取出p指向的元素的值,然后p++指向下一個元素,滿足要求;選項B)中*(p+i)每次i的值發(fā)生變化,(p+i)指向x數(shù)組的x[i]元素,因此*(p+i)是取出數(shù)組x的x[i]元素的值,滿足要求;選項C)和選項A)相比,少了括號,由于*運算符的優(yōu)先級比++要求,因此,因此*p++表示先取出p指向的元素的值,然后p再++指向下一個元素,滿足要求;選項D)中(+p)++表示先取出p指向的元素的值,然后該值++,p沒有增加,每次循環(huán)都*p取出的x[0]的值,不滿足要求。15、下列選項中,能夠滿足“只要字符串s1等于字符串s2,則執(zhí)行ST”要求的是A、if(s1==s2)ST;B、if(strcpy(s1,s2)==1)ST;C、if(strcmp(s2,s1)==0)ST;D、if(s1-s2==0)ST;標準答案:C知識點解析:在C語言中要對兩個字符串的大小進行比較,就需要調(diào)用字符串比較函數(shù)strcmp(),如果這個函數(shù)的返回值等于0,說明兩個字符串相等。16、若以下選項中變量全部為整型變量,且己正確定義并賦值,則語法正確的switch語句是A、switch(a+b){case1:case3:y=a+b;break;case0:case4:y=a-b;}B、switch(a*a+b*b){default:break;case3:y=a+b;break;case2:y=a-b;break;}C、switch(a+9){casec1:y=a-b;casec2:y=a+b;}D、switcha*b{case10:x=a+b;default:y=a-b;}標準答案:B知識點解析:本題考查switch的使用。選項A)中的ca$e0和ca$e4沒有break語句;選項B)正確;選項C)中的case后面不是常量,錯誤;選項D)中switch后面沒有括號。17、若有定義語句:inta=3,b=2,c=1;以下選項中錯誤的賦值表達式是A、a=b=c+1;B、a=(b=4)=3;C、a=(b=4)+c;D、a=1+(b=c=4);標準答案:B知識點解析:本題主要考查賦值表達式,對于賦值表達式來說,賦值號“=”的左邊一定為變量名,右邊為一個C語言合法的表達式。18、有下列程序:#include#includetypedefstruct{charname[9];charsex;floatscore[2];}STU;STUf(STUa){STUb={"Zhao",’m’,85.0,90.0};inti;strcpy(a.name,b.name);a.sex=b.sex;for(i=0;i<2;i++)a.score[i]=b.score[i];returna;}main(){STUc={"tQian",’f’,95.0,92.0),d;d=f(c);printf("%s,%c,%2.0f,%2.0f\n",d.neme,d.sex,d.score[0],d.score[1]);}程序的運行結(jié)果是A、Qian,m,85,90B、Zhao,f,95,92C、Zhao,m,85,90D、Qian,f,95,92標準答案:D知識點解析:f()函數(shù)的功能是對形參a的各個成員用結(jié)構(gòu)體變量b的各個成員進行賦值后,然后返回變量a。在主函數(shù)中調(diào)用f(c)函數(shù)時,將STU類型的結(jié)構(gòu)體變量c的值傳遞給形參a,函數(shù)f()在對a的各個成員進行重新賦值后,再將返回變量a的值傳給d,最后輸出結(jié)構(gòu)變量d的各個成員的值。19、以下語句中存在語法錯誤的是A、charss[][20]={"right?"};B、char*ss[6];ss[1]="right?";C、char*ss[]={"right?"};D、charss[6][20];ss[1]="right?";標準答案:A知識點解析:選項A)中定義了二維數(shù)組ss,可以用于存儲字符串,但是字符串的存儲不能通過賦值,僅可以初始化或者輸入得到,而選項C)和A)不同,選項C)為指針數(shù)組,對于指針變量可以保存常量字符串的地址。20、以下關于return語句的敘述中正確的是A、一個自定義函數(shù)中必須有一條return語句B、一個自定義函數(shù)中可以根據(jù)不同情況設置多條return語句C、定義成void類型的函數(shù)中可以有帶返回值的return語句D、沒有return語句的自定義函數(shù)在執(zhí)行結(jié)束時不能返回到調(diào)用處標準答案:B知識點解析:return語句主要用于返回函數(shù)的值。在一個自定義函數(shù)中,可以根據(jù)不同的情況設置多條return語句返回函數(shù)的值。21、若有以下程序structstu{char*name,gender;intscore;};main(){structstua={NULL,’m’,290},b;a.name=(char*)malloc(10);strcpy(a.name,"Zhao");b=a;b.gender=’f’;b.score=350;strcpy(b.name,"Qian");printf("%s,%c,%d,",a.name,a.gender,a.score);printf("%s,%c,%d\n",b.A、Zhao,m,290,Qian,f,350B、Qian,f,350,Qian,f,350C、Zhao,m,290,Zhao,e350D、Qian,m,290,Qian,f,350標準答案:D知識點解析:主函數(shù)中定義結(jié)構(gòu)體類型structstu,有三個成員,第一個成員為字符指針變量。主函數(shù)中為stu類型變量a賦值,首先為a.name成員分配存儲空間,存入數(shù)據(jù)。b=a;語句執(zhí)行完畢以后,a和b的各個成員值相同,需要注意的是b.name和a.name成員都保存了同一段內(nèi)存的地址,因此當為變量b賦值的時候,同樣更改了a的name成員,而其他成員由于有單獨的存儲空間而不會發(fā)生改變。22、下面選項中的程序段,沒有編譯錯誤的是A、char*sp,s[10];sp="Hello";B、char*sp,s[10];s="Hello";C、charstr1[10]="computer",str2[10];str2=str1;D、charmark[];mark="PROGRAM":標準答案:A知識點解析:選項B)中數(shù)組名為常量,不能賦值,選項C)字符數(shù)組之間無法完成賦值操作,選項D)和選項B)相同,無法對數(shù)組進行賦值。23、有以下程序#includemain(){inta=0,b=0;/*給a賦值a=10;b=20;給b賦值*/printf("a+b=%d\n",a+b);/*輸出計算結(jié)果*/}程序運行后的輸出結(jié)果是A、出錯B、a+b=30C、a+b=10D、a+b=0標準答案:D知識點解析:注釋語句可以在一行也可以在多行,用/*……*/或//表示,。它不參與程序的運行,所以a與b的值仍然為0,所以打印的結(jié)果為a+b=0。24、若有定義語句:char*s1="OK",*s2="ok";以下選項中,能夠輸出"OK"的語句是A、if(strcmp(s1,s2)!=0)puts(s2);B、if(strcmp(s1,s2)!=0)puts(s1);C、if(strcmp(s1,s2)==1)puts(s1);D、if(strcmp(s1,s2)==0)puts(s1);標準答案:B知識點解析:strcmp(s1,s2)是字符串比較函數(shù),比較規(guī)則是兩個字符串自左向右逐個字符相比(按照ASCII碼值大?。缘谝粋€不相同的字符的大小作為比較結(jié)果。因為’OK’<’ok’,所以strcmp(s1,s2)為負值,只有B選項正確。25、在線性表的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 批量購車協(xié)議模板
- 架子工勞務分包合同
- 房屋買賣合同范本官方版
- 分期付款購房的流程及條件
- 公共衛(wèi)生潔具招標采購指南
- 改過自新我承諾不再勒索
- 定金協(xié)議合同范例分析
- 專項法律咨詢
- 實驗室大型設備采購合同
- 油漆工程施工合同書
- 基站電力維護管理制度
- 人教部編版六年級語文上冊小古文閱讀專項訓練含答案
- 防護用品的使用和維護安全培訓課件
- 茶葉店食品安全管理元培訓內(nèi)容
- 人工智能算力中心
- 電路理論:星形聯(lián)接與三角形聯(lián)接的電阻的等效變換
- 2023四川省安全員A證考試題庫附答案
- 小學生化解沖突心理解康主題班會如何積極的處理沖突 課件
- 無人機飛行規(guī)則與安全操控技巧培訓
- 2024年全軍面向社會公開招考文職人員統(tǒng)一考試《數(shù)學2+物理》模擬卷(不含答案)-20231120221552
- 2021年上海市春季高考語文真題試卷(含答案)
評論
0/150
提交評論