C. strcat() D. strcmp()
18. 预处理命令在程序中都是以(B)字符开头的。 A. * B. # C. & D. @
19. 假定有定义“struct BOOK{char title[40]; float price;};”,
则不正确的变量定义语句为(D)。
一、单选题 A. BOOK x; B. BOOK x={\1.在每个C++程序中都必须包含有这样一个函数,该函数Programming\的函数名为(A)。 C. BOOK *x=new BOOK; D. BOOK A. main B. MAIN C. name D. x=new BOOK; function 20. 假定AB为一个类,px为指向该类动态对象数组的指2.设x和y均为bool量,则x && y为真的条件是(D)。 针,该数组长度为n,则执行“delete []px;”语句时,自动调 A. 其中一个为假 B. 其中一个为真 用该类析构函数的次数为(B)。 C. 它们均为假 D. 它们均为真 A. 1 B. n C. n-1 D. n+1 3. 逻辑表达式x>0 || y==5的相反表达式为(B)。 21. 由C++源程序文件编译而成的目标文件的缺省扩展名
A. x<=0 || y!=5 B. x<=0 && y!=5 为(A)。 C. x>0 || y!=5 D. x>0 && y==5 A. obj B. lik C. exe D. cpp
4. 假定p是一个指向float型数据的指针,则p+1所指数据22. 程序运行中需要从键盘上输入多于一个数据时,各数据的地址比p所指数据的地址大(C)个字节。 之间应使用(D)符号作为分隔符。 A. 1 B. 2 C. 4 D. 8 A. 空格或逗号 B. 逗号或回车 5. 枚举类型中的每个枚举常量的值都是一个(A)。 C. 逗号或分号 D. 空格或回车 A. 整数 B. 浮点数 23. 设x是一个bool型的逻辑量,y的值为10,则表达式 x
C. 字符 D. 逻辑值 && y的值为(C)。
6. 循环体至少被执行一次的语句为(C)语句。 A. 1 B. 0 C. 与x值相同 D. 与x值 A. for循环 B. while循环 相反
C. do循环 D. 任一种循环 24. for语句能够被改写为(D)语句。
7. 在下面的字符数组定义中,(D)语句有语法错误。 A. 复合 B. if C. switch D. while A. char a[20]=”abcdefg”; B. char a[]=”x+y=55.”; 25. 在下面的do循环语句中,其循环体被执行的次数为 C. char a[15]={’1’,’2’}; D. char a[10]=’5’; (A)。 8. 若用数组名作为函数调用的实参,传递给形参的是(A)。 int i=0; do i++; while(i*i<10); A. 数组的首地址 B. 数组中第一个元素的值 A. 4 B. 3 C. 5 D. 2
C. 数组全部元素的值 D. 数组元素的个数 26. 在下面的一维数组定义中,(C)语句有语法错误。
9.假定AB为一个类,则执行“AB a(4), b[5], *p[2];”语句时, A. int a[]={1,2,3}; B. int a[10]={0}; 自动调用该类构造函数的次数为(A)。 C. int a[]; D. int a[5]; A. 6 B. 7 C. 9 D. 11 27. 下面的(C)保留字不能作为函数的返回类型。 10.当使用fstream流类定义一个流对象并打开一个磁盘文 A. void B. int C. new D. long 件时,文件的隐含打开方式为(D)。 28. 下面的函数声明中,(B)是“void BC(int a, int b);”的重载 A. ios::in B. ios::out 函数。
C. ios::in | ios::out D. 没有 A. int BC(int x, int y); B. void BC(int a, char b);
11. 枚举类型中的每个枚举常量的值都是一个(A)值。 C. float BC(int a, int b, int c=0); A. 整数 B. 浮点数 D. int BC(int a, int b=0);
C. 字符 D. 逻辑 29. 当类中一个字符指针成员指向具有n个字节的存储空
12.设x和y均为bool量,则逻辑表达式x || y为假的条件间时,它所能存储字符串的最大长度为(C)。 是(C)。 A. n B. n+1 C. n-1 D. n-2 A. 它们均为真 B. 其中一个为真 30. 假定AB为一个类,则该类的拷贝构造函数的声明语句
C. 它们均为假 D. 其中一个为假 为(D)。
13. 声明或定义一个内联函数时,必须在函数开始使用保留 A. AB&(AB x); B. AB(AB x); 字(D)。 C. AB(AB* x); D. AB(AB&); A. static B. const 31. C++程序的基本功能模块为(D)。
C. extern D. inline A. 表达式 B. 标识符
14. 在下面的函数声明中,存在着语法错误的是(D)。 C. 语句 D. 函数 A. BC(int a, int); B. BC(int, int); 32. 存储以下数据,占用存储字节最多的是(A)。
C. BC(int, int=5); D. BC(int x; int y); A. 0 B. ’0’ C. ”0” D. ’\\n’
15. 假定a为一个整型数组名,则元素a[4]与(C)的表示33. 在下面的一维数组定义中,有语法错误的是(C)。 等价。 A. int a[]={1,2,3}; B. int a[10]={0}; A. a+4 B. *a+4 C. int a[]; D. int a[5];
C. *(a+4) D. *(a+16) 34. 在下面的语句或语句组中,(B)不正确。
16. 下面循环语句执行结束后输出的i值为(B)的值。 A. int a[5]; B. int M=10; int a[M]; for(int i=0; i 内部文件,版权追溯 内部文件,版权追溯 本科《C++语言程序设计》期末复习模拟训练题 1 A. 1~19 B. 1~20 C. 0~19 时进行 初始化 。 D. 0~20 22.执行“int x=45,y=16;cout< 2 A. n B.(n+1)/2 C. n(n-1)/2 D. n(n+1)/2 4 。 39. 若函数声明为double* function(), 则该函数的返回值为27表达式a=a+b表示成复合赋值表达式为 a+=b; 。 (B)。 28.表达式a=a+1表示成增量表达式为 ++a; 。 A. 实数型 B. 实数指针型 C. 函数指针型 D. 数29.增量表达式+ +y表示成赋值表达式为 y=y+1; 。 组型 30.关系表达式(x= =0)的等价表达式为 !(x! =0)。 40. 假定变量m定义为“int m=7;”,则定义变量p的正确语31.关系表达式(x! =0)的等价表达式为 !(x= =0) 。 句为(B)。 32.关系表达式x+y>z的相反表达式为 x+y<=z 。 A. int p=&m; B. int *p=&m; 33.逻辑表达式x>5&& x<10的相反表达式x<=5 || x>=10 。 C. int &p=*m; D. int *p=m; 34.逻辑表达式a>b | | b= =5的相反表达式为a<=b && b!=5 。 二、填空题 35.若x=15,y=40,则x>y 和x<=y的逻辑值分别为false1.C++语言中的每条基本语句以 ; 作为结束符,每条复合或0 和true或1 。 语句以 } 作为结束符。 36.假定x=5,则执行“a=(x? 10:4*2);”语句后a的值为10 。 2.用于输出表达式值的标准输出流对象是cout ,用于从37.假定a=5,则条件表达式“a= =0? 10:20”的值为 20。 键盘上为变量输入值的标准入流对象是 cin 。 38.执行“typedef int Data Type;”语句后,在使用int定义3.当不需要函数返回任何值时,则应把该函数类型定义为 整型变量的地方都可以使用 void 。 Data Type 定义整型变量。 4.执行“cout<<143<<’+’<<18<<’=’<<143+18< 10.在C++语言中,用转义字符序列 ’\\n’ 或’\\12’ 或’\\x0a’ 45.在函数外定义的变量称为 全局 变量,若没有被初始或操纵符 endl 表示输出一个换行符。 化则系统隐含对它赋初值 0 。 11.执行“cout< 16.假定一个枚举类型的定义为“enum 52.假定p所指对象的值为25,p+1所指对象的值为50,RB{ab,ac=3,ad,ae}x=ad;”则x的值为 4 。 则执行“*(p+ +);”语句后,p所指对象的值为 50 。表达式17.Char、short和int类型的大小分别为 1B 、2B 和 4B 。 值为:50 18.float和double类型的大小分别为 4B 和 8B 。 53.假定a是一个指针数组,则a+i所指对象的地址比a地19.十进制数128和-3.26的类型分别为 int 和 double 。 址大 i*sizeof(unsigned) 字节。 20.若需要定义一个标识符常量,并且使C++能够进行类54.假定a是一个一维数组,则a[i]的指针访问方式为 *( a+ 型检查,则应在定义语句的开始用保留字 const 。 i ) 。 21.使用const语句定义一个标识符常量时,则必须对它同55.假定a是一个二维数组,则a[i] [j]的指针访问方式为 * 2 (( a+i ) + j )。 56.假定a是一个一维数组,则a[i]对应的存储地址(以字节为单位)为 a + sizeof(a[0])*i 。 57.假定一个二维数组为a[M] [N],则a[i] [j]对应的存储地址(以字节为单位)为 a+sizeof(a[0][0])*(i*N + j ) 。 58.假定一个二维数组a[M] [N],则a[i]的地址值(以字节为单位)为 a + sizeof(a[0][0])*(i*N) 。 59.假定p是一个指向float型数据的指针,则p+1所指数据的地址比p所指数据的地址大 4 字节。 60.假定a为一个字符数组名,则元素a[8]的字节地址为 a + 8 。 61.假定a为一个整型数组名,则元素a[4]的字节地址为 a + 4*sizeof( int ) 或 a + 16 。 62.假定一个结构类型的定义为“struct A{int a,b;short c;A*d;};”,则该类型的大小为 14 字节。 63.假定一个结构类型的定义为“struct B{int a[8];char* b;};”,则该类型的大小为 36 字节。 64.假定一个结构类型的定义为“struct D{int a;union{int b;double c;}; D*d[3];};”,则该类型的大小为24字节。 65.假定要动态分配一个类型为Worker的具有n个元素的数组,并由r指向这个动态数组,则使用的语句为 Worker *r = new Worker [ n ] ; 。 66.假定要访问一个结构x中的由a指针成员所指向的对象,则表示方法为 *( x . a ) 。 67.假定要访问一个结构指针p所指对象中的b指针成员所指的对象,则表示方法为 *( p->b )。 68.在定义类对象的语句执行时,系统在建立每个对象的过程中将自动调用该类的 构造函数 使其初始化。 69.当一个类对象被撤消时将自动调用该类的 析构函数 。 70.对基类数据成员的初始化是通过执行派生类构造函数中的 初始化表 来实现的。 71.对一个类中的数据成员的初始化可以通过构造函数中的 赋值语句 实现,也可以通过构造函数中的 初始化表 实现。 72.在一个派生类中,对基类成员、类对象成员和非类对象成员的初始化次序的先 基类成员 ,后 类对象成员 ,最后 非类对象成员 。 73.当撤消一个含有基类和类对象成员的派生类对象时,将首先完成 类对象成员 的析构函数定义体的执行,接着完成 派生类 的析构函数定义体的执行,最后完成 基类 的析构函数定义体的执行。 74.设PX是指向一个类动态对象的指针变量,则执行“delete px;”语句时,将自动调用该类的 析构函数 。 75.当一个类对象离开它的作用域时,系统将自动调用该类的 析构函数 。 76.假定一个类对象数组为A[N],当离开它的作用域时,系统自动调用该类析构函数的次数为 N 。 77.假定AB为一个类,则执行“AB a[10];”语句时,系统自动调用该类构造函数的次数为 10 。 78.假定拥护没有给一个名为AB的类定义构造函数,则系统为其隐含定义的构造函数为 AB ( ) { } 。 79.假定用户没有给一个名为AB的类定义析构函数,则系统为其隐含定义的析构函数为 ~ AB ( ) { } 。 80.若需要把一个函数“void f(); ”定义为一个类AB的友元函数,则应在类AB的定义中加入一条语句:friend void f( ); 。 81.若需要把一个类AB定义为一个类CD的友元类,则应在类CD的定义中加入一条语句:friend class AB; 。 82.假定一个类AB中有一个静态整型成员bb,在类外的它进行定义并初始化为0时,所使用写法为:int AB::bb = 0 ; 。 83.假定类AB中有一个公用属性的静态数据成员bb,在类外不通过对象名访问该成员 bb的访问为AB::bb 。 84.当类中一个字符指针成员指向具有n个字节的储存空间时,它所能储存字符串的最大长度为 n-1 。 85.假定AB为一个类,则该类的拷贝构造函数的声明语句为 AB (AB & ); 。 86.对类对象成员初始化是通过执行构造函数中的 赋值语句 或 初始化表 完成的。 87.对于类中定义的成员,其隐含访问权限为private ,对于结构中定义的成员,其隐含访问权限为 public 。 88.一个类的友元函数或友元类能够通过成员操作符直接访问该类的 私有成员 。 89.假定要对类AB定义加号操作符重载成员函数,实现两个AB类对象的加法,并返回相加结果,则该成员函数的声明语句为:AB& operator+(AB &); 。 90.在C++流类库中,根基类为 ios 。 91.在C++流类库中,输入流类和输出流类的名称分别为 istream 和 ostream 。 92.若要在程序文件中进行标准输入输出操作,则必须在开始的#include命令中使用iostream.h头文件。 93.若要在程序文件中进行文件输入输出操作,则必须在开始的#include命令中使用fstream.h头文件。 94.当从字符文件中读取回车和换行两个字符时,被系统看作为一个 字符串流 。 95.当使用ifstream流类定义一个流对象并打开一个磁盘文件时,文件的隐含打开方式为 ios ::in,当使用ofstream 流类定义一个流对象并打开一个磁盘文件时,文件的隐含打开方式为 ios::out 。当需要使用istream流类定义一个流对象并联系一个字符串时,应在文件开始使用#include命令,使之包含 strstrea.h 文件。 三、写出下列程序运行后的输出结果 1.#include switch (ch) { case ’A’ :case ’a’: cout <<”well”!” ; break case ‘B’: case ‘b’: cout <<”good!” ;break; case ‘C’: case ‘c’: cout <<”pass!” ;break; default : cout << “bad!” ; break;}} void main ( ){ char al=’b’,a2=’c’,a3=’f’; SB(al);SB(a2);SB(a3);SB(‘A’); Cout < 运行结果:good!pass!bad!well! 2、#include #include double SD(int a,int b,char op) { double x; //局部变量x的改变不影响main函数中的x switch (op) { case ‘x’:x=double(a) + b; break; case ‘-‘: x=double (a)– b; break; case ‘*’: x=double (a) * b;break; case ‘/’:if (b) x=double (a)/b; else exit(1); break; default:exit(1); } return x;} 3