2019年9月計算機二級C語言試題(總)

發布于 2019-07-26 08:48  編輯:simi
0
計算機等級考試題庫 掃碼微信刷題


二級C語言試題.jpg


不論你在什么時候開始刷二級C語言試題,重要的是開始之后就不要輕言放棄;不論你在什么時候結束,重要的是結束之后就不要后悔。


二級C語言試題

1

程序改錯題

使用VC++6.0打開考生文件夾下的源程序文件1.cpp,該程序運行時有錯,請改正其中的錯誤,使程序正常運行,并使程序輸出的結果為

TC1

TC2

注意:不要改動main函數,不能增加或刪除行,也不能更改程序的結構,錯誤的語句在//******error******的下面。

試題程序:

#include

#includestructTCO

{

//********error********

virtualvoidfun();

};

classTClpublicTCO

{

voidfun()

{

cout<<"TCl"<}

};

classTC2publicTCO

{

voidfun()

{

cout<<"TC2"<}

};

voidmain()

{

TCO"P;

TClobj1;

TC2obj2;

//********error********

p=*obj1;

p->fun();

//********error********

p=*obj2;

p->fun();

return;

}

參考答案:

(1)應改為“virtualvoidfun()=0;”。

(2)應改為“p=&obj1;”。

(3)應改為“p=&obj2;”。

【解析】如果在基類中不使用這個虛函數,其返回值也是沒有意義的,它應該被定義為純虛函數。所以虛函數fun應該是純虛函數,也就是聲明虛函數時初始化為0的函數。即第2處的“virtualvoidfun()=0;”。第2處的P為指針變量,將對象obj1賦值給P,實際上蹙P指向對象obj1的地址,所以將“p=*obj1;”修改為“P=&obj1;”。第3處的“P=*obj2;”修改為“p=&obj2;”。

簡單應用題

使用VC++6.0打開考生交件夾下的源程序文件2.cpp。閱讀下列函數說明和代碼,完成空出部分程序。函數fun(intN[4])的功能是用4個數字,組成互不相同且無重復數字的3位數,并將滿足所有條件的數字輸出到屏幕,

并且每輸出一個3位數就換一行。

程序分析:可填在百位、十位、個位的數字都是1230。組成所有的排列后再去掉不滿足條件的排列。如果判定第一個數字是0,則也去掉。

試題程序:

#include

voidfun(intN[4])

{

}

intmain()

intN[4]={1230};

fun(N)

return0;

}

參考答案:

intijk;

for(i=0;i<4;i++)//百位循環

{

for(j=0;j<4;j++)//十位循環

for(k=0;k<4;k++)//個位循環

{

if(i!=j&&j!=k&&k!=i&&N[i]!=0)//

當三位數不同,并且百位不為0

{

cout<}

}

}

【解析】本題利用3層循環,對3位數字是否相同進行判斷。如果3位數不同,并且百位不為0,那么依次輸出這3 位數,即由3位數組成的數字。

綜合應用題

使用VC++6.0打開考生文件夾下的源程序文件3.cpp。其中定義的類不完整,按要求完成下列操作,將類的定義補充完整。

(1)基類People完成打印功能,定義其中的打印函數為

虛函數,請在注釋1后添加適當的語句。

(2)Boy繼承于People,在構造函數中設置性別為1

請在注釋2后添加適當的語句。

(3)Girl繼承于People,在構造函數中設置性別為0,請在注釋3后添加適當的語句。

(4)實現函數fun,用于傳遞不同的類型,打印出性別,請在注釋4后添加適當的語句。

輸出的內容如下:

Sex=Boy

Sex=Girl

注意:除在指定位暨添加語句之外,請不要改動程序中的其他內容。

試題程序:

#include

classPeople

{

public

//********1********

voidprint(){}

intsex;

};

classBoypublicPeople

