國家二級(C語言)筆試模擬試卷6_第1頁
國家二級(C語言)筆試模擬試卷6_第2頁
國家二級(C語言)筆試模擬試卷6_第3頁
國家二級(C語言)筆試模擬試卷6_第4頁
國家二級(C語言)筆試模擬試卷6_第5頁
已閱讀5頁,還剩123頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

國家二級(C語言)筆試模擬試卷第1

一、公共基礎選擇題(本題共10題,每題7.0分,共

10分。)

1、算法的空間復雜度是指

A、算法程序的長度

B、算法程序中的指令條數

C、算法程序所占的存儲空間

D、算法執行過程中所需要的存儲空間

標準答案:8

知識點解析:算法的空間復雜度一般是指這個算法執行時所需要的內存空間,其中

包括算法程序所占的空間、輸入的初始數據所占的存儲空間以及算法執行過程中所

需要的額外空間,其中額外空間還包括算法程序執行過程的工作單元以及某種數據

結構所需要的附加存儲空間。

2、數據的存儲結構是指

A、數據所占的存儲空間量

B、數據的邏輯結構在汁算機中的表示

C、數據在計算機中的順序存儲方式

D、存儲在外存中的數據

標準答案:2

知識點解析:數據的存儲結構是數據元素在計算機存儲器內的表示。數據的存儲結

構是邏輯結構用計算機語言的實現,即建立數據的機內表示。

3、設有下列二叉樹:對此二叉樹后序遍歷的結果為

A、ABCDEF

B、BDAECF

C、ABDCEF

D、DBEFCA

標準答案:8

知識點解析:二叉樹的遍歷分為先序、中序、后序三種不同方式.本題要求后序遍

歷,其遍歷順序應該為:后序遍歷左子樹,后序遍歷右子樹,訪問根結點。按照定

義,后序遍歷序列是DBEPCA,故答案為D。

4、源程序中應包含一些內部文檔,以幫助閱讀和理解程序,源程序的內部文檔通

常包括選擇合適的標識符、注釋和

A、程序的視覺組織

B、盡量不用或少用GOTO語句

C、檢查輸入數據的有效性

D、設計良好的輸出報表

標準答案:1

知識點解析:源程序文檔化主要包括三個方面的內容:標識符的命名、程序中添加

注釋以及程序的視覺組織。

5、對于長度為n的線性表,在最壞情況下,下列各排序法所對應的比較次數中正

確的是

A、冒泡排序為n/2

B、冒泡排序為n

C、快速排序為n

D、快速排序為n(n-l)/2

標準答案:8

知識點解析:假設線性表的長度為n,在最壞情況下,冒泡排序和快速排序需要的

比較次數為n(n-4)/2。由此可見,選項D正確。

6、下面不屬于軟件設計原則的是

A、抽象

B、模塊化

C、自底向上

D、信息隱藏

標準答案:4

知識點解析:軟件設計的原則包括:抽象、模塊化,信息隱蔽和模塊獨立性。所以

自底向上不是軟件設計原則。答案為C。

7、在數據庫管理系統提供的數據語言中,負責數據的完整性、安全性的定義與檢

查以及并發控制、故障恢復等功能的是

A、數據定義語言

B、數據轉換語言

C、數據操縱語言

D、數據控制語言

標準答案:8

知識點解析:在數據庫管理系統提供的數據語言中,數據控制語言負責數據的完整

性、安全性的定義與檢查以及并發控制、故障恢復等功能。

8、下列對于線性鏈表的描述中正確的是

A、存儲空間不一定是連續,且各元素的存儲順序是任意的

B、存儲空間不一定是連續,且前件元素一定存儲在后件元素的前面

C、存儲空間必須連續,且前件元素一定存儲在后件元素的前面

D、存儲空間必須連續,且各元素的存儲順序是任意的

標準答案:1

知識點解析:在鏈式存儲結構中,存儲數據的存儲空間可以不連續,各數據結點的

存儲順序與數據元素之間的邏輯關系可以不一致,數據元素之間的邏輯關系,是由

指針域來確定的。由此可見,選項A的描述正確。

9、以下敘述中正確的是

A、C程序中注釋部分可以出現在程序中任意合適的地方

B、花括號“{”和“}”只能作為函數體的定界符

C、構成C程序的基本單位是函數,所有函數名都可以由用戶命名

D、分號是C語句之間的分隔符,不是語句的一部分

標準答案:1

知識點解析:與"*尸之間的信息稱為注釋信息,在C語言中,允許在任何能夠

插入空格符的位置插入注釋,但C語言的注釋不能進行嵌套,故選項A正確;在

C語言中,函數體是從花括號“{”開始,到花括號“}”結束.但沒有規定花括號氣”和

只能作為函數體定界符,故選項B錯誤;選項C中前半句是正確的,在C程序

中由有一個或多個函數所組成,但不是所有的函數都由用戶自己命名,有些函數比

如庫函數,主函數main。就不能由用戶來命名,故選C不正確:在C語言中明確

規定每條語句以分號結束,分號是語句不可缺少的一部分,故選項D不正

確。所以,4個選項中選項A符合題意。

10、以下選項中合法的實型常數是

A、5E2.0

B、E-3

C、2E0

D、I.3E

標準答案:4

知識點解析?:在C語言中,實數有兩種表示形式:十進制數形式與指數形式。

般形式的實數:小數形式的實數由整數部分、小數點和小數部分組成(必須要有小

數點),指數形式的小數;指數形式的實數由尾數部分、e(E)和指數部分組成(字母

e或E的前后必須要有數字,且其后面的指數必須為整數)。選項A中,5E2.0中E

后面的2.0不是整數;選項B中,E前面沒有數字:選項D中,E后面沒有數字。

最終可以判斷選項C正確。

二、選擇題(1分)(本題共10題,每題1.0分,共10

分。)

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

A、構成c程序的基本單位是函數

B、可以在一個函數中定義另一個函數

C、main函數必須放在其他函數之前

D、C函數定義的格式是K&R格式

標準答案:1

