《2022年C期末考试复习题 .pdf》由会员分享,可在线阅读,更多相关《2022年C期末考试复习题 .pdf(24页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、学而不思则惘,思而不学则殆C+期末考试复习题一、选择题1. 在声明类时,下面的说法正确的是(C )。A.可以在类的声明中给数据成员赋初值B.数据成员的数据类型可以是register C.private 、public、protected 可以按任意顺序出现D.没有用private、public、protected 定义的数据成员是公有成员2. 在一个类的定义中,包含有(C)成员的定义。A. 数据B. 函数C. 数据和函数D. 数据或函数3. 假定 AA 为一个类, int a()为该类的一个成员函数,若该成员函数在类定义体外定义,则函数头为( A )。A. int AA:a() B. int
2、AA:a() C. AA:a() D. AA:int a() 4. 假定 AA 为一个类, a 为该类公有的数据成员,px 为指向该类对象的一个指针,则访问px 所指对象中数据成员a 的格式为( C )。 A. px(a) B. pxa C. px-a D. px.a 5. 下列关于运算符new 的描述中,错误的是(D )。A它可以创建对象或变量B它可以创建对象数组或一般类型数组C用它创建对象或对象数组时要调用相应的构造函数D用它创建的对象可以不用delete运算符释放6. 在下面有关析构函数特征的描述中,正确的是(A )。A.一个类中可以定义多个析构函数B.析构函数名与类名完全相同C.析构函
3、数不能指定返回类型D.析构函数可以由一个或多个参数7. 构造函数是在(B )时被执行的。A.程序编译B. 创建对象C. 创建类D. 程序装入内存8. 友元的作用之一是(A )。名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 1 页,共 24 页 - - - - - - - - - 学而不思则惘,思而不学则殆A.提高程序的运行效率B.加强类的封装性C.实现数据的隐藏性D. 增加成员函数的种类9. 设置虚基类的目的是(B )。A.简化程序B.消除二义性C. 提高运行效率
4、D.减少目标代码10. 回值的纯虚函数,正确的写法是(B )。A.virtual show () =0;B.virtual void show();C.virtual void show () =0; D. void show () =0 virtual ;11. 重载函数在调用时选择的依据中,(B )是错误的。A. 函数名字B.函数的返回类型C.参数个数D.参数的类型12. 已知: int fun (int a),m=10;下列调用fum() 函数的语句中,正确的是(C )。Afun( m); Bfun (m*2); Cfun (m) ; Dfun (m+); 13. 下列各种类中,不能定义
5、对象的类是(B )。A派生类B抽象类C嵌套类D虚基类14. 类中定义的成员默认为(A)访问属性。A. public B. private C. protected D. friend 15. 静态成员函数对类的数据成员访问( B )。 A. 是不允许的B. 只允许是静态数据成员C. 只允许是非静态数据成员D. 可允许是静态数据成员或非静态数据成员16. 在下列语句中,将函数int f_sum(int x,int y) 正确重载的是(A )。A.float f_sum(int x,int y) B.int f_sum(int a,int b) C.int f_sum(int x) D.float
6、 f_sum(int a,int b) 17. 下列各语句是输出字符A的,其中错误语句是(B )。AcoutA; Bcout.put(A); Cchar ch=A;coutch; Dcoutput(A);18. 当将一个类A 或函数 f()说明为另一个类B 的友元后, 类 A 或函数 f() 能够直接访问类B名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 2 页,共 24 页 - - - - - - - - - 学而不思则惘,思而不学则殆的( D)。A. 只能是公有
7、成员B. 只能是保护成员C. 只能是除私有成员之外的任何成员D. 具有任何权限的成员19. C+语言程序中进行文件操作时应包含的头文件是(A )。A fstream.h Bmath.h Cstdlib.h Dstrstrea.h 20. 在 C+程序中使用的cin 标识符是系统类库中定义的(A )类中的一个对象。A. istreamB. ostream C. iostream D. fstream 21. 已知: char n= p;在下列表示引用的方法中,()是正确的。A.char &x=n; B. char &y= p ; C. char &z; D.float &t=&n; 22. 在(
8、A )情况下适宜采用内联函数。A.函数代码小,频繁调用B. 函数代码多,频繁调用C.函数体含有递归语句D. 函数体含有循环语句23. 如果表达式a+b 中的 “+”是作为友元函数重载的运算符,若采用运算符函数调用格式,则可表示为()。A. a.operator+(b) B. b.operator+(a) C. operator+(a,b) D. operator(a+b) 24. 执行完循环for(i=1;i100;i+);后, i 的值为(B )。A. 99 B. 100 C. 101 D. 102 25. 假定一个类对象数组为An ,当离开它定义的作用域时,系统自动调用该类析构函数的次数为
9、 ( C )。A. 0 B. 1 C. n D. n-1 26. 在 C+程序中使用的cout 标识符是系统类库中定义的(B )类中的一个对象。A. istream B. ostream C. iostream D. fstream 二、填空题1. 在下面一段类定义中, Derived类是由直接基类Base 1 和 Base 2 所派生的, Derived类包含有两个间接基类BaseBase,在初始化函数Init中,需要把x1 和 x2 的值分别赋给属名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - -
10、 - - - - - - - 第 3 页,共 24 页 - - - - - - - - - 学而不思则惘,思而不学则殆于基类 Base1 的 x 成员和属于基类Base2 的 x 成员。class BaseBase protected: int x; public: BaseBase() x = 1; ; class Base1: public BaseBase public: Base1() ; class Base2: public BaseBase public: Base2() ; class Derived: (1) public Base1,(2) public Base2 pub
11、lic: Derived() void Init(int x1, int x2) (3) Base1:x=x1; _(4)_ Base2:x=x2_; (5) void output() coutBase1:x Base2:xendl; ; 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 4 页,共 24 页 - - - - - - - - - 学而不思则惘,思而不学则殆2. 该类中 MaxA() 函数的实现如下,请在标号位置补充适当的内容。int (1) int
12、a int x=a0; for(int i=1; ix) (2) a j+i=j ; (3) break; 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 5 页,共 24 页 - - - - - - - - - 学而不思则惘,思而不学则殆class A char *a; public: _(1)_ _ /定义无参构造函数,使a 的值为空A(char *aa) a=_(2)_ _; strcpy(a,aa); /用 aa 所指字符串初始化a 所指向的动态存储空间 _
13、(3)_ _ /定义析构函数,删除a所指向的动态存储空间; class Point private: int x, y; public: Point() x=y=0; Point(int x0,int y0) x=x0; y=y0; int GetX() return x; int GetY() return y; void Print() coutPoint(x,y)endl; 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 6 页,共 24 页 - - - -
14、- - - - - 学而不思则惘,思而不学则殆1 Point operator+(Point & pt,int dd); /友元函数声明2 ; /友元函数声明; Point operator+(Point& pt,int dd) /加号操作符重载函数,实现Point 类对象与整数加法 Point temp=pt; 3 ; temp.y+=dd; return temp; Point operator+(Point& pt1,Point& pt2) /加号操作符重载函数,实现两个Point 类对象的加法 Point temp; temp.x=pt1.x+pt2.x; 4 ; return 5 ;
15、 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 7 页,共 24 页 - - - - - - - - - 学而不思则惘,思而不学则殆 3. 下列程序的功能是,建立磁盘文件1.txt ,从键盘输入一行字符串,以回车键结束,将其中的字母字符存放在文件1.txt 中,请填空完成该程序。#include using namaspace std; int main() char a80; ; /定义输出流对象outfile if(!outfile1) cerr 打开文件出错
16、!endl; exit(1); ; /从键盘读入一行字符for(int i=0;ci!=0;i+) if() coutendl; 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 8 页,共 24 页 - - - - - - - - - 学而不思则惘,思而不学则殆; return 0; 四、根据程序试写出运行结果1.#include void main( ) int i, j; int *p1, *p2; p1=&i; p2=&j ; i=3; j=6; couti=
17、i j=jendl; cout*p1=*p1 *p2=*p2endl; *p1=5; *p2=8; couti=i j=jendl; cout*p1=*p1 *p2=*p2endl; 2名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 9 页,共 24 页 - - - - - - - - - 学而不思则惘,思而不学则殆#include #include class CD char* a; int b; public: void Init(char* aa, int b
18、b) a=new charstrlen(aa)+1; strcpy(a,aa); b=bb; char* Geta() return a; int Getb() return b; void Output() couta bendl; ; void main() CD dx,dy; char a20; dx.Init(abcdef,30); strcpy(a,dx.Geta(); strcat(a,xyz); dy.Init(a,dx.Getb()+20); dx.Output(); 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资
19、料 - - - - - - - - - - - - - - - 第 10 页,共 24 页 - - - - - - - - - 学而不思则惘,思而不学则殆dy.Output(); 3. #include class A int a10; int n; public: A(int aa, int nn): n(nn) for(int i=0; in; i+) ai=aai; int Get(int i) return ai; int SumA(int n) int s=0; for(int j=0; jn; j+) s+=aj; return s; ; void main() int a=2,5
20、,8,10,15,20; 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 11 页,共 24 页 - - - - - - - - - 学而不思则惘,思而不学则殆A x(a,4); A y(a,6); int d=1; for(int i=0; i4; i+) d*=x.Get(i); int f=y.SumA(5); coutd=dendl; coutf=fendl; 4. #include class circle protected: int r; public
21、: void setr(int x) r=x; virtual void show( )=0; ; class area:public circle public: void show( ) 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 12 页,共 24 页 - - - - - - - - - 学而不思则惘,思而不学则殆 cout 这个圆的面积是:3.14*r*rendl; ; class perimeter:public circle public: void
22、 show( ) cout 这个圆的周长是: 2*3.14*rshow(); ptr=&ob2; ptr-show(); 5. #include class A public: A( ) cout A; 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 13 页,共 24 页 - - - - - - - - - 学而不思则惘,思而不学则殆; class B public: B( ) cout B; ; class C: public A public: C( ) co
23、ut C; private: B b; ; int main ( ) C obj; return 0; 6. 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 14 页,共 24 页 - - - - - - - - - 学而不思则惘,思而不学则殆#include class small_cat double weight; /普通数据成员,表示一只小猫的重量static double total_weight;/ 静态数据成员,用来累计小猫的重量static doub
24、le total_number; / 静态数据成员,用来累计小猫的只数public: small_cat(double w) /构造函数 weight=w; total_weight+=w; /累加小猫的重量total_number+; /累加小猫的只数void display() cout 这只小猫的重量是weight 千克 n; static void total_disp() couttotal_number 只的小猫的总重量是; couttotal_weight 千克 endl; ; double small_cat:total_weight=0; /静态数据成员初始化double s
25、mall_cat:total_number=0; / 静态数据成员初始化int main() small_cat w1(0.5),w2(0.6),w3(0.4); w1.display(); /调用普通成员函数,显示第 1 只小猫的重量w2.display(); /调用普通成员函数,显示第 2 只小猫的重量w3.display(); /调用普通成员函数,显示第 3 只小猫的重量small_cat:total_disp(); /调用静态成员函数return 0; /显示小猫的只数和总重量名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资
26、料 - - - - - - - - - - - - - - - 第 15 页,共 24 页 - - - - - - - - - 学而不思则惘,思而不学则殆名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 16 页,共 24 页 - - - - - - - - - 学而不思则惘,思而不学则殆五、编程题1. 编程求圆、圆内接正方形和圈外切正方形的面积和周长。要求使用抽象类。解:#include const double PI=3.1415; class Shape pub
27、lic: Shape(double i) r=i; virtual void Area()=0; virtual void Perimeter()=0; protected: double r; ; class Circle:public Shape public: Circle(double i):Shape(i) void Area() cout圆的面积是 PI*r*rendl; 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 17 页,共 24 页 - - -
28、 - - - - - - 学而不思则惘,思而不学则殆void Perimeter() cout圆的周长是 2*PI*rendl; ; class In_Square:public Shape public: In_Square(double i):Shape(i) void Area() cout圆内接正方形的面积是 2*r*rendl; void Perimeter() cout圆内接正方形的周长是 4*1.414*rendl; ; class Ex_Square:public Shape public: Ex_Square(double i):Shape(i) void Area() co
29、ut圆外切正方形的面积是 4*r*rendl; void Perimeter() 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 18 页,共 24 页 - - - - - - - - - 学而不思则惘,思而不学则殆 cout圆外切正方形的周长是 8*rArea(); ps-Perimeter(); ps=new In_Square(8); ps-Area(); ps-Perimeter(); ps=new Ex_Square(8); ps-Area(); ps-P
30、erimeter(); delete ps; (附上运行结果:名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 19 页,共 24 页 - - - - - - - - - 学而不思则惘,思而不学则殆)2. 已知复数类Complex 的声明如下:class Complex public: Complex(); /无参构造函数 Complex(double ); /转换构造函数Complex(double, double); /有两个形参的构造函数 friend Comp
31、lex operator+(Complex&, Complex&); /对“ +”运算符进行重载 friend ostream& operator(ostream&, Complex&); /对“ (istream&, Complex&); /对“ ”运算符进行重载private: double real,imag; ; 要求:( 1)写出该类的所有构造函数的类外定义代码。(2)写出对运算符“+”、“ ”进行重载的运算符重载函数的定义。3. 编写程序 , 计算出复数对象c1 和 c2 相加结果 , 并将其结果输出。名师归纳总结 精品学习资料 - - - - - - - - - - - - -
32、- -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 20 页,共 24 页 - - - - - - - - - 学而不思则惘,思而不学则殆4. 从建立的数据文件f1.dat中读入 10 个整数放在数组中, 找出并输出10 个数中的最大者和它在数组中的序号。解:#include #include using namespace std; int main( ) int a10,max,i,order; fstream infile(f1.dat, ios:in ); if( !infile ) cerropen error!endl; exit(1)
33、; for(i=0;iai ; coutai ; coutendl; max=a0; order=0; for(i=1;imax) 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 21 页,共 24 页 - - - - - - - - - 学而不思则惘,思而不学则殆max=ai; order=i; coutmax=maxendlorder=orderms) coutError!endl; exit(1); MS=ms; n=nn; a=new intMS; for(
34、int i=0; iMS; i+) ai=aai; int MaxMin(int& x, int& y); /从数组 a 的前 n 个元素中求出/最大值和最小值,并分别由引用参数x 和 y 带回,/同时若 n 大于 0 则返回 1,否则返回0。; 解:int AA:MaxMin(int& x, int& y) 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 22 页,共 24 页 - - - - - - - - - 学而不思则惘,思而不学则殆 int mx,my;
35、mx=my=a0; for(int i=1; imx) mx=ai; if(ai0) return 1; else return 0; 6. 根据下面类中构造函数的原型和注释写出它的类外定义。class Array int *a; /指向动态分配的整型数组空间int n; /记录数组长度public: Array(int aa, int nn); /构造函数,利用aa数组长度 nn 初始化 n,/利用 aa数组初始化a所指向的数组空间Array(Array& aa); /拷贝构造函数Array& Give(Array& aa); /实现 aa赋值给 *this 的功能并返回*this Arra
36、y Uion(Array& aa); /实现 *this 和 aa 中的数组合并的/功能,把合并结果存入临时对象并返回int Lenth() return n; /返回数组长度名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 23 页,共 24 页 - - - - - - - - - 学而不思则惘,思而不学则殆void Print() /输出数组for(int i=0; in; i+) coutai ; coutendl; ; 解:Array:Array(Array& aa) n=aa.n; a=new intn; for(int i=0; in; i+) ai=aa.ai; 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 24 页,共 24 页 - - - - - - - - -