{

publiC

Boy()

{

//********2********}

voidprint()

{

cout<<"Boy"<}

};

classGirlpublicPeople

{

public

Girl()

{

//********3********}

voidprint()

{

cout<<"Girl"<}

};

//********4********{

cout<<"Sex=";

p.print();

}

intmain()

{

Boym

fun(m);

Girln

fun(n);

return0;

}

參考答案:

(1)將“voidprint(){};”補充完整為“virtualvoidprint(){};”。

(2)應添加“sex=1;”。

(3)應添加“sex=0;”。

(4)應添加“voidfun(People&p)”。

【解析】第1處要求“基類People完成打印功能,定義其中的打印函數為虛函數”。虛函數是函數的一種,定義虛函數,在函數名前聲明virtual就可以了,所以將第1處的“voidprint(){}”語句修改為“virtualvoidprint(){}”。第2處要求“類Boy繼承于People,在構造函數中設置性別為l”。基類People中變量sex用來存放性別,Boy繼承People,所以Boy中性別的變量可以使用基類中的sex變量,設置性別為1,即“sex=1;”。第3處要求“類Girl繼承于People,在構造函數中設置性別為0”。在第3處添加語句“sex=0;”。第4處要求“實現函數fun,用于傳遞不同的類型,打印出性別”。根據“P.print();”語句知道,fun函數的形參為指針P,由于它調用了基類People中的成員函數print,所以P的基類為People,即添加函數fun的定義為“voidfun(People&p)”。

 

 

 

 

2

程序改錯題

使用VC++6.0打開考生文件夾下的源程序文件1.cpp,該程序運行時有錯,請改正其中的錯誤,使程序正常運行,并使程序輸出的結果為

TC1

TC2

注意:不要改動main函數,不能增加或刪除行,也不能更改程序的結構,錯誤的語句在//******error******的下面。

試題程序:

#include

#includestructTCO

{

//********error********

virtualvoidfun();

};

classTClpublicTCO

{

voidfun()

{

cout<<"TCl"<}

};

classTC2publicTCO

{

voidfun()

{

cout<<"TC2"<}

};

voidmain()

{

TCO"P;

TClobj1;

TC2obj2;

//********error********

p=*obj1;

p->fun();

//********error********

p=*obj2;

p->fun();

return;

}

參考答案:

(1)應改為“virtualvoidfun()=0;”。

(2)應改為“p=&obj1;”。

(3)應改為“p=&obj2;”。

【解析】如果在基類中不使用這個虛函數,其返回值也是沒有意義的,它應該被定義為純虛函數。所以虛函數fun應該是純虛函數,也就是聲明虛函數時初始化為0的函數。即第2處的“virtualvoidfun()=0;”。第2處的P為指針變量,將對象obj1賦值給P,實際上蹙P指向對象obj1的地址,所以將“p=*obj1;”修改為“P=&obj1;”。第3處的“P=*obj2;”修改為“p=&obj2;”。

簡單應用題

使用VC++6.0打開考生交件夾下的源程序文件2.cpp。閱讀下列函數說明和代碼,完成空出部分程序。函數fun(intN[4])的功能是用4個數字,組成互不相同且無重復數字的3位數,并將滿足所有條件的數字輸出到屏幕,

并且每輸出一個3位數就換一行。

程序分析:可填在百位、十位、個位的數字都是1230。組成所有的排列后再去掉不滿足條件的排列。如果判定第一個數字是0,則也去掉。

試題程序:

#include

voidfun(intN[4])

{

}

intmain()

intN[4]={1230};

fun(N)

return0;

}

參考答案:

intijk;

for(i=0;i<4;i++)//百位循環

{

for(j=0;j<4;j++)//十位循環

for(k=0;k<4;k++)//個位循環

{

if(i!=j&&j!=k&&k!=i&&N[i]!=0)//

當三位數不同,并且百位不為0

{

cout<}

}

}

【解析】本題利用3層循環,對3位數字是否相同進行判斷。如果3位數不同,并且百位不為0,那么依次輸出這3 位數,即由3位數組成的數字。

綜合應用題

使用VC++6.0打開考生文件夾下的源程序文件3.cpp。其中定義的類不完整,按要求完成下列操作,將類的定義補充完整。

(1)基類People完成打印功能,定義其中的打印函數為

虛函數,請在注釋1后添加適當的語句。

(2)Boy繼承于People,在構造函數中設置性別為1

請在注釋2后添加適當的語句。

(3)Girl繼承于People,在構造函數中設置性別為0,請在注釋3后添加適當的語句。

