1、国家计算机二级(C+)81 及答案解析(总分:460.00,做题时间:120 分钟)一、选择题(每小题 2 分,共 70 分) 下列各(总题数:35,分数:70.00)1.下列语句不能够用于打开 C 根目录下文件 testtxt 的语句是( )。(分数:2.00)A.ifstream fin;finopen(“C:/testtxt“);B.ifstream fin(“C:/testtxt“);C.A)和 B)D.ifstream fin;fin(“C:/testtxt“);2.语句 ofstream f(“SALARY.DAT“,iosbase:app);的功能是建立流对象 f,并试图打开文件
2、SALARY.DAT 与 f 关联,而且【 】(分数:2.00)A.若文件存在,将其置为空文件;若文件不存在,打开失败B.若文件存在,将文件指针定位于文件尾;若文件不存在,建立一个新文件C.若文件存在,将文件指针定位于文件首;若文件不存在,打开失败D.若文件存在,打开失败;若文件不存在,建立一个新文件3.有以下程序: void f(int *x,int *y) int t; t=*x;*x=*y;*y=t; main() int a8=1,2,3,4,5,6,7,8,i,*p,*q; p=a;q= while(pA.8,2,3,4,5,6,7,1,B.5,6,7,8,1,2,3,4,C.1,2
3、,3,4,5,6,7,8,D.8,7,6,5,4,3,2,1,4.下面程序的结果为( )。 #includeiostream.h intC; classA private: inta; staticintb; public: A( )a=0;c=0; voidseta( )a+; voidsetb( )b+; voidsetc( )c+; voiddisplay( )couta“b“c; ; intA:b=0; voidmain( ) Aa1,a2; a1.seta( ); a1.setb( );a1.setc( ); a2.seta( ); a2,setb( ); a2.setc( ); a
4、2.display( ); (分数:2.00)A.2 3 4 3 4 5B.1 2 3 3 4 5C.1 2 3 2 4 6D.2 3 4 4 5 65.多态性指的是( )。(分数:2.00)A.以任何方式调用一个虚函数B.以任何方式调用一个纯虚函数C.借助于指向对象的基类指针或引用调用一个虚函数D.借助于指向对象的基类指针或引用调用一个纯虚函数6.下面程序错误的语句是( )。 # include iostreamh void main( ) int * p=new int1; p=9; cout * p endl; delete p; (分数:2.00)A.B.C.D.7.对表达式 for(
5、表达式 1;表达式 3)可理解为( )。(分数:2.00)A.MinB.MaxC.Max 和 Min 之间D.Max 和 Min 之外8.关于二义性的描述错误的是( )。(分数:2.00)A.一个子类的两个父类中都有某个同名成员,在子类中对该成员访问可能出现二义性B.解决二义性可以用对成员名的限定法C.父类和子类中同时出现同名函数,也可能存在二义性D.一个子类是从两个父类派生出来的,而这两个父类又有一个共同的父类,对该父类成员进行访问时,可能出现二义性9.下列语句中不是死循环的是( )。(分数:2.00)A.int i=10; while(1) i; if(i= =1)break; B.for
6、(int i=1;i who6; p= int i; for(i=0;i填空项 1:_43.有以下程序: int sub(int n) return(n/10+n%10); main1 int x,y; scanf(“%d“, y=sub(sub(sub(x); printf(“%d/n“,y); 若运行时输入 1234,程序的输出结果是 2。 (分数:30.00)填空项 1:_44.表达式 operator + (x,y)还可以表示为 1。(分数:30.00)填空项 1:_45.下面程序的运行结果是 1 和 2。 #includeiostreamh #define N 10 #define
7、s(x)x * x #define f(x)(x * x) void main3 int i1,i2; i1=1000/s(N);i2=1000/f(N); cout i1 “ “ i2; (分数:30.00)填空项 1:_46.C+语句 const char * const p= “hello“;,所定义的指针 p 和它所指的内容都不能被 1。(分数:30.00)填空项 1:_47.如果不能使用多态机制,那么通过基类的指针虽然可以指向派生类对象,但是只能访问从基数继承的成员,下列程序没有使用多态机制,其输出结果是 1。 #include using namespace std; class
8、Base public: Void print2coutprint5; pd-print6; delete pd; return 0; (分数:30.00)48.下列软件系统结构图的宽度为 1 (分数:30.00)填空项 1:_国家计算机二级(C+)81 答案解析(总分:460.00,做题时间:120 分钟)一、选择题(每小题 2 分,共 70 分) 下列各(总题数:35,分数:70.00)1.下列语句不能够用于打开 C 根目录下文件 testtxt 的语句是( )。(分数:2.00)A.ifstream fin;finopen(“C:/testtxt“);B.ifstream fin(“C:
9、/testtxt“);C.A)和 B)D.ifstream fin;fin(“C:/testtxt“); 解析:C+语言中打开文件有两种方式ifstream fin(“testdar“,)ifstream fin;finopen(“testdat“,);。2.语句 ofstream f(“SALARY.DAT“,iosbase:app);的功能是建立流对象 f,并试图打开文件SALARY.DAT 与 f 关联,而且【 】(分数:2.00)A.若文件存在,将其置为空文件;若文件不存在,打开失败B.若文件存在,将文件指针定位于文件尾;若文件不存在,建立一个新文件 C.若文件存在,将文件指针定位于文
10、件首;若文件不存在,打开失败D.若文件存在,打开失败;若文件不存在,建立一个新文件解析:ofstream 是文件输出流类,其对象与磁盘上的文件的关系是:如果文件不存在,那么它将被建立;如果文件存在,将被截断并用新的数据代替里面的旧数据。3.有以下程序: void f(int *x,int *y) int t; t=*x;*x=*y;*y=t; main() int a8=1,2,3,4,5,6,7,8,i,*p,*q; p=a;q= while(pA.8,2,3,4,5,6,7,1,B.5,6,7,8,1,2,3,4,C.1,2,3,4,5,6,7,8,D.8,7,6,5,4,3,2,1, 解
11、析:本程序中函数 f 的作用是交换指针变量 x 和 y 所指向的存储单元的值。4.下面程序的结果为( )。 #includeiostream.h intC; classA private: inta; staticintb; public: A( )a=0;c=0; voidseta( )a+; voidsetb( )b+; voidsetc( )c+; voiddisplay( )couta“b“c; ; intA:b=0; voidmain( ) Aa1,a2; a1.seta( ); a1.setb( );a1.setc( ); a2.seta( ); a2,setb( ); a2.se
12、tc( ); a2.display( ); (分数:2.00)A.2 3 4 3 4 5 B.1 2 3 3 4 5C.1 2 3 2 4 6D.2 3 4 4 5 6解析:a 数组的元素的下标应为 0-2,注意数组的下标从零开始。5.多态性指的是( )。(分数:2.00)A.以任何方式调用一个虚函数B.以任何方式调用一个纯虚函数C.借助于指向对象的基类指针或引用调用一个虚函数 D.借助于指向对象的基类指针或引用调用一个纯虚函数解析:本题考查多态性的基本概念。多态性主要是指借助于指向对象的基类指针或引用调用一个虚函数。6.下面程序错误的语句是( )。 # include iostreamh v
13、oid main( ) int * p=new int1; p=9; cout * p endl; delete p; (分数:2.00)A.B. C.D.解析:本题考查的是指针的使用,p 是指向 int 型的指针,若想给它指向 的元素赋值,应使用 * 符号,直接赋值相当于改变了原来 P 存储的地址。7.对表达式 for(表达式 1;表达式 3)可理解为( )。(分数:2.00)A.Min B.MaxC.Max 和 Min 之间D.Max 和 Min 之外解析:复选框也称检查框,它的 Value 属性值可以设置或返回 0,1,2。 0:表示没有选中复选框。 1:表示选中该复选框。 2:表示该复
14、选框被禁止,显示为灰色。 8.关于二义性的描述错误的是( )。(分数:2.00)A.一个子类的两个父类中都有某个同名成员,在子类中对该成员访问可能出现二义性B.解决二义性可以用对成员名的限定法C.父类和子类中同时出现同名函数,也可能存在二义性 D.一个子类是从两个父类派生出来的,而这两个父类又有一个共同的父类,对该父类成员进行访问时,可能出现二义性解析:基类和其继承类同时出现同名函数,则在继承类中实现对象中调用该函数是使用继承类中的定义,这种情况下是不会产牛二义性的。9.下列语句中不是死循环的是( )。(分数:2.00)A.int i=10; while(1) i; if(i= =1)brea
15、k; B.for(int i=1;i who6; p= int i; for(i=0;i填空项 1:_ (正确答案:abcbcc)解析:字符数组 ch 的值abc分别复制到了二维数组 x 的每一行,使得二维数组中每一行的值均为abc,再 通过第二个 for 循环打印出每一行上所要求输出的字符串。43.有以下程序: int sub(int n) return(n/10+n%10); main1 int x,y; scanf(“%d“, y=sub(sub(sub(x); printf(“%d/n“,y); 若运行时输入 1234,程序的输出结果是 2。 (分数:30.00)填空项 1:_ (正确
16、答案:10)解析:本题考查的是函数的调用,函数 sub 调用后的返回值仍被作为实参传递给函数 sub 的形参,此种调 用连续进行 3 次,第一次调用:sub(1234)的返回值为 1234/10+1234%10,即 127;第二次调用:sub(127)的 返回值为 127/10+127%10;即 19;第三次调用:sub(19)的返回值为 19/10+19%10,即 10。所以程序输出的 结果是 10。44.表达式 operator + (x,y)还可以表示为 1。(分数:30.00)填空项 1:_ (正确答案:x+y)解析:本题考查的是运算符函数的调用,可以像一般函数那样用函数名进行调用,也
17、可通过运算符构成表达式的形式进行调用。45.下面程序的运行结果是 1 和 2。 #includeiostreamh #define N 10 #define s(x)x * x #define f(x)(x * x) void main3 int i1,i2; i1=1000/s(N);i2=1000/f(N); cout i1 “ “ i2; (分数:30.00)填空项 1:_ (正确答案:1000)解析:对于 define 宏定义语句,系统会在编译前进行替换。本题替换过程如下: i1=1000/s(N) i1=1000/s(10) i1=1000/10*10 i1=1000 i2=1000
18、/f(N) i2=1000/f(10) i2=1000/(10*10) i2=10 46.C+语句 const char * const p= “hello“;,所定义的指针 p 和它所指的内容都不能被 1。(分数:30.00)填空项 1:_ (正确答案:改变)解析:本题考查的是定义常量的关键字 const,由 sonst 定义的变量的值不可以再改变,所以定义时必须进行初始化。47.如果不能使用多态机制,那么通过基类的指针虽然可以指向派生类对象,但是只能访问从基数继承的成员,下列程序没有使用多态机制,其输出结果是 1。 #include using namespace std; class Base public: Void print2coutprint5; pd-print6; delete pd; return 0; (分数:30.00)解析:48.下列软件系统结构图的宽度为 1 (分数:30.00)填空项 1:_ (正确答案:3)解析:在程序结构图的有关术语中,宽度的概念是:整体控制跨度,即各层中所含的模块数的最大值,由图可得此软件系统结构图的宽度为 3。