知識點解析:構成C程序的基本單位是函數,A)正確;函數的定義是互相平行、

獨立的,一個函數內不能定義另一個函數,B)錯誤;main函數可以在其他函數之

前定義,也可以在其他函數之后定義,。錯誤;C函數定義的一般格式分為傳統

格式和現代格式,傳統格式也稱K&R格式,是早期編譯系統使用的格式,現代格

式又稱ANSI格式,是現代編譯系統使用的格式。

12、結構化程序所規定的三種最基本控制結構是(),

A、輸入、處理、輸出

B、樹形、網形、環形

C、順序、選擇、循環

D、主程序、子程序、函數

標準答案:4

知識點解析:結構化程序設計方法采用順序、選擇和循環三種基本程序控制結構編

寫程序,從而使程序具有好的結構。

13、一個C語言程序是由()。

A、一個主程序和若干子程序組成

B、函數組成

C、若干過程組成

D、若干子程序組成

標準答案:2

知識點解析:一個C源程序是由一個main函數和若干個其他函數組成的。函數是

C程序的基本單位,被調用的函數可以是系統提供的庫函數,也可以是用戶根據需

要自己定義的函數。

14、請選出可用作C語言用戶標識符的是()。

A、void,define,WORD

B、a3_b3,_123,IF

C、FOR,-abc,Case

D、2a,Do,$izeof

標準答案:2

知識點解析:C語言規定用戶標識符由字母、數字和下劃線組成,且第一個字符必

須是字母或下劃線,可見選項C),D)是錯誤的;此外,C語言不允許用戶將關鍵

字作為標識符,而選項A)中的void是C語言的關犍字。

15、下列各數據類型不屬于構造類型的是()。

A、枚舉型

B、共用型

C、結構型

D、數組型

標準答案:1

知識點解析:本題考查高級語言的數據類型。

16、在16位C編譯系統中,若定義longa:則能給a賦值40000的正確語句是

()。

A、a=2000p+20000;

B、a=4000*10;

C、a=30000+10000;

D、a=4000L*10L;

標準答案:8

知識點解析:40000已經超過了C語言規定的短整型的范圍。要將這樣的數賦值給

一個長整型變量,需要在整型常量后面加字母L。

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

A、在C程序中,逗號運算符的優先級最低

B、在C程序中,APH和aph是兩個不同的變量

C、若變量a和b類型相同,執行了賦值表達式a=b后b中的值將放入a中,用b

中的值不變

D、當從鍵盤輸入數據時,對于整型變量只能輸入整型數值,而實型變量只能輸入

實型數值

標準答案:8

知識點解析:在C語言的所有運算符中,逗號運算符的優先級最低;C語言中的字

母區分大小寫,所以APH和aph是兩個不同的變量:賦值表達式a=b表示將b的

值賦給a,而b本身的值保持不變;當從鍵盤輸入數據時、對于整型變量可以輸入

整型數值和字符,對于實型變量可以輸入實型數和整型數值等,選項D)錯。

18、sizeof(float)是()。

A、一個雙精度型表達式

B、一個整型表式

C、一種函數調用

D、一個不合法的表達式

標準答案:2

知識點解析:sizeof是長度運算符,或稱字節數運算符,用于計算數據類型和變量

的長度。

19、若x,i,j和k都是int型變量,則計算表達式x=(i=4,j=16,k=32)后,x的值

為()。

A、4

B、16

C、32

D、52

標準答案:4

知識點解析:逗號表達式的形式如下:表達式1,表達式2,表達式3,……,表

達式n逗號表達式作為一個整體,其運算過程是從左往右逐個計算表達式,它的值

為最后一個表達式(也即表達式n)的值。逗號運算符的優先級別在所有運算符口最

低。

20、下面程序的功能是衛316表示為兩個加數的和,使兩個加數分別能被13和11

整除,請選擇填空。#include<stdio.h>main(){inti=0,j,k;do{i++;k=316-

