國家二級C語言機試(選擇題)模擬試卷21(共270題)_第1頁
國家二級C語言機試(選擇題)模擬試卷21(共270題)_第2頁
國家二級C語言機試(選擇題)模擬試卷21(共270題)_第3頁
國家二級C語言機試(選擇題)模擬試卷21(共270題)_第4頁
國家二級C語言機試(選擇題)模擬試卷21(共270題)_第5頁
已閱讀5頁,還剩70頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

家二級C語言機試(選擇題)模擬試

卷21(共9套)

(共270題)

家二級C語言機試(選擇題)模擬試

卷第1套

一、選擇題(本題共25題,每題1.0分,共25分。)

1、以下選項中關于程序模塊化的敘述錯誤的是

A、把程序分成若干相對獨立、功能單一的模塊,可便于重復使用這些模塊

B、可.采用自底向上、逐步細化的設計方法把若干獨立模塊組裝成所要求的程序

C、把程序分成若干相對獨立的模塊,可便于編碼和調試

D、可采用自頂向下、逐步細化的設計方法把若干獨立模塊組裝成所要求的程序

標準答案:B

知識點解析:如果應用結構化程序設計方法設計程序,那么可采用自頂向下,逐步

細化的設計方法把若干獨立模塊組裝成所要求的程序。

2、以下敘述中正確的是()。

A、如果企圖通過一個空指針來訪問一個存儲單元,將會得到一個出錯信息

B、即使不進行強制類型轉換,在進行指針賦值運算時,指針變量的基類型也可以

不同

C、設變量p是一個指針變量,則語句p=0;是非法的,應該使用p=NULL:

D、指針變量之間不能用關系運算符進行比較

標準答案:A

知識點解析:空指針意味著該指針沒有指向任何具體的變量,所以不能訪問一個存

儲單元,選項A正確。指針的賦值運算只能在同一數據類型之間進行,故選項B

錯。語句p=0和p=NULL是一樣的,都是把一個空指針賦給指針變量p,故選項C

錯。指針之間能進行關系運算,比較的是地址值的大小,選項D錯。答案選A。

3、軟件按功能可以分為:應用軟件、系統軟件和支撐軟件(或工具軟件)。下面屬

于應用軟件的是()。

A、編譯程序

B、操作系統

C、教務管理系統

D、匯編程序

標準答案:c

知識點。析:編譯軟件、操作系統、匯編程序都屬于系統軟件,只有C選項教務

管理系統才是應用軟件。

4、在快速排序法中,每經過一次數據交換(或移動)后()。

A、只能消除一個逆序

13、能消除多個逆序

C、不會產生新的逆序

D、消除的逆序個數一定比新產生的逆序個數多

標準答案:B

知識點解析:在一個排列中,如果一對數的前后位巴與大小順序相反,即前面的數

大于后面的數,那么它們就稱為一個逆序。快速排序的思想是:從線性表中選取一

個元素,設為T,將線性表中后面小于T的元素移到前面,而前面大于T的元素移

到后面,結果就將線性表分成兩部分(稱兩個子表),T插入到其分割線的位置處,

這個過程稱為線性表的分割,然后再用同樣的方法對分割出的子表再進行同樣的分

割。快速排序不是對兩個相鄰元素進行比較,可以實線通過一次交換而消除多個逆

序,但由于均與T(基準元素)比較,也可能會產生新的逆序。

5、下列選項中不屬于結構化程序設計原則的是

A、可封裝

B、自頂向下

C、模塊化

D、逐步求精

標準答案:A

知識點解析:結構化設計方法的主要原則可以概括為自頂向下、逐步求精、模塊

化、限制使用goto語句o

6、設某棵樹的度為3,其中度為3、1、0的結點個數分別為3、4、15。則該樹中

總結點數為

A、22

B、30

C、35

D、不可能有這樣的樹

標準答案:B

知識點解析:本題采用畫圖法來求出結果。首先先畫出包含3個度為3的結點;然

后再添加4個度為1的結點,此時最大度為0的結點數為8。根據題目中描述的度

為0的結點數有15個,這時要在書中添加度為2的結點,直到度為0的結點數位

15o畫圖結束后,不管是什么樣的樹,總結點數都是30。

7、軟件按功能可以分為:應用軟件、系統軟件和支撐軟件(或工具軟件)。下面屬

于系統軟件的是

A、編輯軟件

B、操作系統

C、教務管理系統

D、瀏覽器

標準答案:B

知識點解析:軟件根據應用目標的不同,是多種多樣的。軟件按功能可以分為:應

用軟件、系統軟件、支撐軟件(或工具軟件)。應用軟件是為解決特定領域的應用而

開發的軟件。系統軟件是計算機管理自身資源,提高計算機使用效率并為計算機用

戶提供各種服務的軟件。支撐軟件是介于系統軟件和應用軟件之間,協助用戶開發

軟件的工具性軟件,包括輔助和支持開發和維護應用軟件的工具軟件,還包括輔助

管理人員控制開發進程和項目管理的工具軟件。

8、下列選項中,當x為大于1的奇數時,值為0的表達式是()。

A、x%2==0

B、x/2

C、x%2!=0

D、x%2==l

標準答案:A

知識點解析:算術運算符的優先級高于關系運算符的優先級,所以當x為大于1的

奇數時,A選項的值為假,即0。B選項的值為不定值,但絕對不是0。C選項的

值為真,即1。D選項的值為真,即1。

