點(diǎn)擊查看:2015年計(jì)算機(jī)二級考試C++過關(guān)練習(xí)題及答案匯總
1[簡答題]定義內(nèi)聯(lián)函數(shù)實(shí)現(xiàn)求三個(gè)實(shí)數(shù)中的最大值。
參考解析:
解:內(nèi)聯(lián)函數(shù)只適用于功能簡單,代碼短小而又被重復(fù)使用的函數(shù)。函數(shù)體中包含復(fù)雜結(jié)構(gòu)控制語句,如switch、復(fù)雜if嵌套、while語句等,以及無法內(nèi)聯(lián)展開的遞歸函數(shù),都不能定義為內(nèi)聯(lián)函數(shù),即使定義,系統(tǒng)也將作為一般函數(shù)處理。
#include
inline max(int a,int b,int c){
if(a>b&&a>c) return a;
if(b>a&&b>c) return b;
if(c>a&&c>b) return c;
}
void main(){
cout<
}
2[簡答題]設(shè)計(jì)一個(gè)單向鏈表類模板,節(jié)點(diǎn)數(shù)據(jù)域中數(shù)據(jù)從小到大排列,并設(shè)計(jì)插入、刪除節(jié)點(diǎn)的成員函數(shù)。
參考解析:
#include
using namespace std;
templateclass List;
templateclass Node{
T info; //數(shù)據(jù)域
Node *link; //指針域
public:
Node(); //生成頭結(jié)點(diǎn)的構(gòu)造函數(shù)
Node(const T & data);//生成一般結(jié)點(diǎn)的構(gòu)造函數(shù)
friend class List;
};
template Node::Node(){link=NULL;}
template Node::Node(const T & data){
info=data;
link=NULL;
}
//定義鏈表類
templateclass List{
Node *head; //鏈表頭指針和尾指針
public:
List(); //構(gòu)造函數(shù),生成頭結(jié)點(diǎn)(空鏈表)
~List(); //析構(gòu)函數(shù)
void MakeEmpty(); //清空一個(gè)鏈表,只余表頭結(jié)點(diǎn)
Node* Find(T data); //搜索數(shù)據(jù)域與data相同的結(jié)點(diǎn),返回該結(jié)點(diǎn)的地址
void PrintList(); //打印鏈表的數(shù)據(jù)域
void InsertOrder(Node *p); //按升序生成鏈表
Node* CreatNode(T data); //創(chuàng)建一個(gè)結(jié)點(diǎn)(孤立結(jié)點(diǎn))
Node* DeleteNode(Node* p); //刪除指定結(jié)點(diǎn)
};
templateList::List(){
head=new Node(-9999);//頭結(jié)點(diǎn),最小的數(shù)據(jù)從小到大插入
}
templateList::~List(){
MakeEmpty();
delete head;
}
templatevoid List::MakeEmpty(){
Node *tempP;
while(head->link!=NULL){
tempP=head->link;
head->link=tempP->link; //把頭結(jié)點(diǎn)后的第一個(gè)節(jié)點(diǎn)從鏈中脫離
delete tempP; //刪除(釋放)脫離下來的結(jié)點(diǎn)
}
}
template Node* List::Find(T data){
Node *tempP=head->link;
while(tempP!=NULL && tempP->info!=data) tempP=tempP->link;
return tempP; //搜索成功返回該結(jié)點(diǎn)地址,不成功返回NULL
}
templatevoid List::PrintList(){
Node* tempP=head->link;
while(tempP!=NULL){
cout tempP=tempP->link; } cout< } templatevoid List::InsertOrder(Node *p){ Node *tempP=head,*tempQ=head; //tempQ指向tempP前面的一個(gè)節(jié)點(diǎn) while(tempP!=NULL){ if(p->infoinfo)break; //找第一個(gè)比插入結(jié)點(diǎn)大的結(jié)點(diǎn),由tempP指向 tempQ=tempP; tempP=tempP->link; } p->link=tempP; tempQ->link=p; } templateNode* List::CreatNode(T data){//建立新節(jié)點(diǎn) Node*tempP=new Node(data); return tempP; } templateNode* List::DeleteNode(Node* p){ Node* tempP=head->link,*tempQ=head,*tempC; while(tempP!=NULL && tempP!=p){ tempQ=tempP; tempP=tempP->link; } tempC=tempP; tempQ->link=tempP->link; return tempC; } int main(){ Node * P1; List list1; int a[10]={20,12,0,-5,9,-18,6,11,5,3},i,j; for(i=0;i<10;i++){ P1=list1.CreatNode(a[i]); list1.InsertOrder(P1); } list1.PrintList(); cout<<"請輸入一個(gè)要求刪除的整數(shù)"< cin>>j; P1=list1.Find(j); if(P1!=NULL){ P1=list1.DeleteNode(P1); delete P1; list1.PrintList(); } else cout<<"未找到"< cout<<"請輸入一個(gè)要求插入的整數(shù)"< cin>>j; P1=list1.CreatNode(j); list1.InsertOrder(P1); list1.PrintList(); list1.MakeEmpty();//清空list1 list1.PrintList(); return 0; } 3[單選題] 下列關(guān)于虛函數(shù)與函數(shù)重載區(qū)別的敘述中不正確的是( )。 A.函數(shù)說明形式上不同 B.函數(shù)允許非成員函數(shù)重載,虛函數(shù)只能是成員函數(shù) C.函數(shù)重載的調(diào)用依據(jù)參數(shù)和類型的差別,虛函數(shù)則依據(jù)對象 D.函數(shù)重載的本體可以在類外定義,虛函數(shù)不可以 參考答案:D 參考解析:A項(xiàng)、B項(xiàng)、C項(xiàng)均為虛函數(shù)與函數(shù)重載的不同之處。但有一點(diǎn)它們是相同的:在類內(nèi)外定義均可。故D項(xiàng)錯(cuò)誤。 4[單選題] 設(shè)有表示學(xué)生選課的3張表,學(xué)生S(學(xué)號、姓名、性別、年齡、身份證號)、課程C(課號、課名)、選課SC(學(xué)號、課號、成績),則表SC的關(guān)鍵字(鍵或碼)為( )。 A.課號、成績B.學(xué)號、成績C.學(xué)號、課號D.學(xué)號、姓名、成績 參考答案:C 參考解析:關(guān)鍵字是指屬性或?qū)傩缘慕M合,其功能是唯一地標(biāo)識一個(gè)元組或數(shù)據(jù),而SC中學(xué)號和課號的組合可以對元組進(jìn)行唯一的標(biāo)識。 5[單選題]
參考答案:C 6[單選題]執(zhí)行下列語句后,輸出結(jié)果為( )。 cout.put('s'); cout<<'c'<<'a'; A.ca B.sca C.s D.a 參考答案:B 7[單選題]在一棵二叉樹的前序遍歷、中序遍歷、后序遍歷所產(chǎn)生的序列中,所有葉結(jié)點(diǎn)的先后順( )。 A.都不相同 B.完全相同 C.前序和中序相同,而與后序不同 D.中序和后序相同,而與前序不同 參考答案:B 參考解析:對二叉樹的訪問有3種方式,其中任意的兩種可惟一確定一顆二叉樹,但無論是前序、后序還是中序遍歷二叉樹時(shí),其區(qū)別在于訪問根的先后次序不同,而訪問葉結(jié)點(diǎn)的順序完全相同。 8[單選題] 下列語句都是程序運(yùn)行時(shí)的第一條輸出語句,其中一條語句的輸出效果與其他三條語句不同,該語句是( )。 A.cout< 參考答案:D 參考解析:setw(6)將輸出寬度設(shè)為6,如果位數(shù)不夠則在最左邊補(bǔ)齊,因此該項(xiàng)輸出一定不會與其他三項(xiàng)一致。 9[簡答題] 請使用VC6或使用【答題】菜單打開考生文件夾proj2下的工程proj2,此工程包含有一個(gè)源程序文件proj2.cpp,其中定義了Stack類和ArrayStack類。 Stack是一個(gè)用于表示數(shù)據(jù)結(jié)構(gòu)“!钡念,棧中的元素是字符型數(shù)據(jù)。Stack為抽象類,它只定義了棧的用戶接口,如下所示: 公有成員函數(shù) 功能 push 入棧:在棧頂位置添加一個(gè)元素 pop 退棧:取出并返回棧頂元素 ArrayStack是Stack的派生類,它實(shí)現(xiàn)了Stack定義的接口。ArrayStack內(nèi)部使用動態(tài)分配的字符數(shù)組作為棧元素的存儲空間。數(shù)據(jù)成員maxSize表示的是棧的最大容量,top用于記錄棧頂?shù)奈恢谩3蓡T函數(shù)push和pop分別實(shí)現(xiàn)具體的入棧和退棧操作。 請?jiān)诔绦蛑械臋M線處填寫適當(dāng)?shù)拇a,然后刪除橫線,以實(shí)現(xiàn)上述功能。此程序的正確輸出結(jié)果應(yīng)為: a,b,C C,b,a 注意:只在指定位置編寫適當(dāng)代碼,不要改動程序中的其他內(nèi)容,也不要刪除或移動“//****料found****”。 //proj2.cpp #include using namespacc std; class Stack{ public: virtual void push(char C)=0; virtual char pop()=0; }; class ArrayStack:public Stack{ char*P; int maxSizc; int top; public: ArravStack(int s) { top=0; maxSize=s: //*********found********* P=______; } ~ArrayStack() { //*********found********* _______; } void push(char c) } if(top==maxSize){ cerr<<”O(jiān)verflow! \n”: return; } //*********found********* _______; top++: } char pop() { if(top==0){ cerr<<”Underflow!、n”; return‘\0’; } Top--; //*********found********* ______; } }; void f(Stack&sRef) { char ch[]={‘a(chǎn)’,‘b’,‘c’}; cout< sRef.push(oh[0]);sRef.push(ch[1]);sRef.push(ch[2]); cout< cout< cout< } int main() { ArrayStack as(10); f(as): return 0: } 參考解析: (1)Ilew char[s] (2)delete[]P (3)P[top]=e (4)return P[top] 【考點(diǎn)分析】 本題主要考查的是表示棧的抽象類Stack類及它的派生類ArrayStaek類、純虛函數(shù)和成員函數(shù)。棧的節(jié)點(diǎn)一般使用指針表示,定義構(gòu)造函數(shù)時(shí)要給指針分配空間,使用New語句來完成!獳rrayStack()是析構(gòu)函數(shù),因?yàn)榍懊嬉呀?jīng)使用new來分配空間了,因此在這里要用delete語句來釋放指針。 【解題思路】 (1)主要考查的是ArrayStack類的構(gòu)造函數(shù),在函數(shù)中要為P申請S個(gè)char型空間,應(yīng)使用語句P=flew char[s];。 (2)主要考查析構(gòu)函數(shù),使用delete語句釋放指針,即delete[]P;。 (3)主要考查push函數(shù),top表示棧頂元素下標(biāo),添加的數(shù)據(jù)放到棧頂,因此使用語句P[top]=c;。 (4)主要考查pop函數(shù),輸出棧頂數(shù)據(jù),top表示棧頂元素下標(biāo),因此使用語句return P[top];。 10[單選題]有以下函數(shù) fun(char *a,char *b) { while((*a!=’\0’) &&(*b!=’\0’)&&(*a==*b)) { a++; b++;} return (*a-*b); } 該函數(shù)的功能是( ) A.計(jì)算a和b所指字符串的長度之差 B.將b所指字符串復(fù)制到a所指字符串中 C.將b所指字符串連接到a所指字符串后面 D.比較a和b所指字符串的大小 參考答案:D 相關(guān)推薦: 2015年9月計(jì)算機(jī)等級考試成績查詢時(shí)間通知 2015年9月計(jì)算機(jī)等級考試真題及答案解析專題
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |