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

下載本文檔

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

文檔簡介

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

卷第1套

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

1、下面對對象概念描述正確的是()。

A、對象間的通信靠消息傳遞

B、對象是名字和方法的封裝體

C、任何對象必須有繼承性

D、對象的多態性是指一個對象有多個操作

標準答案:A

知識點解析:對象是面向對象方法中最基本的概念。操作描述了對象執行的功能,

通過消息傳遞,還可以為其他對象使用。操作過程是被封裝在對象中,用戶看不

到,稱之為對象的封裝性v對象的多態性是指同一個操作可以是不同對象的行為.

不是所有的對象都必須有繼承性。

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

結構為

A、線性結構

B、循環隊列

C、循環鏈表

D、非線性結構

標準答案:A

知識點解析:由結點之間的關系R={(f,a),(d,b),(e,d).(c,e),(a,c)}可以得到,該數據結

構為:“f-a-c-e-d-b”。由此可知結點f沒有前驅,結點b沒有后繼結點,并且其它的

結點只有一個前驅結點和一個后繼結點,所以該數據結構為線性結構。所以應選A

選項。

3、以下程序段中.與語句k=a>b?(b>e?l:0):0;功能相同的是()。

A、if((a>b)II(b>c))k=l;elsek=0:

if((a>b)&&(b>c))k=1;elsek=0;

C>if(a<=b)k=0;elseif(b<=c)k=l;

D、if(a>b)k=l;elseif(b>c)k=l;elsek=0;

標準答案:B

知識點解析:條件表達式的含義是,如果表達式1成立,結果為表達式2的值,如

果不成立,則為表達式3的值。所以題干中k的值這樣取值:如果a>b且b>c,k

值結果為1,如果a>b且bb與b>c中只要有一個條件不成立,k的值就為0,所以

選擇B選項。

4、以下各項中,當x為大于I的奇數時,值為0的表達式是()。

A、x%2==0

B、x/2

C、x%2!=0

D、x%2==1

標準答案:A

知識點解析:當x為大于1的奇數時,x%2==。表達式為3所以答案為A。

5、在學生管理的關系數據庫中,存取一個學生信息的數據單位是

A、文件

B、數據庫

C、字段

D、記錄

標準答案:D

知識點解析:本題考查關系數據庫中,數據單位的相關概念。文件是指存儲在外部

介質上的數據的集合v數據庫是存儲在計算機存儲設備上,結構化的相關數據集

合。它不僅包括描述事物的數據本身,而且還包括相關事物之間的聯系。在數據庫

中,表的“行”稱為“記錄”,“列”稱為“字段”。由此可得,題中存取一個學生信息的

數據單位為記錄。

6、程序中對fun函數有如下說明void%。。;此說明的含義是

A、fun函數無返回值

B、fun函數的返回值可以是任意的數據類型

C、fun函數的返回值是無值型的指針類型

D、指針fun指向一個函數,該函數無返同值

標準答案:A

知識點解析:本題主要考察函數的聲明,voidfun()表示fun函數沒有輸入參數,函

數返回void表示函數無返回值。

7、有以下程序#includemain(){charch[]="uvwxyz",*pc;pc=ch;printf(n%c\n",

*(pc+5));}程序運行后的輸出結果是

A、z

B、0

C、元素ch⑸的地址

D、字符y的地址

標準答案:A

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

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

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

8、關于結構體類型的敘述中正確的是()。

A、結構體類型中各個成分的類型必須是一致的

B、在定義結構體類型時,編譯程序就為它分配了內存空間

C、結構體類型中的成分只能是C語言中預先定義的基本數據類型

D、一個結構體類型可以由多個稱為成員(或域)的成分組成

標準答案:D

知識點解析:C語言中的結構體類型,它是由若干“成員”組成,每一個成員可以是

一個基本數據類型或者是一個構造類型。在說明和使用之前先定義它,也就是構造

它。

9、下列語句組中,正確的是

A^charts;s="01ympic";

B、chars[7J;s="Olympic";

C、charts;s={"Olympic"};

D、chars[7];s={"Olympic");

標準答案:A

知識點解析:選項A中定義了指針變量s,通過賦值語句保存字符串常量的地址,

而字符數組絕對不能賦值,而只能初始化或者輸入。

10、以下結構體說明和變量定義中,正確的是

A、typedefstructabc{intn;doublem;)ABC;ABCx,y;

structabc{intn;doublem);structabcx,y;

C、structABC{intn;doublem;)structABCx,y;

D、structabc{intn;doublem;};abcx,y;

標準答案:A

知識點解析:選項B)中結構體定義中每個成員后面的分號都不能省略,doublem

后沒分號,因此錯誤。選項C)結構體類型定義完畢后,}外沒加分號。選項D)中

定義變量要加I?關鍵字"ruetc

11、若有定義語句:imx=10;則表達式x-=x+x的值為

A、-20

B、0

C、-10

D、10

標準答案:C

知識點解析:表達式x?=x+x等價于x=x?(x+x),整型變量x的初始值等于10,計算

題目所求表達式的值時,首先計算x與x的和等于20,然后再用10減去20等于-

10,得到該表達式的值。

12、設有定義:intx=2;以下表達式中,值不為6的是

A、2*x,x+=2

B、x++,2*x

C、x*=(i+x)

D^x*=x+l

標準答案:A

知識點解析:本題考查逗號表達式。逗號表達式的求解過程是:先求解表達式1,

再求解表達式2,整個逗號表達式的值是表達式2的值,因此,選項A)中值為4:

選項B)中,值為6。選項C)中x*=x+l等價于x=x*(x+l),所以等于6;選項D)與

選項。等價,結果也為6。

13、以下敘述中正確的是

A、函數的類型不能是指針類型

B、函數的形參類型不能是指針類型

C、基類型不同的指針變量可以相互混用

D、設有指針變量為“double*p",則“p+1”將指針p移動8個字節