13*i}while();j=k/ll;printf("316=13*%d+ll,%d”,i,j);)

A、k/11

B、k%II

C、k/ll==0

D、k%ll==0

標準答案:2

知識點解析:本題的關鍵是兩個加數分別能被13和11整除。當k%ll的值為0

時,則退出循環,將執行j=k/U:語句,輸出結果,所以該表達式合理的條件是

k%llo

三、選擇題(2分)(本題共30題,每題7.0分,共30

分。)

21、以下選項中可以作為C語言合法常旱的是

A、-80

B、-80

C、-8el.O

D、-80.0e

標準答案:1

知識點解析:本題考查的是C語言中整型常量與實型常量的部分表示方法。選項

A用的是整型常量的十進制表示法,是正確的。以0或-0開頭的整數是八進制數表

示法,八進制數的原則是“逢八進一”它只可能包含。?7這8個符號,故選項B是

錯誤的。選項C和D椰是實型常量的指數表示法,其規則是用字母。(或E)將一個

實數的小數部分和指數部分分隔開。字母e(或E)之前是小數部分,之后是指數部

分,這兩部分都不能省略,且指數部分必須為整數。故選項C和D都不正確。所

以,4個選項中選項A符合題意。

22、下列條件語句中,功能與其他語句不同的是

A、if(a)printf("%d\n",x);elseprinff("%d\nn,y);

B、if(a==O)printf("%d\n,\y);elseprintf("%d\nM,x);

C、fi(a!=O)prinff("%d\n"x);elseprintf("%d\n",y);

D、if(a==O)prinff("%d\n,\x);elseprintf("%d\n",y);

標準答案:8

知識點解析:本題考核的知識點是計語句的用法。選項A、選項B和選項C都是

在a的值為。的時候輸出y,a不為。的時候輸出x,而選項D是在a為0的時候

輸出x,a不為0的時候輸出y,所以,4個選項中選項D符合題意。

23、以下不能定義為用戶標識符是

A、Main

B、_0

C、_int

D、sizeof

標準答案:8

知識點解析:本題考查的是C語言中的標識符與關鍵字。合法的標識符由字母,

數字和下劃線組成,并且第一個字符必須為字母或下劃線。另外,C語言規定了一

批關鍵字,它們在程序中都代表著固定的含義,不能另作它用,所以合法的標識符

也不能是C語言的任一關鍵字。本題中,選項A、B、C都符合上述條件,只有選

項Dsizeof是C語言中的關鍵字,所以,4個選項中選項D符合題意。

24、有以下程序main(){inti,n=0;for(i=2;i<5;i++){do{if(i%3)continue;n++;}

while(!i);n++;}printf("n=%d\n",n);}程序執行后的輸出結果是

A、n=5

B、n=2

C、n=3

D、n=4

標準答案:8

知識點解析:本題考核的知識點是do…while結構和算術運算符%的應用。

do…while的結構形式為:do循環體while(條件表達式),當程序執行到do后,先

執行循環體一次,然后才對條件表達式進行計算、判斷。若條件表達式的值為真,

則重復執行一次循環體;否則退出,與while結構相比,do…while結構至少要執

行一次循環體;運算符%是求模運算,即求兩個數相除的余數。continue語句的作

用時結束本次循環,即跳過本次循環中余下尚未執行的語句,接著再一次進行循環

的條件判定。本題中,當i=2時,執行如循環。由于if表達式的條件為真,執行

continue語句,結束本次循環,判斷while循環條件為假,故退出while循環,執行

n++,此時n的值為1,當i=3時,執行do循環.曰于if(3%3)為假,執行下面的

n++語句,此時n的值為2,結束本次循環,繼續判斷while循環條件為假,故退

出while循環,執行n++語句,此時n的值為3;當i=4時,執行如循環。由于

if(4%3)為真,執行continue語句,結束本次循環,繼續判斷whHe循環條件為假,

故退出while循環,執行n++,此時n的值為4;當i=5時,退出for循環,因此最

后輸出的n的值為4,所以,4個選項中選項D符合題意。

25、有以下程序main(){inta=15,b=21,m=0;switCh(a%3){case0:m++;break;

casel:m++;switch(b%2){default:m++;case0:m++;break;})printf("%d\n",m);

程序運行后的輸出結果是

A、1

B、2

C、3

D、4

標準答案:1

知識點解析:在switch語句中break語句的作用是退出分支語句,若沒有break語

句則一直向下執行。本題中首先計算switch后面括號里的表達式a%3,印15%3為

0:執行case。:后面的語句m++;m自加1,即m為1遇到break語句;然后跳出

switch語句,所以最后輸出的m的值為1,所以選項A正確。

26、以下程序的輸出結果是main(){inta=4,b=5,c=0,d;d=!a&&!h||!c;printf

("%d\n",d);)

A、1

B、0

C、非0的數

D、-1

標準答案:1

知識點解析:本題考核的知識點是邏輯運算符的運用。由于單目運算符優先級高

于“&&”和“II”、運算,所以先計算!a、!b和!c分別為“假”、“假”、“真”,然后是

&&運算和“II”運算,原表達式就等價于“假”&&“假F“真”又由于“&&”的優先級

高于“II”運算符,所以先計算“假"&&"假",還是為假,最后是“假”11,"真''為

真。因此最后d被賦值為1,故最后輸出為1。所以,4個選項中A為所選。

27、若有說有:intn=2,*p=&n,*q=p;,則以下非法的賦值語句是

A^P=q;

B、*p=*q;

C、n=*q;

D、p=n;

標準答案:8

知識點解析:本越考查的知識點是指針的賦值。本題中首先定義了一整型變量n并

賦初值為2,接著定義了一個整型指針變量p并讓它指向n,接著又定義了一指向

指針的指針變量q,選項A中給指針變量p賦值小故這個賦值語句正確;選項B中

*p=*q就是將*q的值賦給指針變量p所指向的變量n,故這個賦值語句不是非法的

賦值語句;選項C中是將*q的值賦給變量n,故這個表達式不是非法的賦值語

句:選項D中p為一指針變量應該杵一地址賦給它,而在此選項的表達式中將變

量n而不是n的地址賦給它,故這個表達式不合法,

28>以下程序的輸出結果是charcchar(charch){if(ch>='A,&&ch<=,Z,)

ch=ch-,A,+,a,;returnch;}main(){chars[]=nABC+abc=defDEFn,*p=s;while(*p)

{*p=cchar(*p);p++;)printf{"%$\n",s);}

A、abc+ABC=DEFdef

B、abc+abc=defdef

C、abcABCDEFdef

D、abcabcdefdef

標準答案:2

知識點解析:本題考核的知識點是字符型指針變量與函數的綜合應用。本題首先定

義了一個函數cchar(),有一個字符型參數ch。在函數中首先判斷該字符是否為大

寫字母,如果是則把它轉換成小寫字符再賦值給cb,把ch作為函數值返回。在主

函數中定義了一個字符數組s并初始化,然后定義了一個指針變量并使它指向數組

so接著通過一個while循環利用指針變量p,依次取出字符數組的字符(直到遇到

字符串結束標志「\0'為止),并調用cchar。函數,把大寫字母轉換成小寫字母,其

他字符不變。最后輸出字符數組為s中的內容,結果為“abc+abc=defdeF"。所以,4

個選項中B為所選3

29、有以下程序main(){inta=7,b=8,*p,*q,*r;p-&a;q=&b;r=p;p=q;q=r;printf

(”%d,%d,%d,%d\n”,*p,*q,a,b);程序運行后的輸出結果是

A、8,7,8,7

B、7,8,7,8

C、8,7,7,8

D、7,8,8,7

標準答案:4

知識點解析:本題考核的知識點是指針變量的基本應用。程序中定義了兩個變量a

和b,并分別賦初值為7和8,定義了三個指針變量p、q、r,并讓指針p指向變

量a,讓Q指向變量b,然后通過一個中間指針變量r,使指針變量p和q互換,

互換后p指向q所指的內容即b,Q指向開始p所指向的內容即a,因此最后輸出

的*p,*q的值為8,7,a,b的值沒有改變仍為7,8,所以,4個選項中選項C符

合題意。

30、以下程序的功能是:給r輸入數據后計算半徑r圓面積s。程序在編譯時出錯。

main()/*Beginning*/{intr;floats;scanf(n%dn,&r);s=*7t*r*r;printf(,,s=%f\n'\s);

出錯的原因是

A、注釋語句書寫位置錯誤

B、存放圓半徑的變量r不應該定義為整型

C、輸出語句中格式描達符非法

D、計算圓面積的賦值語句中使用了非法變量

標準答案:8

知識點解析:在C語言源程序中了注釋部分、字符串常量部分可以使用任意字符

外,其余部分只能由52個大小寫:字母、10個阿拉伯數字以及'心?

|!#%&()[「V>“空格”30個特殊符號組成。所以在計算圓面積的賦值語句中出現的

兀是非法字符,將引起編譯出錯.應該選擇D。

31、有以下程序main(){intx[8]={8,7,6,5,0,0},*s;s=x+3;printf(M%d\n",s[2]);)

執行后輸出結果是

A、隨機值

B、0

C、5

D、6

標準答案:2

知識點解析:本題考核的知識點是指向一維數組的指針變量,通過賦值語句

“s=x+3”,使指針變量s指向數組元素x[3],輸出語句中的s[2]等價于*(s+2),即

x[5]僖為0。所以,B選項為所選。

32>有以下程序main(){chara[inti,j;i=sizcof

(a);j=strlen(a);printf(”%d,%d\n"ij);}程序運行后的輸出結果是

A、9,9

B、8,9

C、1,8

D、9,8

標準答案:8

知識點解析:本題中首先定義了字符數組a,由于它的長度省略,所以其長度由初

值個數確定,為9。接著將sizeof。函數返回的值賦給i(SIZeof()函數的作用是返回

運算對象占用的字符數),所以i值為9。然后將strlcn。函數的返回值賦給j(strlcn()

函數的作用是返回字符串的長度,不包括字符串的結束標記所以j值為3,

所以最后輸出的i.j的值為9.Xc所以4個選項中D正確.

33、有以下程序main(){chara[7]="a0\0a0\0";inti.j;i=sizcof(a);j=strlcn(a);printf

("%d%d\n",i,j);)程序運行后的輸出結果是

A、22

B、76

C、72

D、62

標準答案:4

知識點解析:本題主要考查的是C語言中的數組長度和字符串長度。數組長度指

的是一個數組所占內存空間的字節數,數組長度可以通過sizeof(V數組名〉)來求

得;字符串長度是指從指定內存地址開始直到碰到第一個‘\0'字符為止所經過的字

符數(不包括'\0'字符),字符串長度可以通過字符串函數sirlen(〈字符串首地址值

〉)來求得。所以本題程序運行后,變量i中是數組a的長度7,變量j中是數組a

中第一個、(T字符之前的字符數2:選項C符合題意。

34、有以下定義:#include<stdio.h>chara|10|,*b=a;不能給數組a輸入字符串的語

句是

A、gets(a)

B>gets(a|O])

C、gets(&a[O]);

D、gets(b);

標準答案:2

知識點解析:本題考核的知識點是函數gets。的應用。函數gets。的調用形式為

gcts(stjadr);stjadr是存放字符串的起始地址??梢允亲址麛到M名、字符指針或

字符數組元素的地址。gels函數用來從終端鍵盤讀入字符串(包括空格符),直到讀

入一個換行符為止。換行符讀入后,不作為字符串的內容。本題中定義一個長度為

10的字符數組,和一個指針變量b,并且通過賦值讓它指向數組a;選項A。選項

Bo選項C和選項D中只有選項B中gets函數的參數a|0]不能表示數組a的首地

址,故選項B不正確。所以,4個選項中選項B符合題意。

35、有以下程序:main(){char*p[10]={',abcu,naabdfgn,"dcdbc","abbd","cd"};

printf("%d\n",strten(p|4|));}執行后輸出結果是

A、2

B、3

C、4

D、5

標準答案:1

知識點解析:本題考核的知識點是指針數組的定義和strlen。函數的應用。本題中

首先定義了一個長度為10的指針數組,并賦初值,因此執行stHen(p[4]后的返回值

為字符串“cd”的長度為2。所以,4個選項中選項A符合題意。

36、下列函數定義中,會出現編譯錯誤的是

A、max(intx,inty,int*7.){*z=x>y?x:y;)

B、intmax(intx,y){intz;z=x>y?x:y;returnz;}

C、max(intx,inty){intz;z=x>y?x:y;return(z);

D^intmax(intx,inty){return(x>y?x:y);)

標準答案:2

知識點解析:本題考核的知識點是函數的定義方法。選項B中在說明形參時,省

略了第二個參數的類型,故選項B編譯不能通過。所以,4個選項中選項B符合

題意。

37、設有定義:intnl=0.n2,*p=&n2,*q=&nl;,以下賦值語句中與n2=nl;語

句等價的是

A、*p;*q;

B、p=q;

C^*p=&nl;

D、p=*q;

標準答案:1

知識點解析:本題考查的是指針的運算。題目中定義了兩個變量nl和n2,又定義

了兩個指針p和q分別指向變量n2和nl。要通過指針實現n2=nl,就是要將q所

指內容賦給p所指內容,即*p*q。所以應該選擇A。

38、以下敘述中正確的是

A、局部變量說明為stmic存儲類,其生存期將得到延長

B、全局變量說明為sioic存儲類,其作用域將被擴大

C、任何存儲類的變量在未賦初值時,其值都是不確定的

D、形參可以使用的存儲類說明符與局部變量完全相同

標準答案:1

知識點解析:靜態局部變量在整個程序運行期間,靜態局部變量在內存的靜態存儲

區中占據著永久性的存儲單元。由此可知靜態局部變量的生存期將一直延長到程序

運行結束。故選項A正確;而全局變量的只有一種靜態存儲類別,故全局變量說

明為static存儲類,和沒有說明為static存儲類其生存期都是一直延長到程序運行

結束,故選項B不正確;未賦初值的auto型變量的初值是隨機的,未賦初值的

stalic型變量的初值是0(故選項C和選項D不正確)。所以;4個選項中選項A符合

題意。

39、設函數fun的定義形式為voidfun(charch,floatx){…}則以下對函九fun的調

節器用語句中,正確是

A、fun(nabc,r,3.0);

B、t=fun(,D\16.5);

C、fun(,65\2.8):

D、fun(32,32);

標準答案:8

知識點解析:本題考查了函數的定義。題目中定義的函數「un()有兩個參數,一個

是字符型變量ch.另一個是浮點型變量x,函數類型是void即無返回值-選項A

調用fun的第1個參數是字符串常量與字符變量不匹配,所以不正確。選項B是有

返回值函數的調用形式,不正確。選項C的第1個參數是錯誤的字符常量,字符

常量是用單引號括起來的一個字符(是轉義字符可能有多個字符),故也不正確。選

項D使用兩個整型常量調用fun這在C語言中是允許的。因為整型到字符型可以

自動轉換,整型到浮點型也可以自動轉換。故應該選擇D。

40、有以下程序main()inta[10]={l,2,3,4,5,6,7,8,9,10),*p=.&a[3],*q=p+2;printf

("%d\n",*p+*q);程序運行后輸出結查是

A、16

B、10

C、8

D、6

標準答案:2

知識點解析:本題考查的是指針的簡單應用。題目中首先定義了一個血型數組a

并初始化了,然后定義了兩個指針變量p和q,并分別初始化p為指向數組元素

a[3]、q指向p后面的第2個元素即指向a[5].所以最終輸出的值為a[3]+a[5]的值

10o應該選B。

41、有以下程序main(){charp[]={,a,;b,,,c},q[]=nabcH;printf("%d%d\nH,sizeof

(p),sizeof(q));)程序運行后輸出結果是

A、44

B、33

C、34

D、43

標準答案:4

知識點解析:本題考查的是字符數組的初始化。字符數組即可以用{初始化列裹}來

初始化,也可以用一個字符串常量來初始化。但字符串常量系統會自動為其添加結

束標記、(T,故比實際長度要多一位,所以本題輸出為34,應該選擇C。

42、有以下程序#definef(x)(x'x)main(){intil,i2;il=f(8)/f(4);i2=f(4+4)/f(2+2);

printf("%d,%d\n”,ilj2);}程序運行后的輸出結果是

A、64,28

B、4,4

C、4,3

D、64,64

標準答案:4

知識點解析:本題考查的是帶參數的宏。宏替換與函數調用不同,前者是字面上

的,在編譯期間完成,后者是內容上的,在運行期間才進行。題目中第1條要替換

的語句il=(8)/f(4);展開后是il=(8*)/(4*4);結果使il=4.而第2條語句

i2=f(4+4)/f(2+2);展開后為i2=(4+4*4+4)/(2+2*2+2);結果使i2=24/8=3。故應該選

擇U

43、有以下程序main(){charal='M',a2='m';printf(H%c\n",(al,a2));}以下敘述

中正確的是

A、程序輸出大寫字母M

B、程序輸出小寫字母m

C、格式說明符不足,編譯出錯

D、程序運行時產生錯信息

標準答案:2

知識點常析:本題考查的是逗號表達式。因為整個逗號表達式的值為逗號表達式最

后一個于表達式的值,所以本題輸出的是a2的值,故應該選擇B。

44>有以4程序main(){unsignedinta;intb=-l;a=b;printf(M%u",a);}程序運行后的

輸出結果是

A、-1

B、65535

C、32767

D、-32768

標準答案:2

知識點編析:本題考核的知識點是無符號整型數據的簡單運用。程序中定義了一個

無符號整型變量a和一個整型變量b,并且給它賦初值為-1,整型在計算機中都以

二進制表示的,-I在二進制表示為1000000000000001,所以當表示為無符號整

數時轉換為十進制為32767,故最后輸出的無符號型a的值為32767。所以,4個

選項中選項B符合題意

45、有以4程序:#include<string.h>main(){char

str[][20]={"Hello","Beijing")*p=str;printf("%\n,',strlen(p+20));}程序運行后的輸出結

果是

A、0

B、5

C、7

D、20

標準答案:4

知識點解析:本題考核的知識點是二維數組的初始化及庫函數s〔rlcn()的應用。主

函數中定義了一個二維字符數組并初始化,初始化后的結果為str[0|="Hello%

str[l]="Beijing'\然后定義一個字符指針變量p并讓它指向數組的首地址,即指向

str[O],而在C語言中無論是一維還是多維數組,其元素在內存中都是順序存放

的,故p+20后指針指向所以stHen(P+20);返回的是中的字符串的長

度,即Beijing的長度為7,所以最后輸出的值為7,所以,4個選項中選項C符合

題意。

46、有以卜程序:#include<string.h>main(intargc,char*argv||){intiJen-0;

for(i=l;i<argc;i+=2)len+=strlen(argv[i]);printf("%d\nH,len);}經編譯鏈接后生成的可

執行文件是cx.cxc,若運行時輸入以下帶參數的命令行exabedcfgh3k44執行后輸

出的結果是

A、14

B、12

C、8

D、6

標準答案:8

知識點解析:本題考核的知識點是帶寥數的主函數的應用。主函數的第一個參數

argc為整形參數,記下從命令行輸入的參數的個數;第二個參數argv是一個字符

型的指針數組,它的每一個元素指向命令行輸入的參數字符數。在本例中argc的

值為5,argv[0]指向字符串“ex”,argv[l]指向參數字符串“abed",argv⑵指向字符

串“efg”,argv[3]指向參數字符串“h3”,argv[4]指向參數字符串“K44”。在main。函

數中,for循環執行了2次,當i-1時,len=O+strlen〔argv[1]),而其中

argv[l]=<4abcd,\故此時len的值為4;當i=3時,len=4+strlen(argv[3]),而其小

argv[3]-th3,\故此時len的值為6;當i=5時,退出循環,故最后輸出的len的住

為6。所以,4個選項中選項D符合題意。

47、在說明語句:中,標識符f代表的是

A、一個用于指向整型數據的指針變量

B、一個用于指向一維數組的行指針

C、一個用于指向函數的指針變量

D、一個返回值為指針型的函數名

標準答案:8

知識點解析:本題考核的知識點是指針作為函數返回值的定義方式。定義指向整型

元素的指針變量形式為:hat*指針變量名。定義指向整型一維數組的行指針形式

為:int(*指針變量名[長度],定義指向返回值為整型的函數的指針變量的形式為:

int(*函數名)(),定義返回值為指向整型的指針型函數的形式為:int*函數名(),本

題定義的是一個返回值為指針型的函數f()。所以,4個選項中D為所選。

48、有如下程序#inckide<stdio.h>main(){FILE旺pl;fpl;fopen("ftxt","w'');

fprintf(fpl,"abc")fclose(fpl);)若文本文件fl.txt中原看內容為:good,則運行以

上:程序后文件fl.Ml中的內容為

A、goodabc

abed

C、abc

D^abegood

標準答案:4

知識點解析:本題考核的知識點是操作文件的幾個基本函數。主函數中定義了一個

文件指針中1,然后通過fopen()函數,以寫的方式打開文件“fl.tx「,并讓指針印

1指向它,接著調用fptind。函數將“abc”寫到文件fpl所指的文件里,由于開始fpl

指向文件的“fl.tx「的開始位置,因此“abc”將把文件“fl.txt”里原來的內容“good”覆

蓋掉,故文件F.txt”里最后的內容為“ahc”,所以,4個選項中選項C符合題意°

49、下列關于C語言數據文件的敘述中正確的是

A、文件由ASCII碼字符序列組成,C語言只能讀寫文本文件

B、文件由二進制數據序列組成,C語言只能讀寫二進制文件

C、文件由記錄序列組成,可按數據的存放形式分為二進制文件和文本文件

D、文件由數據流形式組成,可按數據的存放形式分為二進制文件和文本文件

標準答案:8

知識點解析:本題考核的知識點是文件的基本概念。C語言可以讀寫二進制文件和

文本文件兩種,故選項A和選項B不正確;文件按數據的存放格式可分為二進制

文件和文本文件兩種,其中二進制文件中數據都是以二進制的形式存放,故選項C

不正確。所以,4個選項中選項D符合題意。

50、以下敘述中不正確的是

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

B、C語言中對二進制位的防問速度比文本文件快

C、C語言中,隨機讀寫方式不使用于文本文件

D、C語言中,順序讀寫方式不使用于二進制文件

標準答案:8

知識點解析:本題考核的知識點是文件的讀寫方式。在C語言中文本文件是以

ASCH碼形式存放的,每個字符占一個字節。由于數據在計算機中是以;進制形式

存放的,因此二進制文件中的數據可以直接讀出,而不需要像文本文件那樣把

ASCH碼轉換成二進制,因此速度較快。在文本文件中,數據以ASCII碼形式存放

的,用戶很難判定一個數據到底占幾個字節,所以不適合使用隨機讀寫方式。數據

以二進制形式存放,占有的字節數是固定的,所以可以進行隨機讀寫,當然也可以

順序讀寫。所以,D選項為所選。

四、公共基礎填空題(本題共5題,每題1.0分,共5

分。)

51、算法執行過程中所需要的基本運算次數稱為算法的o

標準答案:時間復雜度

知識點解析:算法在執行過程中所執行的基本運算的次數,也就是執行算法所需要

的計算工作量,稱為算法的時間復雜度。

52、數據的結構在計算機存儲空間中的存放形式稱為數據的存儲結構或物理

結構。

標準答案:邏輯

知識之解析:數據的邏輯結構在計算機存儲空間中的存放形式稱為數據的存儲結構

或物理結構。

53、數據流圖的類型有和事務型。

標準答案:變換型

知識點解析:典型的數據流出有兩種,印變換型和事務型。

54、在關系數據庫中,將數據表示成二維表,每一個二維表稱為o

標準答案:關系或關系表

知識點解析:在關系模型中,把數據看成一個二維表,每一個二維表稱為一個關

系.表中的每一列稱為一個屬性,相當于記錄中的一個數據項,對屬性的命名稱為

屬性名,表中的一行稱為一個元組,相當于記錄值。

55、在數據庫理論中,數據庫總體邏輯結構的改變,如修改數據模式、增加新的數

據類型、改變數據間聯系等,不需要相應修改應用程序,稱為o

標準答案:邏輯獨立性

知識點解析:數據庫總體邏輯結構改變,而不需要相應修改應用程序叫做邏輯獨立

性。

五、填空題(本題共12題,每題1.0分,共12分。)

56、以下程序運行后的輸出結果是[]。main(){intx=0210;

printf("%X\nH,x);}

標準答案:88

知識點解析:C語言規定,以0開頭的整型常量為八進制。另外,在primf()函數

中,%X表示以十六進制無符號形式輸出一個整數,且十六進制中的ABCDEF為

大寫字母。本題的輸出應該是八進制210的十六進制形式。將八進制轉換為十六進

制,可以先將其轉換為二進制。因為1位八進制表示3位二進制,4位二進制表示

1位十六進制。(210)8=(10001000)2=(88)16,故本題輸出為880

57、若有程序:main(){intij;scanq("i=%d,j=%d",&i,&j);printf("i=%d,j=%d\n",

ij);)要求給i賦10,給j賦20,則應該從鍵盤輸入【】。

標準答案:i=0,j=20

知識點解析:該函數的第一個參數是格式字符串,主要由兩類字符組成,一類是非

格式符要求原樣輸入,一類是格式符對應要輸入的變量,所以說本題中應該原樣輸

入口,戶,后面分別給變量0和20,所以說空格處應該填入i=0,戶20。

58、若有以下程序:main(){int,p,a=5;if(P=a!=O)printf("%d\n",p);else

printf("%d\n",p+2);}執行后輸出結果是【】。

標準答案:1

知識點解析:首先計算if語句后面的表達式,根據運算符的優先級可知,先算

“a!=0",該值為1,再把1賦值給p,結果為1(真),執行其后的printf語句,輸出

的值為1。

59、當運行以下程序時,輸入abed,程序的輸出結果是:【】。insert(charstr[])

{intii=strlen(str);while(i>0)(str[2*i]=str[i];str[2*-l]=,*,ji—;)printf("%s\nH,

str);)main(){charstr|40|;scanf(,,%s",sB);inscrt(str);}

標準答案:a*b*c*d,

知識點解析:在insert。函數,因為題目要求輸入的字符串為abed,所以執行完“i=

strlen(str);”后,i中存放的是字符串abed的長度值4。所以接F來的while循環會

循環4次,每次讓i減1,故4次循環中i的值依次為4、3、2、1。每次循環會執

行兩條語句str[2*i]=str[i];str[2*i-l]=,*\當i=4時為:str[8]=str[4];

str[7=^\o執行結果是將字符串abed末尾的結束符、(T復制到其下標值2倍的位

置,并在其前1位插入一個哼符。接下來i=3,執行str[6]=str[3];str[5]='*',執

行后會將字符串abed最后--個字符,d復制到其下標值2倍的位置,并在其前1位

插入一個,*,字符。依次類推,直到i=1,執行sir⑵二將字符

tb,往后移動了1位,并在原位置插入,字符。所以,循環結束后,字符串sir會

變為a*b*c*d*。這就是程序的輸出結果。

60、以下程序運行后的輸出結果是[1omain(){inta[4][4]={{1,2,3,4},{5,6,

7,8),{11,12,13,14},{15,16,17,18}};inti=0,j=0,s=0;while(i++<4)

{if(i==2||=4)continue;j=0;do{s+=a|i]|j|;j++;)while(j<4);}

Printf(H%d\n",s);)

標準答案:92

知識點解析:主函數中首先定義了一個4行4列的二維數組,然后執行一個while

循環,該循環中又嵌套了一個do-while循環。現看while循環,該循環通過i++的

值來判斷是否結束循環當i++的值為4的時候結束循環,當i=0時,執行while的

循環體,顯然if語句條件不滿足不執行,接著讓i=0,然后執行do-while循環體,

我們不難看出do-whilo循環的功能是將第i+1行的所有元素加起來,所以這時s的

值為s=a[l][O]+a[l][l]+a[l]⑵+a[l][3)=26,當i=l時,i+l=2,uf后面括號里的表達

式的值為真執行后面的continue語句,結束該次循環;當i=2時,i加1變為3,把

第3+1行的所有元素的加到s上,此時s=s+a⑵⑼-a⑵⑴+a⑵⑵+a⑵[3]=92,當

i=3時,3+1=4,if后面括號里的表達式的值為真執行后面的continue語句,結束該

次循環,當i=3時,if后面括號里的表達式的值為真執行后面的conlinue語句,結

束該次循環當i=4時while循環結束,所以最后輸Hi的s的值為92。

61、己定義定arch='$';inti=l,j;,執行j=!ch&&ii++以后,i的值為[】。

標準答案:1

知識點解析?:本題中的ch是一個字符變量,其初始值為芍,(非0值即為真),所

以!ch的結果為假,此時&&右邊的i十十被“短路,、,即不會被訂算。由此可見,i的

值不會改變,故本題應該填1。

62、以下程序運行后的瑜出結果是。mam(){chara[]="12345678917:p;int

i=0;p=a;while(*p){if(i%2=0)p++;i++;}puts(A);}

標準答案:*2*4*6*8*

知識點解析:程序中定義了一個字符數組a,并初始化為123456789,接著定義了

一個指針p并讓它指向數組a,緊接著執行了一個while循環,此循環的作用是:

當i為偶數時,將"*''賦給a[i],p指向數組末尾,循環結束,此時數組中a[0]、

a⑵、a[4]、a[6]和a[用的值都為“*”.所以最后調用puts。函數輸出的a的值為

*2*4*6*8*

63、以下程序運行后的輸出結果是[]omain(){inti,n[]=(0,0,0,0,0);

for(i=l;i<=4;i++){n[i]=n[i-l]*2+l;printfi["%d",n[i]);)}

標準答案:13715

知識點解析:本題中,定義了個整型數組n并初始化,在for循環語句中,再對數

組中各元素重新賦值。循環執行第一次時,n[l]=n[0]*2+l=0+l=l,primf函數輸出

1,然后i的值加1,比較iV=4成立,繼續執行循環體語句,相應輸出3、7、

15,直至i<=4不成立,退出循環。所以最后輸出為1、3、7、150

64、以下程序運行后的輸出結果是[1ostructNODE{intnum;stmetNODE

*next;};main(){structNODEs[3]=({I,{2,{3,'\0'}),*p,*q,

*r;intsum=0;s[0].next=s+l;s[l].next=s+2;s[2].next=s;p=sq=p->

next;r=q->next;sum+=q->next->num;sum+=r->next->next->num;

printf("%d\n",sum);)

標準答案:5

知識點解析:主函數首先聲明了一個結點數組s[3],并分別初始化其成員num為

1、2、3,而成員next全部被初始化為、(T也就是0。下面又用三條語句

s[0].ncxt=s+l;s[l].ncxt=s+2;s[2].ncxt=s;分別將三個結點指向其后面一個結點,

而最后一個結點指向第1個結點,構造出一條單向循環鏈表。接下來用結點指針

p=s即讓其指向s[0],然后讓q=p->next,即指向了s[l],r=q->next即讓r指向

s[2],然后讓一個累計變量sum累加q->next->num和r->ncxt->next->nm,因

為q指向s[l]所以它的next指針指向的是s[2],故第1次累加的是s[2].num=3,而

r指向的是s⑵所以它的next是s[0],s[0]的next指向s[l],故第2次累加的是

s[l].num=2o所以程序最終輸出結果為5。

65、下面程序的運行結果是[]。intf(inta[],intn){if(n>l)retuma[0]+f(&a[l],n-

1);elsereturna[0];)main(){intaa[3]=[1?2,3},s;s=f(&aa[0]?3);

printf("%d\n",s);)

標準答案:6

知識點解析?:經過分析將遞歸函數寫成其數學表達式如下:

f(&a,n)=a⑼+f(&a[l],n-I)n>l

f(&a.n)=a[0]。本題中定義了一個長度為3的數組aa并初始化。接著

調用遞歸函數f,由上面的數學表達式以計算其返回值s=l+2+3=6,所以空格處應

該填6。

66、以下程序中函數f的功能是在數組x的n個數(假定n個數互不相同)小找出最

大最小數,將其中最小的數與第一個數對換,把最大的數與最后一個數對換。請填

空。#include<stdio.h>voidf(intx[],intn){intp0?pl,i,j?t,m;i=j=x|O];

pO=pl=O;for(m=O:m<n;m++){if(x[m]>i){i=x[m];p0=m;)elseif(x[m]<j)

{j=x[m]:pi=m:))t=x[pO]:x[pO]=x[n-l];x[n-l]=t;t=x[pl]:x[pl]=[1;[1=t}

main())inta|10],u;for(u=0;u<10;u++)scamp(n%d",&a|u]);f(a,10);

for(u=0;u<10;u++)printf("%d",a[u]);ptintf("\nH);}

標準答案:x[O]x[O]

知識點解析:根據題意,f()函數要“將其中最小的數與第一個數對換,把最大的數

與最后一個數對換“,而填空處的上一行語句正是使用交換算法,將下標為pO的元

素與數組x的最后一個元素(n個元素的數組,其最后一個元素的下標為n-1)交換。

所以不難得知,填空所在行的語句是要將下標為pl的元素與數組x的第1個元素

交換。故兩個空都應該填x[0]。

67>以下程序中,函數SumColumMin的功能足:求出M行N列二維數組每列元

素中的最小值,并計算它們的和值。和值通過形參傳回主函數輸出。請填空。

#defineM2#defineN4voidSumColumMm(inta[M][N],int*sum){inti,j,k,s=O;

for(i=0;i<N;i++){k=0;for(j=l;j<M;j++)if(a[k][i]>a[j][i])k=j;s+=[];)

[]=s;}main(){intx[M][n])={3;,5,L4,1,8,3},s;

SumC01umMm([]);ptintf("%d\nu,s);)

標準答案:a[k][i]*sumx,&s

知識點解析:本題定義了一個函數SumColumMin(),該函數有兩個參數,第一個

參數為數組名,第二個參數為一個指針,用來訪問存放數組中每列元素中的最小值

的存儲空間的變量。所以在主函數中調用SumColunMin。函數,應該將數組x和

sam作為實參傳給SumColumMin。中的形參,故第20個空格處應該填x,&s。在

SumColumMin。函數中用了兩重循環,用N記錄數組的列,M記錄數組的行。內

循環共循環了M次,每循環一次將a[k][i]比較(當k=0時,a[k皿第一行第一

列的值,然后將該值依次和第一列中的每個值比較,讓a[k][i]表示較小的值,那么

比較到最后一個元素后a[k][i]就是改列中最小元素的值),讓k記錄較小值元素的

行下標,這樣通過M次循環得到每列中的最小元素,然后退出內循環,繼續執行

該次外循環里的其他語句,即將剛求得第i列的最小值a[k][i]累加到s中,故第一

個空格處應該填最后外循環共循環N次,將每列得最小值累加到s中,退

出循環,然后讓指針sum所指向得存儲空間得值為s故第二個空格處應該填

*sum。

因家二級(C語言)筆試模擬試卷第2

一、公共基礎選擇題(本題共70題,每題7.0分,共

70分。)

1、算法的時間復雜度是指

A、執行算法程序所需要的時間

B、算法程序的長度

C、算法執行過程中所需要的基本運算次數

D、算法程序中的指令條數

標準答案:C

知識點解析:算法的復雜度主要包括算法的時間復雜度和空間復雜度。所謂算法

的時間復雜度是指執行算法所需要的計算工作量,即算法執行過程中所需要的基本

運算的次數;算法的空間復雜度一般是指執行這個算法所需要的內存空間。

2、常采用的兩種存儲結構是()。

A、順序存儲結構和鏈式存儲結構

B、散列方法和索引方式

C、鏈表存儲結構和數組

D、線性存儲結構和非線性存儲結構

標準答案:A

知識點解析:線性表的存儲通常要用兩種存儲結構:順序存儲結構和鏈式存儲結

構。

3、下列敘述中,不屬于軟件需求規格說明書的作用的是

A、便于用戶、開發人員進行理解和交流

B、反映出用戶問題的結構,可以作為軟件開發工作的基礎和依據

C、作為確認測試和驗收的依據

D、便于開發人員進行需求分析

標準答案:D

知識點解析:軟件需求規格說明書(SRS,SoftwareRequirementSpecification)是需求

分析階段的最后成果,是軟件開發中的重要文檔之一。它具有以下兒個方面的作

用:①便于用戶、開發人員進行理解和交流;②反熾出用戶問題的結構,可以作為軟

件開發工作的基礎和依據;③作為確認測試和驗收的依據。

4、線性表的鏈式存儲結構是一種的存儲結構。

A、隨機存儲

B、順序存儲

C、索引結構

D、散列結構

標準答案:2

知識點解析:線性表的鏈式存儲結構中的每一個存儲結點不僅含有一個數據元素,

還包括指針,每一個指針指向一個與本結點有邏輯關系的結點。此類存儲方式屬于

順序存儲。

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

A、黑箱(盒)測試方法完全不考慮程序的內部結構和內部特征

B、黑箱(盒)測試方法主要考慮程序的內部結構和內部特征

C、白箱(盒)測試不考慮程序內部的邏輯結構

D、上述3種說法都不對

標準答案:1

知識點解析:黑箱測試方法完全不

溫馨提示

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

評論

0/150

提交評論