(4)實現函數fun,用于傳遞不同的類型,打印出性別,請在注釋4后添加適當的語句。

輸出的內容如下:

Sex=Boy

Sex=Girl

注意:除在指定位暨添加語句之外,請不要改動程序中的其他內容。

試題程序:

#include

classPeople

{

public

//********1********

voidprint(){}

intsex;

};

classBoypublicPeople

{

publiC

Boy()

{

//********2********}

voidprint()

{

cout<<"Boy"<}

};

classGirlpublicPeople

{

public

Girl()

{

//********3********}

voidprint()

{

cout<<"Girl"<}

};

//********4********{

cout<<"Sex=";

p.print();

}

intmain()

{

Boym

fun(m);

Girln

fun(n);

return0;

}

參考答案:

(1)將“voidprint(){};”補充完整為“virtualvoidprint(){};”。

(2)應添加“sex=1;”。

(3)應添加“sex=0;”。

(4)應添加“voidfun(People&p)”。

【解析】第1處要求“基類People完成打印功能,定義其中的打印函數為虛函數”。虛函數是函數的一種,定義虛函數,在函數名前聲明virtual就可以了,所以將第1處的“voidprint(){}”語句修改為“virtualvoidprint(){}”。第2處要求“類Boy繼承于People,在構造函數中設置性別為l”。基類People中變量sex用來存放性別,Boy繼承People,所以Boy中性別的變量可以使用基類中的sex變量,設置性別為1,即“sex=1;”。第3處要求“類Girl繼承于People,在構造函數中設置性別為0”。在第3處添加語句“sex=0;”。第4處要求“實現函數fun,用于傳遞不同的類型,打印出性別”。根據“P.print();”語句知道,fun函數的形參為指針P,由于它調用了基類People中的成員函數print,所以P的基類為People,即添加函數fun的定義為“voidfun(People&p)”。

 

 

 

3

1[單選題] 下面敘述中錯誤的是()

A.軟件測試的目的是發現錯誤并改正錯誤

B.對被調試的程序進行“錯誤定位”是程序調試的必要步驟

C.程序調試通常也稱為Debug

D.軟件測試應嚴格執行測試計劃,排除測試的隨意性

參考答案:A

參考解析:軟件測試的目的是為了發現錯誤而執行程序的過程,并不涉及改正錯誤,所以選項A錯誤。程序調試的基本步驟有:錯誤定位、修改設計和代碼,以排除錯誤、進行回歸測試,防止引進新的錯誤。程序調試通常稱為Debug,即排錯。軟件測試的基本準則有:所有測試都應追溯到需求、嚴格執行測試計劃,排除測試的隨意性、充分注意測試中的群集現象、程序員應避免檢查自己的程序、窮舉測試不可能、妥善保存測試計劃等文件。

2[單選題] 以下關于結構化程序設計的敘述中正確的是()

A.結構化程序使用goto語句會很便捷

B.C語言中,程序的模塊化是利用函數實現的

C.一個結構化程序必須同時由順序、分支、循環三種結構組成

D)由三種基本結構構成的程序只能解決小規模的問題

參考答案:B

參考解析:濫用goto語句將使程序的流程毫無規律,可讀性差,對于初學者來說盡量不要使用,所以A錯誤。一個結構化程序可以包含順序、分支、循環結構中的一種或多種,所以C錯誤。由三種基本結構構成的程序可以解決任何復雜的問題,所以D錯誤。

3[單選題] 算法的空間復雜度是指()

A.算法在執行過程中所需要的計算機存儲空間

B.算法所處理的數據量

C.算法程序中的語句或指令條數

D.算法在執行過程中所需要的臨時工作單元數

參考答案:A

參考解析:算法的空間復雜度是指算法在執行過程中所需要的內存空間。所以選擇A

4[單選題] 若變量x,y已正確定義并賦值,以下符合C語言語法的表達式是()

A.x+1=y

B.++xy=x- -

C.x=z+10=z+y

D.double(x)/10

參考答案:B

參考解析:A選項中不能將變量Y賦給表達式,C選項中錯誤與A選項一樣,D選項中強制類型轉換表達式應寫成(double)x/10

