第1章 C++ 概述

第一章C++概述

1、在一个C++程序中________。
    A、main函数必须出现在所有函数之前
    B、main函数可以在任何地方出现
    C、main函数必须出现在所有函数之后
    D、main函数必须出现在固定位置

2、以下叙述中正确的是________。
    A、C++程序中注释部分可以出现在程序中任意合适的地方
    B、花括号"{"和"}"只能作为函数体的定界符
    C、构成C++程序的基本单位是函数,所有函数名都可以由用户命名
    D、分号是C++语句之间的分隔符,不是语句的一部分

3、编写C++程序一般需经过的几个步骤依次是()
    A、编辑、调试、编译、连接
    B、编辑、编译、连接、运行
    C、编译、调试、编辑、连接
    D、编译、编辑、连接、运行

4、以下叙述中正确的是________。
    A、构成C++程序的基本单位是函数
    B、可以在一个函数中定义另一个函数
    C、main()函数必须放在其它函数之前
    D、所有被调用的函数一定要在调用之前进行定义

5、C++语言中,编译后生成的文件扩展名为________。
    A、*.cpp
    B、*.obj
    C、*.exe
    D、*.h

第2章 数据类型、运算符和表达式

第2章 数据类型、运算符和表达式 (1)

1、下列标识符能做C++标识符的是__________。
    A、1841quanzhan
    B、-score
    C、Class
    D、gpa4.0

2、常量4.2、4.3f、4L的数据类型分别是___________。
    A、float、float、double
    B、double、float、long
    C、double、double、float
    D、float、float、long

3、下列叙述中,错误的是:
    A、”x”是一个字符型常量
    B、2.71828是一个double常量
    C、true是一个逻辑型常量
    D、100是一个int常量

4、下列变量定义中合法的是________。
    A、short _a=1.0e-1; 
    B、double b=1+5e2.5;
    C、long do=0xfdaL;
    D、float 2_and=1-e-3;

5、命题“10 <15或m>20”的C++语言表达式是:
    A、((m>10)&&(m<15)||(m>20))
    B、((m>20)&&(m<15)||(m>10))
    C、((m>20)&&(m<15)||(m>10))
    D、((m>10)||(m<15)||(m>20))



6、设int a=3,b=4,c=5;表达式(a+b)>c&&b==c的值是:
    A、2
    B、-1
    C、0
    D、1



7、若x是一个bool型变量,y是一个值为-5的int型变量,则表达式 !x && y<0 的值为:
    A、为true
    B、为false
    C、与x的值相同
    D、与x的值相反



第2章 数据类型、运算符和表达式 (2)

1、表达式!x等效于
    A、x==1
    B、x==0
    C、x!=1
    D、x!=0



2、逗号表达式 (x=2*3, x=x*5), x+25 的值为
    A、25
    B、55
    C、45
    D、100



3、设变量m,n,a,b,c,d均为0,执行(m = a==b)&&(n=c!=d)后,m,n的值是
    A、0,0
    B、0,1
    C、1,0
    D、1,1



4、设int x=2,y=4,z=7;则执行x=y--<=x|| x+y!=z后x,y的值分别为
    A、0,3
    B、1,3
    C、2,3
    D、2,4



5、在下列成对的表达式中,运算符“+”的意义不相同的一对是
    A、5.0+2.0和5.0+2
    B、5.0+2.0和5+2.0
    C、5.0+2.0和5+2
    D、5+2.0和5.0+2



6、设x为int型变量,则执行以下语句后,x的值为________。 x=10; x+=x-=x-x;
    A、10
    B、20
    C、40
    D、30



7、设有如下程序段: int x=2002, y=2003; cout<<(x, y)<<"\n"; 则以下叙述中正确的是________。
    A、编译时产生出错信息,不能正确输出
    B、输出2002, 2003
    C、输出值为2002
    D、输出值为2003



8、设x, y, z, t均为int型变量,则执行以下语句后,t的值为________。 x=y=z=1; t=++x||++y&&++z;
    A、不定值
    B、2
    C、1
    D、0