9、有嵌套的if語句:if(aVb)if(aVc)k二a;elsek=c:elseif(b<c=k=b;else

k=c:以下選項中與上述if語句等價的語句是()。

A、k=(a<b)?((b<c)?a:b):((b>c)?b:c);

R、k=(a<b)?((a<c)?a:c):((h<c)?h:c):

C、k=(a<b)?a:b;k=(b<c)?b:c;

D、k=(a<b)?a:b;k=(a<e)?a:c;

標準答案:B

知識點解析:題目中嵌套語句的含義是當aVb且aVc成立時,將a的值賦給匕

如果aVb成立而aVc不成立,則將c的值賦給k。如果a<h不成立而bVc成

立,則將b的值賦給k,如果aVb不成立且bVc也不成立,則將c的值賦給匕

判斷條件表達式,只有B選項可以表示這個含義。

10、以下程序段中的變量已正確定義for(i=0;i<4:i++,i++)for(k=l;k<3:

k++);printf("*”);程產段的輸出結果是

A、********

B、****

C、**

D、

標準答案:D

知識點解析:本題考查循環語句,題中第二個(內層)for循環之后有一個分號,意

思是每次循環中的操作為空,不執行任何操作。再循環結束后執行printf語句,即

只打出一個*。

11、若有代數式(其中e僅代表自然對數的底數,不是變量),則以下能夠正

確表示該代數式的C語言表達式是()。

A、sqrt(fabs(pow(n,x)+exp(X)))

B、sqrt(fabs(pow(n,x)+pow(x,e)))

C>sqrt(abs(nAx+eAx))

D、sqrt(fabs(pow(x,n)+exp(x)))

標準答案:A

知識點解析:B選項中函數pow(x,e)錯誤,應該直接使用exp(x)函數。C選項中

函數abs(Mx+eAx)錯誤,應該使用「abs()返回浮點數的絕對值。D選項中pow(x,n)

參數順序錯誤。

12、以下選項中合法的常量是

A、2.7e

B、999

C、I23E0.2

D、OXab

標準答案:D

知識點解析:Oxab是十六進制表示的常量。

13、已知字符'AWJASCII代碼值是65,字符變量cl的值是,ASc2的值是

則執行語句printf("%d,%d",cl,c2-2);的輸出結果是

A、A,68

B、A,B

C、65,66

D、65,68

標準答案:C

知識點解析:在C語言中,字符常量在內存中占一個字節,存放的是字符的ASC

n碼值。所有的字符常量都作為整型量來處理。在本題中輸出語句用整型格式輸出

字符時,輸出的是其ASCII碼值。因為字符W和TT的ASCII碼值分別為65和

68,所以c2.2=68.2=66o

14^有以下說明和定義語句structstudent{intage;charnum[8];);structstudent

stu[3]={(20,"200401"),(21,"200402"),{19,“200403,'}};structstudent

*p=stu;以下選項中引用結構體變量成員的表達式錯誤的是

A、(p++)->num

B、P->num

C、(*p).num

D、stu[3].age

標準答案:D

知識點解析:本題考查結構體和結構體指針,stu是一個結構體數組,p是結構體

指針,且p指向stu數組,即p指向了slu數組的首元素地址。選項A)中p++表示

先引用p指針,然后p指向下一個元素,(p++)->num表示取出stu首元素的num

值,然扁P指向stu[l]元素地址;選項B)是通過結構體指針訪問結構體元素,使用

“?>”運算符;選項C)中*p代表siu[O]元素,因此產p)num表示slu[O].num;選項

D)中,stu數組的長度為3,sm[3]已經超出數組范圍,錯誤。

15、以下選項中,不合法的C語言用戶標識符是

A、AaBc

B、a-b

C、a_b

D、_1

標準答案:B

知識點解析:在C語言中的用戶標識符只能由字母,數字和下劃母組成,并旦第

一個字符必須是字母或下劃線,在選項B中出現了非法的字符

16、閱讀以下程序#includeVstdio.h>main(){intcase:floatprintF:printf("請輸

入2個數:");scanf(H%d%f,&case,&printF);printf("%d%f\n",case,

printF);}該程序在編譯時產生錯誤,其出錯原因是

A、定義語句出錯,primF不能用作用戶自定義標識符

B、定義語句出錯,case是關鍵字,不能用作用戶自定義標識符

C、定義語句無錯,scanf不能作為輸入函數使用

D、定義語句無錯,printf不能輸出case的值

標準答案:B

知識點解析:case是C涪言中的一個關鍵字,不能用作用戶標識符來使用,所以

這段程序代碼在編譯時就會出錯.

17、以下敘述正確的是()。

A、do-while語句構成的循環,當while語句中的表達式值為0時結束循環

B、do-while語句和while-do構成的循環功能相同

C、while-do語句構成的循環,當while語句中的表達式值為非0時結束循環

D、do-while語句構成的循環,必須用break語句退出循環

標準答案:A

知識點解析:沒有while-do循環,選項B)錯誤;不管是while語句還是do-while

語句都是判定表達式的值為0時結束循環,選項A)正確,選項C)錯誤;循環語

句只要循環條件不滿足就會退出循環,不必非得用break語句,選項D)錯誤;答

案選A)。

18、在C語言中,函數返回值的類型最終取決于

A、函數定義時在函數首部所說明的函數類型

B、return語句中表達式值的類型

C、調用函數時主調函數所傳遞的實參類型

D、函數定義時形參的類型

標準答案:A

知識點解析:C語言中函數的返回值類型是由定義函數時在函數首部所聲明的類型

確定的。

19、下列選項中,能夠滿足“只要字符串si等于字符串s2,則執行ST”要求的是

A、if(sl==s2)ST:

13、if(strcpy(sl?s2)==l)Sr;

C、iffstrcmp(s2,s1)==O)ST;

D、if(sl-s2==0)ST;

標準答案:C

知識點解析:在c語言中要對兩個字符串的大小進行比較,就需要調用字符串比

較函數strcmpo,如果這個函數的返回值等于0,說明兩個字符串相等。

20、有以下程序,程序運行后的輸出結果是main()[intm=l,n=2,*p=&m,

*q=&n,*r;r=p;p=q;q=r;printf("%d,%d,%d,%d\n”,m,n,*p,

*q);)

A、1,2,1,2

B、1,2,2,1

C、2,1,2,1

D、2,1,1,2

標準答案:B

知識點解析:在主函數定義了3個整數指針變量p,q,r,并且使P指向m,q指

向n,再執行“r=p;p=q;q=r;”這三條語句,使q指向m,p指向n,再輸出變量

“m,n,*p,*q”時,它們值分別為1,2,2,1。

21、以下敘述中正確的是

A、結構體類型中的各個成分均不能是數組或指針

B、結構體類型的變量,不能在聲明結構體類型組成時一起定義