標準答案:D

知識點解析:在對指針進行加、減算術運算時,數字1表示1個存儲單元的長度,

而double類型數據在內存中占8個字節,因此移動一次移動8個字節。其他三個

都不正確。

14,有以下函數intfun(char*x,char*Y){intn=O:while((*x=*Y)&&

*x!=,\0,){x++;y++;n++;)retumn;)函數的功能是

A、查找x和y所指字符串中是否有'O'

B、統計x和Y所指字符串中最前面連續相同的字符個數

C、將y所指字符串賦給x所指存儲空間

D、統計x和y所指字符串中相同的字符個數

標準答案:B

知識點解析:在while循環中的判斷表達式為(*x二*y)&&*x!=\(r,所以只要字符

串x與y的當前字符不相等時,循環就結束。

15、以下敘述中錯誤的是

A、可以用typedef將已存在的類型用一個新的名字來代表

B、可以通日typedef增加新的類型

C、用typedef定義新的類型名后,原有類型名仍有效

D、用typedef可以為各種類型起別名,但不能為變量起別名

標準答案:B

知識點解析?:C語言允許用typedef說明一種新類型名。typedef類型名標識符:其

中“類型名,,必須是在此語句之前已定義的類型標識符;“標識符,,是一個用戶定義標

識符,用作新的類型名:typedef語句的作用僅僅是用“標識符”來代表已存在的“類

型名“,并未產生新的數據類型,原有類型名依然有效。

16、若變量己正確定義,在if(W)prim^r%d\n”,k);中,以下不可替代W的是

A、ch=getchar()

a==b+c

C、a<>b+c

D^a++

標準答案:C

知識點解析:在if()語句的括號是一個合法的C語言表達式即可,如果表達式的值

為0,則不執行if語句,否則執行if語句,而在選項C)中,符號<>不是C語言

的合法運算符,如果要表達a大于或小于b+c可用a!=b+c或(a>b+c)||(aVb+c)來表

達,而不能使用a〈>b+c。所以它不是一個合法的C語言表達式。

17、以下與函數fseek(fp,OL,SEEK_SET)有相同作用的是

A、teot(tp)

B、ftell(fp)

C、fgetc(fp)

D、rewind(fp)

標準答案:D

知識點解析?:本題主要考查文件系10函數的使用,fseek函數用于設置文件指針的

位置,feof函數用于判斷是否已經到了文件結束,他11函數返回文件指針的當前位

置,fgetc從文件讀取一個字符,rewind函數將文件指針重新指向文件開始。題目

當中fseek(fp,OL,SEEK_SET)表示把文件指針移動到文件的開始位置0,和

rewind函數功能一致。

18、若已建立以下鏈表結構,指針P、S分別指向如圖所示結點

daunext&匕nextdaunext

則不能將S所指節點插入到鏈表末尾

的語句組是

A、s->next=,\p=p->next;p->next=s;

p=p->next;s->next=p->next=s;

C,p=p->ncxt;s->next=p->next;P->next=s;

D、p=(*p).next;(*S).next=(*p).next;(*p).next=s;

標準答案:B

知識點解析:選項A)中首先p后移,s的后繼指針指向p,p的后繼指向s,在s和

最后結點之間形成了圓圈,無法完成題中的操作。

19、以下敘述中錯誤的是

A、gets函數用于從終端讀入字符串

B、getchar函數用于從磁盤文件讀入字符

C、fputs函數用于把字符串輸出到文件

D、fwrite函數用于以二進制形式輸出數據到文件

標準答案:B

知識點解析:本題考查的是輸入輸出函數的使用,gets和getchar函數用于從標準

輸入設備終端讀入字符串和字符,并非從磁盤文件讀入,fputs用于把字符串輸出

到文件,fwrile用于以二進制形式輸出數據到文件。

20、以下.敘述中正確的是

A、循環發生嵌套時,最多只能兩層

三種循環for,while,do-while可以互相嵌套

C、循環嵌套時,如果不進行縮進形式書寫代碼,則會有編譯錯誤

D、for語句的圓括號中的表達式不能都省略掉

標準答案:B

知識點解析:A選項中,循環發生嵌套時,沒有規定層數;C選項中,循環嵌套

時,書寫代碼時沒有要求必須縮進;D選項中,for語句的圓括號中的表達式都可

以省略掉。因此B選項正確。

21、程序中已構成如下圖所示的不帶頭結點的單向鏈表結構,指針變量s、p、q均

己正確定義,并用于指向鏈表結點,指針變量s總是作為頭指針指向鏈表的第一個

bCNULL

結點。若有以下

程序段:q=s;s=s—>next;p=s;while(p—>next)p=p—>next;p—>next=q;

q->next=NULL;該程序段實現的功能是

A、尾結點成為首結點

首結點成為尾結點

C、胴除首結點

D、刪除尾結點

標準答案:B

知識點解析:分析程序可知,程序段首先讓q指向鏈表的首結點,s指向鏈表的第

二結點,p此時指向鏈表的第二個結點。然后在while循環中,當p的后繼結點非

空時,讓p指向鏈表的最后一個結點,退出循環。然后讓尾結點指向首結點,并使

首結點的后繼結點為NULLo所以最終實現鏈表的首結點成為尾結點。

22、有以下程序#inckide<stdio.h>#defineSUB(a)(a)-(a)main(){int

a=2,b=3.c=5.d:d=SUB(a+b)*c:printf(',%d\n".d):)程序運行后的輸出結果是

A、-12

B、0

C、10

D、-20

標準答案:D

知識點解析?:本題主要考查的是宏替換,在程序中執行d=sub(a+b)*c這條語句

時,首先要進行宏替換,依據宏SUB(a)的定義可知,上面這條語句替換為

d=(a+b)-(a+b)*c,因為乘法的優先級比減法的優先級高,所以先進行乘法運算,即

d=5-5*5=-20o

23、有以下程序:#include<stdio.h>voidfun(char*c){while(*c){if(*c>

=,a,&&*c<=,z,)*c=*c-(,a'-,A,);c++;}}voidmain(){chars[81];

gets(s);fun(s);puts(s);)當執行程序時從鍵盤上輸入HelloBeijingV回車>,則程序