5[單選題] 數據庫應用系統中的核心問題是()

A.數據庫設計

B.數據庫系統設計

C.數據庫維護

D.數據庫管理員培訓

參考答案:A

參考解析:數據庫應用系統中的核心問題是數據庫的設計。

6[單選題] 下列敘述中正確的是()

A.switch語句中,不一定使用break語句

B.switch語句中必須使用default

C.break語句必須與switch語句中的case配對使用

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

參考答案:A

參考解析:default語句在switch語句中可以省略,所以B錯誤;switch語句中并非每個case后都需要使用break語句,所以C錯誤;break語句還可以用于for等循環結構中,所以D錯誤。

7[單選題] 對于一個正常運行的C程序,以下敘述中正確的是()

A.程序的執行總是從main函數開始,在程序的最后一個函數中結束

B.程序的執行總是從程序的第一個函數開始,在main函數結束

C.程序的執行總是從main函數開始

D.程序的執行總是從程序的第一個函數開始,在程序的最后一個函數中結束

參考答案:C

參考解析:任何一個c程序都是從主函數main開始,至主函數main結束,所以選擇c選項。

8[單選題] 以下定義數組的語句中錯誤的是()

A.int num[][3]={{12}3456};

B.int num[2][4]={{12}{34}{56}};

C.int num[]={123456};

D.int hum[][4]={123456};

參考答案:B

參考解析:B)選項中定義的數組為24列,而賦值時賦成了3行所以出錯。

9[單選題] 以下關于typedef的敘述錯誤的是()

A.typedef可以增加新類型

B.typedef只是將已存在的類型用一個新的名字來代替

C.typedef可以為各種類型說明一個新名,但不能用來為變量說明一個新名

D.typedef為類型說明一個新名,通常可以增加程序的可讀性

參考答案:A

參考解析:typedef并不是增加了新類型,而是用一個新名字替代已存在的類型,不能為變量說明一個新名,使用typedef可以增強程序的可移植性。所以A選項錯誤。

10[單選題] E-R圖中,用來表示實體聯系的圖形是()

A.橢圓形

B.矩形

C.菱形

D.三角形

參考答案:C

參考解析:在E-R圖中實體集用矩形,屬性用橢圓,聯系用菱形。

 

 

 

4

1[單選題] 以下敘述中正確的是

A.兩個字符串可以用關系運算符進行大小比較

B.函數調用strlen(s);會返回字符串S實際占用內存的大小(以字節為單位)

C.C語言本身沒有提供對字符串進行整體操作的運算符

D.當拼接兩個字符串時,結果字符串占用的內存空間是兩個原串占用空間的和

參考答案:C

參考解析:本題考查字符串處理函數strienstrcatstrcmpB選項中strlen返回的是字符串s實際占用內存大小加上結尾符,A選項中不能用關系運算符進行大小比較,可以使用strcmpD選項當使用連接函數strcat時,內存空間會減少一個字符位置。

2[單選題] 一個工作人員可以使用多臺計算機,而一臺計算機可被多個人使用,則實體工作人員與實體計算機之間的聯系是( )

A.一對一B.一對多C.多對多D.多對一

參考答案:C

參考解析:因為一個人可以操作多個計算機,而一臺計算機又可以被多個人使用,所以兩個實體之間是多對多的關系。

3[單選題] 對于while(!E)s;,若要執行循環體s,則E的取值應為:

A.E等于1B.E不等于0C.E不等于1D.E等于0

參考答案:D

參考解析:while語句的一般形式為:while(表達式)語句;其中表達式是循環條件,語句為循環體。while語句的語義是:計算表達式的值,當值為真(0)時,執行循環體語句。該題中如要執行語句s,則!E應為真,因此E應等于0D選項正確。

4[單選題] 在軟件設計中不使用的工具是( )

A.系統結構圖B.PADC.數據流圖(DFD)D.程序流程圖

參考答案:C

