收藏 分销(赏)

C--语言-期末复习.doc

上传人:仙人****88 文档编号:11990316 上传时间:2025-08-26 格式:DOC 页数:20 大小:156KB 下载积分:10 金币
下载 相关 举报
C--语言-期末复习.doc_第1页
第1页 / 共20页
C--语言-期末复习.doc_第2页
第2页 / 共20页


点击查看更多>>
资源描述
题型: 一、选择题(1’ ×20) 二、基础知识填空题 ((1’ ×15) 三、判断题 (1’ ×10) 四、阅读程序题(2’ ×10) 五、完善程序题 (2’ ×10) 六、编程题 (2题,共 15 分) 注意: (1)选择题、判断题答案:每行5个,写清楚题号; (2)判断题:正确的打“√”,错误的打“×”; (3)填空题(第四、五大题)答题时请注明横线处的编号; (4)用黑色水笔答题; (5)带上有效证件。 一、选择题 1. 面向对象程序设计将数据与 放在一起,做为一个相互依存、不可分割的整体来处理。 A) 对数据的操作 B) 信息 C) 数据隐藏 D) 数据抽象 2. C++语言对C语言最本质的改进是 [8] ,它使得C++语言成为面向对象的程序设计语言。 A. 引入了类与对象的概念,并支持继承和多态性 B. 增加了动态存储分配与回收运算符new和delete C. 增加了无名共用体 D. 允许函数使用引用参数 3. 不是面向对象程序设计的主要特点。 A) 封装 B) 继承 C) 多态 D) 结构 4. 由C++目标文件连接而成的可执行文件的缺省扩展名为________。 A cpp B exe C obj D lik 5. 以下关于C++语言标识符的描述中,正确的是 。 A)标识符可以由汉字组成 B)标识符只能以字母开头 C)关键字可以作为用户标识符 D)Area与area是不同的标识符 6. 能用作用户自定义标识符。 A) friend B) -var C) 3xyz D) Float 7. 在每个C++程序中都必须包含有这样一个函数,该函数的函数名为              。 A. main            B. MAIN            C. name            D. function 8. 下面的 保留字不能作为函数的返回类型。 A. void            B. int               C. new              D. long 9. 以下不属于C++语言关键字的是 。 A)case B)byte C)enum D)sizeof 10. 下列变量名中,( )是合法的。 A.CHINA B.byte-size C.double D.A+a 11. 下列变量名中,( )是合法的。 A _var B bye-bye C int D 123_cc 12. 类型修饰符unsigned修饰以下 类型是错误的。D A. char B) int C) long int D) float 13. 若有 char a; int b; float c; double d; 则表达式a*b+d-c值的类型是 。 A) char B) int C) float D) double 14. 设有说明:int a=15, b=17, c ; 执行表达式c=a || (b+=b)后,a , b , c的值分别为 D A、15,17,1 B、1,34,35 C、15,34,1 D、15,17,15 15. 已知a,b为整型变量,则表达式b=3, a=4, b++, a+b的值是 。D A、 7 B、 4 C、 3 D、 8 16. 判断char型变量c1是否小写字母的正确表达式为 。B A、 'a'<=c1<='z' B、 (c1>='a')&&(c1<='z') C、 (c1>=a)&&(c1<=z) D、 ('a'<=c1)||('z'>=c1) 17. 设x和y均为bool量,则x&&y为真的条件是                。 A. 它们均为真     B. 其中一个为真     C. 它们均为假      D. 其中一个为假 18. 若x和y为double型变量,则表达式x=10,y=x+3/2的值是 。D A) 10 B) 20 C) 11.5 D) 11.0 19. 使用操作符setw对数据进行格式输出时,需要包含( )文件。C A.iostream.h B.fstream.h C.iomanip.h D.stdlib.h 20. 以下的for循环 (19) 。C for(int x = 0; x < 4; x ++ ); A) 是无限循环 B)循环次数不定 C)执行4次 D)执行3次 21. 在循环语句的循环体中,continue语句的作用是 。 A) 立即终止整个循环 B) 继续执行continue语句之后的循环体各句 C) 结束本次循环 D) 结束本次循环并跳出循环 22. 已知: int m=10; 则下列表示引用的方法中,正确的是 。A A int &x=m; B int &y=10; C int &z ; D float &t=&m; 23. 若执行完以下语句,i和j的值分别为 。C int i; int &j=i; i=5; j=i+1; A) 5,5 B) 5,6 C) 6,6 D) 6,5 24. 在下面的一维数组定义中,哪一个有语法错误。________ C A int a[]={1,2,3}; B int a[10]={0}; C int a[]; D int a[5]; 25. 在”int a[][3]={{1},{3,2},{4,5,6},{0}};”中,a[2][2]的值是 。C A) 1 B) 0 C) 6 D) 2 26. 以下叙述中不正确的是 。 A) 在不同的函数中可以使用相同名字的变量 B) 程序中有调用关系的函数必须放在同一个源文件中 C) 在一个函数内定义的变量,其变量名只在本函数范围内有效 D) 函数中的形式参数是局部变量 27. 以下C++语言中,对函数不正确的描述是 。D A) 当用数组名作形参时,形参数组改变可使实参数组随之改变 B) 允许函数递归调用 C) 函数形参的作用范围只是局限于所定义的函数内 D) 函数说明必须在主调函数之前 28. 对于某个函数调用,不必给出被调函数声明的情况是 。C A) 被调函数是无参参数 B) 被调函数是无返回值的函数 C) 被调函数的定义在调用处之前 D) 被调函数的定义在别的源文件中 29. 在C++中,一个函数带有参数说明时,则参数的默认值应该在 中给出。B A) 函数定义 B) 函数声明 C) 函数定义或声明 D) 函数调用 30. 在C++中,关于下列设置参数默认值的描述中,正确的是 。C A) 不允许设置参数的默认值 B) 设置参数默认值只能在定义函数时设置 C) 设置参数默认值时,应该是先设置右边的再设置左边的 D) 设置参数默认值时,应该设置全部参数 31. 若有以下函数调用语句:f (m+n,x+y,f (m+n,z, (x,y)));则此函数调用语句中实参的个数是: 。D A) 6 B) 5 C) 4 D) 3 32. 假设整型数i的地址为0x12345678,指针ip地址为0x21850043,则执行以下语句后,k的值为_______。C int i=100; int *ip=&i; int k=*ip; A) 0x12345678 B) 0x21850043 C) 100 D) 不确定 33. 有如下定义:int a[5],*p; p=a; 则下列描述错误的是 。B A) 表达式p=p+1合法的 B) 表达式a=a+1是合法的 C) 表达式p-a是合法的 D) 表达式a+2是合法的 34. 设int a=3,*p=&a;,则*p的值是( )。D A 变量a的地址值 B 无意义 C 变量p的地址值 D 3 35. 指针可以用来表示数组元素,若已知语句:int a[3][7];则下列表示中错误的是 。A A) *(a+1)[5] B) *(*a+3) C)*(*(a+1)) D)*(&a[0][0]+2) 36. 若有以下说明和语句,且0<=i<10,则 是对数组元素的错误引用。C int a[10],*p=a; A)*(a+1) B) a[p-a] C) p+i D) p[i] 37. 说明语句int (*p)(); 的含义是 。C A) p是一个指向一维数组的指针变量 B) p是指针变量,它指向一个整型数据的指针 C) p是一个指向函数的指针变量,该函数的返回值为整型数 D) p是一个指指针函数,该函数的返回值为指针值 38. 对于语句int *pa[5];的描述,下列说法正确的是 。D A)pa是一个指向数组的指针,所指向的数组是5个int型元素; B)pa是一个指向某数组中第5个元素的指针,该元素是int型变量; C)pa[5]表示某个数组的第5个元素; D)pa是一个具有5个元素的指针数组,每个元素都是一个int型指针。 39. 已定义char str[10],*p;下列赋值语句中正确的是 C A) str=“China”; B) p=&str; C)p=str; D)strcpy(“China”,str); 40. 设void f1(int &x,char * p);int m;char s[ ]="c++";以下调用合法的是( )。C A f1(&m,&s); B f1(&m,s); C f1(m,s); D f1(m,&s); 41. 设void f1(int * m,long & n);int a;long b;则以下调用合法的是( )。B A.f1(a,b); B.f1(&a,b); C.f1(a,&b); D.f1(&a,&b); 42. 不能正确赋值的选项是 。A A) char s1[10];s1=”Hello”; B) char s2[]={’H’,’e’,’l’,’l’,’o’}; C) char s3[10]=”Hello”; D)char *s4[10]=”Hello”; 43. 指针s所指字符串的长度为 (18) 。D char s[ ]="\\"Name\\Address\n"; A) 19 B) 15 C) 18 D) 说明不合法 44. 对于结构中定义的成员,其隐含访问权限为________。 A A public B protected C private D static 45. 下列说法正确的是: 。D A) 一个类的对象可以是另一个类的成员 B) 一个类可以作为另一个类的派生类 C) 一个类定义在另一个类的说明中 D) 以上说法均正确 46. 下列各类函数中, 不是类的成员函数。 A) 构造函数 B) 析构函数 C) 友元函数 D) 拷贝构造函数 47. 下列有关C++类的构造函数的说法正确的是 。A A、可以重载,可有缺省参数,函数名与类名相同,不能有返回类型 B、函数体的定义必须位于类定义体中 C、不能重载,不能有返回类型 D、不可带参数 48. 对于C++的类, A、只能有一个构造函数和一个析构函数 B、可能有一个构造函数和多个析构函数 C、可能有多个构造函数和一个析构函数 D、可能有多个构造函数和多个析构函数 49. 类X中,若没有定义构造函数,则默认的构造函数是( )。A A X ( ){ } B X (X & x){ *this=x;} C ~X ( ){ } D 不存在 50. 有关析构函数的说法不正确的是 。 A) 析构函数有且只有一个 B) 析构函数无任何函数类型 C) 析构函数和构造函数一样可以有形参 D) 析构函数的作用是在对象被撤销时收回先前分配的内存空间 51. 一个类的析构函数 。 A)唯一的 B)允许重载 C)至多可有两个 D)只能是缺省的 52. 通常拷贝构造函数的参数是 。C A) 某个对象名 B) 某个对象的成员名 C) 某个对象的引用名 D) 某个对象的指针名 53. 假定AB为一个类,则该类的拷贝构造函数的声明语句为________。 C A AB&(AB x); B AB(AB x) C AB(AB &); D AB(AB* x) 54. 对于友元函数描述正确的是 。D A) 友元函数的实现必须在类的内部定义中 B) 友元函数是类的成员 C) 友元函数不破坏类的封装性和隐藏性 D) 友元函数能访问类的私有成员 55. 下面对友元函数的描述正确的是 (17) 。 A. 友元函数的实现,必须在类的内部定义 B. 友元函数是类的成员函数 C. 友元函数破坏了类的封装性和隐藏性 D. 友元函数不能访问类的私有成员 56. 可以用p.a的形式访问派生类对象p的基类成员,其中a是 。D A) 私有继承的公有成员 B) 公有继承的私有成员 C) 公有继承的保护成员 D) 公有继承的公有成员 57. 捆绑在程序运行前完成时称为 。A A) 静态捆绑 B) 动态捆绑 C) 运行后捆绑 D) 运行时捆绑 58. 如果一个类至少有一个纯虚函数,那么就称为 。A A) 抽象类 B) 虚基类 C) 派生类 D) 以上都不对 59. 类MyClass的定义如下: class MyClass { public: MyClass(){value=0;} SetValue(int i){value=i;} private: int value; }; 则对语句:MyClass *p,my;p=&my;正确的描述是 。D A) 语句p=&my;是把对象my赋值给指针变量p; B) 语句MyClass *p,my;会调用两次类MyClass的构造函数 C) 对语句*p.SetValue(5)的调用是正确的 D) 语句p->SetValue(5)与my.SetValue(5)等价 60. 假定AB为一个类,则执行“AB  a(4) , b[3] , * p[2] ;”语句时,自动调用该类构造函数的次数为                 。B A) 3               B) 4                C.)6                D.)9 61. 一个基类以私有方式派生时,其基类中的公有成员和保护成员在派生类中 A A、均成为私有成员 B、均为公有成员 C、均成为保护成员 D、仍为公有成员和保护成员 62. 如果基类的所有公有成员和保护成员都成为派生类的私有成员,并且都不能被其派生类的子类访问,则继承的方式为 。B A、 public B、 private C、 protected D、 以上三种都可以 二、基础知识填空题 1. 面向对象程序设计的基本特点有: 、 、 和 。 2. 数学式子x2+y2写成C++语言表达式是 。x*x+y*y 3. 用C++表达式描述命题“a与b中有一个小于c”: 。a<c||b<c 4. 若x=3,y=2,z=1,表达式z-=x<y?x++:++y的值为 。-2 5. 数学表达式等价的C语言表达式是 。(a-b)*(a-b) 6. 数学表达式等价的C语言表达式是 。 7. C++语言中函数返回值的缺省数据类型是 。int 8. C++语言中的三种基本控制结构是 结构、选择结构和循环结构。 9. 除goto语句外,在循环结构中执行______语句可提前结束本次循环直接进入下一次循环。 10. 若有以下函数调用语句:fun(a+b,(x,y),fun(n+k,d,(a,b)));在此函数调用语句中实参的个数是 。3 11. 执行“cout  <<char('A'+2)<<endl;”语句后得到的输出结果为                 。 C 12. 执行“cout<<43<<’-’<<18<<’=’<<43-18<<endl;”语句后得到的输出结果为________。43-18=25 13. 设有说明“int i = 10; float x;”,执行“x = 5/i;”后,x的值为 0.0 。 14. 设有说明“int a = 3, b = 5, m;”,则执行“m = a <=3 && a + b < 8;”后,m的值为 0 。 15. 执行完语句“a = 30; b = ++a; c = ++a;”后,a = 32 ,b = 31 .,c = 32 。 16. 执行if (x>=0||x<=0) cout<<"abcd";else cout<<"wxyz";屏幕上显示的是_______________。abcd 17. 字符串常量"a"在内存中占用 个字节。 2 18. 若一全局变量只允许本程序文件中的函数使用,则定义它时应加上修饰符_______________。Static 19. 静态变量如果没有指定初值,则其初值为 。 20. 设文件f.cpp中的一个函数要访问在另一个文件中定义的int型变量x,则在f.cpp中x应定义为________________。extern int x; 21. 在C++ 中,函数的参数传递有 值传递 、 引用传递 、 地址传递 三种方式。 22. 在类中必须声明成员函数的 原型 ,成员函数的 实现 部分可以写在类外。 23. 设有说明语句“int A[4][3]={{1,2}, {3,4,5}, {6,7,8}, {9,10}};”,则A[0][2] 和A[2][2] 的初始化值分别为 0、8 。 24. 假定a是一个二维数组,则a[i][j]的指针访问方式为                         。*(a[i]+j)   或  *(*(a+i)+j) 25. 设有int w[3][4];,pw是与数组名w等价的数组指针,则pw应初始化为__________________________。int (* pw)[4]=w; 26. 假定p所指对象的值为25,p+1所指对象的值为46,则执行“(*p)++;”语句后, p所指对象的值为________。26 27. 若有以下定义和语句:int a[4]={0,1,2,3}, *p; p=&a[2]; 则*--p的值是 。1 28. 定义int a[]={1,2,3,4,5,6},*p=a;表达式(*++p)++的值是_______。3 29. 假定一个一维数组的定义为“char  * a[8] ;”,则该数组所含元素的个数为          ,所占存储空间的字节数为            。 8 , 32 30. 假定AB为一个类,则执行“AB  a[10];”语句时,系统自动调用该类的构造函数的次数为                       。 10 31. 若有宏定义 #define N 2 #define Y(n) ((N+1)*n) 则执行语句z=2*(N+Y(N+2))后,z的值是___(10)___。20 32. 对于定义 struct { int x,y; } s[2]={{1,2},{3,4}}; 表达式s[0].x和s[1].y的值分别是____(7)_______和_____(8)______。1;4 33. 若类中的成员只能为该类的成员函数及该类的派生类中的成员函数访问,则应加上访问属性__________________。protected 34. 拷贝构造函数的形参必须是 本类对象的引用 。 35. 派生类的生成过程包括 吸收基类成员 、 改造基类成员 和 添加新的成员 三个步骤。 36. 一个派生类可以同时有多个基类,这种情况称为 多继承 ;一个派生类只有一个直接基类的情况,称为 单继承 。一个基类可以同时派生出多个不同的派生类,这种情况称为 多重派生 ;派生类又可以作为基类,继续派生新的类,这种情况称为 多层派生 。 37. 现有基类的构造函数、成员对象的构造函数,派生类本身的构造函数,则对于派生类的构造函数,在定义对象时该三种类型的构造函数的执行顺序为:先执行 ,再执行 ,最后执行 。基类的构造函数、成员对象的构造函数、派生类本身的构造函数 38. 派生类对基类继承的控制方式有 、 、 三种继承。public 、 private 、 protected 39. 多态性分为动态多态性和静态多态性,函数重载属于 [17] 。静态多态性 三、判断题 1. 作用域运算符“::”只能用来限定成员函数所属的类。( ) 2. C++语言是一种支持面向对象的程序设计语言。 ( ) 3. 在继承方式中,“private”和“protected”继承没有区别。( ) 4. 自增运算符(++)或自减运算符(--)只能用于变量,不能用于常量或表达式( ) 5. 在多继承的情况下,派生类的构造函数的执行顺序取决于定义派生类时所指定的各基类的顺序。 ( ) 6. “const char *p ;”语句说明了p是指向字符串的常量指针。( × ) 7. 函数的参数个数和类型都相同,只是返回值不同,这不是重载函数。( ) 8. 函数的定义可以嵌套,但函数的调用不可以嵌套( ) 9. 若调用一个函数,且此函数中没有return语句,则返回一个不确定的值( ) 10. 函数调用:strcat(strcpy(str1,str2),str3)的功能是将串str2复制到串str1中后再将串str3连接到串str1之后(√) 11. 对于每个可重载的运算符,它既可以重载为友元函数,又可以重载为成员函数。( ) 12. 派生类是从基类派生出来的,它不能再生成新的派生类。( ) 13. 派生类继承了基类的的全部数据成员和除了构造、析构函数之外的全部函数成员。( ) 14. 当类的继承方式为公有继承时,基类成员的访问控制属性在派生类中不变。( × ) 15. C++语言的标识符对大小写是不敏感的,如 a与A是相同的标识符。 ( ) 16. a-b是一个合法的C++标识符。 ( ) 17. 如下方式定义数组是正确的:int a = {1,2,3,4,5} 。 ( × ) 18. C++中任一个类都必须定义构造函数。 ( ) 19. C++类成员的访问方式可以是以下三种之一:public, private, protected ( ) 20. C++使用类进行封装和数据隐藏。 ( √ ) 21. 每一个C++程序都必须有且仅能有一个main()函数。 ( ) 22. int I=1; int &j = I; 其中&符号表示取地址运算。 ( × ) 23. 用const关键字修饰的标识符,在程序段中可以对其值改变 ( ) 24. 若有一个数组的定义:int a[3][3]; 则该数组中有一个元素为 a[3][3] ( ) 25. float I=1.0; I = I % 2; 则I的值为0.5 ( × ) 26. 在while循环中允许使用嵌套循环,但只能是嵌套while循环( ) 四、阅读程序题 1. 以下程序运行结果是 (11) 。1,1 main(){ int x,y,z; x=1;y=2;z=3; x=y--<=x||x+y!=z; cout <<x <<’,’<<y; } 2. 以下程序的输出结果是 1 -2 。 #include <iostream.h> void main() { int x=3; do{ cout<<(x-=2)<<" "; }while(!(--x)); } 3. 执行下列程序段时,输出 。1,1,1,2 int s1=0,s2=0,s3=0,s4=0; for(int t=1;t<=4;t++) switch(t) { case 4:s1++;break; case 3:s2++;break; case 2:s3++; default:s4++; } cout<<s1<<”,”<<s2<<”,”<<s3<<”,”<<s4<<endl; 4. 以下程序运行结果是 (12) 。2,1 #include < iostream.h> main(){ int x=1,y=0,a=0,b=0; switch(x) { case 1: switch(y) {case 0:a++;break; case 1:b++;break; } case 2: a++;b++;break; } cout << a<<’,’<< b; } 5. 以下程序输出的第一行至第三行分别是 4 3 6 、 12 3 9 和 10 3 6 。 #include <iostream.h> int a=2; void main() { int b=2, c=3; ++a; c+=++b; if(++a||++b||++c) cout<<a<<" "<<b<<" "<<c<<endl; { int a=3,c; c=b*3; a+=c; cout<<a<<" "<<b<<" "<<c<<endl; } a+=c; cout<<a<<" "<<b<<" "<<c<<endl; } 6. 以下程序的输出结果是 100 200 。 #include <iostream.h> void p(int *a, int *b) { int *t=a; a=b; b=t; } void main() { int x=100, y=200; p(&x, &y); cout<<x<<" "<<y<<endl; } 7. 以下程序的输出结果是 200 100 。 #include <iostream.h> void f(int &a, int &b) { int t=a; a=b; b=t; } void main() { int x=100, y=200; f(x,y); cout<<x<<" "<<y<<endl; } 8. 以下程序的输出结果是 。 a=5,b=2 a=5,b=5 #include<iostream.h> void swap(int x,int &y); void main() { int a(5),b; b=a/2; cout<<"a="<<a<<","<<"b="<<b<<endl; swap(a,b); cout<<"a="<<a<<","<<"b="<<b<<endl; } void swap(int x,int &y) { int temp=x; x=y; y=temp; } 9. 以下程序的输出结果为________(4)____________。222223224 #include <iostream.h> int b=0; void fun(int a) { int b=1; static int c=1; ++a; ++b; ++c; cout <<a<<b<<c; } void main() { int x=1,i; for (i=5;i<8;i++) fun(x); } 10. 以下程序的输出结果分别是 100 和 200 。 #include <iostream.h> int abc() { static int j; j+=100; return (j); } void main() { cout<<abc()<<endl; cout<<abc()<<endl; } 11. 以下程序输出的第一行至第三行分别是 a.x=20 、 b.x=20 和 T::x=20 。 #include <iostream.h> class T { public: static int x; }; int T::x=1; void main() { T a, b; a.x=10; b.x=20; cout<<"a.x="<<a.x<<endl; cout<<"b.x="<<b.x<<endl; cout<<"T::x="<<T::x<<endl; } 12. 以下程序输出的第一行至第三行分别是 j=2 、 j=6 和 j=10 。 #include <iostream.h> int f(int x, int y) { return x*y; } void main() { int i, j, (*fun)(int, int); fun=f; for(i=1; i<4; i++) { switch(i) { case 1: case 2: j=(*fun)(i, i+1); break; case 3: j=(*fun)(i-1, i+2); break; } cout<<"j="<<j<<endl; } } 13. 以下程序输出的第一行至第三行分别是 x=5, y=7 、 x=5, y=10 和 x=5, y=7 。 #include<iostream.h> void myFunction(); int x=5, y=7; int main() { cout<<"x="<<x<<", y="<<y<<endl; myFunction(); cout<<"x="<<x<<", y="<<y<<endl; return 0; } void myFunction() { int y=10; cout<<"x="<<x<<", y="<<y<<endl; } 14. 以下程序输出的第一行至第三行分别是 5 7 11 、 13 17 19 和 23 29 。 #include <iostream.h> #include <math.h> #include <iomanip.h> void main() { int i, flag, j, K, count=0; for(i=5; i<30; i+=2) { flag=2; j=2; K=sqrt(i); while(flag&&j<=K) if(i%j==0) flag=0; else j++; if(flag) {
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服