9、有如下程序 void main( ) { int y=3, x=3, z=1; cout<<(++x, y++)< <     A、3 4
    B、4 2
    C、4 3
    D、3 3



10、下列程序段的输出是________。 unsigned short i=65538; cout< <
    A、65538
    B、有语法错误,无法编译通过
    C、0
    D、2



第3章 简单的输入/输出

第3章 简单的输入/输出

1、对于语句cout< <
    A、”cout”是一个输出流对象
    B、”endl”的作用是输出回车换行
    C、”x”是一个变量
    D、”<<”称作提取运算符



2、若有定义“int x=20;”,则语句“cout< <
    A、14
    B、0x14
    C、24
    D、024



3、与语句cout<
    A、cout<<’ \n’;
    B、cout<<'\12';
    C、cout<<’ \xA’;
    D、cout<<’ \0’;



4、执行下列代码,程序的输出结果是(用下划线表示空格): int a=25,b=100; cout <     A、25_100
    B、_25_100
    C、25100
    D、_25100



5、执行下列代码,程序的输出结果是: cout <<″Hex:″<< hex << 255;
    A、ff
    B、hex:ff
    C、Hex:ff
    D、0xff



6、下列语句都是程序运行时的第1条输出语句,其中一条语句的输出效果与其他三条语句不同,该语句是________。
    A、cout< <<12345;
    B、cout< <<12345;
    C、cout< <<12345;
    D、cout< <<12345;



第4章 C++的流程控制

第4章 C++的流程控制——选择结构

1、在设计程序时,应采纳的原则之一是:
    A、不限制goto语句的使用
    B、减少或取消注解行
    C、程序越短越好
    D、程序结构应有助于读者理解



2、执行如下语句序列,不可能出现的情况是: int x; cin>>x; if(x>250) cout<<'A'; if(x<250) cout<<'B'; else cout<<'A';
    A、显示:A
    B、显示:B
    C、显示:AB
    D、显示:AA



3、阅读下面的程序,如果两次执行上述程序,且键盘输入分别是4和6,则输出结果是:D#include using namespace std; int main(){ int x; cin>>x; if (x++>5) cout < <     A、4,6
    B、3,6
    C、4,7
    D、5,7



4、执行如下语句序列,不可能出现的情况是:int n; cin>>n; switch(n){ case 1: case 2: cout<<'A'; case 3: case 4: cout<<'B'; break; default:cout<<'C'; }
    A、显示:A
    B、显示:B
    C、显示:C
    D、显示:AB



5、关于switch语句的说明中,错误的是:
    A、default语句是可缺省的
    B、各个分支中的break语句起着退出switch语句的作用
    C、switch结构不可以嵌套
    D、每个case语句中不必用{},而整体的switch结构一定要写一对花括号



6、有以下程序段int main() { int a=3,b=4,c=5,d=2; if(a>b) if(b>c) cout<     A、2
    B、3
    C、43
    D、44



7、有以下程序段 int main() { int i; for(i=0; i<3; i++) switch(i) { case 1: cout<     A、011122  
    B、012  
    C、012020
    D、120



8、下列关于switch语句的描述中,不正确的是________。
    A、switch语句中的default子句可以没有,也可以有一个
    B、switch语句中的每一个case子句中必须有一个break语句
    C、switch语句中的default子句可放在switch语句中的任何位置
    D、switch语句中的case子句后面的表达式只能是整型、字符或枚举类型常量



第4章 C++的流程控制——循环结构

1、执行语句序列“int x=-10; while(++x){}”时,while循环体的执行次数为____________
    A、无限次
    B、9
    C、11
    D、10



2、有如下程序段: int i=1; while(1){ i++; if(i==30)break; if(i%3==0) cout<<'*'; } 执行这个程序段后输出字符*的个数是
    A、10
    B、8
    C、9
    D、30



3、while(!x)中的(!x)与下面哪个条件等价?
    A、x==1
    B、x!=1
    C、x!=0
    D、x==0



4、已知:int i=10,下列do-while循环语句的循环次数为:do{cout< <     A、0
    B、1
    C、19
    D、无限



5、下面程序段:x=3; do{ y=x--; if(!y) { cout<<”x”; continue; } cout<<”#”; }while(x>=1 && x<=2);
    A、将输出##
    B、是死循环
    C、将输出###
    D、含有不合法的控制表达式



6、for(int x=0,y=0;!x&&y<=10;y++)语句执行循环的次数是:
    A、0
    B、10
    C、11
    D、无限



7、下面有关for循环的正确描述是
    A、)for循环只能用于循环次数已经确定的情况
    B、for循环是先执行循环体语句,后判断表达式
    C、在for循环中,不能用break语句跳出循环体
    D、for循环的循环体语句中,可以包含多条语句,但必须用大括号括起来



8、下面程序的输出结果是:#include using namespace std; int main(){ for(int i=-1;i<4;i++) cout<<(i?'*':'#'); return 0; }
    A、*#*
    B、****
    C、*#**
    D、*#***



9、当执行以下程序段时________。 y =-1 ; do {y--;} while(--y); cout< <<"\n";
    A、循环体将执行一次
    B、循环体将执行两次
    C、循环体将执行无限次
    D、系统将提示有语法错误



10、C++的break语句________。
    A、可用在能出现语句的任意位置
    B、只能用在循环体内
    C、只能用在循环体内或switch语句中
    D、能用在任一复合语句中



第5章 函数

第 5章 函数——函数定义和调用

1、必须用一对大括号括起来的程序段是:
    A、switch语句中的case标号语句
    B、if语句的分支
    C、循环语句的循环体
    D、函数的函数体



2、C++语言中规定函数的返回值的类型是由:
    A、return语句中的表达式类型所决定
    B、调用该函数时的主调用函数类型所决定
    C、调用该函数时系统临时决定
    D、在定义该函数时指定的数据类型所决定



3、下列叙述中错误的是:
    A、一个函数中可以有多条return语句
    B、调用函数必须在一条独立的语句中完成
    C、函数中通过return语句传递函数值
    D、主函数名main也可以带有形参



4、函数调用func((exp1,exp2),(exp3,exp4,exp5))中所含实参的个数为:
    A、1
    B、2
    C、3
    D、4



5、在参数传递过程中,对形参和实参的要求是:
    A、函数定义时,形参一直占用存储空间
    B、实参可以是常量、变量或表达式
    C、是常量、变量或表达式
    D、形参和实参类型和个数都可以不同



6、对于某个函数调用,不给出调用函数的声明的情况是:
    A、被调用函数是无参函数
    B、被调用函数是无返回值的函数
    C、函数的定义在调用处之前
    D、函数的定义有别的程序文件中



7、void swap(int a,int &b){int c=a;a=b;b=c;}若执行语句序列: int x=0,y=1; swap(x,y); 则变量x和y的值分别是:
    A、1和0
    B、0和1
    C、0和0
    D、1和1



8、下列函数原型声明中,错误的是________。
    A、int fun(int m, int n);
    B、int fun(int, int);
    C、int fun(int m=3, int n);
    D、int fun(int &m, int &n);



9、下列有关C++函数的描述中,正确的是________。
    A、函数的定义可以嵌套,但函数的调用不可以嵌套
    B、函数的定义不可以嵌套,但函数的调用可以嵌套
    C、函数的定义和函数的调用均不可以嵌套
    D、函数的定义和函数的调用均可以嵌套



10、.下列关于C++函数的叙述中,错误的是________。
    A、函数必须有返回值
    B、一个函数中可以有多条return语句
    C、在不同的函数中可定义同名的变量
    D、函数不能嵌套定义,但可以嵌套调用



第 5章 函数——重载、递归、作用域和存储类别

1、已知在一程序中已定义函数 double Mak(int m,double n); 则下列函数中不可在同一程序中重载的是____。
    A、double Mak(int n);
    B、double Mak(int m,int n);
    C、int Mak(int m,double n);
    D、double Mak(double m,int n);



2、已知函数func的原型为 Int func(int,double); 下列重载函数原型中错误的是______
    A、float func(int,double,int)
    B、bool func(int,double,bool)
    C、char func(int,double)
    D、int func(int,char*)



3、计算数列第n项的函数定义如下: int a(int n) { if(n==0) return 0; else if(n==1) return 1; else if(n==2) return 2; else if(n==3) return 3; else return a(n-1)+a(n-4); }若执行函数调用表达式a(5),函数a被调用的次数是____
    A、3
    B、4
    C、5
    D、6



4、指出下列对定义重载函数的要求中,( )是错误的。
    A、要求参数的个数相同
    B、要求参数的类型相同时,参数个数不同
    C、函数的返回值可以不同
    D、要求参数的个数相同时,参数类型不同



5、一个函数为void x(int,char ch=’a’),另一个函数为void x(int),则它们:
    A、不能在同一程序中定义
    B、可以在同一程序中定义并可重载
    C、可以在同一程序中定义,但不可以重载
    D、以上说法均不正确



6、在哪种情况下适宜采用 inline 定义内联函数?
    A、函数体含有循环语句
    B、函数体含有递归语句
    C、函数代码少、频繁调用
    D、函数代码多、不常调用



7、下列程序的输出结果是________。#include using namespace std; int f(int a,int b) { static int x=3; if(b>2) { x=x*x; b=x; } else b=x+1; return a+b; } int main() { int a=3,b; b=2; cout< <



8、下列程序的输出结果是________。#include using namespace std; int a=5; void fun (int a) { ::a -= --a; cout<<::a<<'\t'< <<'\n'; } int main( ) { int a=5; for(int i=-5; i
9、#include using namespace std; int fun1(int n) { if(n==1) return 1; else return n*n+fun1(n-1); } int fun2(int n) { int f; if (n==1) f=1; else f=n*fun2(n-1); return f; } int main ( ) { cout< <



10、下列程序的输出结果是________。#include using namespace std; void fun(int a,int b) { int m; if(a



第6章 编译预处理

第6章 编译预处理

1、编译预处理包括________。
    A、语句注释
    B、编译源程序
    C、构造工程文件
    D、文件包含,宏定义和条件编译



2、假设有宏定义: #define NUM 15 #define DNUM NUM+NUM 则表达式DNUM/2+NUM*2的值为________。
    A、45
    B、67
    C、52
    D、90



3、下列程序的输出结果是_________。 #include using namespace std; #define SQR(X) X*X int main( ) { int a=10, k=2, m=1; a/=SQR(k+m)/SQR(k+m); cout<
<     A、10
    B、5
    C、1
    D、0

4、下列有关宏代换的叙述中错误的是________。
    A、宏名没有类型
    B、宏代换只是字符串替换
    C、宏代换不占用运行时间
    D、宏名必须用大写字母

5、下列关于文件包含的叙述中,错误的是________。
    A、被包含的文件中还可以使用文件包含命令
    B、被包含的文件中还可以使用文件包含命令
    C、一条文件包含命令可以包含多个文件
    D、一条文件包含命令只能包含一个文件

6、下列程序的输出结果是________。 #include using namespace std; #define MIN(x, y) (x)< (y)?(x): (y) int main() { int a=3, b=4, c; c=10*MIN(3, 4); cout< <     A、30
    B、10
    C、4
    D、40



第7章 数组

第7章 数组——一维数组

1、已知有定义int a[ ]={10, 9, 8, 7, 6, 5, 4, 3, 2, 1}, i=0;,下列对a数组元素的引用错误的是________。
    A、a[++i]
    B、a[10]
    C、a[2*4]
    D、a[a[1]]



2、已知有声明int a[10];,若用其中某个数组元素作函数实参,则下列说法正确的是________。
    A、形参应为数组名
    B、形参应为简单变量
    C、形参应为表达式
    D、形参应为符号常量



3、下列关于数组的描述正确是:
    A、数组的长度是固定的,而其中元素的数据类型可以不同
    B、数组的长度是固定的,而其中元素的数据类型必须相同
    C、数组的长度是可变的,而其中元素的数据类型可以不同
    D、数组的长度是可变的,而其中元素的数据类型必须相同



4、数组的长度是可变的,而其中元素的数据类型必须相同
    A、整型常量
    B、整型表达式
    C、整型常量或整型表达式
    D、任何类型的表达式



5、以下叙述中错误的是:
    A、对于double类型数组,不可以直接用数组名对数组进行那个整体输入或输出
    B、数组名代表的是数组所占存储区的首地址,其值不可改变
    C、当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息
    D、可以通过赋初值的方式确定数组元素的个数



6、要定义数组A,使得其中每个元素的数据分别依次为:3、9、4、8、0、0、0,错误的定义语句是:
    A、int A[]={3,9,4,8,0,0,0};
    B、int A[7]={3,9,4,8,0,0,0};
    C、int A[]={3,9,4,8};
    D、int A[7]={3,9,4,8};



7、下列程序的输出结果是________。 #include using namespace std; int main ( ) { int arr[10], i, k=0; for (i=0; i<10; i++) arr[i]=i; for (i=1; i<4; i++) k+=arr[i]+i; cout< <



8、下列程序的输出结果是________。 #include using namespace std; int main( ) { int n[3], i, j, k; for(i=0; i<3; i++) n[i]=0; k=2; for(i=0; i



9、下面程序执行后的输出结果是: #include using namespace std; int fun(int t[],int n) { int m; if(n>=2) { m=fun(t,n-1); return m; } return t[0]; } int main() { int a[]={11,4,6,3,8,2,3,5,9,2}; cout<



10、下面程序执行后的输出结果是: #include using namespace std; #define N 20 void fun(int a[],int n,int m) { int i; for(i=m;i>=n;i--) a[i+1]=a[i]; } int main() { int i; int a[N]={1,2,3,4,5,6,7,8,9,10}; fun(a,2,9); for(i=0;i<5;i++) cout<



第7章 数组——二维数组

1、下列不能对二维数组a进行初始化的语句是________。
    A、int a[3][4]=;
    B、int a[][4]={{1, 2}, {3, 4, 5}, };
    C、int a[3][4]={{1, 2}, {3, 4}, {5}, {6, 7, 8}};
    D、int a[][4]={1, 2, 3, 4, 5, 6, 7, 8};



2、下列有关二维数组的定义中,错误的是________。
    A、int a[][4]={{1},{2, 3}};
    B、int a[ ][2]={{1, 2},{2, 3}};
    C、int a[2][3];
    D、int a[ ][2];



3、若在main函数中有声明int a[2][3];,则数组a中各元素是________。
    A、不能得到确定的值
    B、可在程序的编译阶段得到初值0
    C、可在程序的运行阶段得到初值0
    D、可在程序的编译或运行阶段得到初值0



4、若有定义:int a[][4]={0,0};以下叙述中错误的是:
    A、数组a的每个元素都可得到初值0
    B、二维数组a的第一维大小为1
    C、因为初值个数除以a中第二维大小的值的商为0,故数组a的行数为1
    D、只有元素a[0][0]和a[0][1]可得到初值0,其余元素均得不到初值0



5、若有定义:int a[3][4];则正确引用数组a元素的是:
    A、a[2][4]
    B、a[3][3]
    C、a[0][0]
    D、a[3][4]



6、下面选项中等价的是:
    A、int a[2][3]={1,0,2,2,4,5}与int a[2][]= {1,0,2,2,4,5};
    B、int a[][3]= {1,0,2,2,4,5}与int a[2][3]= {1,0,2,2,4,5};
    C、int a[2][3]={3,4,5}与int a[][3]={3,4,5};
    D、int a[2][3]={0,1}与int a[2][3]={{0},{1}};



7、下列程序的运行结果是______________。 #include using namespace std; #define M 3 #define N 4 int fun(int a[][N], int m, int n, int v) {int i, j, s=0; for(i=0; i



8、下列程序的运行结果是_____________。 #include using namespace std; void fun(int [][4], int [], int, int); int main() {int a[3][4]={{15, 40, 32, 27}, {18, 35, 16, 24}, {2, 29, 12, 1}}, b[3], i; fun(a, b, 3, 4); for(i=0; i<3; i++) cout< <<' '; return 0; } void fun(int a[][4], int b[], int m, int n) {int i, j, max; for(i=0; i



9、下面程序执行后的输出结果是: #include using namespace std; void swap1(int c[]) {int t; t=c[0];c[0]=c[1];c[1]=t;} void swap2(int c0,int c1) {int t; t=c0;c0=c1;c1=t;} int main( ) {int a[2]={3,5},b[2]={3,5}; swap1(a) ; swap2(b[0],b[1]); cout< < < <



第7章 数组——字符数组

1、判断字符串s1是否大于字符串s2,应使用________。
    A、s1>s2
    B、strcmp(s1, s2)
    C、strcmp(s1, s2)>0
    D、strcmp(s1, s2)>=0



2、给出下面定义: char a[]=”abcd”; char b[]={‘a’,’b’,’c’,’d’}; 则下列说法正确的是:
    A、数组a与数组b等价
    B、数组a和数组b的长度相同
    C、数组a的长度大于数组b的长度相同
    D、数组a的长度小于数组b的长度相同



3、下面有关字符数组的描述中错误的是:
    A、字符数组可以存放字符串
    B、字符串可以整体输入、输出
    C、可以在赋值语句中通过赋值运算对字符数组整体赋值
    D、不可以用关系运算符对字符数组中的字符串进行比较



4、要使字符串变量str具有初值"Lucky",正确的定义语句是:
    A、char str[]={'L','u','c','k','y'};
    B、char str[5]={'L','u','c','k','y'};
    C、char str []="Lucky";
    D、char str [5]="Lucky";



5、下列程序运行结果是___________。 #include #include using namespace std; void fun(char str[ ]) { int i, j; for (i=0, j=0; str[i]; i++) if (isalpha(str[i])) str[j++]=str[i]; str[j]='\0'; } int main( ) { char ss[80]="I am a student."; fun(ss); cout< <



第8章 结构体、共用体和枚举类型

第8章 结构体、共用体和枚举类型

1、已知有声明语句 struct student { char num[20]; char name[20]; float score; } stud; 则下列叙述中错误的是________。
    A、num和name都是结构体成员名
    B、struct是表示结构体类型的关键字
    C、struct student是结构体类型标识符
    D、stud是用户定义的结构体类型名



2、下列说法错误的是________。
    A、结构体变量可以作函数的参数
    B、结构体变量可以作函数的返回值
    C、可以将结构体变量作为一个整体进行输入
    D、结构体变量所占内存量是各成员内存量的总和



3、说明语句“enum money {Fen, Jiao, Yuan=100, Tenyuan};”,每个枚举变量所对应的实际值为:
    A、0,1,100,101
    B、1,2,100,101
    C、"Fen"或1,"Jiao"或2,"Yuan"或100,"Tenyuan"或101
    D、"Fen","Jiao","Yuan"或100,"Tenyuan"



4、下列对结构体类型变量的定义中错误的是________。
    A、struct student { int num; int age; } stud1;
    B、struct { int num; int age; } stud1;
    C、typedef struct student { int num; int age; }STUDENT; STUDENT stud1;
    D、struct { int num; int age; }; struct student stud1;



第09章 指针、引用和链表

第09章 指针、引用和链表——指针基本概念

1、下面对于指针的描述不正确的是
    A、指针是地址变量
    B、指针不能用除0以外的常量赋值
    C、两个指针变量的加法无意义
    D、指针指向不同基类型的变量占用内存大小不同



2、在int a=3,int *p=&a;中,*p的值是
    A、变量a的地址值
    B、无意义
    C、变量p的地址值
    D、3



3、变量的指针,其含义是指该变量的:
    A、值
    B、地址
    C、名
    D、一个标志



4、已有定义int k=2;int *ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值是
    A、k=*ptr1+*ptr2
    B、ptr2=k
    C、ptr1=ptr2
    D、k=*ptr1*(*ptr2)



5、假如指针p已经指向整型变量x,则(*p)++相当于:
    A、x++
    B、p++
    C、*(p++)
    D、&x++



6、对于基类型相同的两个指针变量之间,不合理的运算是:
    A、<
    B、=
    C、+
    D、-



7、定义如下一维数组:int a[5],*p=a;则下面描述错误的是
    A、表达式p=p+1是合法的
    B、表达式a=a+1是合法的
    C、表达式p-a是合法的
    D、表达式a+2是合法的



8、已知int a[10],*p=a;,则下列对数组a中元素正确的引用是________。
    A、a[1-]
    B、a+5
    C、*(a+10)
    D、*(p+5)



9、已知有声明char name[10],*p=na;,现需要在程序运行过程中将字符串"Student"保存到name数组中,则下列选项中能正确完成此操作的语句是________。
    A、name[10]= "Student";
    B、p="Student";
    C、name="Student";
    D、strcpy(name,"Student");



10、若有定义 char s[10];则在下面表达式中不表示s[1]的地址的是
    A、s+1
    B、s++
    C、&s[0]+1
    D、&s[1]



第09章 指针、引用和链表——指针与数组和函数

1、若有定义int x[10]={0,1,2,3,4,5,6,7,8,9},*p1;则数值不为3的表达式是:
    A、x[3]
    B、p1=x+3,*p1++
    C、p1=x+2,*(p1++)
    D、p1=x+2,*++p1



2、若有定义int x[6]={2,4,6,8,5,7},*p=x,i;要求依次输出x数组6个元素中的值,不能完成此操作的语句是:
    A、for(i=0;i<6;i++) cout< <<*(p++);
    B、for(i=0;i<6;i++) cout< <<*(p+i);
    C、for(i=0;i<6;i++) cout< <<*p++;
    D、for(i=0;i<6;i++) cout< <<(*p)++;



3、下面程序执行后的输出结果是:#include using namespace std; void sum(int *a) { a[0]=a[1];} int main() { int aa[10]={1,2,3,4,5,6,7,8,9,10},i; for(i=2;i>=0;i--) sum(&aa[i]); cout<     A、1
    B、2
    C、3
    D、4



4、下面程序执行后的输出结果是:#include using namespace std; int main() { int a[10]={1,2,3,4,5,6,7,8,9,10}, *p=&a[3], *q=p+2; cout<<*p+*q; return 0; }
    A、16
    B、10
    C、8
    D、6



5、下面程序执行后的输出结果是:#include using namespace std; void fun(char *c,char d) { *c=*c+1; d=d+1; cout<<*c<<","< <<","; } int main() { char a='A', b='a'; fun(&b,a); cout<
<<","<<    A、B,a,B,a
    B、a,B,a,B
    C、A,b,A,b
    D、b,B,A,b

6、下面程序执行后的输出结果是:#include using namespace std; void ss(char *s,char t) { while(*s) { if(*s==t) *s=t-'a'+'A'; s++; } } int main() { char str1[100]="abcddfefdbd",c='d'; ss(str1,c); cout<     A、ABCDDEFEDBD
    B、abcDDfefDbD
    C、abcAAfefAbA
    D、Abcddfefdbd



7、若有定义char *st="how are you";下列程序段中正确的是
    A、char a[11],*p; strcpy(p=a+1,&st[4]);
    B、char a[11]; strcpy(++a, st);
    C、char a[11]; strcpy(a, st);
    D、char a[],*p; strcpy(p=&a[1],st+2);



8、已知函数f的原型是 void f(int *a,long &b),变量v1、v2的定义是:int v1; long v2; 下列调用语句中正确的是:
    A、f(&v1,&v2);
    B、f(v1,&v2);
    C、f(&v1,v2);
    D、f(v1,v2);



9、下列程序的输出结果为________。#include void print(int *x, int *y, int *z) { cout<<++*x <<','<<++*y<<','<<*(z++)<     A、11,42,31 12,22,41
    B、11,41,20 12,42,20
    C、11,21,40 11,21,41
    D、11,41,21 12,42,22



10、以下与库函数strcpy(char *p1,char *p2)功能不相等的程序段是
    A、strcpy1(char *p1,char *p2) { while ((*p1++=*p2++)!='\0') ; }
    B、strcpy2(char *p1,char *p2) { while ((*p1=*p2)!='\0') { p1++; p2++; } }
    C、strcpy3(char *p1,char *p2) { while (*p1++=*p2++) ; }
    D、strcpy4(char *p1,char *p2) { while (*p2) *p1++=*p2++ ; }



第10章 类和对象

第10章 类和对象测试题1

1、在C++中,用类将数据和对数据操作的代码结合在一起称为____
    A、软件重用
    B、封装
    C、集合
    D、多态



2、在C++语言中,数据封装要解决的问题是____
    A、数据的规范化
    B、便于数据转换
    C、避免数据丢失
    D、实现信息隐蔽



3、以下说法中,正确的是____
    A、类的成员函数都是公有的,数据成员都是私有的
    B、结构体中只能包含数据成员
    C、一个类只能有一个对象
    D、类与对象的关系和数据类型与变量的关系相似



4、在结构体中定义的成员,其隐含的访问权限为____
    A、public
    B、protected
    C、private
    D、static



5、以下选项中,不可以作为类成员的是____
    A、自身类对象的指针
    B、自身类的对象
    C、自身类对象的引用
    D、另一个类的对象



6、类的数据成员的初始化是通过函数完成的,这个函数是____
    A、析构函数
    B、构造函数
    C、友元函数
    D、其它成员函数



7、假设AB为一个类, 则执行语句“AB x;”时____
    A、没有调用构造函数
    B、自动调用缺省构造函数
    C、自动调用拷贝构造函数
    D、自动调用赋值构造函数



8、X是类名,则形如X::X(const X &x)的函数被称为____
    A、析构函数
    B、拷贝构造函数
    C、构造函数
    D、友元函数



9、已知类A中的一个成员函数原型是“void fun(A &a);”,其中“A &a”的含义是____
    A、将a的地址值赋给变量fun
    B、a是指向A类对象的指针
    C、a是类A的对象引用,用来做函数fun()的形参
    D、变量A与a按位相与运算后作为函数fun()的参数



10、以下说法中正确的是___
    A、一个类只能定义一个构造函数,但可以定义多个析构函数
    B、一个类可以定义多个构造函数,但只能定义一个析构函数
    C、构造函数与析构函数同名,只是名字前加了一个波浪号
    D、构造函数可以指定返回类型;而析构函数不能指定任何返回类型,即使是void类型也不可以



第10章 类和对象测试题2

1、关于析构函数的叙述中,错误的是____
    A、析构函数通常用于释放类中的指针成员所指向的动态存储空间
    B、可以给析构函数指定返回值类型
    C、当系统撤销对象时,自动调用析构函数
    D、一个类的析构函数只能有1个



2、以下关于构造函数和析构函数的描述中,错误的是____
    A、若用户没有定义缺省构造函数,则系统自动生成一个缺省构造函数
    B、若用户没有定义拷贝构造函数,则系统自动生成一个拷贝构造函数
    C、若用户没有定义析构函数,则系统自动生成一个析构函数
    D、以上A错误,而B、C正确



3、下列关于类的成员函数的描述中, 正确的是____
    A、类的成员函数只能定义在类体外
    B、类中只能说明一个成员函数
    C、定义在类体外的成员函数加inline可以成为内联函数
    D、在类体外定义成员函数时,不需要作用域运算符限定所属类



4、已知一个类Complex,有下述两行: Complex c; // 1 Complex c(); // 2 以下描述中,错误的是____
    A、1行定义了一个对象,并调用缺省构造函数
    B、2行定义了一个对象,并调用缺省构造函数
    C、2行是一个函数原型声明,函数名为c,函数没有参数,返回值类型是Complex
    D、1和2行两行的意义不一样



5、已知一个类Complex,并有下述语句: Complex c1; // 1 Complex c2(3, 5); // 2 Complex c3(c2); // 3 c2 = c1; // 4 下述说法中正确的是 ____
    A、1行调用了拷贝构造函数
    B、2行调用了拷贝构造函数
    C、3行调用了拷贝构造函数
    D、3行和4行均调用了拷贝构造函数



6、class A { int x, y; public: A( ){ x = y = 0; } A(int i = 0, int j = 0) { x = i; y = j; } }; int main() { A a1, a2(6, 8); return 0; } 对上述程序段,以下说法中,正确的是____
    A、该程序有错
    B、该程序无错
    C、本题只有AB两个选项,无需选此项
    D、本题只有AB两个选项,无需选此项



7、class A { int x, y; public: A(int a, int b) : x(a), y(b) { } void set(int a, int b){ x = a; y = b; } void show(){ cout << x << ',' << y << endl; } }; int main() { A obj; obj.set(3, 5); obj.show(); return 0; } 对上述程序段,以下说法中,正确的是____
    A、编译时报错,程序无法运行
    B、编译无错,运行正常,输出 3, 5
    C、编译无错,运行时报错
    D、编译时报警告错,但运行正常,输出 3, 5



8、class A { public: A(int i=1, int j=1){ a = i; b= j; }; ~A( ){ cout<     A、132
    B、231
    C、264
    D、462



9、已知程序段如下: class Test { public: void Print() { cout << this << endl; } }; int main() { Test t; cout << &t << endl; // 1 t.Print(); // 2 return 0; } 若1行的输出是002EFE1B,则2行的输出____
    A、002EFE1B
    B、输出一个不确定的值
    C、本题只有AB两个选项,无需选此项
    D、本题只有AB两个选项,无需选此项



10、已知程序段如下: class List { public: void Copy(List L) { if (this == &L) cout << "Same!\n"; else cout << "Different!\n"; } }; int main() { List L; L.Copy(L); return 0; } 程序的输出结果是____
    A、Same!
    B、Different!
    C、本题只有AB两个选项,无需选此项
    D、本题只有AB两个选项,无需选此项



第11章 类和对象的其他特性

第11章友元、静态成员测试题

1、一个类的友元函数能够直接访问该类的
    A、私有成员
    B、私有成员和保护成员
    C、公有成员
    D、所有成员



2、关于友元的描述中,不正确的是
    A、友元函数是成员函数的一种,它可以直接访问类的私有成员
    B、使用友元函数有利于提高程序的运行效率
    C、友元函数要在类体内说明
    D、友元函数破坏了类的封装性和隐藏性



3、不属于类的成员函数的是
    A、构造函数
    B、析构函数
    C、友元函数
    D、复制构造函数



4、若类A被说明成类B的友元,则
    A、类A的成员即类B的成员
    B、类B的成员即类A的成员
    C、类A的成员函数不能访问类B的成员
    D、类B不一定是类A的友元



5、类中非静态数据成员的生存期
    A、由对象的生存期决定
    B、比对象的生存期长
    C、比对象的生存期短
    D、与对象的生存期无关



6、类中静态数据成员的生存期
    A、由对象的生存期决定
    B、比对象的生存期长
    C、比对象的生存期短
    D、与对象的生存期无关



7、在C++中,若有以下定义, class date { int year, month, day ; static int k; } today; 则sizeof(date)的值是
    A、6
    B、8
    C、12
    D、16



8、以下是日期类Date的定义, class Date { public: void Date(int m, int d, int y) //定义构造函数 //第1行 { month=m; day=d; year=y; } //第2行 void display(Date &);//声明友元函数 //第3行 private: int month, day, year; }; void display(Date &d) //定义友元函数 //第4行 { cout< <<"/"< <<"/"< <     A、第1、3行
    B、第1、3、5行
    C、第3、4、5行
    D、第1、3、4行



9、有如下类定义: class Sample { private: static int x; }; __________x=0; 要初始化Sample类的静态成员x,下划线处应填入的内容是
    A、int
    B、static int
    C、int Sample::
    D、static int Sample::



10、有如下类定义: class Sample { public: static int fun(); } s1, s2; 则下述对fun()函数的调用中,非法的是
    A、s1.fun();
    B、Sample.fun();
    C、Sample::fun();
    D、s2.fun();



第12章 继承和派生

第12章 继承和派生测试题1

1、下列关于基类和派生类的关系描述中,正确的是
    A、基类是派生类的具体化
    B、基类继承了派生类的属性
    C、基类是派生类定义的延续
    D、派生类是基类的特殊化



2、派生类的对象可直接访问的它的基类成员是
    A、公有继承的公有成员
    B、公有继承的私有成员
    C、公有继承的保护成员
    D、私有继承的公有成员



3、在公有派生情况下,关于赋值兼容规则,以下描述中错误的是
    A、派生类的对象可以赋给基类的对象
    B、派生类的对象可以初始化基类的引用
    C、基类对象可以赋值给派生类对象
    D、派生类的对象的地址可以赋给指向基类的指针



4、有关继承的叙述中,正确的是
    A、构造函数和析构函数都能被继承
    B、多重继承时,派生类是基类的组合
    C、派生类对象除了能访问自己的成员外,不能访问基类中的所有成员
    D、基类的公有成员一定能被派生类的对象访问



5、以下叙述中错误的是
    A、无论何种继承方式,基类的私有成员在派生类中一定不能直接访问
    B、无论何种继承方式,基类的保护成员和公有成员在派生类中一定能直接访问
    C、类的默认继承方式是私有的
    D、基类的公有成员在派生类的派生类中一定可以直接访问



6、关于析构函数的叙述中,错误的是
    A、析构函数的执行顺序是先执行派生类的、再执行对象成员的、最后执行基类的
    B、基类的析构函数可以被派生类继承
    C、当系统撤销对象时,自动调用析构函数
    D、如果没有定义析构函数,编译系统自动生成一个缺省的析构函数



7、以下叙述中错误的是
    A、在面向对象方法中,类之间共享属性和操作的机制称为继承
    B、一个派生类只有一个基类,这样的继承关系称为单一继承
    C、一个派生类的基类不止一个,这种继承称为多重继承
    D、多重继承,在派生类中不会产生对基类成员访问的二义性



8、①基类构造函数、②派生类构造函数、③派生类中的对象成员构造函数,在创建一个派生类对象时,这三类构造函数的执行顺序是
    A、①②③
    B、①③②
    C、②③①
    D、③②①



9、在类继承时,解决基类成员访问二义性问题的方法有
    A、只能使用作用域运算符
    B、使用作用域运算符或赋值兼容规则
    C、使用作用域运算符或虚基类
    D、使用虚基类或赋值兼容规则



10、关于多重继承的二义性描述中,错误的是
    A、两个基类中有同名的成员,在派生类中对这个成员的访问可能出现二义性
    B、解决二义性的最常用的方法是对成员的类名限定法
    C、基类和派生类中出现的同名函数,也存在二义性问题
    D、一个派生类是从两个基类派生出来的,而这两个基类又有一个同名的基类,则对该同名的基类成员进行访问时,也可能出现二义性



第12章 继承和派生测试题2

1、已知类定义如下 class A { protected: int a; public: A(int i = 0) { a = i; } int Geta() { return a; } }; class B : public A { A a1; public: _______________ // B 类构造函数的定义 void Show() { cout << a t aGeta endlp> } }; 则关于B类构造函数,下列定义形式一定错误的是
    A、可缺省
    B、B(int i = 0, int j = 0) :A(i), a1(j){ }
    C、B(int i = 0, int j = 0) :A(i), A(j){ }
    D、B(int i = 0, int j = 0) :A(i){ }



2、设有如下类的定义 class A { int a; public: A(int i = 0){ a = i; } }; class B : public A { int b; public: B(int i = 0, int j = 0) : A(j) { b = i; } }; 则下列语句组中错误的是
    A、A *pa = new B;
    B、A a1 = B(2, 9);
    C、B b1(1, 2); A *pa1 = &b1;
    D、A a1(8); B b2 = a1;



3、若有如下类定义体系 class A { … }; class B: public A { … }; class C: public A { … }; class D: public B, public C { … }; 则建立一个D类对象时,构造函数的执行顺序是
    A、ABCD
    B、AABCD
    C、ABACD
    D、DCBAA



4、若有如下类定义体系, class A { … }; class B: virtal public A { … }; class C: virtal public A { … }; class D: public C, public B { … }; 则建立一个D类对象时,构造函数的执行顺序是
    A、ABCD
    B、ACBD
    C、ACABD
    D、ABACD



5、下列关于虚基类的描述中,错误的是
    A、使用虚基类可以消除由多重继承产生的二义性
    B、建立派生类对象时,虚基类的构造函数只被调用一次
    C、声明“class B : virtual public A”说明类 B 为虚基类
    D、建立派生类对象时,首先调用虚基类的构造函数



6、关于private和protected成员,以下说法错误的是
    A、无论何种继承方式,基类protected成员在派生类中一定能直接访问
    B、在仅有一个类的情况下,private和protected成员的类内和类外访问权限一样,均实现对数据成员的信息隐蔽,即类外无法直接访问
    C、在有继承时,基类protected成员的优势是,既能在基类直接访问,又能在派生类中直接访问,同时在类外不能直接访问,实现对数据成员的信息隐蔽
    D、基类private成员在派生类中一定无法访问



7、以下程序的输出结果是
    A、AB~A~B
    B、AB~B~A
    C、BA~B~A
    D、BA~A~B



8、以下程序的输出是
    A、231
    B、00231
    C、23100
    D、001



9、以下程序的输出是
    A、31288213
    B、21388312
    C、32188123
    D、83122138



10、以下程序的输出是 //备注:填写答案是用英文输入法,数字之间、前后都不要输入空格



第14章 输入/输出流

第14章 输入/输出流 测试题

1、在语句“cin>>data;”中,cin是
    A、C++的关键字
    B、类名
    C、对象名
    D、函数名



2、对于语句 “cout<<endl<<x; ”中的各个组成部分,下列叙述中错误的是
    A、cout 是一个输出流对象
    B、endl 的作用是输出回车换行
    C、x 可能是一个变量
    D、<< 称作提取运算符



3、打开文件时可单独或组合使用下列文件打开模式   ①ios_base::app ②ios_base::binary   ③ios_base::in ④ios_base::out 若要以二进制读方式打开一个文件,需使用的文件打开模式为
    A、①③
    B、①④
    C、②③
    D、②④



4、要建立文件流并打开当前目录下的文件file.dat用于输入,下列语句中错误的是
    A、ifstream fin = ifstream.open("file.dat");
    B、ifstream *fin = new ifstream("file.dat");
    C、ifstream fin; fin.open("file.dat");
    D、ifstream *fin = new ifstream( ); fin->open("file.dat");



5、下列关于输入流类成员函数getline( )的描述中,错误的是
    A、该函数是用来读取键盘输入的字符串的
    B、该函数读取的字符串长度是受限制的
    C、该函数读取字符串时,遇到终止符便停止
    D、该函数读取字符串时,可以包含空格



6、若使用操纵算子setw()控制输出宽度,需要包含头文件
    A、iostream
    B、iomanip
    C、istream
    D、ostream



7、按文件的存储格式不同,分为文本文件和_________



8、文件的读写顺序有顺序读写和_________