C++复习题汇总

Sbaby 贡献于2017-10-17

作者 pzy  创建于2011-11-14 19:55:00   修改者Sky123.Org  修改于2017-06-06 06:39:00字数33503

文档摘要:面向对象程序设计课程复习题一、选择题,从供选择的答案中选出正确的答案(每小题2分,共计20分)1、由C++源程序文件编译而成的目标文件的缺省扩展名为(C)。 A.cpp B.exe C.obj D.lik
关键词:

面向对象程序设计课程 复习题 一、选择题,从供选择的答案中选出正确的答案(每小题2分,共计20分) 1、由C++源程序文件编译而成的目标文件的缺省扩展名为( C )。 A.cpp B.exe C.obj D.lik 2、设x和y均为bool量,则x&&y为真的条件是( A )。 A.它们均为真 B.其中一个为真 C.它们均为假 D.其中一个为假 3、下列的常量名中,( C )是非法的。 A.YEAR2002 B.welcome_home C.zhang @mail D._SIZE_2MB 4、在内存中所存储的含L个字符的一个字符串常量是(B )。 A.一串相应的ASCII码值,占用L个字节 B.一串相应的ASCII码值,占用L+1个字节 C.一组相应的正整数,占用L个字节 D.一组相应的整数,占用2L个字节 5、AB为一个类,则执行“AB a,b(3),*p;”语句时共调用该类构造函数的次数为( A )。 A.2 B.3 C.4 D.5 6、返回类型就是函数返回结果值的数据类型。返回类型可以是( C )。 A.除数组和类以外的任意数据类型 B.除数组和结构类型以外的任意数据类型 C.除数组类型以外的任意数据类型 D.除指针和引用类型以外的任意数据类型 7、重载函数是( A)。 A.以函数参数来区分,而不用函数的返回值来区分不同的函数 B.以函数的返回值来区分,而不用函数参数来区分不同的函数 C.参数表完全相同而返回值类型不同的两个或多个同名函数 D.参数表和返回值类型都必须是不同的两个或多个同名函数 8、当保护继承时,基类的( B )在派生类中成为保护成员,不能通过派生类的对象来直接访问该成员。 A.任何成员 B.公有成员和保护成员 C.保护成员和私有成员 D.公有成员和私有成员 9、引入内联函数的主要目的是( B )。 A.缩短程序代码,少占用内存空间 B.既可以保证程序的可读性,又能提高程序的运行效率 C.占用内存空间少,执行速度快 D.使程序的结构比较清晰 10、在下面的二维数组定义中,正确的是( C )。 A.int a[5][] B.int a[][5] C.int a[][3]={{1,3,5},{2}} D.int a[](10) 1.编写C++程序一般需经过的几个步骤依次是( B ) A. 编译、编辑、连接、调试 B. 编辑、编译、连接、调试 C. 编译、调试、编辑、连接 D. 编辑、调试、编译、连接 2.函数调用func((exp1,exp2),(exp3,exp4,exp5))中所含实参的个数为( B ) A.1 B.2 C.4 D.5 //参见程序说明 #include using namespace std; int fun(int i1,int i2,int i3,int i4) { return i1+i2+i3+i4; } void main() { int i,j; i = fun((1,2),(2,3),3,4);//括号中做一个参数,参数值取后面一个数 j = fun(1,2,3,4); cout<<"i="<IsPalindrome()< class A { int a,b; public: A(int aa=0,int bb=0) { a=aa; b=bb;} //定义类A的构造函数,使参数aa和bb的默认值为0, //在函数体中用aa初始化a,用bb初始化b }; void main() { A *p1,*p2; ____(4)____; //调用无参构造函数生成由p1指向的动态对象 ____(5)____; //调用带参构造函数生成由p2指向的动态对象, //使a和b成员分别被初始化为2和3 if (p1!=NULL) delete p1; if (p2!=NULL) delete p2; return ; } 参考答案:(4) p1 = new A( ) (5) p2 = new A(2,3) 四、 阅读下面的程序,写出程序运行的结果。(共20分) c++基础知识程序题 程序1(6分) #include class CStr { int n; char str[50]; public: CStr( char *p,int len=0) { int i; n=len; for (i=0;i='a') && (a.str[i]<='z')) ch = a.str[i]+1; else ch = a.str[i]-1; cout< using namespace std; int main() { int a=5,b; int &c=b; int f(int x,int y,int z); b=a++; c=f(a,b,c); cout<<"a="<20) b=0; else b=b+5; } return 0; } int f(int &x,int y) { int m; x=y++; m=x+y; return(m); } 答:(评分标准:a和c正确分别得3分) 5 5 11 10 10 21 程序4(6分) #include class A { int n; char str[100]; public: A( char *p,int len=0) {int i; n=len; for (i=0;i'9')) cout< class Pet //基类 { public: virtual void Speak() {cout<<"How does a pet speak ?"<Speak(); p2=new Cat; p2->Speak(); p3=new Dog; p3->Speak(); Pet &p4 = cat1; p4.Speak(); delete p2; delete p3; } 程序1 参考答案: (10分) How does a pet speak ? wang!wang! miao!miao! miao!miao! wang!wang! miao!miao! 程序2(10分) #include class Win {public: virtual void shape( ) { cout<<"Win"<shape(); p1 = &b1; p1->shape(); p1->act(); } 参考答案: Win But Win But But 程序3(10分) #include class Pen { public: char color; Pen() {cout<<"begin"<write(); pt1 = &pencil1; pt1->write(); pt1->Rewrite(); } 参考答案:程序运行结果为: begin begin Pen Pencil Pencil 程序4(10分) #include class Window { public: int size; Window() {cout<<"Win Begin"<OutWin(); pt1->Open(); pt1 = &b1; pt1->OutWin(); pt1->Open(); } 答:程序运行结果为:(10分,评分标准:前4行每行2分,后2行每行1分) Win Begin Win Begin Win OpenWin But OpenWin 程序5(10分) #include class Base {public: virtual int fun( ) { return 25; } }; class Derive: public Base {public: virtual int fun() { return 60; } }; void main() { Derive d; Base &b = d, b2,*p; cout<fun()<fun()< class Pet //基类 { public: virtual void Speak() {cout<<"How does a pet speak ?"<Speak(); p2=new Cat; p2->Speak(); p3=new Dog; p3->Speak(); Pet &p4 = cat1; p4.Speak(); delete p2; delete p3; } 程序1 参考答案: (10分) How does a pet speak ? wang!wang! miao!miao! miao!miao! wang!wang! miao!miao! 程序2(10分) #include class Win {public: virtual void shape( ) { cout<<"Win"<shape(); p1 = &b1; p1->shape(); p1->act(); } 参考答案: Win But Win But But 程序3(10分) #include class Pen { public: char color; Pen() {cout<<"begin"<write(); pt1 = &pencil1; pt1->write(); pt1->Rewrite(); } 参考答案:程序运行结果为: begin begin Pen Pencil Pencil 程序4(10分) #include class Window { public: int size; Window() {cout<<"Win Begin"<OutWin(); pt1->Open(); pt1 = &b1; pt1->OutWin(); pt1->Open(); } 答:程序运行结果为:(10分,评分标准:前4行每行2分,后2行每行1分) Win Begin Win Begin Win OpenWin But OpenWin 程序5(10分) #include class Base {public: virtual int fun( ) { return 25; } }; class Derive: public Base {public: virtual int fun() { return 60; } }; void main() { Derive d; Base &b = d, b2,*p; cout<fun()<fun()< class complex { int real; int imag; public: complex(int r=0,int i=0) : real(r),imag(i) { } complex operator++(){ real++; return *this;} void show( ) { cout< int sum(int [],int); void main() { int ia[5] = {2,3,6,8,10}; A ; sumOfArray = sum(ia,5); cout << "Sum of array:" << sumOfArray << endl; } int sum(int array[],int len) { int iSum = 0; for(int i = 0; B ; C ) D ; return iSum; } 参考答案:A int sumOfArray; B i < len C i++ D iSum += array[i]; 构造函数和析构函数 阅读下列程序,分析程序运行结果 程序1、(10分) #include class Date { public: Date(int y=2001,int m=1,int d=1) {Year=y;Month=m;Day=d;} VoidPrintDate() {cout< class Student { public: Student ( ){cout<<"Stu con."< #include class Person { char m_strName[10]; //姓名 int m_nAge; //年龄 public: Person(char* name,int age) { strcpy(m_strName, name); m_nAge = age; cout<<"constructor of person" < class Plane { public: Plane( ) {cout<<"create Plane."< class chair { public: chair( ){cout<<"create chair."< class AA { public: AA( ){cout<<"AA con"< class A { public: A( ) {cout<<"A's con."< class A { private: static int n; int Num; public: A(int x=0) { Num=x; n++; } ~A( ) { n-- ; } static int GetNum(){ return n; } void print(); }; Void A::print() {cout << "n=" << n << ", Num=" << Num<< endl; } int A::n = 5; void main() { A *p=new A(25); p->print(); A a; a.print(); delete p; cout << "n=" << A::GetNum() << endl; } 程序2(10分,评分标准:每对一个给2分) 答:程序运行结果为: n=6,Num=25 n=7,Num=0 n=6 程序9(10分) #include class Date { int Year,Month,Day; public: void SetDate(int y,int m,int d) {Year=y;Month=m;Day=d;} void PrintDate() {cout< 2.#include 3.double TriangleArea() 4.{ 5. int i; 6. double dTArea; 7. double* pds=new double[5]; 8. if(!pds) 9. { 10. cout <<“Error memory allocation!”<>pds[i]; 18. pds[0]+=pds[i]/2; 19. } 20. pds[4]=pds[0]; 21. for(i=1;i<4;i++) pds[0]*=(pds[4]-pds[i]); 22. dTArea=sqrt(pds[0]); 23. delete[ ]pds; 24. return dTArea; 25.} 26.void main() 27.{ 28. double dArea; 29. dArea=TriangleArea(); 30. if(dArea==-1)cout<< “The program failed!”< extern int x; void f(int); void main() { int i=5; f(i); cout << x; } 回答以下问题: 1. 程序的运行结果是什么样的?(4分) 2. 为什么文件file2.cpp中要包含头文件?(2分) 3. 在函数main()中是否可以直接调用函数g()?为什么?(3分) 4. 如果把文件file1.cpp中的两个函数定义的位置换一下,程序是否正确?为什么?(3分) 5. 文件file1.cpp和file2.cpp中的变量i的作用域分别是怎样的?在程序中直接标出两个变量各自的作用域。(3分) 1. 程序的运行结果:25 2.因为程序中需要利用cout对象进行输出,而cout是在C++标准I/O库iostream中定义的类ostream的一个对象。 3. 在函数main()中不可以直接调用函数g(),因为g()是静态函数,只在它所在的文件内可见。 4. 如果把文件file1.cpp中的两个函数定义的位置换一下,程序不正确,因为C++规定所有使用的变量和函数需要先声明,后使用。在函数f中用到了函数g,所以函数f不能出现在函数g的定义或声明之前。 5.文件file1.cpp中的变量i的作用域从它的定义开始到文件结束。File2.cpp中的变量i的作用域从它的定义开始到main函数结束。 3、说明:读懂如下程序,回答题后的问题。 #include"iostream.h" //0行 class Box { //1行 private: //2行 int L, W, H; //3行 public: void init() {L=1;W=1;H=1;} //4行 public: //5行 char color = ‘B’; //6行 void SetValue(int x1,int x2,int x3) //7行 { L=x1;W=x2;H=x3; //8行 }; //9行 Bool operator>(Box&b); //10行 longGetV(){return(L*W*H);} //11行 }; //12行 bool Box::operator >( Box &b) //13行 { return ( GetV( )> b.GetV( )); //14行 } //15行 int main( ) //16行 { Box b1, b2; //17行 b1.W=5; //18行 b2.init( ); //19行 b1.SetValue(1,2,3); //20行 b2.SetValue(3,2,1); //21行 if (b1>b2) //22行 cout<<”b1>b2”<”重载函数定义为友元函数,请写出该函数的定义(功能与上述程序一样)。(4分) 参考答案: 1. (每空1分,共4分, 评分标准:每对一个给1分)。 (1)错误行的行号为::6、18行 (2)分别改正为:char color; 和 //b1.w=5; //不能访问 2.在修改了程序的错误以后,输出结果: (2分,评分标准:正确给2分) b1( Box &b1, Box &b2) { return ( b1.GetV( )> b2.GetV( )); 4、说明:读懂如下程序,回答题后的问题。 #include class Complex { private: float real, image; public: Complex(float r=0, float i=0 ) { real=r; image=i;} void Display(){ cout << real; if (image>0) cout<<"+"< class Person { private: int Num; public: int age; char name[10]; virtual void Speak() { cout<<"No Speak."<Speak(); p1 = &a1; p1->Speak(); obj.Speak(); obj = a1; obj.Speak(); } 请回答的问题: (1)写出程序运行的结果。(4分) (2)如果把Person类中的Speak()函数说明语句的virtual去掉,即把语句virtual void Speak()改为:void Speak()。再写出程序运行的结果。(4分) (3)如果把Person类中的Speak()函数改为纯虚函数,应如何修改该函数?(2分) 参考答案:(1)(4分) Speak Chinese. Speak English. No Speak. No Speak. (2)(4分) No Speak. No Speak. No Speak. No Speak. (3)(2分)virtual void Speak() = 0; 6、说明:读懂如下程序,回答题后的问题。 #include "iostream.h" class CBase { private: int a,b; public: int c; CBase(int x,int y){a=x;b=y;c=a+b;} }; class CDerive: protected CBase { public: static int total; int GetC() {return c;} void SetC(int k) {c=k;} CDerive(int x,int y,int z):CBase(x,y) { total+=z; } }; int CDerive::total = 10; int main( ) { int i; //标记行1 CBase b(1,2); //标记行2 CDerive d[3]={CDerive(1,2,3), CDerive(4,5,6),CDerive(7,8,9)}; //标记行3 b.c=10; //标记行4 d[0].c += b.c; //标记行5 i = CDerive::total; //标记行6 cout<<"total="<data=x; //4行 p->next=NULL; //5行 plist=p; //6行 return p; //7行 } 分别改正为 和 。 分别改正为 p=new NODE; 和 p->next=plist; 2、下列程序片段对二维数组的每个元素赋值,该程序片段有错,请改正。 unsigned short SomeArray[5][4]; for (int i = 1; i<=5; i++) for (int j = 1; j<=4; j++) SomeArray[i][j] = i+j; 错误为:________. 改正方法为:________. 错误为:访问数组元素的下标不对 改正的方法为: 将两个for循环的循环初始值改为0,循环结束条件分别改为i<5和j<4。 七、综合编程题(20分) 1、定义一个复数类Complex,它的私有数据成员(类型都是float)有real(实数), imag(虚数),公有成员函数有:GetReal(),它返回复数的实数部分;GetImag(),它返回复数的虚数部分;Complex operator +( Complex &),返回两个复数的加。该复数的构造函数原型为:Complex(float r=1.0, float i=1.0)。 要求: 编写类Complex及成员函数,并编写一个主程序,主程序中定义了2个复数(其中有一个复数的参数为默认参数,另一个参数可以是任意有效值),然后,计算2个复数的加,并输出结果。 参考答案:编程题(20分,评分标准:写出类Complex得12分,编出main()函数得8分,注意:程序的所有等价写法同样给分) #include class Complex { private: float real, imag; public: Complex(float r=1.0, float i=1.0 ) { real=r; imag=i;} float GetReal(){ return real;} float GetImag(){ return imag;} Complex operator+ (Complex &b ); }; Complex Complex::operator+ (Complex &b) { Complex t; t.real = real + b.real; t.imag = imag + b.imag; return t; } void main() { Complex c1(4.0,5.0), c2, c3; c3=c1+c2; cout<<"real="< using namespace std; class doctor { private: int Num; string Name; int Age; char Sex; public: int GetNum() { return Num;}; Doctor (intNum0=1001,string Name0="彭博士", int Age0=30,char Sex0='1') { Num = Num0; Name = Name0; Age = Age0; Sex = Sex0; } void display(); }; void doctor::display() { cout<<"Num="<display(); delete p; return 0; } 3、定义一个书本类Book,它的私有数据成员有BookName(书名,为string型),AuthorName(作者姓名,为string型),Publish(出版社,为string型),PageNum(页码,为int型)。公用成员函数有:GetPageNum( ),它返回当前的页码值PageNum;OpenPage(int PNum),打开书本的PNum页,即设置PageNum值为PNum。 Book类的构造函数原型为:Book(string BName="C++语言",string AName="张三", string Pub="清华大学出版社", int PNum=0)。 要求: (1) 编写类Book,并编写一个主程序,主程序中定义2个书本对象(其中有一个书本的书名参数为默认参数,另一个书本参数可以是任意有效值)。 (2)重载输出流<<,使它能输出对象Book(即输出Book对象的所有私有数据成员),然后使用该输出流输出前2个书本对象的基本信息。 (3)定义一个输出文件BookFile.txt,把上述两个书本对象的页码值PageNum输出到这个文件中。 参考答案: #include #include #include using namespace std; class Book { private: int PageNum; string BookName; string AuthorName; string Publish; public: int GetPageNum() { return PageNum;}; Book(string BName="C++语言",string AName="张三", string Pub="清华大学出版社", int PNum=0) { BookName = BName; AuthorName = AName; Publish = Pub; PageNum = PNum; } friend ostream& operator <<(ostream &Output,Book &B); }; ostream& operator<<(ostream &Output,Book &B) { cout< #include using namespace std; class teacher { private: int Num; string Name; int Age; char Sex; public: int GetNum() { return Num;}; teacher(int Num0=1001, string Name0="彭老师", int Age0=30,char Sex0='1') { Num = Num0; Name = Name0; Age = Age0; Sex = Sex0; } void display(); }; void teacher::display() { cout<<"Num="< using namespace std; class Box { private: float Length,Width,Height; public: float GetVolume() { return Length*Width*Height;}; Box(float L=1.0, float W=1.0, float H=1.0) { Length = L; Width = W; Height = H; } }; int main() { Box b1,b2(2,3,4); float v1,v2; v1 = b1.GetVolume(); v2 = b2.GetVolume(); if (v1>v2) cout< float Max( float n1, float n2, float n3) { if (n1>n2) n2=n1; if (n2>n3) n3=n2; return n3; } int Max( int n1, int n2, int n3) { if (n1>n2) n2=n1; if (n2>n3) n3=n2; return n3; } int main() { float a=3.4,b=3.6,c=7.8; int n=6,m=7,k=12; cout<<"Max="<
下载需要 10 金币 [金币充值 ]
亲,您也可以通过 分享原创文档 来获得金币奖励!

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档