當前位置:才華齋>計算機>計算機二級>

2017計算機二級考試《C++》上機考試題及答案

計算機二級 閱讀(5.05K)

通過試題練習,能夠幫助考生們更好掌握所學知識點,以下是本站小編搜尋整理的一份計算機二級考試《C++》上機考試題及答案,供參考練習,預祝考生們考出自己理想的成績!想了解更多相關資訊請持續關注我們應屆畢業生考試網!

2017計算機二級考試《C++》上機考試題及答案

  一、程式改錯題

使用VC++6.0開啟考生資料夾下的源程式檔案1.cpp,使其輸出結果為:

n=0

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

試題程式:

#include

//********error*******。

classTC()

{

public:

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

void~TC(){}

TC(intn)

{

cout<<’n’<<’=’<  };

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

}

voidmain()

{

TCtest(0);

return;

}

  二、簡單應用題

使用VC++6.0開啟考生資料夾下的源程式檔案2.cpp。請完成函式fun(char*str,charch)的定義,本函式採用二分法,在已按字母次序從小到大排序的字元陣列str中,查詢字元ch,若ch在陣列中,函式返回字元ch在陣列中的下標,否則返回1。

二分法查詢的思想是初始查詢區間的下界為0,上界為len-1,查詢區間的中部後,k=(下界+上界)/2;若list[k]等於ch,查詢成功;若list[k]>ch,則新的查詢區間的下界不變,上界改為k-1;否則新的查詢區間的下界改為k+1,上界不變。在新區間內繼續用二分法查詢。

注意:請勿改動主函式main與其他函式中的任何內容,僅在函式fun的花括號中填入所編寫的若干語句。

試題程式:

#include(iostream.h>

intfun(char*str,charch)

{

}

voidmain()

{

charstr[]={’a’,’b’,’C’,’d’,’e’,’f’,’9’,’h’,’i,’

j’,’k’);

charch;

cout<<"請輸入一個字元:"<  cin>>ch;

cout<<"輸入字元的位置是:"<  return;

}

  三、綜合應用題

使用VC++6.0開啟考生資料夾下的源程式檔案3.cpp,閱讀下列程式說明和程式碼,功能如下:

從螢幕輸入數字,然後由大到小插入到指定的鏈中。當輸入0時,表示輸出的資料已經輸入完成,把資料列印到螢幕,並釋放記憶體。

其中定義的類不完整,按要求完成下列操作,將類的定義補充完整。

(1)在父結點的Next中儲存新插入的結點的指標,請在註釋1後新增適當的語句。

(2)把pNext的子結點賦給pNext本身,請在註釋2後新增適當的語句。

(3)判定P的子結點不為空,如果不為空,則列印P中的資料到螢幕,請在註釋3後新增適當的語句。

(4)用t1儲存動態申請記憶體結點的連結串列頭,請在註釋4

後新增適當的語句。

注意:僅在函式指定位置新增語句,請勿改動主函式

main與其他函式中的任何內容。

試題程式:

#include

classTC

{

public:

TC(intdata=O)

{

this->data=data;

this->next=NULL;

}

intdata;

TC*next;

};

voidInsert(TC*P,intdata)

{

TC*temp=newTC(data);

TC*pParent=P:

TC*pNext=p-)next:

while(pNext)

{

if(data>pNext->data)

{

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

temp->next=pNexti

return;

}

else

{

pParent=pNext;

//********2********

}

}

if(pNext==NULL)

{

pParent->next=temp;

return;

}

}

voidprintf(TC*p)

{

//********3********

while()

{

coutdata<<"";

P=P->next;

}

cout<  }

voidDelete(TC*p)

{

//********4********

TC*t1=;

TC*t2;

while(t1!=NULL)

{

t2=t1->next:

tl;

t1=t2:

}

}

voidmain()

{

inti=0;

TChead:

do

{

intdata;

cout<<"請輸入一個數字:"<  cin>>data;

if(data==O)break;

Insert(&head,data);

}while(1);

printf(&head);

Delete(&head):

return;

}

}

試題答案與解析

  一、程式改錯題

(1)應改為“classTC”。

(2)應改為“~TC(){}”。

(3)應改為“};”。

【解析】本題第1處的“classTC()”為類的定義,根據C++中類的'定義格式,類名後面是沒有括號的,所以第1處應為“classTC”。第2處的“void~TC(){}”是解構函式,C++中解構函式的格式中是沒有函式型別說明的,所以修改為“~TC(){}”。根據C++中類的定義,第3個標識下類結束的“}”缺少分號,即修改為“};”。

  二、簡單應用題

intlow=0;//初始查詢區間的下界

inthigh;

intk;

for(high=0;str[high]!=0;high++)//求字串長度

while(10w  {

k=(low+high)/2;

if(str[k]==ch)

returnk;

elseif(str[k]>ch)

high=k-l:

elselow=k+1:

}

if(str[low]==ch)

returnlow;

return-1:

【解析】本題首先初始查詢區間的下界為0,然後求得字串長度len,上界為len-1,查詢區間的中部後,k=(下界+上界)/2;若list[k]等於ch,查詢成功。若list[k]>ch,則新的查詢區間的下界不變,上界改為k-1;否則新的查詢區間的下界改為k+1,上界不變。

  三、綜合應用題

(1)應新增“pParenl->next=telnp;”。

(2)應新增“pNext=pNext->next;”。

(3)將“while()”補充完整為“while(P->next!=NULL)”。

(4)將“TC*t1=;”補充完整為“TC*t1=P->next;”。

【解析】本題第1處要求“在父結點的Next中儲存新插入的結點的指標”。對於指標的操作,pParent->next為pParent的子結點,在父結點的Next中儲存新插入的結點的指標,即“pParent->next=temp;”。第2處要求“把pNext的子結點賦給pNext本身”。pNext->next為pNext的子結點,把pNext的子結點賦給pNext本身,即“pNext=pNext->next;”。註釋3下是判定P的子結點不為空。P的子結點是p->next。程式中的“while()”缺乏P的子結點不為空的判斷條件,所以修改為“while(P->next!=NULL)”。第4處要求“用t1儲存動態申請記憶體結點的連結串列頭”。P為連結串列,P->next為連結串列頭。程式中的語句“TC*t1=;”中t1沒有被賦值,所以修改為“TC*t1=P->next;”。