的輸出結果是

A、HELLOBEIJING

HelloBeijing

C、helloBeijing

D、hELLOBeijing

標準答案:A

知識點解析:子函數fun的功能是把小寫字母轉換成大寫字母,所以程序的輸出結

果為選項A。

24、若有定義typedefintT[10];Ta[20];則與上述定義完全等價的說明語句是

()O

A、inta[20][10];

B、inta[20];

C、inta[10J;

Dsinta[IO][2O|;

標準答案:A

知識點解析:typedef為類型定義符,作用是用“新類型名“代替“原類型名”,即為現

有類型定義容易記憶的類型名。typedef能夠隱藏復合類型,比如指針和數組,定

義語句“typedefintT[10];”表明類型T就代表了具有10個元素的整型數組,所以語

句“Ta[20];”則表示定義了具有20個元素并且每個元素都為一個有10個元素的一維

數組,所以答案選A。

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

A、文件由一系列數據依次排列組成,只能構成二進制文件

B、文件由結構序列組成,可以構成二進制文件或文本文件

C、文件由數據序列組成,可以構成二進制文件或文本文件

D、文件由字符序列組成,其類型只能是文本文件

標準答案:C

知識點解析:本題考查文件的概念,文件是由數據序列組成,可以構成二進制文件

或文本文件,所以答案為C選項。

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

卷第2套

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

1、以下四個程序中,完全正確的是

A、#includemain();main(){/*/Programming/*/printf("programming!\nw);)

B、#include{/*programming*/printf("programming!\n");)

C、#includemain()main(){/*/*programming*/*/prinlf("programming!\n");}

D^include{/*programming*/printCprogramming!\n");}

標準答案:B

知識點解析:在選項A中,main()函數后而的分號是錯誤的,C語言在函數名后而

不能有分號。在C語言中注釋內容必須放住"/*和“*/”之間,“/*”和“*/”必須

成對出現,按語法規定在注釋之間不可以再嵌套"/*和“*/"。在選項C的程序段

中注釋語句之間有嵌套:所以選項C不正確。C語言用include命令行米實現文件

包含的功能。#include命令行的形式為:/include“文件名”,所以在選項D中

include前面少了一個#符號,因而選項D不正確。

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

A、存儲空間連續的數據結構一定是線性結構

B、存儲空間不連續的數據結構一定是非線性結構

C、沒有根結點的非空數據結構一定是線性結構

D、具有兩個根結點的數據結構一定是非線性結構

標準答案:D

知識點解析:判斷一個非空的數據結構是否為線性結構必須滿足以下兩個條件:

①有且只有一個根結點;②每一個結點最多有一個前件,也最多有一個后件。根

據這兩個條件,可知選預A)、B)和C)都不能判定是否是線性結構,選項D)

正確,答案選D)。

3、以下程序段的輸出結果是()。char*s=n\\141\141\abc\t":pirntf("%d\

n",strlen(s));

A、8

B、9

C>10

D、11

標準答案:R

知識點解析:本程序實際上是計算字符串\\141\141\abc\t的長度,里面包括

三個轉義字符:“\\",各占一個字節,再加上其余的6個字節,

共計長度為9個字節。

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

應用軟件的是

A、學生成績管理系統

B、C語言編譯程序

C、UNIX操作系統

D、數據庫管理系統

標準答案:A

知識點解析:學生成績管理系統為應用軟件。

5、軟件生命周期中的活動不包括()。

A、市場調研

B、需求分析

C、軟件測試

D、軟件維護

標準答案:A

知識點解析:軟件生命周期可以分為軟件定義、軟件開發與軟件運行維護三個階

段。主要活動階段是:可行性研究與計劃階段,需求分析,軟件設計,軟件實現,

軟件測試,運行和維護,所以選擇A。

6、軟件需求規格說明書的作用不包括

A、軟件驗收的依據

B、用戶與開發人員對軟件要做什么的共同理解

C、軟件設計的依據

D、軟件可行性研究的依據

標準答案:D

知識點解析:軟件規格說明書主要有三個作用:①用戶和軟件開發人員之間的合

同;②開發人員進行設計和編程的依據;③軟件工程項目驗收的依據。

7、下面的程序在編譯時產生錯誤,其出錯原因是()“includemain(){intl_case;

floatprintF;printf(”請輸入2個數:");scanf(H%d%f',&l_case,&printF);

printf("%d%f\n",Lease,printF);}

A、定義語句出錯,lease不能作為變量名

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

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

D^定義語句無錯,primf不能輸出Lease的值

標準答案:A

知識點解析:C語言變量名可由數字,字母,下劃線構成,但首字符不能為數字。

8、有以下程序段:#includeintj;floaty;charnaine[50];seanf("%2d%f%s",

&j,&y,name);當執行上述程序段時,從鍵盤上輸入555667777abc后,Y的值

為()。

A、566.0

B、55566.0

C、7777.0

D、566777.0

標準答案:A

知識點解析:它是格式輸入函數,即按用戶指定的格式從鍵盤上把數據輸入到指定

的變量之中。其中的格式命令可以說明最大域寬。在百分號(%)與格式碼之間的整

數用于限制從對應域讀人的最大字符數。所以j的值為55,y的值為566.0,字符

數組name為7777abc。

9、以下程序段完全正確的是

A>intk,*p=&k;scanf(,,%d,\p);

,,,,

int*p;scanf(%dJp);

C>int*p:scanf(,,%d,,i&p);