C、使用typedef定義新類型名后,新類型名與原類型名實際上是等價的

D、元素為結構體類型的數組,只能在聲明過結構體類型之后,單獨進行定義

標準答案:C

知識點解析:C語言允許用tyoedef說明一種新類型名,typedef語句的作用僅僅是

用“標識符”來代表已存在的“類型名”,并未產生新的數據類型,原有類型名依然有

效。結構體變量定義有下面三種形式;(1)先定義結構,再說明結構變量。(2)在定

義結構類型的同時說明結構變量。(3)直接說明結構變量。

22、有以下程序main(){unsignedchara=8,c;C=a>>3:printf(H%d\n'\c);}

程序運行后的輸出結果是

A、16

B、32

C、1

D、0

標準答案:c

知識點3析:在程序中對無符號字符變量a的值執行右移3位運算后,相當于」/

8,其值等于1,再賦給變量c。

23、有以卜程序#includeintfun(inta,inlB){returna+b;)main(){intx=6,y=7,z=8,

r;r=fun(fun(x,y),z-);printf(*'%d\n",r);}程序運行后的輸出結果是

A、21

B、15

C、20

D、31

標準答案:A

知識點解析:函數fun的功能是返回兩個形參的和。調用函數fun(x,y)時,將變量

x=6和y=7的值分別傳送變量a和b,并且通過語句returna+b;將13返回給主函

數。繼續調用函數fun(13,z??),這里z-指將z的值參與運算后,再將z的值減1操

作;將13和8分別傳送變量a和b,且通過語句remrna+b:將21返回給主函數。

囚此A選項正確。

24、結構化程序設計的基本原則不包括()。

A、多態性

B、自頂向下

C、模塊化

D、逐步求精

標準答案:A

知識點解析:結構化程序設計的思想包括:自頂向下、逐步求精、模塊化、限制使

用goto語句,所以選擇A)c

25、以下敘述中正確的是

A、函數的返回值不能是結構體類型

B、在調用函數時,可以將結構體變量作為實參傳給函數

C、函數的返回值不能是結構體指針類型

D、結構體數組不能作為參數傳給函數

標準答案:B

知識點解析:本題考查結構體變量作為函數參數,函數返回可以是結構體類型,也

可以是結構體類型的指針,結構體數組可以作為參數傳給函數。

國家二級C語言機試(選擇題)模擬試

卷第2套

一、選擇題(本題共25題,每題1.0分,共25分。)

1、在線性表的順序存儲結構中,其存儲空間連續,各個元素所占的字節數()。

A、不同,但元素的存儲順序與邏輯順序一致

B、不同,且其元素的存儲順序可以與邏輯順序不一致

C、相同,元素的存儲順序與邏輯順序一致

D、相同,但其元素的存儲順序可以與邏輯順序不一致

標準答案:

知識之解析C:在線性表的順序存儲結構中,其存儲空間連續,各個元素所占的字節

數相同,在存儲空間中是按邏輯順序依次存放的。

2、以下敘述中正確的是

A、在C語言程序設“中,所有函數必須保存在一個源文件中’

B、在算法設計時,可以把復雜任務分解成一些簡單的子任務

C、只要包含了三種基本結構的算法就是結構化程序

D、結構化程序必須包含所有的三種基本結構,缺一不可

標準答案:B

知識點解析:模塊化設計思想,就是把復雜的任務分成簡單的子任務,心函數或者

過程描述子任務,C語言中一個程序可以包括多個源文件,每個源文件可以有符干

個函數,結構化的程序由順序結構、循環結構和選擇結構三種基本結構組成,不一

定全要包括這三種結構,而算法不等于程序。

3、下列對隊列的描述中正確的是()。

A、隊列屬于非線性表

B、隊列按“先進后出”原則組織數據

C、隊列在隊尾刪除數據

D、隊列按“先進先出”原則組織數據

標準答案:D

知識點解析:隊列(queue)是指允許在一端進行插入而在另一端進行刪除的線性

表。允許插入的一端稱為隊尾;允許刪除的一端稱為隊頭。在隊列這種數據結構

中,最先插入的元素將最先能夠被刪除;反之,最后插入的元素將最后才能被刪

除。因此,隊列又稱“先進先出,域“后進后出”的線性表。

4、在面向對象方法中,不屬于“對象”基本特點的是

A、一致性

B、分類性

C、多態性

D、標識唯一性

標準答案:A

知識點解析:對象具有如下特征:標識惟一性、分類性、多態性、封裝性、模塊獨

立性。

5、下列不屬于軟件工程3個要素的是,()。

A、工具

B、過程

C、方法

D、環境

標準答案:D

知識點解析:軟件工程包括3個要素,即方法、工具和過程。方法是完成軟件工程

項目的技術手段;工具支持軟件的開發、管理、文檔生成;過程支持軟件開發的各

個環節的控制、管理。

6、下列定義變量的語句中錯誤的是()。

A、int_int;

B、doubleint_:

C、charFor;

D、floatUSS;

標準答案:D

知識點解析:C語言規定,變量命名必須符合標識符的命名規則。D選項中包含了

非法字符所以錯誤。標識符由字母、數字或下劃線組成,且第一個字符必須

是大小寫英文字母或者下劃線,而不能是數字。大寫字符與小寫字符被認為是兩個

不同的字符,所以For不是關鍵字for。

7、數據庫技術的根本目標是要解決數據的

A、存儲問題

B、共享問題

C、安全問題

D、保護問題

標準答案:B

知識點解析:數據庫中的數據具有“集成”、“共享”之特點,即數據庫集中了各種應

用的數據,進行統一地溝造與存儲,而使它們能被不同的應用程序所使用。因而數

據庫技術的根本目標是解決數據的共享問題。

某系統

功能1」功能2際W

功登可|功出2|際習|功耐“巨耐2|

8、某系統總體結構如下圖所示幽網網吧」該系統結

構圖是

A、層次結構

B、網狀結構

C、分支結構

D、循環結構

標準答案:A

知識點解析:層次結構(hierarchy)是一種操作系統的組織結構,其提供了一種隔離

操作系統各層功能的模型。其包括歸屬層次結構dissonance-attributionhierarchy維

度層次結構dilnensionhierarchy層次結構數據庫hierarchicaldatabase等。網狀結構

這一名詞來自早期解剖學家用光學顯微鏡對腦干中央區網絡狀外觀的描述,在光鏡

下這部分組織學的特點是神經細胞分散,形態各異,大小不等,神經纖維交錯穿行

其間,形成一種灰白質交織的結構,稱之為網狀結構。分支結構的執行是依據一

定的條件選擇執行路徑,而不是嚴格按照語句出現的物理順序。分支結構的程序設

計方法的關鍵在于構造合適的分支條件和分析程序流程,根據不同的程序流程選擇

適當的分支語句。循環結構可以減少源程序重復書寫的工作量,用來描述重復執

行某段算法的問題,這是程序設計中最能發揮計算機特長的程序結構。

9、有以下程序:#include<stdio.h>main(){inta=l,b=2,e=3,d=0;if(a==l

&&b++==2)if(b!=2IIc--!=3)printf("%d,%d,%d\n”,a,b,cv);else

printf(''%d,%d,%d\n'',a’b,c);elseprint。''%d,%d,%d\n'',a,b,

c);}程序的運行結果是()。

