面向對象程序設計期末復習指導_第1頁
面向對象程序設計期末復習指導_第2頁
面向對象程序設計期末復習指導_第3頁
面向對象程序設計期末復習指導_第4頁
面向對象程序設計期末復習指導_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費閱讀

付費下載

下載本文檔

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

文檔簡介

面向對象程序設計期末復習指導面向對象程序設計課程系中央電大開放教育本科計算機科學與技術專業(yè)統設必修課程,電大給出一套綜合練習題,僅作參考。綜合練習題一、單選題1、C++源程序文件的默認擴展名為()。A:cppB:exeC:objD:lik2、用new運算符創(chuàng)建一個含10個元素的一維整型數組的正確語句是()。A:int*p=newa[10];B:int*p=newfloat[10];D:int*p=newint[10]={1,2,3,4,5}則正確的語句為。4、假定指針變量p定義為“int*p=neA:deletep;B:delete*p;C:delete&p;5、關于消息,下列說法中不正確的是。A:發(fā)送消息的對象請求服務,接受消息的對象提供服務B:消息的發(fā)送者必須了解消息的接收者如何相應消息C:在C++中,消息的發(fā)送具體體現為對接收消息的對象的某個函數的調用D:每個對象只能接收某些特定格式的消息6、對于任一個類,用戶所能定義的析構函數的個數至多為()。A:復合B:ifC:switchD:whileA:x(a)B:x[a]C:x->aD:x.aA:x.aB:x.a()C:x->GetValue()D:x.GetValue()10、假定AB為一個類,則()為該類的拷貝構造函數的原型說明。A:AB(ABx);B:AB(AB&x);C:voidAB(AB&x);11、關于運算符重載,下列說法正確的是。A:重載時,運算符的優(yōu)先級可以改變。B:重載時,運算符的結合性可以改變。C:重載時,運算符的功能可以改變。D:重載時,運算符的操作數個數可以改變。D:AB(intx);A:派生類至少有一個基類B:派生類可作為另一個派生類的基類C:派生類除了包含它直接定義的成員外,還包含其基類的成員D:派生類所繼承的基類成員的訪問權限保持不變13、C++程序的基本模塊為。A:語句B:函數C:表達式D:標識符A:在一個函數中,可以有多條return語句B:函數的定義不能嵌套,但函數的調用可以嵌套C:函數必須有返回值D:不同的函數中可以使用相同名字的變量15、文件包含命令中被包含的文件的擴展名。A:必須是.hB:不能是.hC:可以是.h或.cppD:必須是.cpp16、軟件產品可被全部或部分地再用于新的應用的能力叫做軟件的。A:可維護性B:可復用性C:兼容性D:正確性()A:公有繼承的公有成員B:公有繼承的私有成員C:公有繼承的保護成員D:私有繼承的公有成員19、程序運行中需要從鍵盤上輸入多于一個數據時,各數據之間應使用()符號作A:空格或逗號B:逗號或回車C:逗號或分號D:空格或回車20、假定有定義“intb[10];int*pA:pb=b[5];B:*pb=newint;C:pb=&b[0];D:pb=b;標為5的元素,不正確的語句是。A:pa[5]=12.35;B:a[5]=12.35;C:*(pa+5)=12.35;D:*(a[0]+5)=12.35;22、關于面向對象系統分析,下列說法中不正確的是。A:術語“面向對象分析”可以用縮寫OOA表示B:面向對象分析階段對問題域的描述比實現階段更詳細面向對象分析包括問題域分析和應用分析兩個步驟D:面向對象分析需要識別對象的內部和外部特征在C++程序中使用的cin標識符是系統類庫中定義的(A:istreamB:ostreamC:iostreamD:fstreamA:動態(tài)分配一個數組B:動態(tài)分配一個對象C:靜態(tài)分配一個數組D:靜態(tài)分配一個對象25、在下面循環(huán)語句中循環(huán)體執(zhí)行的次數為。inti=0,s=0;while(s<20){i+26、以下敘述不正確的是()。A:宏替換不占用運行時間B:宏名無類型C:宏替換只是字符替換D:宏名必須用大寫字母表示值賦給x,則不正確的語句為。A:x=a[3];B:x=*(a+3);C:x=pa[3];D:x=*pa+3;28、如果表達式++a中的“++”是作為成員函數重載的運算符,若采用運算符函數調用格式,則可表示為。A:a.operator++(1)B:operator++(a)C:operator++(a,1)D:a.operator++()針域用next表示,鏈隊的隊首指針用elemHead表示,隊尾指針用elemTail表示,若鏈隊為空,則進行插入時必須把新結點的地址賦給()。A:elemHeadB:elemTailC:elemHead和elemTailD:elemHead或elemTail31、類的析構函數可以帶有()個參數。32、下面是重載雙目運算符-的成員函數原形,其中最符合-原來含義的是。A:ValueValue::operator-(Value);B:ValueValue::operator-(int);C:Value&Value::operator-(Value);D:Value&Value::operator-(Value&);A:該運算符是一個單目運算符。B:該運算符函數有一個隱含的參數this。C:該運算符函數是類的成員函數。D:該運算符函數是類的友元函數。二、編程綜合題1.#include<iostream.h>{}voidmain(){intb[8]={4,8,6,9,2,10,7,12};intx;f4(b,5,x);cout<<x<<'';inty;f4(b+3,4,y);cout<<y<<'';cout<<x+y<<endl;}2.#include<iostream.h>voidmain(){inta[10]={76,83,54,62,40,75,90,92,77,84};intb[4]={60,70,90,101};for(inti=0;i<10;i++){while(a[i]>=b[j])j++;c[j]++;}for(i=0;i<4;i++)cout<<c[i]<<’’;cout<<endl;}3.#include<iostream.h>classA{public:A(intx=0):a(newint(x)){}voidmain(){Ax1,x2(3);A*p=&x2;p->setA(x2.getA()+5);x1.setA(15+x1.getA());cout<<x1.getA()<<''<<x2.getA()<<endl;}4.#include<iostream.h>#include<string.h>classPoint{public:Point(intx1=0,inty1=0):x(x1),y(y1){cout<<"Point:"<<x<<''<<y<<'';}~Point(){cout<<"Pointdes!";}classText{chartext[100];//文字內容public:Text(char*str){strcpy(text,str);cout<<"Textcon!";}~Text(){cout<<"Textdes!";}classCircleWithText:publicPoint,publicText{public:CircleWithText(intcx,intcy,char*msg):Point(cx,cy),Text(msg){cout<<"PointwithTextcon!";}~CircleWithText(){cout<<"PointwithTextdes";}voidmain(){CircleWithTextcm(3,4,"hello");}5、#include<iostream.h>voidmain(){intb=a+20;cout<<a<<''<<b<<endl;a+=i;b+=a;}cout<<a<<''<<b<<endl;}cout<<a<<''<<b<<endl;}#include<iostream.h>{x=x+y;y=x+y;cout<<"x="<<x<<",y="<<y<<endl;returnx+y;}voidmain(){intx=5,y=8;cout<<"x="<<x<<",y="<<y;cout<<",z="<<z<<endl;}#include<iostream.h>nume;//定義分子deno;//定義分母public://把*this化簡為最簡分數,具體定義在另外文件中實現voidFranSimp();//返回兩個分數*this和x之和,具體定義在另外文件中實現FranctionFranAdd(constFranction&x);//置分數的分子和分母分別0和1voidInitFranction(){nume=0;deno=1;}//置分數的分子和分母分別n和dvoidInitFranction(intn,intd){nume=n;deno=d;}//輸出一個分數voidFranOutput(){cout<<nume<<'/'<<deno<<endl;}voidmain(){Franctiona,b,c,d;a.InitFranction(6,15);b.InitFranction(3,10);c.InitFranction();c=a.FranAdd(b);d=c.FranAdd(a);cout<<"a:";a.FranOutput();cout<<"b:";b.FranOutput();cout<<"c:";c.FranOutput();cout<<"d:";d.FranOutput();}#include<iostream.h>classPoint{public:Point(intx1=0,inty1=0):x(x1),y(y1){cout<<"Point:"<<x<<''<<y<<'';}~Point(){cout<<"Pointdestructor!";}classCircle{Pointcenter;//圓心位置intradius;//半徑public:Circle(intcx,intcy,intr):center(cx,cy),radius(r){cout<<"Circleradius:"<<radius<<'';}~Circle(){cout<<"Circledestructor!";}voidmain(){Circlec(3,4,5);}#include<iomanip.h>voidmain(){c2=c3=c5=0;if(i%2==0)c2++;if(i%3==0)c3++;if(i%5==0)c5++;}cout<<c2<<''<<c3<<''<<c5<<endl;}#include<iostream.h>voidmain(){intp=1,s=1;while(s<50){p*=B;}cout<<"s="<<s<<endl;}#include<iostream.h>voidmain(){chars[3][5]={"1234","abcd","+-*/"};char*p[3];for(intI=0;I<3;I++)p[I]=s[I];for(I=2;I>=0;I--)cout<<p[I]<<'';cout<<endl;}#include<iostream.h>#include<string.h>public:voidInit(char*aa,intbb){a=newchar[strlen(aa)+1];strcpy(a,aa);b=bb;}voidOutput(){cout<<a<<''<<b<<endl;}voidmain(){dx.Init("abcdef",30);dy.Init("shenyafen",3*dx.Getb()+5);dx.Output();dy.Output();}#include<iostream.h>classDate{public:Date(inty=2001,intm=1,intd=1){Year=y;Month=m;Day=d;}voidPrintDate(){cout<<Year<<"/"<<Month<<"/"<<Day<<endl;}protected:intYear,Month,Day;classTime{public:Time(inth=5,intm=30,ints=0){Houre=h;Minutes=m;Seconds=s;}voidPrintTime(){cout<<Houre<<":"<<Minutes<<":"<<Seconds<<endl;}protected:intHoure,Minutes,Seconds;classDate_Time:publicDate,publicTime{public:Date_Time(){};Date_Time(inty,intmo,intd,inth=0,intmi=0,ints=0):Date(y,mo,d),Time(h,mi,s){}voidPrintDate_Time(){PrintDate();PrintTime();}voidmain(){Date_Timea,b(2002,10,1,6,20,0),c(2003,3,8,6,7);a.PrintDate_Time();b.PrintDate_Time();c.PrintDate_Time();}//*********************test.h********************//#include<iostream.h>classBase{public:voidMove(intx,inty){x0+=x;y0+=y;}voidShow(){cout<<"Base("<<x0<<","<<y0<<")"<<endl;}private:classDerived:privateBase{public:Derived(inti,intj,intm,intn):Base(i,j){x=m;y=n;}voidShow(){cout<<"Next("<<x<<","<<y<<")"<<endl;}voidMove1(){Move(2,3);}voidShow1(){Base::Show();}private://**************************test.cpp************************//#include"test.h"voidmain(){Baseb(1,2);b.Show();Derivedd(3,4,10,15);d.Move1();d.Show();d.Show1();}#include<iomanip.h>voidmain(){for(i=1;i<N;i++){p=p*i;cout<<setw(5)<<i<<setw(5)<<p;cout<<setw(5)<<s<<endl;}}#include<iostream.h>voidfun();voidmain(){fun();}voidfun(){cout<<(a+=3,a+b)<<'';}#include<iostream.h>classA{public:A(intaa[],intnn):n(nn){for(inti=0;i<n;i++)a[i]=aa[i];}intSumA(intn){for(intj=0;j<n;j++)s+=a[j];returns;}voidmain(){inta[]={2,5,8,10,15,20};Ax(a,4);Ay(a,6);for(inti=0;i<4;i++)d*=x.Get(i);intf=y.SumA(5);cout<<"d="<<d<<endl;cout<<"f="<<f<<endl;}三、簡答題2.已知,求出并顯示當x依次取從鍵盤輸入的不同值時所對應的y值,要求把a定義為常量,其值設定為10.2,x的每個值由鍵盤輸入,并假定用-100作為鍵盤輸入數據的終止標志,求平方根函數為sqrt(x)。3.根據下面類中CompareBig函數成員的原型和注釋寫出它的類外定義。classAA{public:voidInitAA(intaa[],intnn,intms){if(nn>ms){cout<<"Error!"<<endl;exit(1);}MS=ms;n=nn;for(inti=0;i<n;i++)a[i]=aa[i];}intCompareBig(AAb);//比較*this與b的大小,從前向后按兩數組//中的對應元素比較,若*this中元素值大則返回1,若b中//元素值大則返回-1,若相等則繼續(xù)比較下一個元素,直到//一個數組中無元素比較,此時若兩者的n值相同則返回0,//否則若*this中的n值大則返回1,若b中的n值大4、根據下面類中Give函數的原型和注釋寫出它的類外定義。classArray{int*a;//指向動態(tài)分配的整型數組空間intn;//記錄數組長度public:Array(intaa[],intnn);//構造函數,利用aa數組長度nn初始化n,//利用aa數組初始化a所指向的數組空間Array(Array&aa);//拷貝構造函數Array&Give(Array&aa);//實現aa賦值給*this的功能并返回*thisArrayUion(Array&aa);//實現*this和aa中的數組合并的//功能,把合并結果存入臨時對象并返回intLenth(){returnn;}//返回數組長度cout<<a[i]<<'';cout<<endl;}指出程序或函數的功能doublef1(doublea,doubleb,charop){switch(op){cout<<"dividedby0!"<<endl;exit(1);}elsereturna/b;default:cout<<"operatorerror!"<<endl;exit(1);}}6、根據下面類中Compare函數成員的原型和注釋寫出它的類外定義。classAA{public:voidInitAA(intaa[],intnn,intms){if(nn>ms){cout<<"Error!"<<endl;exit(1);}MS=ms;n=nn;for(inti=0;i<n;i++)a[i]=aa[i];}intCompare(AAb);//比較*this與b的大小,若兩者中//的n值相同,并且數組中前n個元素值對應//相同,則認為兩者相等返回1,否則返回0。函數Multiply()。請按照友元函數Multiply()的聲明編寫出該函數的定義。classMatrix{public:Matrix(introw,intcol);//構造一個具有row行col列的矩陣friendboolMultiply(Matrix&m1,Matrix&m2,Matrix&m3);//定義Multiply()為友元函數,該函數把m1×m2的值賦給m3//其他成員函數從略private:int*mem;//動態(tài)申請矩陣空間constintrows,cols;//矩陣的行數和列數Matrix::Matrix(introw,intcol):rows(row),cols(col){mem=newint[row*col];}boolMultiply(Matrix&m1,Matrix&m2,Matrix&m3){//確定矩陣是否能夠進行相乘false;//定義sum變量,用于計算乘積矩陣m3中每個元素的值//請在下面編寫剩余部分}指出程序或函數的功能{if(m<b&&n<b)returnm*n;elseif(m%b==0&&n%b==0)returnb*fun6(m/b,n/b,b);elsereturnfun6(m,n,++b);}下面程序段第4-9行中存在著三條語句錯誤,請指出錯誤語句的行號并說明原因。inta,b;//2行constintc;//3行public://4行A(){a=b=c=0;}//5行A(intaa,intbb):c(aa+bb){a=aa;b=bb;}//6行};//7行Aa,b(1,2,3);//8行Ax(2,3),y(4);//9行錯誤行的行號為、和。錯誤原因分別為、和。10、根據下面類中Uion函數的原型和注釋寫出它的類外定義。classArray{int*a;//指向動態(tài)分配的整型數組空間intn;//記錄數組長度public:Array(intaa[],intnn);//構造函數,利用aa數組長度nn初始化n,//利用aa數組初始化a所指向的數組空間Array(Array&aa);//拷貝構造函數Array&Give(Array&aa);//實現aa賦值給*this的功能并返回*thisArrayUion(Array&aa);//實現*this和aa中的數組合并的功能,把合并//結果(其長度為兩數組長度之和)存入臨時對象并返回intLenth(){returnn;}//返回數組長度cout<<a[i]<<'';cout<<endl;}指出程序或函數的功能voidf4(chara[M][N]){c1=c2=c3=0;for(inti=0;i<M;i++)if(strlen(a[i])<5)c1++;elseif(strlen(a[i])>=5&&strlen(a[i])<15)c2++;}12、根據下面類中拷貝構造函數的原型寫出它的類外定義。classStrings{char*s;//指向動態(tài)分配的字符串數組空間intn;//記錄字符串長度public:Strings(char*str);//構造函數,利用str字符串長度初始化n,//利用str字符串初始化s所指的字符串空間Strings(Strings&str);//拷貝構造函數Strings&Give(Strings&str);//實現str賦值給*this的功能StringsUion(Strings&str);//實現*this和str中的字符串合并的//功能,把合并結果存入臨時對象并返回intLenth(){returnn;}//返回字符串長度voidPrint(){cout<<s<<endl;}//輸出字符串指出程序或函數的功能#include<iostream.h>#include<stdlib.h>#include<math.h>voidmain(){while(i>0){a=rand()%90+10;intj,k=int(sqrt(a)+1e-5);//sqrt(x)為求x的平方根函數if(a%j==0)break;}}#include<iostream.h>classFranction{//定義分intnume;//定義分子intdeno;//定義分母public://把*this化簡為最簡分數,具體定義在另外文件中實現voidFranSimp();//返回兩個分數*this和x之和,具體定義在另外文件中實現FranctionFranAdd(constFranction&x);//置分數的分子和分母分別0和1voidInitFranction(){nume=0;deno=1;}//置分數的分子和分母分別n和dvoidInitFranction(intn,intd){nume=n;deno=d;}//輸出一個分數voidFranOutput(){cout<<nume<<'/'<<deno<<endl;}行voidmain(){//2行Franction*a=newFranction;Franction*b=newFranction;a->InitFranction(6,15);//3行//4行//5行//8行}//6行b.//6行Franction//7行c.InitFranction();c=a.FranAdd(b);//10行cout<<c.FranOutput()<<//10行//11行錯誤行的行號為、和。分別改正為、和。下面程序段第4-10行中存在著三行語法錯誤,請指出錯誤行的行號并改正。classA{publicA():c(0);a(0);b(0){}//1行//2行//3行//4行//5行A(intaa,intbb)c(aa+bb);{a=aa;b=bb;}//6行};//7行Aa,b(1,2);//8行A*x=&a,&y=b;//9行A*z=newA,w[10];//10行錯誤行的行號為、和。分別改正為、和。段,把Variance()函數從A_class類中分離出來,用友元函數來實現該函數的功能。classA_class{private:public:A_class(inti,intj):x(i),y(j){if(y>x){t=x;x=y;y=t;}}intVariance(){returnx*x-y*y;}//其它函數從略voidmain(){A_classA_obj(3,5);cout<<"Result:"<<A_obj.Variance()<<endl;}出錯誤所在行的行號并提出改正意見。structNODE{NODE*next;NODE*appendToList(NODE*list,intx){//1行NODE*p=newint;//2行p->data=x;//3行p->next=NULL;//4行if(list==NULL)returnp;//5行NODE*p1=list;//6行while(p1->next!=NULL)p1=p1->next;//7行p1=p;//8行}錯誤行的行號為和。分別改正為和。19、指出程序或函數的功能(每小題6分)#include<iostream.h>voidmain(){for(i=2;i<=30;i+=2)s+=i*i;cout<<"s="<<s<<endl;}四、填空題(主觀)1、十進制常數245對應的十六進制的C++表示為。2、假定p是一個指針,則*p++運算首先訪問,然后使的值增1。3、假定用戶沒有給一個名為AB的類定義析構函數,則系統為其定義的析構函數為 。對數組a[n]按升序進行的選擇排序算法voidSelectSort(inta[],(1)){for(i=1;i<n;i++){//進行n-1次選擇和交換k=i-1;for(j=i;j<n;j++)intx=a[i-1];a[i-1]=a[k];(3);}}5、設enumPrintstatus{ready=2,busy,error};則cou

溫馨提示

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

評論

0/150

提交評論