D>intk,*p;*p=&k;scanf("%d'',p);

標準答案:A

知識點解析:選項B沒有對指針進行初始化,無效指針。選項C錯在沒有對指針

進行初始化,無效指針,并且在scanf("%d”,&p)中無需再進行取地址操作。選項

D,語句*p=&k;的左端*p是指針所指內存空間的值,&k是地址,應為p=&k。

1。、把以下四個表達式用作計語句的控制表達式時,有一個選項與其他三個選項

含義不同,這個選項是

A、k%2

B、k%2==l

C、(k%2)!=0

D、!k%2==l

標準答案:D

知識點解析:本題考查if語句和if語句構成的選擇。選項A表示k除以2的余

數,如果余數為1則if成立,否則不能成立,即if判斷k是否為奇數;選項B是

判斷k除以2的余數是否等于1,函數和選項A相同;選項C表示k除以2的余數

不為0,和選項A一致;選項D中,!運算符優先級高于%預算符,先計算!k,然

后再取余數,并判斷余數是否等于1。

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

A、C語言程序總是從main函數開始執行

B、C語言程序總是從最前面的函數開始執行

C、C語言程序中main函數必須放在程序的開始位置

D、C語言程序所調用的函數必須放在main函數的前面

標準答案:A

知識點解析:C語言中main函數的位置可以任意,而且不管main函數放在哪里,

程序的執行總是從main函數開始,并在main函數結束,答案選A。

12、數據庫管理系統是()。

A、操作系統的一部分

B、在操作系統支持下的系統軟件

C、一種編譯系統

D、一種操作系統

標準答案:B

知識點解析:數據庫管理系統是數據庫的機構,它是一種系統軟件,負責數據庫中

數據組織、數據操縱、數據維護、控制及保護和數據服務等。是一種在操作系統之

上的系統軟件。

13、有以下程序main(){inti=5;do{if(i%3=l)if(i%5==2){printf(”*%d”,i);

break:)i++:)while(i!=0);printf("\n”);)程序的運行結臬是

A、*3*5

B、*5

C、*7

D、*2*6

標準答案:C

知識點解析:由于循環變量i的初值等于5,所以第一、二次進入do…while循環

語句時,條件語句if(i%3=l),if(i%5=2){printf("*%d”,i);break;}不執行,只

執行i++語句。當i=7時,滿足條件語句if(i%3=l),if(i%5==2){primf(”*%d”,

i);break:},所以輸出*7,結束循環。

14、有以下程序#includcdoublef(doublex);main(){doublea=0;inti;for(i=0;i<

30;i+=10)a+=f((double)i);printf("%3.0f\n",a);)doublef(doublex)(return

x*x+l;}程序運行后的輸出結果是

A、500

B、401

C、503

D^1404

標準答案:C

知識點解析:本題重點考察函數的定義和調用,第一次循環,a=0,仁0;返回值

a=0*0+l=l;第二次循環,a=Li=10;返回值a=10*10+l+l=102;第三次循環,

a=102,i=20;返回值a=20*20+l+102=503;第四次循環,a=503,i=30;不符合

i<30,跳出循環,最后結果輸出a=503。

15、以下不合法的字符常量是()。

A、'\018'

B、

C、Z

D、,\xcc,

標準答案:A

知識點解析:\dckT表示卜3位八進制數代表的字符,不能出現8,所以選項A)錯

誤;、表示雙引號符,選項B)正確;’N表示反斜線符選項C)正確;Zee,

表示由兩位十六進制數cc所代表的字符,選項D)正確,所以答案選A)。

16、下列程序段中完全正確的是()。

A、int*p;scanf(,'%d',?&p);

B、int*p;scanf("%d",p);

C、intk,*p=&k;scanf("%d",p);

Dsintk,*p;*p=&k;scanf("%d",p);

標準答案:C

知識點解析:A選項中錯在沒有對指針進行初始化,無效指針,并且在scanf("%

d",&p)中無須再進行取地址操作;B選項中沒有對指針進行初始化,無效指針;

D選項中語句*p=&k;的左端*p是指針所指內存空間的值,&k是地址,應為

p=&koC選項正確。

17、若有定義:doublea=22;inti=0,k=18;則不符合C語言規定的賦值語句

A、i=(a+k)V=(i+k);

B、a=a++,i++;

C、i=a%ll;

D、i=!a;

標準答案:C

知識點解析:在C語言中,求余運算符的運算對象只能是整型,在題目中,變量a

是一個雙精型實型變量。

18、以下選項中,不能作為合法常量的是

A、1.234c04

B、1.234e0.4

C、1.234e+4

D、1.234c0

標準答案:B

知識點解析:本題考查C語言中的常量,C語言中字母e或E之前必須有數字,且

e或E后面的指數必須為整數。選項B中字母。后面是浮點數,錯誤,其他選項都

是正確的常量。

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

A、_1

B、AaBc

C、a_b

D、a-b

標準答案:D

知識點解析:本題考查用戶標識符,C語言中,用戶標識符只能由字母、下劃線和

數組組成,旦必須以字母或者下劃線開始。選項A、B)和C)都是正確的,選項D

中的case是C語言關鍵字,不能作為用戶標識符,是錯誤的。

20、下面選項中關于編譯預處理的敘述正確的是

A、凡是以#號開頭的行,都被稱為編譯預處理命令行

B、預處理命令行必須使用分號結尾

C、預處理命令行不能出現在程序的最后一行

D、預處理命令行的作用域是到最近的函數結束處

標準答案:A

知識點解析:在C語言中,凡是以“#”號開頭的行,都稱為編譯預處理命令行。這

些預處理命令組成的預處理命令行必須在一行的開頭以飛”號殲始,每行的末尾不

能用”號結束,以區別于C語句、定義和說明語句。根據需要,命令行可以出

現在程序的任何一行的開始部位,其作用一直持續到源義件的末尾。

21、以下敘述中正確的是

A、在包含文件中,不得再包含其他文件

B、include命令行不能出現在程序文件的中間

C、在一個程序中,允許使用任意數量的include命令行