A、1,3,2

B、1,3,3

C、I,2,3

D、3,2,1

標準答案:B

知識點解析:else總是和最近的if配對,所以進入第一個if語句中進行條件判斷

時,因為是邏輯與操作,需要兩邊運算對象的值均為非零值才為真,所以需要逐個

執行判斷的結果為1。進入第二個if語句條件判斷,因為b!=2條件成立,所以整

個條件表達式的值為真,不再執行邏輯或的第二個運算對象(c--!=3)c的值不變,也

不再執行第一個else語句。打印a的值1,b的值3,c的值3。

10、設有以下程序段inly;y=rand()%30+1;則變量y的取值范圍是()。

A、0<y<30

B、0<y<30

C、l<y<30

D、1<y<30

標準答案:A

知識點解析:考查運算符與表達式,rand()%30求得范圍在0-29之間的數據,+1

后的取值范圍為1-30(1、30也包括在內),答案選A。

11>有以下程序:#include<stdio.h>main(){charch[]=,,uvwxyz,\*pc;

pc=ch;printf(,,%c\n,\*(pc+5));}程序的運行結果是()。

A、z

B、0

C、元素ch[5]的地址

D、字符y的地址

標準答案:A

知識點解析:語句pc=ch;使得指針變量指向字符數組ch的首地址,即指向字

符、二則pc+5指向的是字符向后移動5位,指向學符,z:所以輸出的*pc+5的值

即為'z',因此A選項正確。

12、以下程序的輸出結果是O。for(i=0;i<4;i++,i++)for(k=l;k<3;k++);

printfC'*')

A、****

B、***

C、**

D、*

標準答案:D

知識點解析:本題考查多層f。「循環語句,題中第二個(內層)for循環之后乂一個

分號,意思是每次循環中的操作為空,不執行任何操作。在循環結束后執行printf

語句,即只打出一個*。

13、有以下程序:#include<stdio.h>intf(intx,inty)(retum((y-x)*x);}main()

{inta=3?b=4,c=5,d;d=f(f(a,b),f(a,c));printf(''%d\n'',d);}程序的

運行結果是()。

A、7

B、10

C、8

D、9

標準答案:D

知識點解析:調用f(a,b)函數返回3,調用f(a,c)函數返回6,所以外層調用

f(f(a,1)),f(a,c));即調用f(3,6)函數返回9。

14>有以下程序intfun(intx[],intn){staticintsum=0,i;for(i=0;i

A、50

B、45

C、60

D、55

標準答案:C

知識點解析:在函數inifun(intx[],inin)的定義中,變量sum使用了static修飾

符,這說明了變量sum為一個靜態局部變量。由于在整個程序運行期間,靜態局

部變量在內存中的靜態存儲區中占據著永久的存儲單元。即使退出函數之后,下次

再進入該函數時.靜態局部變量繼續使用原來存儲單元中原來的值。函數

intfun(intx[],inin)的功能是求出數組x[]各個元素的和。所以在主函數中,調用函

數Fun(a,5)后,變量sum=1+2+3+4+5=15,當再次調用Fun(b,4)后,變量

sum=15+6+7+8+9=45.所以s=15+45=60。

15、若有定義intw[3][5];,則以下不能正確表示該數組元素的表達式是()。

A、*(&w|0][0]+l)

B、*(*w+3)

C、*(*(w+l))

D、*(w+l)[4]

標準答案:D

知識點解析:A選項中*(&w[0][0]+l)表示w[0][l];B選項中*(*w+3)表示

w[0][3];C選項中士/w+D)表示w[l][0];而D選項中*(w+1)[4]的正確寫法是

(*(w+l))[4],表示因此選擇D選項。

16、<WTSJ?#inclUde#defineN3voidfun(inta[][N],intb[]){inti,j;

