面向對象程序設計C++模擬試卷_第1頁
面向對象程序設計C++模擬試卷_第2頁
面向對象程序設計C++模擬試卷_第3頁
面向對象程序設計C++模擬試卷_第4頁
面向對象程序設計C++模擬試卷_第5頁
已閱讀5頁,還剩28頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

面向對象程序設計C++模擬試卷考試時間:90分鐘一、 簡答題(10分)(3分)C++中的函數調用有哪幾種方式?它們有什么區別?答案:C++中的函數調用有值傳遞和引用傳遞兩種。(1分)值傳遞時,函數體對形參的任何修改都不會影響實參。(1分)引用傳遞時,函數體對形參的修改就相當于對實參的修改。(1分)(3分)若派生類以private方式從一個基類派生,派生類的對象可以訪問基類中的那些成員?派生類的成員函數可以訪問基類中的那些成員?答案:若派生類以private方式從一個基類派生,派生類的對象不能訪問基類中的任何成員(1分);派生類的成員函數可以訪問基類中的public和protected成員(2分)。1.3(4分)什么是引用?它與指針有什么區別?答案:引用是某個變量或對象的別名。引用不是變量,它不占據內存空間,它本身沒有內存地址。引用只是被引用的變量或對象的替身。(2分)引用與指針的區別在于應用不是變量,而指針是變量。沒有引用的引用,卻有指針的引用。(2分)二、 填空題(20分,每空2分)2.1C++程序中的數據可以分為兩大類,其中是指在程序執行過程中值不改變的數據;是程序中用于存儲信息的單元,并對應于某個內存空間。答案:常量、變量2.2有如下定義語句"MyClass*p;”則執行“p=newMyClass”語句時,將自動調用類MyClass的。執行“deletep;”語句時,自動調用該類的 。答案:構造函數、析構函數C++中函數之間傳遞參數有和兩種方式。答案:值傳遞,引用傳遞2.4給出下列程序的輸出結果:。#include<iostream.h>#defineMIN(x,y)(x)<(y)?(x):(y)voidmain(){inti,j,k;i=10;j=15;k=10*MIN(i,j);cout<<k<<endl;}答案:152.6類的訪問權限有、和三種。答案:private,protect,public三、選擇題(20分,每題2分)3.1在下列選項中,合法的C++變量名是 。long B._2Test C.3Dmax D.A.dat答案:B3.2在對字符數組進行初始化,是正確的。chars1[]="abcd”; B.chars2[3]="xyz”;C.chars3[][3]={'a','x','y'}; D.chars4[2][3]={"xyz”,"mnp"};答案:A3.3字符串常量"ME"的字符個數。A.4 B.3 C.2 D.1答案:B3.4下列對C++main()函數的描述中,正確的。main()函數在同一個C++文件中可以有多個main()函數類型必須是void類型main()函數一定有返回值每個C++程序都必須有一個main()函數答案:D3.5已知:intm=10,下列表示引用的方法中,是正確的。A.int&x=m;B.int&x=10;C.int&x;D.float&x=&m;答案:A3.6下列對C++語言中函數參數默認值的描述中,正確的。函數參數的默認值只能設定一個一個函數的參數若有多個,則參數默認值的設定可以不連續函數參數必須設定默認值在設定參數的默認值之后,該參數后面定義的所有參數都必須設定默認值答案:D3.7下列關于運算符重載的描述中,是正確的。A.運算符重載可改變其優先級 B.運算符重載不改變其語法結構C.運算符重載可改變其結合性 D.運算符重載可改變其操作數的個數答案:B3.8下列關于類的析構函數的描述中,錯誤的。A.類中有且僅有一個析構函數 B.析構函數可以有形參C.析構函數沒有函數類型 D.析構函數在對象撤銷時被自動執行答案:B3.9為了使類中的成員能夠被類的對象通過成員運算符訪問,則應該把成員的訪問權限定義為。A.public B.protectedC.privateD.packaged答案:A3.10假設MyClass為一個類,那么下列函數說明中,是該類的析構函數。A.void~MyClass(); B.~MyClass(intn);C.~MyClass(void); D.~MyClass();答案:D四、讀程題(20分,每題5分)4.1給出下列源程序的輸出結果。#include<iostream.h>voidmain(){intx=5,y=2;cout<<!(y==x/2)<<”,”;cout<<(y!=x%3)<<”,”;cout<<(x>0&&y<0)<<”,”;cout<<(x!=y||x>=y)<<endl;}答案:0,0,0,14.2給出下述源程序的運行結果。#include<iostream.h>voidsub(intx,inty,int*z){*z=y+x;}voidmain(){inta,b,c;sub(8,4,&a);sub(6,a,&b);sub(a,b,&c);cout<<a<<”,"<<b<<”,"<<c<<endl;}答案:12,18,304.3指出下列類定義中的錯誤。classMyClass{inti=0;public:voidMyClass();~MyClass(intvalue);};答案:(1)數據成員i在定義進行了初始化構造函數定義了返回值析構函數定義了參數4.4給出下列程序的運行結果。#include<iostream.h>classPoint{public:TOC\o"1-5"\h\zPoint(inti,int j){x =i; y= j;}voidPrint(){cout<<'('<<x<<', '<<y<<')' <<endl;}voidoperator+= (Point p){ x+= p.x; y += p.y; }voidoperator-= (Point p){ x-= p.x; y -= p.y; }private:intx,y;};voidmain(){PointP1(5,7),P2(4,3);P1.Print();P2.Print();P1+=P2;P1.Print();P2-=P1;P2.Print();}答案:(5,7)(4,3)(9,10)(-5,-7)五、編程題(30分,每題15分)5.1定義并實現一個類Myst,使下列語句能夠正常運行。Mystx(3.2),y(5,5),z(0.0);z=8.9-y;y=x-6.3;參考程序:#include<iostream.h>classMyst{private:doublev;public:Myst(doubled){v=d;}Mystoperator-(doubled){v=v-d;returnv;}friendMystoperator-(doubled,Mystm);};Mystoperator-(doubled,Mystm){returnd-m.v;}5.2編寫能統計某個字符在字符串中出現次數的函數,該函數能利用引用的方式將統計結果帶回給主調函數。編寫該函數,利用main函數調用并測試它。參考程序:#include<iostream.h>#defineMAX100voidcal(char*s,charch,int&rp){while(*s)if(*s++==ch)rp++;}voidmain(){char*string=newchar[MAX];charch;intresult=0;cout<<"請輸入一個字符串:〃;cin>>string;cout<<"請輸入一個字符:";cin>>ch;cal(string,ch,result);cout<<"該字符在串中出現的次數為:"<<result<<endl;}面向對象程序設計C++模擬試卷考試時間:90分鐘一.簡答題(10分)(3分)派生類與基類之間是什么關系?類與對象之間是什么關系?答案:派生類和基類之間是繼承關系,派生類繼承了基類。(2分)類和對象之間是實例化關系,對象是類的實例。(1分)(3分)構造函數的作用是什么?在創建派生類的對象時,應按照怎樣的順序調用構造函數?答案:構造函數的作用是創建對象并對其進行必要的初始化。(1分)構造函數調用順序:基類構造函數、子對象類構造函數(如果有)、派生類構造函數。(2分)(4分)C++提供了哪些循環語句?它們各自的特點是什么?答案:C++提供了三種循環語句for、while和do-while。(1分)while循環語句先判斷是否滿足循環條件,如果滿足循環條件,則執行一次循環體,再判斷是否執行下一次循環,否則退出循環。(1分)do-while循環語句先執行一次循環體后再判斷是繼續執行循環體還是退出循環。(1分)for循環先設置循環變量的初值,再判斷是執行循環體還是退出循環體。如果執行了循環體,再改變循環變量值后,判斷是執行下一次循環體還是退出循環,依此類推。(1分)填空題(20分,每空2分)2.1表示邏輯關系“a大于等于8或者a小于等于5”的C++表達式。答案:a>=8||a<=52.2break語句在循環結構中的功能,continue語句的功能是 。答案:退出其所在的循環,結束本次循環2.3友元可以,也可以。答案:類,函數(答案順序可以交換)2.4有如下程序:#include<iostream.h>voidmain(){chars1[20],s2[20];inti=0,j=0;cin>>si>>s2;while(s1[i]!='\0') i++;do{s1[i]=s2[j];i++; j++;}while(s2[j-1]!='\0');cout<<s1<<endl;}如果為程序輸入:abcdef1234567,執行程序后的輸出結果是:。答案:abcdef12345672.5是用來初始化類的數據成員的一種特殊的成員函數;對象消失時自動執行的成員函數稱為。答案:構造函數,析構函數2.6如果類A繼承了類氏則類A稱為,類B稱為。答案:派生類,基類選擇題(20分,每題2分)3.1下列常量中,是C++語言的浮點型常量。0x12 B.-12345e-3C.1e0.5 D.e-5答案:B3.2字符串常量”HELLO”的字符個數是 。3 B.4 C.5 D.6答案:D3.3下列有關設置函數參數默認值的描述中,是正確的。對設置函數參數默認值的順序沒有任何規定函數具有一個參數時不能設置默認值默認參數要設置在函數的定義語句中,而不能設置在函數說明語句中設置默認參數可使用表達式,但表達式中不可用局部變量答案:D3.4已知:P是一個指向類A數據成員m的指針,a是類A的一個對象,在給m賦值為5的下列表達式中,是正確的。a.p=5 B.a.*p=5 C.a->p=5 D.*a.p=5答案:B3.5在C++中,使用關鍵字 來說明虛函數。A.virtual B.public C.protected D.private答案:A3.6假設類AB用成員函數的方式重載加法運算符,以實現兩個AB類對象的加法,并返回相加的結果,則該成員函數的聲明為。A.ABoperator+(AB&a,AB&B); B.ABoperator+(AB&);C.operator+(ABa); D.AB&operator+();答案:B3.7對定義重載函數的下列要求中,是錯誤的。A.要求參數的個數不同 B.要求參數中至少有一個類型不同C.要求參數個數相同時,參數類型不同 D.要求參數的返回值不同答案:D3.8下列關于C++中類與對象關系的敘述,其中錯誤的是 。對象是類的一個實例一個類只能有一個實例類與對象的關系和數據類型與變量的關系相似任何一個對象都屬于一個已知的類答案:B3.9下列關于公有繼承方式的描述中,錯誤的。基類的公有成員對其派生類的對象為可見基類的保護成員對其派生類的對象為可見基類的公有和保護成員對派生類可見基類中的私有成員對派生類不可見答案:B3.10下列對C++中靜態數據成員的描述中,正確的是_靜態數據成員是類的所有對象共享的數據類的每個對象都有自己的靜態數據成員類的不同對象有不同的靜態數據成員值靜態數據成員不能通過類的對象來調用答案:A讀程題(20分,每題5分)4.1給出下述源程序的運行結果。#include<iostream.h>voidmain(){inti=0,a=0;while(i<=20){for(;;){if((i%10)==0)break;elsei++;}a+=i;i++;}cout<<a<<endl;}答案:304.2給出下述源程序的運行結果并說明該程序的功能。#include<iostream.h>#include<string.h>voidmain(){chara[]="changuage”,t,m;inti,j,k;k=strlen(a);for(i=0;i<=k-2;i+=2){m=i;for(j=i+2;j<=k;j+=2)if(a[m]>a[j])m=j;if(m!=i){t=a[i];a[i]=a[m];a[m]=t;}}cout<<a<<endl;}答案:程序的功能是:將字符數組a中下標值為偶數的元素從小到大排列,其他元素不變。運行結果:ahancuegg4.3給出下述源程序的運行結果。#include<iostream.h>voidmain(){staticintx[]={5,4,3,2,1};int*p=&x[1];inta=10,b;for(inti=3;i>=0;i—)b=(*(p+i)<a)?*(p+i):a;cout<<b<<endl;}答案:44.4指出下列源程序中的錯誤及出錯原因,并改正之。#include<iostream.h>classPoint{intx,y;Point(){x=y=0;}public:intGetx(){returnx;}intGety(){returny;}voidsetPoint(inti,intj){x=i,y=j;}};voidmain(){Pointpl,*p2;p1.setPoint(10,5);p2->setPoint(3,6);cout<<p1.Getx()<<endl;}答案:(1)Point(){x=y=0;}應聲明成public(編譯錯)(2)p2->setPoint(3,6);之前應為p2賦初值(運行錯)編程題(30分,每題15分)5.1編寫程序統計“char*strSource="AABADCDABDEA〃呻A的個數。參考程序:#include<iostream.h>voidmain(){char*strSource="AABADCDABDEA”;intcount=0; //計數器for(inti=0;strSource[i]!='\0';i++) {if(strSource[i]=='A')count++;}cout<<"A的個數是:〃<<count<<endl;}5.2在一個程序中,類Person定義了name和age兩個數據成員;由類Person派生出類Student和Teacher,其中類Student定義了學號數據,類Teacher定義了職稱數據。每個類均有構造函數、析構函數和打印類中數據的函數。給出類Person、Student、Teacher的定義與實現。參考程序:#include<iostream>#include<cstring>usingnamespacestd;constintlength=100;constintNO_LENGTH=10;constintTITLE_LENGTH=50;classPerson{protected:char*name;intage;public:Person(char*s,inti){name=newchar[length];strcpy(name,s);age=i;}~Person(){deletename;}voidprint(){cout<<"name:"<<name<<"\tage:"<<age<<endl;}};classStudent:publicPerson{private:char*sNo;public:Student(char*s,char*n,inti):Person(s,i){sNo=newchar[NO_LENGTH];strcpy(sNo,n);}~Student(){deletesNo;}voidprint(){cout<<endl;Person::print();cout<<"Thestudentnumber:"<<sNo<<endl;}};classTeacher:publicPerson{private:char*title;public:Teacher(char*s,char*t,inti):Person(s,i){title=newchar[TITLE_LENGTH];strcpy(title,t);}~Teacher(){deletetitle;}voidprint(){cout<<endl;Person::print();cout<<"Thetitleis:"<<title<<endl;}};面向對象程序設計C++模擬試卷考試時間:90分鐘簡答題(10分,每題2分)(3分)C++語言中的break語句和continue語句的作用分別是什么?答案:break語句的作用是退出其所在的循環(1分);continue語句的作用是結束本次循環,轉去判斷是否還需要再執行下一次循環(2分)。(3分)什么是函數重載?實現函數重載的原則是什么?答案:函數重載是指同一個作用域內相同的函數名對應著不同的實現。在調用時,系統將根據調用函數的實參情況來選擇某個實現(2分)。實現函數重載的原則是要求被重載的同名函數中,其參數個數、類型或順序必須有所不同(1分)。(4分)什么是this指針?它有何作用?答案:this指針是系統自動生成的,指向當前對象的指針。(1分)它的用途在于直接用它可以表示當前對象的指針,而使用*this可以表示當前對象。但程序中出現一個對象調用某個成員函數時,系統自動生成一個指向該對象的指針this,并將該對象的地址值賦給它。一般情況下,this指針被隱含使用,但有時也可以顯式使用。(3分)填空題(20分,每空2分)2.1純虛函數就是的虛函數,至少包含一個純虛函數的類稱為。答案:沒有函數體,抽象類2.2C++語言引入了異常處理機制,用語句“拋出”異常,然后用相應的語句捕獲被“拋出”的異常,并做出相應的處理。答案:throw,catch2.3假設x=5,y=0,z=3,則表達式!x||y++&&z的值為,執行表達式后y的值為。答案:0,12.4下列程序在構造函數和析構函數中申請和釋放類的私有成員,請完成該類的實現。classMyClass{private:int*x;public:MyClass(inta);~MyClass();};MyClass::MyClass(inta){;}MyClass::~MyClass(){;}答案:x=newinta,deletex2.5C++語言中,運算符重載一般采用兩種形式:和。答案:成員函數,友元函數(答案順序可以交換)單項選擇題(20分,每題1分)3.1在下面的程序中,若實參a與形參x以引用傳遞的方式傳遞信息,實參b與形參y以值傳遞的方式傳遞信息,那么從函數compute返回主程序后,a和b的值分別為。MainProgramvoidcompute(x,y)a:=1;b:=2;compute(a,b);x:=x+2*y;y:=2*x+y;return;