D、雖然包含文件被修改了,包含該文件的源程序也可以不重新進行編譯和連接

標準答案:C

知識點解析:include文件包含命令,使用時應注意以下5個規則:①包含文件

的#加11^命令行通常應書寫在所用源程序文件的開頭,故有時也把包含文件稱作

“頭文件頭文件名可以由用戶指定,其后綴不一定用“.h”。②包含文件中,

般包含有一些公用的。#define命令行、外部說明或對(庫)函數的原型說明。⑧當

包含文件修改后,對包含該文件的源程序必須重新進行編譯連接。④在一個程序

中,允許有任意多j#include命令行。⑤在包含文件中還可以包含其他文件。

22,有以下程序main(){intx=l,y=0;if(!x)y++;elseif(x==O)if(x)y+=2:else

y+=3;printf("%d\n",y);}程序運行后的輸出結果是

A、2

B、0

C、1

D、3

標準答案:B

知識點解析:x=l,if和elseif的條件都不滿足,故y值不改變輸出。

23、fun函數的功能是:通過鍵盤輸入給x所指的整型數組所有元素賦值。在下劃

線處應填寫的是#include#defineN5Voidfun(intx[N]){intm;for(m=N—1;m>

=0;m一一)scanf("%cT,—);}

A、x+m

B、x[m+1]

C、x+(m++)

D、x[++m]

標準答案:A

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

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

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

項C是地址,但是選項C的m值會++自增,然后for循環里面又m一自減,會

導致死循環,不滿足要求,選項A正確。

24、有以下程序段inta,b,c;a=10;b=50;c=30;if(a>b)a=b,b=c;c=a;

printf("a=%db=%dc=%d\n",a,b,c);程序的輸出結果是

A、a=10b=50c=30

B、a=10b=30c=10

C、a=10b=50c=10

D、a=50b=30c=50

標準答案:c

知識點腦析:本題的程序段首先定義三個整型變量a。boc,并且其初始值分別等

于10,50,30.然后判斷a>b是否成立,如果條件成立,則把b的值賦給a,把c

的值賦給b。由a和b的初始值可知,此條件表達式不成立,所以a和b的值保持

不變。再執行下一條語句,把a的值賦給c,所以c的當前值等于10。最后由輸出

語句輸出變量a,b,cP勺當前值,分別為10,50,10o

25、設有以卜代碼do{while(條件表達式I)循環體A;)while(條件表達式2);

while(條件表達式1){do{循環體B;}while(條件表達式2);}其中,循環體A與

循環體B相同,以下敘述正確的是()。

A、循環體A與循環體B的執行次數相同

B、循環體A比循環體B的執行次數多一次

C、循環體A比循環體B的執行次數少一次

D、循環體A與循環體B的執行次數不確定

標準答案:A

知識點解析:考查do-wh仇和while循環語句的執行過程。若條件表達式1的值為

假,則循環體A和B均一次都不執行;若只有條件表達式2的值為假,則循環體

A和B均執行一次;若條件表達式1、2的值均為真,則循環體A和B會一直執行

直到其中一個條件表達式的值為假,這之前兩個循環體執行的次數也是相同的;由

此答案選A。

26、有以下程序:#inclnde<stdio.h>inth=2:intfun(int*k){h=*k+h:

retum(b);)main(){inta[10]={1,2>3,4,5,6,7,8},i;for(i=2;i<4;

i++){b=fun(&a[i])+b;printf(%d.t,b);)printff'W'');}程序運行后的輸出結果

A、810

B、1028

C、1012

D、1016

標準答案:B

知識點解析:i=2時,fim(&a⑵)返回值是b_b+a"L2+3=5bb+b:5+5=10;i=3

時,fun(&a[3])返回值是b_b+a⑶=10+4=14,b=b+b=14+14=28<)

27、設有如下的說明和定義struct{inta;charts;}x,*p=&x:x.a=4;

x.s="hello";則以下敘述中正確的是

A、語句++p->a;的效果是使p增1

B、(p++)->a與p++,a都是合語法的表達式,但二者不等價

C^語句*p->s++;等價于(*p)->s++;

D、語句++p->a;的效果是使成員a增1

標準答案:D

知識點解析:p->a得到p指向的結構體變量中的成員a的值。p->a++得至p指向的

結構體變量中的成員a的值,用完該值后使p->a加1。++p->a得劍p指向的結構

體變量中的成員a的值使之加1(先加)。由此可見指向運算符,優先級高于++,因

此*p->s++相當于*(p->s〕++,結介性自右至左,因此p++->a和(p++)->a等價。

28、下面選項中關于位運算的敘述正確的是

A、位運算符都需要兩個操作數

B、左移運算的結果總是原操作數據2倍

C、右移運算時,高位總是補0

D、位運算的對象只能是整型或字符型數據

標準答案:D

知識點解析:位運算則是以位(bit)一級進行的運算,位運算符中除“?”以外,均為

二元運算符,即要求兩側各有一個運算量,運算量只能是整型或字符型的數據,不

能為實型數據。其中右移時,右端(低位)移出的二進制數舍棄,左端(高位)移入的

二進制數分兩種情況:時于無符號整數和正整數,高位補0;對于負整數,高位補

lo而左移運算在沒有溢出的前提下每移動一位,相當于原數據的2倍。

29、有三個關系R、S和T如下:口則由關系R和S得到關系T的操作是

A、自然連接

B、交

C、投影

D、并

標準答案:A

知識點解析:關系R和關系S有公共域,關系T是通過公共域的等值進行連接的

結果,符合自然連接,選A。

30、以下敘述中正確的是

A、在scanf函數中的格式控制字符串是為了輸入數據用的,不會輸出到屏幕上

B、在使用scanf函數輸入整數或實數時,輸入數據之間只能用空格來分隔

C、在prinlf函數中,各個輸出項只能是變量

D、使用printf函數無法輸出百分號%

標準答案:A

知識點解析:seanf函數中的格式控制字符串是為了輸入數據用的,無論其中有什

么字符,也不會輸出到屏幕上,因此若想在屏幕上輸出提示信息,應該首先使用

printf函數輸出,選項A)正確;在使用scanf函數輸入整數或實數時,輸入數據之