參考解析:系統結構圖是對軟件系統結構的總體設計的圖形顯示。在需求分析階段,已經從系統開發的角度出發,把系統按功能逐次分割成層次結構,是在概要設計階段用到的。PAD圖是在詳細設計階段用到的。程序流程圖是對程序流程的圖形表示,在詳細設計過程中用到。數據流圖是結構化分析方法中使用的工具,它以圖形的方式描繪數據在系統中流動和處理的過程,由于它只反映系統必須完成的邏輯功能,所以它是一種功能模型,是在可行性研究階段用到的而非軟件設計時用到,所以選擇C

5[單選題] 若有定義語句:char a='\82';則變量a()

A.說明不合法B.包含1個字符C.包含2個字符D.包含3個字符

參考答案:B

參考解析:char a='\82',定義字符量achar型變量值為1個字節長度,并從右側開始運算,所以a的值應為'2'。因此B選項正確。

6[單選題] fp已定義為指向某文件的指針,且沒有讀到該文件的末尾,則C語言函數feof(fp)的函數返回值是

A.EOFB.0C.-1D.0

參考答案:D

參考解析:本題考查文件的定位,feof函數的用法是從輸入流讀取數據,如果到達文件末尾(遇文件結束符)eof函數值為非零值,否則為0,所以選項D正確。

7[單選題] 以下敘述中正確的是

A.只要適當地修改代碼,就可以將do-whilewhile相互轉換

B.對于“for(表達式1;表達式2;表達式3)循環體”首先要計算表達式2的值,以便決定是否開始循環

C.對于“for(表達式1;表達式2;表達式3)循環體”,只在個別情況下才能轉換成while語句

D.如果根據算法需要使用無限循環(即通常所稱的“死循環”),則只能使用while語句

參考答案:A

參考解析:B選項中,for語句中需要先求解先求解表達式1;C選項中,for語句使用最為靈活,它完全可以取代while語句;D選項中,對于死循環,也可以使用for語句。因此A選項正確。

8[單選題]若有以下說明語句:

struct date

{ int year;

int month;

int day;

}brithday;

則下面的敘述不正確的是__C___.

A struct是聲明結構體類型時用的關鍵字

B struct date 是用戶定義的結構體類型名

C brithday是用戶定義的結構體類型名

Dyear,day 都是結構體成員名

9[單選題]以下對結構變量stul中成員age的非法引用是 B

struct student

{ int age;

int num;

}stu1,*p;

p=&stu1;

A stu1.age

B student.age

C p->age

D(*p).age

10[單選題]設有如下定義:

struck sk

{ int a;

float b;

}data;

int *p;

若要使P指向data中的a域,正確的賦值語句是 C

A p=&a;

B p=datAa;

Cp=&datAa;

D*p=datAa;

11[單選題]設有以下說明語句:

typedef struct stu

{ int a;

float b;

} stutype;

則下面敘述中錯誤的是( D )

Astruct是結構類型的關鍵字

Bstruct stu是用戶定義的結構類型

Cab都是結構成員名

Dstutype是用戶定義的結構體變量名

12[單選題]語句int *p;說明了 C

Ap是指向一維數組的指針

Bp是指向函數的指針,該函數返回一int型數據

Cp是指向int型數據的指針

Dp是函數名,該函數返回一指向int型數據的指針

 

 

 

 

5

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

A.編譯程序

B.操作系統

C.教務管理系統

D.匯編程序

參考答案:C

參考解析: 編譯軟件、操作系統、匯編程序都屬于系統軟件,只有C教務管理系統才是應用軟件。

2、設有定義:

int a=1b=2e=3;

以下語句中執行效果與其他三個不同的是()

A.if(a>b) c=aa=bb=c;

B.if(a>b) {e=aa=bb=e;}

C.if(a>b)e=a;a=b;b=C;

D.if(a>b) {c-7-a;a=b;b=e;}

參考答案:C

參考解析: 由于a小于b,所以所有選項中的條件都為假,c選項中實際執行了a=b;b=c;兩個操作。而ABD選項由于條件不成立.所以什么也沒有做,所以選擇C選項。

3、若有以下定義:

則對x數組元素的正確引用是()

A.pt+3

B.*&x[10]

C.*(pt+10)

D.*(x+3)

參考答案:D