5和255和25和121和21和12答案:A3.2下列語句中,錯誤的。inti,*ptr=&i; B.inti;int*ptr;i=*ptr;C.int*ptr;ptr=0; D.inti=5;int*ptr;*ptr=&i;答案:B3.3下列對break語句的描述中,不正確的。break語句可以用在循環體中,它將使執行流程跳出本層循環break語句可用在switch語句中,它將使執行流程跳出當前switch語句break語句可用在if語句中,它將使執行流程跳出當前if語句break語句在一層循環體中可以出現多次答案:C3.4下列對C++中的派生類的描述中,錯誤的。一個派生類可以作為另一個派生類的基類派生類至少有一個基類派生類的缺省繼承方式是private繼承派生類只繼承了基類的公有和保護成員答案:D3.5下列的各種函數中,不是類的成員函數。構造函數 B.析構函數 C.友元函數 D.拷貝構造函數答案:C3.6下列對靜態數據成員的描述中,錯誤的。說明靜態數據成員時前邊要加修飾符static靜態數據成員要在類體外進行初始化引用靜態數據成員時,要在靜態數據成員名前加<類名>和作用域運算符靜態數據成員不是所有對象所共用的、答案:D3.7下列關于對象數組的描述中,是錯誤的。對象數組的下標是從0開始的對象數組的數組名是一個常量指針對象數組的每個元素是同一個類的對象對象數組只能賦初值,而不能被賦值答案:D3.8下列關于私有繼承的描述中,錯誤的。基類的公有成員和保護成員被繼承后作為派生類的私有成員,派生類的其他成員可以直接訪問它們基類的公有成員和保護成員被繼承后作為派生類的私有成員,派生類的其他成員不能直接訪問它們基類的私有成員,派生類的成員和派生類的對象都無法訪問派生類的對象無法訪問基類答案:B3.9應在下列程序中的空缺處填入的正確語句。#include<iostream.h>classBase{public:voidfun(){cout<<"Base::fun"<<endl;}};classDerived:publicBase{voidfun(){; //顯式調用基類的成員函數fun()cout<<"Derived::fun"<<endl;}};A.fun() B.Base.fun() C.Base::fun()D.Base->fun()答案:C3.10下列關于類模板的描述中,不正確的。用類模板定義一個對象時,不能省略實參類模板只能有類型參數類模板本身在編譯中不會生成任何代碼類模板的成員函數都是模板函數答案:B讀程題(20分,每題5分)4.1給出下述源程序的運行結果。#include<iostream.h>#include<string>voidmain(){char*p1,*p2,s[50]="xyz”;pl="abcd";p2="ABCD";strcpy(s+2,strcat(p1+2,p2+1));cout<<s<<endl;}答案:xycdBCD4.2給出下述源程序的運行結果。#include<iostream.h>classBase{public:voidfun(){cout<<"1";}};classDerived:publicBase{public:voidfun(){cout<<"2"<<endl;}};voidmain(){Deriveda;Base*p=&a;(*p).fun();a.fun();}答案:124.3給出下述源程序的運行結果。#include<iostream.h>intadd(inta,intb=5);voidmain(){intm=5;cout<< "sum1 = " << add(m) <<endl;cout<< "sum2 = " << add(m, add(m))<<endl;cout<< "sum3 = " << add(m, add(m,add(m)))<< endl;}intadd(intx,inty){returnx+y;}答案:suml=10sum2=15sum3=204.4給出下述源程序的運行結果。#include<iostream.h>classA{private:inta,b;public:A(inti,intj){a=i;b=j;}voidMove(intx,inty){a+=x;b+=y;}voidShow(){cout<<”("<<a<<”,"<<b<<”)”<<endl;}};classB:privateA{public:B(inti,intj,intk,intl):A(i,j){x=k;y=l;}voidShow(){cout<<x<<”,"<<y<<endl;}voidfun(){Move(3,5);}voidf1(){A::Show();}private:intx,y;};voidmain(){Ae(1,2);Bd(3,4,5,6);e.Show();d.fun();d.Show();d.f1();}答案:(1,2)5,6(6.9)編程題(30分,每題15分)5.1編寫一個函數intdeleteARR(inta[],intcount),其功能是去掉元素個數為count的整型數組a中的重復元素,并將不重復元素的個數作為函數的返回值。參考程序:#include<iostream.h>intdeleteARR(inta[],intcount){intk=0,j=1;while(j<count){if(a[k]!=a[j])a[++k]=a[j];j++;}returnk+1;//返回數組中不重復元素的個數}5.2設計類Point,包含橫、縱兩個坐標數據。由類Point派生出類Circle,Circle中包含圓的半徑數據,并能夠計算圓的面積。給出類Point和Circle的定義與實現。參考程序:#include<iostream.h>classPoint{private:intx,y;public:Point(inta,intb){x=a;y=b;}intgetx(){returnx;}intgety(){returny;}};classCircle:publicPoint{private:intr;public:Circle(inta,intb,intc):Point(a,b){r=c;}intgetr(){returnr;}floatarea(){return3.14.159*r*r;}};面向對象程序設計C++模擬試卷考試時間:90分鐘一.簡答題(10分)(3分)在C++中什么可以充當友元?友元是否可以繼承,為什么?答案:在C++中函數和類都可以充當友元,分別稱為友元函數和友元類。(1分)友元不可以繼承,因為友元不是類的成員。(2分)(3分)什么是純虛函數?什么是抽象類?答案:純虛函數是一種沒有實現體的虛函數,該函數的實現要在定義它的類的派生類中實現。(2分)具有純虛函數的類稱為抽象類。抽象類是一種特殊的類,該類不能創建對象。(1分)(4分)運算符重載有哪兩種形式?這兩種形式有何區別?答案:運算符重載有兩種形式:成員函數形式和友元函數形式。(1分)區別:使用成員函數形式時,對單目運算符沒有參數,對雙目運算符僅有一個參數;使用友元函數形式時,對單目運算符有1個參數,對雙目運算符有2個參數。成員函數方式可以繼承,友元函數方式不能繼承。(3分)填空題(20分,每空2分)2.1定義如下變量和數組inti;intx[3][3]={1,2,3,4,5,6,7,8,9};則下面語句的輸出結果。for(i=0;i<3;i++)cout<<x[i][1]<<'\t'答案:25 82.2若要把類bClass定義為類aClass的友元類,則應在的定義中加入語句。答案:aClass,friendclassbClass2.3在C++中,模板可以分為和。答案:函數模板,類模板2.4在公有繼承中,派生類的對象可以訪問基類中的 ;派生類的成員函數可以訪問基類中的。答案:公有成員;公有成員和受保護成員2.5流程控制語句的基本控制結構有三種:、和。答案:順序結構,循環結構,選擇結構單項選擇題(20分,每題2分)3.1下列程序段的循環次數為 次。intx=-10;while(++x){}9 B.10 C.11 D.無限答案:A3.2已知枚舉類型enumDay{Monday,Tuesday,Wednesday,Friday=2};下列語句中,是合法的。Wednesday==Friday?1:0 B.Dayday;day=3;C.Dayday;day=Monday+3; D.Tuesday=4;答案:A3.3能正確表示邏輯關系“a大于等于10或a不大于0”的C++表達式。A.a>=10ora=0a>=10|a<=10A.a>=10ora=0a>=10&&a<=0 D.a>=10||a<=0答案:D3.4在函數定義前加上關鍵字inline,表示該函數被定義為。重載函數 B.內聯函數 C.成員函數 D.友元函數答案:BTOC\o"1-5"\h\z3.5在下面的類定義中,錯誤的語句是 。classSample{public:Sample(intval); // A~Sample(); // Bprivate:inta=2.5; // CSample(); // D};答案:C3.6下列對派生類的描述中,錯誤的。一個派生類可以作為另一個派生類的基類派生類至少有一個基類派生類的缺省繼承方式為private派生類只繼承了基類的公有成員和受保護成員答案:D3.7實現運行時的多態性要使用。A.重載函數 B.析構函數 C.構造函數 D.虛函數答案:D3.8下列C++變量定義語句中,是合法的。A.short_a=1-.1e-1; B.doubleb=1+5e2.5;C.longdo=0xfdaL; D.float2_and=1-e-3;答案:B3.9下列對類的構造函數和析構函數的描述中,正確的是構造函數可以重載,析構函數不能重載構造函數不能重載,析構函數可以重載構造函數和析構函數都可以重載構造函數和析構函數都不能重載答案:A3.10下列各函數的說明中,表示純虛函數的是 。A.virtualintvf(int); B.voidvf(int)=0;C.virtualintvf(int)=0; D.virtualvoidvf(int){}答案:C讀程題(20分,每題5分)4.1給出下述源程序的運行結果。#include<iostream.h>structabc{inta,*b;}*p;intx[]={6,7},y[]={8,9};voidmain(){structabca[]={20,x,30,y};p=a;cout<<*p->b<<”,”;cout<<(*p).a<<”,”;cout<<(++p)-〉a<<〃,〃;cout<<++(*p).a<<endl;}答案:6,20,30,314.2閱讀下列源程序:#include<iostream.h>intf1(inti,inti){intk=i*j;while(i!=j){if(i>j)i-=j;if(i<j)j-=i;returnk/i;}intf2(inti,intj){while(i!=j){if(i>j)i-=j;if(i<j)j-=i;}returni;}voidmain(){inta,b;cout<<"Entera,b:";cin>>a>>b;intm=f1(a,b);intn=f2(a,b);cout<<m<<”,"<<n<<endl;}說明該程序的功能。若從鍵盤輸入6和9,給出該程序的輸出結果。答案:程序的功能:求兩個正整數的最小公倍數和最大公約數。運行結果:18,34.3給出下述源程序的運行結果。#include<iostream.h>voidmain(){inta=7;do{switch(a%2){case1:a—;break;case0:a++;break;}a--;cout<<a<<endl;}while(a>0)}答案:5 3 1 -14.4指出下列程序中有錯誤的語句,并說明錯誤原因。#include<iostream.h>classSample{intn;public:Sample(inti){n=i;}voidsetValue(inti){n=i;}voiddisplay(){cout<<"n="<<n<<endl;};voidmain(){constSamplea(10);a.setValue(5);a.display();}答案:錯誤語句:a.setValue(5)原因:a是常量對象,其數據成員的值不能改變編程題(30分,每題15分)5.1編寫一個函數intdeleteARR(inta[],intcount),其功能是去掉元素個數為count的整型數組a中的重復元素,并將不重復元素的個數作為函數的返回值。參考程序:#include<iostream.h>intdeleteARR(inta[],intcount){intk=0,j=1;while(j<count){if(a[k]!=a[j])a[++k]=a[j];j++;}returnk+1;//返回數組中不重復元素的個數}5.2定義一個類Area求圓的面積,該類有兩個私有數據成員radius和area,兩個公有成員函數:get_radius()(用來輸入radius的值,并計算area的值)和disp_area()(用來輸出圓的面積)。參考程序:#include<iostream.h>constdoublePI=3.14159;classArea{private:intradius;floatarea;public:voidget_radius(){cout<<"請輸入半徑:";cin>>radius;area=PI*radius*radius;}voiddip_area(){cout<<”圓的面積為:"<<area<<endl;;}};面向對象程序設計C++模擬試卷考試時間:90分鐘簡答題(10分,每題2分)(3分)運算符new和delete的功能分別是什么?答案:運算符new的功能是創建動態對象;delete的功能是釋放由new創建的動態對象。(3分)分別給出至少三種C++的基本數據類型、組合數據類型。答案:基本數據類型:整型、浮點型、字符型、布爾型、空值型(給出3種即可)組合數據類型:指針類型、引用類型、數組類型、枚舉類型、結構類型(給出3種即可)。(4分)什么是內聯函數?為什么要引進內聯函數?答案:用inline關鍵字說明的函數被稱為內聯函數。引入內聯函數的目的是提高調用頻繁、但代碼又不大的函數的工作效率。填空題(20分,每空2分)C++中的重載函數至少要在、或上有所不同。答案:參數個數;參數類型;參數順序2.2在C++中,類A的每一個非靜態成員函數都有一個隱藏的指針類型的形,它指向當前正在操作的對象,其類型為 。答案:this,A*const2.3對于雙目運算符,以成員函數方式重載時,有 個參數;以友元函數方式重載時,有個參數。答案:1,22.4派生類對基類的繼承有三種方式:、和。答案:私有繼承、公有繼承、保護繼承(答案順序可以打亂)單項選擇題(20分,每題2分)在“inta=10,*p=&a;”語句中,p的值。10 B.變量p的地址C.變量a的地址D.隨機數答案:C3.2在一個被調用函數中,關于return語句使用的描述,是錯誤的。被調用函數中可以不使用return語句被調用函數中可以使用多個return語句被調用函數中如果有返回值,就一定要有return語句被調用函數中,一個return語句可返回多個值給調用函數答案:D3.3下列程序段中,不是死循環的。intj=100; B.for(;;)while(1){j=j%100+1;if(j>1000)break;}C.intn=0; D.intm=36;do{++n; while(m)—m;}while(n>=0)答案:D3.4關于虛函數的描述中,正確的。虛函數是一個靜態成員函數虛函數是一個非成員函數虛函數既可以在函數說明時定義,也可以在函數實現時定義派生類的虛函數與基類中對應的虛函數具有相同的參數個數和類型答案:D3.5下列常量中,不是C++語言的整型常量。A.01 B.0x11 C.081 D.-32768答案:C3.6下列關于運算符重載的描述中,正確的。運算符重載不可以改變運算符的語法結構運算符重載可以改變運算符的優先級運算符重載可以改變運算符的結合性運算符重載可以改變操作數的個數答案:A3.7下列關于派生類析構函數的敘述中,錯誤的。派生類析構函數的調用順序與構造函數調用順序相反派生類析構函數是不能從基類繼承派生類析構函數的處理順序為:派生類新增的普通成員,派生類新增的對象成員,所有從基類繼承的成員派生類析構函數的處理順序為:所有從基類繼承的成員,派生類新增的普通成員,派生類新增的對象成員答案:D3.8下列關于C++中類的敘述,其中錯誤的。類的構造函數在定義對象時自動執行析構函數不能夠重載只有類的成員函數才能訪問類中的私有成員在類中,成員缺省的訪問權限是private答案:C3.9下面的函數中,靜態成員函數不能訪問的是 。A.靜態數據成員 B.靜態成員函數C.類以外的函數和數據 D.非靜態數據成員答案:D3.10假設A是一個類,那么執行語句“Aa,b(3),*p;”,調用了次構造函數。A.2 B.3 C.4 D.5答案:A讀程題(20分,每題5分)4.1給出下述源程序的運行結果。#include<iostream.h>voidmain(){intx[]={5,4,3,2,1};int*p=&x[1];inta=10,b;for(inti=3;i>=0;i—)b=(*(p+i)<a)?*(p+i):a;cout<<b<<endl;}答案:44.2給出下述源程序的運行結果。#include<iostream.h>voidfun(int,int&);voidmain(){inta,b;fun(5,a);fun(8,b);cout<<"a+b="<<a+

溫馨提示

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

評論

0/150

提交評論