間可以用空格、跳格、回車來分隔,選項B)錯誤;printf輸出項不但可以為變量,

還可以表達式或者常量,選項C)錯誤;如果要輸出“%”,可以在格式控制中用

“%%”表示,將輸出一個“%”,選項D)錯誤。

31、if語句的基本形式是:if(表達式)語句,以下關于“表達式”值的敘述中正確的是

A、必須是整數值

B、必須是正數

C、可以是任意合法的數值

D、必須是邏輯值

標準答案:C

知識點解析:在計語句中,表達式可以是任意合法的數值。當其值為非零時,執

行if語句,為0時執行else語句。

32、若有定義語句:char*sl="OK”,*句="ok”;以下選項中,能夠輸出“OK”的語句

是()。

if(strcmp(sl,s2)!=0)puts(sl);

if(strcmp(sl,s2)!=0)puts(s2);

C、if(strcmp(s1,s2)==1)puts(sI);

D、if(strcmp(s1,s2)==0)puts(s1);

標準答案:A

知識點解析:字符串比較函數strcmp(字符串1,字符串2)得返回值為若字符串1與

字符串2相同則返回0,若字符串I小于字符串2則返回負整數,若字符串1大于

字符串2則返回正整數。要輸出字符指針si指向的字符串,則需保證條件判定語

句為真,調用語句puts(sl)輸出即可,易知答案選A。

33、在數據管理技術發展的三個階段中,數據共享最好的是()。

A、人工管理階段

B、文件系統階段

C、數據庫系統階段

D、三個階段相同

標準答案:C

知識點解析:數據管理發展至今已經歷了三個階段:人工管理階段、文件系統階段

和數據庫系統階段。其中最后一個階段結構簡單,使用方便邏輯性強物理性少,在

各方面的表現都最好,一直占據數據庫領域的主導地位,所以選擇C)。

34、設已有定義:float9則以下對指針變量p進行定義且賦初值的語句中正確的

A、int*p=(float)x;

B、float*p=&x;

C^floatp=&x;

D、float*p=1024;

標準答案:B

知識點解析:定義指針變量的一般形式為:類型名*指針變量名1,*指針變量名

2,……;對一個指針變量賦值要通過求地址運算符(&)獲得變量的地址值,然后把

此地址值賦給指針變量。因而在選項A)的表達式中。賦值號的左邊表示定義了指

針變量口,而右邊表示求變量x的地址值。

35、以下關于指針的敘述正確是()。

A、所有類型的指針變量所占內存的大小是一樣的

B、指針變量所占內存的大小與其類型有關,char型指針變量只占1個字節,

double型指針變量占8個字節

C、指針變量可直接指向任何類型的變量,而不會出現編譯或運行錯誤

D、指針變量既可以直接指向結構體,也可直接指向結構體中某個成員,而不會出

現編譯或運行錯誤

標準答案:A

知識點解析:不管什么類型的指針變量,存儲的都是被指向變量的地址,即是該變

量在內存中的一個存儲單元編號,所以所有的指針變量占用的內存大小是相同的,

答案選A。

36、下面選項中關于位運算的敘述正確的是

A、位運算符都需要兩個操作數

B、左移運算的結果總是原操作數據2倍

C、右移運算時,高位息是補0

D、位運算的對象只能是整型或字符型數據

標準答案:D