參考解析: 沒有A選項的引用形式。*&放在一起作用抵消,所以B選項錯誤,最大只能引用到x[9]*(pt+i)表示引用指針pt所指元素后的第i個元素,所以c選項錯誤,最大只能為*(pt+9)。因此D選項正確。

4、若有定義語句:double a* P=&a;以下敘述中錯誤的是()

A.定義語句中的*號是一個間址運算符

B.定義語句中的*號是一個說明符

C.定義語句中的P只能存放double類型變量的地址

D.定義語句中,*P=&a把變量a的地址作為初值賦給指針變量P

參考答案:A

參考解析: 在變量定義double a* P=&a;中,*號是一個指針運算符,而非間址運算符,所以A錯誤。

5、若有定義語句:int x=10;,則表達式x-=x+x的值為()

A.0

B.-20

C.-10

D.10

參考答案:C

參考解析: 算術運算符+的優先級高于-=,且-=的結合方向為自右向左,所以表達式x-=x+x可以表示成x=x-(x+x)=10-(10+10)=-10,選擇C

6、下列排序方法中,最壞情況下比較次數最少的是()

A.冒泡排序

B.簡單選擇排序

C.直接插入排序

D.堆排序

參考答案:D

參考解析: 冒泡排序與筒單插入排序與簡單選擇排序法在最壞情況下均需要比較n(n-1)/2次,而堆排序在最壞情況下需要比較的次數是nlog2n

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

A.使用三種基本結構構成的程序只能解決簡單問題

B.結構化程序由順序、分支、循環三種基本結構組成

C.C語言是一種結構化程序設計語言

D.結構化程序設計提倡模塊化的設計方法

參考答案:A

參考解析: 使用順序,選擇(分支),循環三種基本結構構成的程序可以解決所有問題,而不只是解決簡單問題,所以A錯誤。

8、以下不構成無限循環的語句或語句組是()

A.n=0

do{++n;}while(n<=0);

B.n=0;

while(1){n++;}

C.n=10;

while(n);{n--;}

D.for(n=0i=1;;i++)n+=i;

參考答案:A

參考解析: 選項Ado后面的語句只執行了一次便結束了循環;B選項中條件while(1)永遠成立,所以是死循環;C選項中n的值為10,而循環體為空語句,所以wilile(n)永遠為真,進入死循環;D選項中for語句第二個表達式為空,所以沒有判別條件,進入死循環。

9、若a是數值類型,則邏輯表達式(a==1)||(a!=1)的值是()

A.1

B.0

C.2

D.不知道a的值,不能確定

參考答案:A

參考解析: 邏輯或”||”要求只要兩邊的運算對象有一個非零,結果就為真。雖然不知道a的值,但是若al,則左邊運算對象為1;a的值不是1,則右邊運算對象的值為1,所以總能保證一邊非零,所以結果為真,即1

10、支持子程序調用的數據結構是()

A.

B.

C.隊列

D.二叉樹

參考答案:A

參考解析: 棧支持子程序調用。棧是一種只能在一端進行插入或刪除的線性表,在主程序調用子函數時要首先保存主程序當前的狀態,然后轉去執行子程序,最終把子程序的執行結果返回到主程序中調用子程序的位置,繼續向下執行,這種調用符合棧的特點,因此本題的答案為A




考無憂小編tips

有時候經歷越多越會明白,在這個世界上,總有幾樣東西是別人拿不走的。比如,你讀過的書、看過的風景、復習過的二級C語言試題,更包括你那些曾經被嘲笑過的夢想。







文章推薦:

全國計算機等級考試可以不考一級直接考二級嗎?

2019年全國計算機等級考試題庫“二級MS Office 高級應用考試大綱”

全國計算機等級考試報考成功后可以退費嗎?(內附計算機等級考試題庫)


溫馨提示:

考試想拿高分嗎?更多計算機等級考試題庫二級ms office試題請點擊查看>>>二級ms office

想要了解更多的計算機等級考試題庫請點擊下載>>>計算機等級考試題庫

想知道更多關于計算機等級考試題庫的近期資訊嗎?點擊進入>>>計算機等級考試題庫資訊



本文網址:http://www.www.bdb55.com/info/jsjdjks/1907/2654774.html
選擇分享到:
黄色软件免费