for(i=0;i

A、1,3,5,

B、2,4,8,

C、3,5,7

D、3,6,9,

標準答案:D

知識點解析:函數fun()的作用是求出二維數組中每一行中的最大元素,所以

在main()函數中執行完fun(x,y)后,數組y中的元素為二維數組x[N][N]每一行的

最大元素。

17、關于int*func(inta[10],intn);的敘述中正確的是()。

A、說明中的a[10]寫成叫或*a效果完全一樣

B、形參a對應的實參只能是數組名

C、func的函數體中不能對a進行移動指針(如a++)的操作

D、只有指向10個整數內存單元的指針,才能作為實參傳給a

標準答案:A

知識點解析:函數func為返回值為指針的函數,有兩個形參,形參數組a為指針

變量,保存實參數組的首地址,其元素個數由實參數組決定,因此說明中的a[10]

可以寫成a口或本a。

18、關于文件操作中的標高符“EOF”的敘述中正確的是()。

A、EOF即NULL

B、文本文件和二進制文件都可以用EOF作為文件結束標志

C、EOF是在庫函數文件中定義的符號常量

D、對于文本文件,fgetc函數讀入最后一個字符時,返回值是EOF

標準答案:C

知識點解析:EOF是在sldio.h庫函數文件中定義的符號常量,其值等于一

EOF用作文件結束標志,在二進制或者文本文件內部有一個位置指針,用以指示

文件內部的當前讀寫位置。使用fgctc函數,每讀寫一次,該指針均向后移動。

19^有以下程序#includemain(){inta=5,b=l,t;t=(a<<2)|b;printf("%d\n",t);)程序

運行后的輸出結果是()o

A、1

B、11

C、6

D、21

標準答案:D

知識點解析:本題考查位運算,以及按位或操作,將a左移一位相當于是將a乘以

了4,所以a<<2等于20,二進制表示為00010100,與b按位或得到00010101,即

21,所以選項D正確。

20、有以下程序,其中k的初值為八進制數的nchidemain(){intk=011;

printf("%dW,k++);}程序運行后的輸出結果是

A、12

B、11

C、10

D、9

標準答案:D

知識點解析:本題主要考查基本數據類型和格式化輸出函數printf。變量k的初值

為011,表不8進制的11,十進制值為9,printf輸出k++的值,++在k的后面

表示先使用后自增,因此輸出的值為9。

21、以下不合法的字符常量是

A、弋”

B、N

C、’\018'

D、,\xcc,

標準答案:C

知識點解析:在C語言中,一個字符常量代表ASCII字符集中的一個字符,在程

序中用單引號把一個字將括起來用為字符常量。轉義字符常量也是必須括在一對單

引號內,以一個反斜線開頭后跟一個特定的字符,用來代表某一個特定的Ascn

字符。在選項C中,、018,是用八進制數來代表一個字符常量,所以其中的數字只

能小于8,并不包括8。

22>有以下程序#includeVstdio.h>intfun(chars[])[char*p=s;while(*p=O)p++;

retum(p-s);}main(){printf("%d\n”,fun("OABCDEFH));}程序運行后的輸出結果

A、6

B、7

C、1

D、0

標準答案:B

知識點解析:函數fun的主要功能是計算字符串中實際字符的個數,因此主函數中

調用。fun得到結果為7。

23、下面描述中錯誤的是()。

A、系統總體結構圖支持軟件系統的詳細設計

B、軟件設計是將軟件需求轉換為軟件表示的過程

C、數據結構與數據庫設計是軟件設計的任務之一

D、PAD圖是軟件詳細設計的表示工具

標準答案:A

知識點解析:詳細設計的任務是為軟件結構圖中而非總體結構圖中的每一個模塊確

定實現算法和局部數據結構,用某種選定的表達工具表示算法和數據結構的細節,

所以A)錯誤。

24、下列與隊列結構有關聯的是

A、函數的遞歸調用

B、數組元素的引用

C、多重循環的執行

D、先到先服務的作業調度

標準答案:D

知識點解析:隊列的修改是依先進先出的原則進行的,D正確。

25有以下程序#includemain(){intk=5,n=0;do{switch(k){easel:case3:n+=l;k-

-;break;default:n=O:k-;case2:case4:n+=2;k-;break:}