知識點解析:位運算則是以位(bi。一級進行的運算,位運算符中除,?”以外,均為

二元運算符,即要求兩側各有一個運算量,運算量只能是整型或字符型的數據,不

能為實型數據。其中右移時,右端(低位)移出的二進制數舍棄,左端(高位)移入的

二進制數分兩種情況:對于無符號整數和正整數,高位補0;對于負整數,高位補

U而左移運算在沒有溢出的前提下每移動一位,相當于原數據的2倍.

37、下列關于棧的敘述中,正確的是

A、棧底元素一定是最后入棧的元素

B、棧頂元素一定是最先入棧的元素

C、棧操作遵循先進后出的原則

D、以上說法均錯誤

標準答案:C

知識點解析:棧頂元素總是后被插入的元素,從而也是最先被刪除的元素;棧底元

素總是最先被插入的元素,從而也是最后才能被刪除的元素。棧的修改是按后進先

出的原則進行的。因此,棧稱為先進后出表,或“后進先出”表,所以選擇C。

38、已知大寫字母A的ASCH碼是65,小寫字母a的ASCII碼是97。以下不能將

變量c中的大寫字母轉換為對應小寫字母的語句是

A、c=('A'+c)%26-'a,

B>c=c+32

C、c=c-'A'+'a'

D、c=(c-'A')%26+'a'

標準答案:A

知識點解析:根據題意可知,小寫字母比與之對應的大寫字母的ASCII碼大32cA

選項中字符A加上c表示的大寫字符再對字母個數26取余,本身這個表達式沒有任

何含義所以選擇A選項。

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

A、屬性

B、二維表

C、網狀結構

D、樹狀結構

標準答案:B

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

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

40、軟件設計中模塊劃分應遵循的準則是()。

A、低內聚低耦合

B、高內聚低耦合

C、低內聚高耦合

D、高內聚高耦合

標準答案:B

知識點解析:軟件設計中模塊劃分應遵循的準則是高內聚低偶合、模塊大小規模適

當、模塊的依賴關系適當等。模塊的劃分應遵循一定的要求,以保證模塊劃分合

理.,并進一步保證以此為依據開發出的軟件系統可靠性強,易于理解和維護。模塊

之間的耦合應盡可能的低,模塊的內聚度應盡可能的高。

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

卷第3套

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

1、以下敘述中正確的是

A、每個后綴為.c的C語言源程序都應該包含一個main函數

B、在C語言程序中,main函數必須放在其他函數的最前面

C、每個后綴為.c的C語言源程序都可以單獨進行編譯

D、在C語言程序中,只有main函數才可單獨進行編譯

標準答案:C

知識點解析:每一個C語言的文件或函數都可以單獨編譯,但只有main函數的才

可以執行。

2、下列敘述中正確的是

A、在棧中,棧中元素隨棧底指針與棧頂指針的變化而動態變化

B、在棧中,棧頂指針不變,棧中元素隨棧底指針的變化而動態變化

C、在棧中,棧底指針不變,棧中元素隨棧頂指針的變化而動態變化

D、上述三種說法都不對

標準答案:C

知識點解析:在棧中,允許插入與刪除的一端稱為棧頂,而不允許插入與刪除的另

一端稱為棧底。棧跟隊列不同,元素只能在棧頂壓入或彈出,棧底指針不變,棧中

元素隨棧頂指針的變化而動態變化,遵循后進先出的規則。

3、下面對軟件特點描述正確的是()。

A、軟件具有明顯的制作過程

B、軟件在使用中存在磨損、老化問題

C、軟件復制不涉及知識產權

D、軟件是一種邏輯實體,具有抽象性

標準答案:D

知識點解析:軟件具有以下特點:軟件是一種邏輯實體,而不是物理實體,具有抽

象性;軟件的生產與硬件不同,它沒有明顯的制作過程;軟件在運行、使用期間不

存在磨損、老化問題;軟件的開發、運行對硬件和環境具有依賴性;軟件復雜性

高,成本昂貴;軟件開發涉及諸多的社會因素(包括軟件知識產權及法律等問題)。

4、已知大寫字母A的ASCII碼是65,小寫字母a的ASCII碼是97。以下不能將

變量c中的大寫字母轉換為對應小寫字母的語句是

A、c=('A'+c)%26-H

B、c=C+32

C、c=C-'A+a'

D、c=(C-'A,)%26+'a,

標準答案:A

知識點解析:由題意可知,小寫字符a和大寫字符A的ASCH代碼相差為32,所

以選項C能將大寫字符C的ASCII代碼轉換為小寫字符c的ASCH代碼;選項D

和C)左側的表達式都是大寫字符C與大寫字符A的差與匕,的ASCII代碼的和就是

小寫字符c的ASCH代碼。而選項A中應該是加上匕、而不是減去匕\

5、結構化程序設計中,下面對goto語句使用描述正確的是()。

A、禁止使用goto語句

B、使用got。語句程序效率高

C、應避免濫用goto語句

D、以上說法都不對

標準答案:c

知識點.析:結構化程序設計中,應盡量避免使用GOTO語句,但不是禁止使

用,所以選擇C。

6、面向對象方法中,繼承是指

A、一組對象所具有的相似性質

B、一個對象具有另一個對象的性質

C、各對象之間的共同性質

D、類之間共享屬性和操作的機制

標準答案:D

知識點解析:面向對象方法中,繼承是使用已有的類定義作為基礎建立新類的定義

技術。廣義地說,繼承是指能夠直接獲得已有的性質和特征,而不必重復定義它

們。

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

B、doubleint;

C、charFor;

D、floatUSS;

標準答案:D

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

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

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

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

8、某二叉樹共有399個結點,其中有199個度為2的結點,則該二叉樹中的葉子

結點數為

A、不存在這樣的二叉樹

B、200

C、198

D、199

標準答案:B

知識點解析:在二叉樹中,設葉子結點個數為no,度為2的結點個數為n2,葉子

結點的個數計算方法n0=n2+1=199+1=200,所以選項B正確。

9、若a、b、c、d都是int型變量且都已經正確賦初值,則以下不正確的賦值語句

是()。

A、a+d:

B、a++:

C、a=b=c=d=100;

D^a=(b=3)+(d=5);

標準答案:A

知識點解析:C語言規定,賦值號的右邊可以是一個賦值表達式,因此選項C、選

項D正確;在選項B中,a++是一個自加1的表達式,a被重新賦值,因此它是一

個合法的賦值表達式;選項A中,a+d是一個算術表達式,雖然最后有一個分號,

但這個表達式中沒有賦值操作,因此它不是一條賦值語句。

10、若有以下程序段:inlr=8;printf("%d\n",r?l);輸出結果是()。

A、16

B、8

C、4

D、2

標準答案:C

知識點。析:本題考查位運算,屬于基礎知識。題目中的整型變量8,二進制表達

為00001000,右移一位為00000100,即4,C選項正確。

11、以下敘述中錯誤的是()。

A、gets函數用于從終端讀入字符串

B、gctchar函數用于從磁盤文件讀人字符

C、fpuls函數用于把字符串輸出到文件

D、fwrite函數用于以二進制形式輸出數據到文件

標準答案:B

知識點解析:本題考查字符處理函數和文件做操函數,屬于基礎知識。其中B選

項的getehar函數用于從終端讀入字符。

12、在數據管理技術發展的三個階段中,數據共享最好的是

A、人工管理階段

B、文件系統階段

C、數據庫系統階段

D、三個階段相同

標準答案:C

知識點解析:數據管理技術的發展經歷了三個階段:人工管理階段、文件系統階段

和數據庫系統階段。人工管理階段無共享,冗余度大;文件管理階段共享性差,冗

余度大;數據庫系統管理階段共享性大,冗余度小。

13、若變量已正確定義,則語句s=32;sA=32;printf("%d",s);的輸出結果是

()。

A、-1

B、0

C、1

D、32

標準答案:B

知識點解析:本題考查邏輯異或運算。異或運算只有在兩個比較的位不同時其結果

為1,否則結果為0,題目中兩個值相同,所以結果為0。

14、子函數的功能是通過鍵盤輸入給x所指的整型數組所有元素賦值。在下劃線處

應填寫的是()。#include#defineN5voidfun(intx[N]){intm;for(m=N一1;m>

=0;m-----)scanf(''%d'',—);}