printf("%d';n);}while(k>0&&n<5);)程序運行后的輸出結果是

A、02356

B、0235

C、235

D、2356

標準答案:C

知識點解析:k的值為J,逐個對case語句進行匹配,均不匹配,執"detaull下的語句

n=0;k-在執行case2:后面的空語句,與case4:后面的n+=2;k--;執行break語句跳出

switch判斷,打印n的值,即2。經過第一次循環后,k的值為3,然后進行k>0&&n<

5條件判斷為真,第二次執行循環體,執行case3:后面的n+=l;k--;再執行break語句跳

出循環,此時打印n的值3,此時k的值為2o第三次執行循環體k的值為2,滿足條

件,執行case2:case4:后面的語句n+=2,k--,跳出循環體。打印n的值5。此時n不小

于5了條件k>0&&n<5不成立了,所以結束循環。整個程序的打印結果為235o

國家二級C語言機試(選擇題)模擬試

卷第3套

一、選擇題(本題共40題,每題1.0分,共40分。)

1、設數據結構B=(D,R),其中D={a,b,c,d,e,f}R={(f,8),(d,b),(e,

d),(e,e),(a,c)}該數據結構為()。

A、線性結構

B、循環隊列

C、循環鏈表

D、非線性結構

標準答案:A

知識點解析:數據的邏輯結構有兩個要素:一是數據元素的集合,通常記為D;二

是D上的關系,它反映了D中各數據元素之間的前后件關系,通常記為R。即一

個數據結構可以表示成B=(D,R)o其中B表示數據結構。為了反映D中各數據元

素之間的前后件關系,一般用二元組來表示。例如,假設a與b是D中的兩個數

據,則二元組(a,b)表示a是b的前件,b是a的后件。本題中R中的根結點為f,

元素順序為JaTC—eidTh.滿足線性結構的條件.

2、下列描述中正確的是

A、線性鏈表是線性表的鏈式存儲結構

B、棧與隊列是非線性結構

C、雙向鏈表是非線性結構

D、只有根結點的二叉樹是線性結構

標準答案:A

知識點解析:線性表的鏈式存儲結構稱為線性鏈表。線性表鏈式存儲結構的基本單

位稱為存儲結點,每個存儲結點包括數據域和指針域兩個組成部分。各數據元素之

間的前后件關系是由各結點的指針域來指示的,指向線性表中第一結點的指針

HEAD稱為頭指針,當HEAD=NULL時稱為空表。棧、隊列和雙向鏈表是線性結

構。樹是一種簡單的非線性結構。在樹這種數據結構中,所有數據元素的關系具有

明顯的層次特征。二叉樹是非線性結構。線性結構和非線性結構是從數據的邏輯結

構角度來講的,與該數據結構中有多少個元素沒有關系,即使是空的二叉樹也是非

線性結構。

3、下列四個敘述中,正確的是()。

A、C程序中的所有字母必須小寫

B、C程序中的關鍵字必須小寫,其他標識符不區分大小寫

C、C程序中的所有字母都不區分大小寫

D、C程序中的所有關鍵字必須小寫

標準答案:D

知識點解析:C語言只規定所有的關鍵字必須小寫,而標識符中的字母則既可以大

寫,也可以小寫,但大小寫是有區別的。例如,else是關鍵字,而ELSE可以作為

標識符使用。

4、深度為5的完全二叉樹的結點數不可能是()。

A、15

B、16

C、17

D、18

標準答案:A

知識點解析:設完全二叉樹的結點數為n,根據深度為k的二叉樹至多有2k.i個結

點,再根據完全二叉樹的定義可知,2k-,-l<n<2k-lo本題中完全二叉樹的深度為

5,則25"-lVnW25-l,15<n<31o因此,結點數不能為15。

5、下列敘述中錯誤的是()。

A、在C語言中,時二進制文件的訪問速度比文本文件快

B、在C語言中,隨機文件以二進制代碼形式存儲數據

C、語句FILEfp;定義了一個名為fp的文件指針

D、C語言中的文本文件以ASCII碼形式存儲數據

標準答案:C

知識點解析:在C語言中,文件指針實際上是指向一個結構體類型的指針,一般

稱這個結構體類型名為FILE,可以用此類型名來定義文件指針。定義文件類型指

針變量的一般形式為:FILE*指針變量名;選項C中少了“*”,所以選項C錯誤。

6、一棵二叉樹中共有80個葉子結點與70個度為1的結點,則該二叉樹中的總結

點數為

A、219

B、229

C、230

D、231

標準答案:B

知識點解析:根據二叉樹的性質,在任意二叉樹中,度為0的結點(即葉子結點)總

是比度為2的結點多一個,故總結點數=葉子節點數十度為2的節點數+度為1的節

點數=80+79+70=229。

7、在數據庫管理技術發展的三個階段中,沒有專門的軟件對數據進行管理的是

()。

A、文件系統階段

B、人工管理階段

C、文件系統階段和數據庫階段

D、人工管理階段和文件系統階段

標準答案:B

知識點解析:數據庫管理技術的三個階段是人工管理階段、文件系統階段和數據庫

系統階段。人工管理階段沒有專門的軟件對數據進行管理。

8、以下選項中能用作數據常量的是()。

A、115L

B、0118

C、1.5el.5

D、0115

標準答案:A

知識點解析:A選項中115L表示115是長整型數據,合法。B選項是八進制常量

的表示方法,但是在八進制中不能含有數字8,所以B選項錯誤。C選項中e后面

應該是整數,而不能是小數1.5,所以C選項錯誤。D選項中八進制常量應該是

數字開始,而不是字母“0”開始。

9、設有某函數的說明為:int*func(inta[10],intn);則下列敘述中,正確的是

()。

A、形參a對應的實參只能是數組名

B、說明中的a[10]寫成a口或*a效果完全一樣

C、func的函數體中不能對a進行移動指針(如a++)的操作

D、只有指向10個整數內存單元的指針,才能作為實參傳給a

標準答案:B

知識點解析:考查數組名作為函數參數。傳遞給形參的實參可以是數組名,還可以

是指向該數組的指針變量,選項A錯誤;a[10].a[]、*a做形參都是接受實參數組

首地址,效果一樣,選項B正確;數組名可以看作一個指針常量,對其進行自加

自減運算相當于指針變量的自加自減,選項C錯誤;數組名作為函數參數時,只

傳遞數組的首地址而不檢查形參數組的長度,所以形參表中可以不給出形參數組的

長度,形參數組和實參數組長度也可以不同,選項D錯誤。故答案選B。

10、以下敘述中正確的是()。

A、C語言函數可以嵌套調用,例如:fUn(fun(x))

B、C語言程序是由過程和函數組成的

c、c語言函數不可以單獨編譯

D、C語言中除了main函數外,其他函數不可作為單獨文件形式存在

標準答案:A

知識點解析:C語言程序是由函數組成的,所以B選項錯誤。C語言函數可以單獨

進行編譯,所以C選項錯誤。每個C程序中必須包含一個main函數,但不一定是

每個C程序文件中都必須有,用戶單獨編寫的某個函數也可以存儲為一個C程序

文件,所以D選項錯誤。

11、下列敘述中正確的是()。

A、在switch語句中不一定使用break語句

B、在switch語句中必須使用default語句

C、break語句必須與switch語句中的ease配對使用

D、break語句只能用于switch語句

標準答案:A

知識點解析:default語句在switch語句中可以省略,所以B選項錯誤;switch語句

中并非每個case后都需要使用break語句,所以C選項錯誤;break語句還可以用

于for等循環結構中,所以D選項錯誤。

12、若有以下程序#inchidechar*a=,,you,,tcharb[]="WelcomeyoutoChina!1':

main(){inti,j=0;char*p;for(i=0;b[i]!=,\0\i++){if(*a==b[i]){p=a;

),,

for(j=i;*P!=\O;j++){if(*P!=b[j])break;p++;}if^*p==\O9break;)}

printfC%s",&b[i]);}則程序的輸出結果是

A、youtoChina!

B、toChina!

C>meyoutoChina!

D、China!

標準答案:A

知識點解析:程序中循環部分的主要功能是,在字符串b中尋找是否含有子串a.

如果含有則退出,此時i為子串a在字符串b中第一次出現的位置。因此最后的輸

出函數則從第i個字符開始一直輸出到字符串的末尾。

13、下列敘述中錯誤的是()。

A、用戶所定義的標識符允許使用關鍵字

B、用戶所定義的標識符應盡量做到“見名知意”

C、用戶所定義的標識符必須以字母或下劃線開頭

D、用戶定義的標識符中,大、小寫字母代表不同標識

標準答案:A

知識點解析?:在C語言中,合法標識符的命名規則是:標識符可以由字母、數字

和下劃線組成,并且第一個字符必須為字母或下劃線,凡是要求標識符的地方都必

須按此規則命名。在C語言的標識符中,大寫字母和小寫字母被認為是兩個不同

的字符。在選擇標識符時,應注意做到“見名知義'',即選擇具有一定含義的英文單

詞或漢語拼音作為標識符,以增加程序的可讀性。

14、有以下程序:#include<stdio.h>main(){charch[]=,,uvwxyzM,*pc;

pc=ch;prinff("%c\n",*(pc+5));}程序的運行結果是()。

A、z

B、0

C、元素ch[5]的地址

D、字符y的地址

標準答案:A

知識點解析:語句pc二ch;使得指針變量指向字符數組ch的首地址,即指向字

符\11則pc+5指向的是字符向后移動5位,指向字符所以輸出的*pc+5的值

即為因此A選項正確。

15、有以下程序:#include<stdio.h>#include<string.h>main(){char

,,,,,

p[20]={a\'b','c',d},q[]=''abc'',r[]=abcde;strcat(p,r);

strcpy(p+strlen(q),q);printf(''%d\n'‘,strlen(p));}程序的運行結果是()。

A、11

B、9

C、6

D、7

標準答案:C

知識點解析:strcpy:字符串復制函數;sirlen:求字符串長度函數(注意:不包含字

符串結束標記字符'\0');strcat:字符串連接函數。執行完語句streal,(p,r);

后,p數組中存儲的元素為a,b,c,d,a,b,c,d,e;執行語句

strcpy(p+strlen(q),q);得到的結果是將q所指向的字符串復制至p+slrlen(q)開始的

存儲位置,因為strlen的值為3,即p+3開始存儲q中的元素,所以執行完

strcpy(p+strlen(q),q)語句后,字符藪組p[20]的存儲元素為a,b,c,a,b,c;所

以strlen(p)的結果為6,因此C選項正確。

16、有以下程序段:inifun(char**){char*P:P=s:if(*s==O)return0:

while(*++P);return(P—S);}該段程序是用來()。

A、計算字符串所占字節數

B、實現字符串的賦值

C、計算字符串的長度

D、將字符串逆序存放

標準答案:C

知識點解析:在fun()函數中定義了指針p,首先把s地址賦給p,再通過while函

數移動指針P,當p指針指向單元為0時,退出while循環,返回此時p和s地址

之差,即字符串長度。

17、關于continue和break的敘述中正確的是()。

A、當break出現在循環體中的switch語句體內時,其作用是跳出該switch語句

體,并終止循環體的執行

B、只能在循環體內和switch語句體內使用break語句

C、conlinue語句的作用是:在執行完本次循環體中剩余語句后,終止循環

D、在while語句和do一while語句中無法使用continue語句

標準答案:B

知識點解析:break語句可以使程序流程跳出switch語句體,也可用break語句在

循環結構中終止循環體,但一次只能跳出或終止一層switch語句或循環,因此,

當break出現在循環體中的switch語句體內時,其作用只是跳出該switch語句體,

并不能終止循環體的執行。continue語句的作用是結束本次循環,在while和

dowhile循環中.continue語句使得流程直接跳到循環控制條件的測試部分,判斷

是否會進入下一次循環。

18、C語言程序的模塊化通過以下哪個選項來實現

A、變量

B、程序行

C、函數

D、語句

標準答案:C

知識點解析:用函數作為程序模塊以實現C程序的模塊化,程序有多個函數構

成,每個函數可以實現一個具體的功能,實現程序的模塊化設計。

19、有以下定義語句,編譯時會出現編譯錯誤的是

A、chara=,\x2d,;

chara=>\n,;

C、chara=H;

D、chara="aa,*;

標準答案:D

知識點解析:D選項中將字符串常量賦給字符變量a是錯誤的。

20、若變量已正確定義并賦值,以下不能構成C語句的選項是

A、A=a+b;

B、B++;

C、a=a+b

D、A?a:b;

標準答案:C

知識點解析:C語言語句的表示為分號,不加分號的表達式不能看成C語句。

21、以下敘述中正確的是()。

A、字符常量需要用單引號括起來

B、字符常量在內存中占2個字節

C、轉義字符要用雙引號括起來,以便與普通的字符常量區分開

D、字符常量是不能進行關系運算的

標準答案:A

知識點解析:字符常量是由單引號括起來的ASCII碼表中的字符,特殊的轉義字

符也要用單引號括起來表示其為一個字符,字符常量在內存中占1個字節,參與運

算的時候,通常使用該字符的ASCH碼進行計算。答案選A。

22、若變量均已正確定義并賦值,以下合法的C語言賦值語句是

A、x=n%2.5:

B、x+n=i;

C、x=5=4+l;

D、x=y=5:

標準答案:D

知識點解析:選項D)的含義是把關系表達式y==5的值賦給變量x。所以這是一條

正確的賦值語句。因為賦值運算符左側的操作數必須曩:一個變量,而不能是表達

式或者常量。因為求余運算符“%”兩側的運算對象都應當是整型數據。

23、以下敘述中正確的是

A、在C程序中的八進制和十六進制,可以是浮點數

B、八進制數的開頭要使用英文字母o,否則不能與十進制區分開

C、整型變量可以分為int型、shorl型、long型和unsigned型四種

D、英文大寫字母x和英文小寫字母x都可以作為二二進制數字的開頭字符

標準答案:C

知識點解析:當型變量分為以T4種類型:①基本型:以嗎表示。②短整羋:

以shortint表示,或以short表示。③長整型:以longint表示,或以long表示。

④無符號型:以unsignedint表示,選項C)正確,實型常量僅有十進制表示形式,

八進制以數字0開頭,十六進制開頭為Ox或者0X,不是二進制。

24、設有定義:intnl=O,n2,*p=n2,*q=nl;,以下賦值語句中與n2=nl;語

句等價的是

A^*p=*q;

B、p=q;

C、*p=n1;

D、p=*q;

標準答案:A

知識點解析:本題考查背針的使用。指針p和q分別指向變量n2和nl,n2=nl可

以用指針來代替,即*p代替n2,*q代替nl。

25、若有以下程序段doublex=5.16894;printf("%f\n",(int)(x*1000+0.5)/

(double)1000);則程序段的輸出結果是

A、5.175000

B、5.169000

C、5.170000

D、5.168000

標準答案:B

知識點解析:fint)(x*1000+0.5)/(double)1000表達式功能,保存數據x的后三位