A、x+m

B、x[++m]

C>x+(m++)

D、x[m+l]

標準答案:A

知識點解析:本題用f。「循環給數組賦值,與上題類似,選項B和選項D不是地

址,錯誤。選項A和選項C是地址,但是選項C的m值會++自增,然后for循環

里面又m一—自減,會導致死循環,不滿足要求,選項A正確。

15、數據庫DB、數據走系統DBS、數據庫管理系統DBMS之間的關系是

A、DB包含DBS和DBMS

B、DBMS包含DB和DBS

C、DBS包含DB和DBMS

D、沒有任何關系

標準答案:C

知識點解析:數據庫系統(DauibascSystem簡稱DBS)由下列幾個部分組成:數據庫

(DB)、數據庫管理系統(DBMS)、數據庫管理員(人員)、系統平臺之一—硬件平

臺(硬件)、系統平臺之二—軟件平臺(軟件)。這五個部分構成了一個以數據座為

核心的完整的運行實體,稱為數據庫系統。其中:DB(DataBase)即數據庫,是統一

管理的相關數據的集合:DBMS(DatabaseManagemenlSystem)即數據庫管理系統,

是位于用戶與操作系統之間的一層數據管理軟件,為用戶或應用程序提供訪問DB

的方法。

16、以下選項中不合法的標識符是

A、FOR

B、&a

C、print

D、_00

標準答案:B

知識點解析:合法的標設符要滿足組成字符為a?z以及A?Z,數字字符0到9和

下劃線,其中數字不開頭,不能是關鍵字。選項B)中,&不屬于組成字符,是錯

誤的。

17、下面不屬于黑盒測試方法的是

A、邊界值分析法

B、基本路徑測試

C、等價類劃分法

D、錯誤推測法

標準答案:B

知識點解析:常用的黑盒測試方法和技術有:等價類劃分法、邊界值分析法、錯誤

推測法和因果圖等。白盒測試是把程序看成裝在一只透明的白盒里,測試者完全了

解程序的結構和處理過程。它根據程序的內部邏輯來設計測試用例,檢查程序中的

邏輯通路是否都按預定的要求正確地工作。白盒測試的主要技術有邏輯覆蓋測試、

基本路徑測試等,故選擇B選項。

18、有以下程序intfun(intn){ifln=l)retuml;elseretum(n+fun(n-l));}main()

(intx;scanf(''%d'',&x);x=fun(x);printf(,,%d\n>\x);}執行程序時,給變量

x輸入10,程序的輸出結果是

A、54

B、65

C、45

D、55

標準答案:D

知識點解析:在C語言中函數可以遞歸調用,即直接或間接地自己調用自己。本

題在函數intfun(intn)的定義中又出現了對函數fun的調用,所以函數fun是遞歸函

數。因而在主函數中調用x=fun(x)時,當輸入10賦給變量x時,遞歸調用的過程

為:

fun(l0)-10+fun(9)-10十9+fun(8)=10+9++8+fun(7)-10+9+十8十7+fun(6)—10十9十十8十7十6十

fun(6)=10+9++8+7+6+5-fun(4)=10+9++8+7+6+5+4+fun(3)=10+9++8+7+6+5+4+3+fu

n(2)=10+9++8+7+6+5+4+3+2+fun(l)=10+9++8+7+6+5+4+3+2+1=55

19、關于變量的定義和說明的敘述中正確的是()。

A、對于變量而言,“定義”和“說明”這兩個詞實際上是同一個意思

B、在復合語句中不能定義變量

C、全局變量的存儲類別可以是靜態類

D、函數的形式參數不屬于局部變量

標準答案:C

知識點解析:C語言的關鍵字sialic說明符說明全局變量時,此變量可稱作靜態全

局變量。靜態全局變量只限于本編譯單位使用,不能被其他編譯單位所引用。在一

個函數內部定義的變量(包括形參)是局部變量,它只在本函數范圍內有效。不同函

數中可以使用相同名字的局部變量,它們代表不同的對象,互不影響。在函數內部

復合語句中也可以定義變量,這些變量都是局部變量,只在本復合語句中有效。

20、學院的每名教師只能屬于一個系,則實體系和實體教師間的聯系是

A、一對多

B、多對多

C、多對

D、一對一

標準答案:A

知識點解析:一對多關系是關系數據庫中兩個表之問的一種關系,該關系中第一個

表中的單個行可以與第二個表中的一個或多個行相關,但第二個表中的一個行只可

以與第一個表中的一個行相關。本題中一個是體系有多個老師,但老師只能屬于一

個系,因此是一對多關系。

21>已定義以下函數intfun(int*p){return*p;}fun函數返回值是

A、一個整數

B、不確定的值

C、形參p中存放的值

D、形參p的地址值

標準答案:A

知識點解析:返回值為由針變量指向的數據,該數據已被定義為整型。因此A選

項正確。

22、有以下程序:#include<stdio.h>#definePT3.5:#defineS(x)PT*x*x;

main(){inta=l?b=2;prinff("%4.lf\n",S(a+b));)程序的運行結果是()。

A、7.5

B、31.5

C、程序有錯無輸出結果

D、14.0

標準答案:C

知識點解析:宏定義不是C語句,末尾不需要有分號,語句printf(”%4.

s(a+b));展開后為primf("%4.lf\n",3.5;*a+b*a+b;);,所以程序會出現語

法錯誤。

23、23.以下程序的輸出結果是()。main()|intm=l,n=2,*p=&m,*q=&n,*r;

r=p;p=q;q=r;printff'%d,%d,%d,%d\n'',m,n,*P,*q);)

A、2,1,2,1

B、1,2,2,1

C、1,2,1,2

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。

24、有以下程序#include#

溫馨提示

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

評論

0/150

提交評論