小數,把第四位四舍五入。

26、以下選項中非法的字符常量是

A、'\019'

B、,\65,

C、'\xfF

D、

標準答案:A

知識點解析:本題考查字符型常量。選項A)錯誤,使用了轉義字符“\",U19以。

開始表示8進制,8進制數字的范圍是0-7,沒有9;選項B)、C)和D)正確。

27、在以下給出的表達式中,與while(E)中的(E)不等價的表達式是()。

A、(E>0||E<0)

B、(E==0)

C、(!E==0)

D、(E!=0)

標準答案:B

知識點解析:while語句中條件表達式E的值不為0即為真,認為滿足條件,所以與B

選項中表達式的含義正好相反,選擇B選項。

28、有以下程序,程序運行后的輸出結果是#inchide#defineS(x)4*(x)*x+1void

main(){intk=5,j=2;printf("%d\n",S(k+j));}

A、197

B、143

C、33

D、28

標準答案:B

知識點解析:這道題涉及到帶參數的宏的定義和替換這個知識點。在程序中定義了

帶參數的宏S(x),當在主函數中用參數k+i調用宏S時:根據宏替換的原則,則

S(k+j)=S(5+2)=4*7*5+2+1=143。

29、在關系數據庫中,用來表示實體間聯系的是

A、屬性

B、二維表

C、網狀結構

D、樹狀結構

標準答案:B

知識點解析?:關系模型實體間的聯系采用二維表來表示,簡稱表。選項C為網狀

模型實體間的聯系,選項D為層次模型實體間的聯系,選項A屬性刻畫了實體。

30、以卜.函數的功能是:通過鍵盤輸入數據,為數組中的所有元素賦值。#include

<stdio-h>#defineN10voidfun(intx[N]){inti=0;while(i<N)scanf("%d",

);}在程序中下劃線處應填入的是

A、x+i

B、x[i+l]

C>x+(i++)

D、x[++i]

標準答案:c

知識點解析:本題考查數組和scanf函數的使用。程序通過while循環來給數組元

索賦值,賦值語句通過調用scanf函數來實現。scanf函數從鍵盤接收數據,第二個

參數是數據保存的地址,因此選項B)和選項D)不是地址,錯誤。選項A)和選項

C)是地址,但是選項A)的i值不會發生變化,循環體內每次都是給同一個元素賦

值,不滿足要求,選項C)正確。

31有以下程序段intk=0,a=l,b=2,c=3:k=a<b?b:a;k=k>c?c:k:執行程

序段后,k的值是

A、3

B、2

C、1

D、0

標準答案:B

知識點解析:本題主要考查條件表達式。k=aVb?b:a中aVb為真,因此k的值為

b,即k=2。k=k>c?c:k中k>c為假,k的值為2c

32>有以下定義:inta;longb;doublex,y;則以下選項中正確的表達式是

A、a=x<>y

B、a%(int)(x-y)

C、(a*y)%h

D、y=x+y=x

標準答案:B

知識點解析:C語言中沒有“V>”運算符,所以A選項錯誤,“%”運算符的兩個操

作值必須為整型數據,所以B選項正確,的結果為double型,所以C選項錯誤?不

能將值賦給像x+y這樣的表達式,所以D選項錯誤。

33、設變量己正確定義,則以下能正確計算仁n!的程序段是

A、f=0;for(i=l;i<=n;i++)f*=i;

B、f=l;for(i=l;i<n;i++)f*=i;

C>f=l;for(i=n:i>l;i++)f*=i;

D、f=l;for(i=n;i>=2;i—)f*=i;

標準答案:D

知識點解析:本題主要考查for循環的使用。題目要求計算階乘n!,通過for循環

來實現,循環變量i可以從1到n(包括n)或者從n到1,在循環體內做累乘。選項

A)中,累乘變量的初值為0,最終計算結果也為0;選項B)中循環次數為n-l

次,累乘結果少乘了n;選項C)是死循環;選項D)正確。

34、已有定義:chara[]="xyz",b[]={V,'y'「z’);,以下敘述中正確的是

A、數組a和b長度相同

B、a數組長度小于b數組長度

C、a數組長度大于b數組長度

D、上述說法都不對

標準答案:C

知識點解析:本題考查字符數組的定義。charalJ="xyz",bU=『x:y,N}:定

義了兩個字符數組a和b,a數組存放的是一個字符串,字符串以“/0”作為結束標

志,數組a的長度必須加上結束符長度1,因此數組a的長度為4。數組b中有三

個元素,長度為3。

35、若有以卜程序#includeVstdio.h>intk=7;voidf(int**s){int*t=&k;*s=t;

printf("%d,%d,%d,”,k,*t,**s);}main(){inti=3,*p=&i,**r=&p:

f(r);printf("%d,%d,%d\n",i,*p,**r);}貝]程序的輸出結果是

A、3,7,7,7,7,7

B、7,7,7,3,3,3

C、3,3,3,7,7,7

D、7,7,7,3,7,7

標準答案:D

知識點解析:本題考查了二級指針,二級指針可以保存一級指針的地址。主函數中

p指向i,r指向p,函數調用后s指向p,在f函數中I指向全局變量k=7,s指向

3同時s保存了實參p的地址,此時p也指向3輸出三個7,流程轉到主函數,i

的值為3,p以及r的值為7。

36、設有定義語句int(*D(int);則以下敘述正確的是()。

A、f是指向函數的指針變量,該函數具有一個int類型的形參

B、f是基類型為int的指針變量

C、f是指向加類型一維數組的指針變量

D、f是函數名,該函數的返回值是基類型為int類型的地址

標準答案:A

知識點解析:(*f)(im)中f為函數指針變量,可以指向任何已經定義的合法的函

數,該函數帶有一個而類型的形參,所以答案選A。

37、有以卜程序#includevoidfun(int*a,int*b){int*c;c=a;a=b;b=c;)main(){int

x=3,y=5,?p=&x,*q=&y;fun(p,q);printf("%d,%d,"JpJq);fun(&x,&y);

printf("%d,%d\n",*p*q);)程序運行后的輸出結果是()。

A、3,5,3,5

B、3

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論