2020年全国计算机等级考试二级c++上机题库(3)
-
使用VC6打开考生文件夹下的工程test8_1,此工程包含一个源程序文件test8_l.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果如下:
f1 function of derive
f2 function of base
f4 function of base
源程序文件test8_1.cpp清单如下;
#include<iostream.h>
class base
{
public:
/*********found**********/
void f1(){cout<<"f1 function of base"<<endl;}
virtual void f2(){cout<<"f2 function of base"<<endl;)
virtual void f3(){cout<<"f3 function of base"<<endl;)
void f4(){cout<<"f4 function of base"<<endl;)
};
/*******+*found**********/
class derive::public base
{
void f1(){cout<<"f1 function of derive"<<endl;)
void f2(int X){cout<<"f2 function of derive"<<endl;)
void f4(){cout<<"f4 function of derive"<<endl;)
};
void main()
{
base *p;
derive obj2;
/******+**found**********/
p=obj2;
p->fl();
p->f2();
p->f4();
}
-
使用VC6打开考生文件夹下的工程test11_3。此工程包含一个test11_3.cpp,其中定义了类CPosition,但该类的定义都并不完整。请按要求完成下列操作,将类CPosition的定义补充完整。
(1)在类定义外完成重载的两个构造函数CPosition()和CPosition(double dx,double dy),其中前者为不带参数的构造函数,使CPosition对象的默认值为x=0,y=0,后者为带参数的构造函数,把数据成员x和y分别初始化为参数dx和dy的值。请在注释“//**1**”之后添加适当的语句。
(2)在类体中添加函数move(double ax,double ay)的定义,使得点的坐标x和y分别移动ax和ay个单位,请在注释“// **2**”之后添加适当的语句。
(3)完成函数double distance (double bx,double by)的定义,该函数返回*this和点(bx,by)的距离,请在注释“//**3**”之后添加适当的语句。
注意:除在指定的位置添加语句外,请不要改动程序中的其他语句。
源程序文件test11_3.cpp清单如下:
#include<iostream.h>
#include<math.h>
class CPosition
{
public:
CPosition();
CPosition(double dx,double dy);
double getx();
double gety();
// ** 2 **
double distance(double bx,double by);
private:
double x;
double y;
};
// ** 1 **
{
x=0;y=0;
}
CPosition::CPosition(double dx,double dy)
{
x=dx;y=dy;
}
double CPosition::getx()
{
return x;
}
double CPosition::gety()
{
return y;
}
double CPosition::distance(double bx,double by)
{
// ** 3 **
}
void main()
{
double a,b;
cout << "Input x, y position of a point:";
cin >> a >> b;
CPosition psA(a,b);
cout << “Input x,y position of another point:";
cin >> a >> b;
cout << "The distance is " << psA.distance(a,b) <<endl;
}
-
与所使用的计算机无关的是数据的
- A.物理结构
- B.逻辑结构
- C.存储结构
- D.逻辑和物理结构
-
若要把函数void f()定义为aClass的友元函数,则应该在类aClass的定义中加入的语句是( )。
- A.void f();
- B.static voidf();
- C.friend f();
- D.friend void f();
-
下列重载函数中,正确的是( )。
- A.void fun(int a,float b);void fun(int c,float d)
- B.void fun(int a,float b);void fun(float a,int b)
- C.float fun(int a,float b);int fun(int b,float a)
- D.int fun(int a,int b);float fun(int a,int b)
-
若在表达式y/x中,“/”是作为成员函数重载的运算符,则该表达式还可以表示为
- A.x.operator/(y)
- B.operator/(x,y)
- C.y.operator/(x)
- D.operator/(y,x)
-
执行语句for(i =1++<4;);,后变量i的值是
- A.3
- B.4
- C.5
- D.不定
-
语句int*P=&k;定义了指针P,与这个语句等效的语句序列是( )。
- A.int* p;P=&k;
- B.int * P;P=k;
- C.int * p;* P=&k;
- D.int * p;* P=k;
-
for(int x=0,y=0;!x&&y<=5;y++)语句执行循环的次数是
- A.0
- B.5
- C.6
- D.无数次
-
下列对字符数组进行初始化中,( )是正确的。
- A.char s1[]="abcd";
- B.char s2[3]="xyz";
- C.char s3[][]={"a","x", "y");
- D.char s4 [2][3]={"xyz", "rnnp"};
-
分层DFD图是一种比较严格又易于理解的描绘方式,它的顶层图的作用在于 ______。
- A.描绘了系统的实现细节
- B.表明了被开发系统的范围以及它和周围环境的数据交换关系
- C.描绘了系统的抽象
- D.描绘了软件实现的作者和绘制的时间
-
要利用C++流进行文件操作,必须在程序中包含的头文件是( )。
- A.iostream
- B.fstream
- C.strstream
- D.iomanip
-
下列工具中为需求分析常用工具的是( )。
- A.PAD
- B.PFD
- C.N-S
- D.DFD
-
下面对结构或类中成员的访问中,不正确的访问是 ______。
- A.*pointer. salary;(其中pointer为指向类对象的指针)
- B.pointer->salary;
- C.x=orker,salary;(其中worker为具有类类型的对象)
- D.Location &rA=A1;Int x=rA. GetX();(Location为已定义的类,A为对象)
-
关于静态数据成员的描述中正确的是
- A.类的静态数据成员不是类的所有对象共享的数据
- B.类的静态数据成员不能被类的成员函数调用
- C.类的静态数据成员不能被类的构造函数调用
- D.类的静态数据成员必须进行初始化
-
带有虚基类的多层派生类构造函数的成员初始化列表中都要列出虚基类的构造函数,这样将对虚基类的子对象初始化( )。
- A.与虚基类下面的派生类个数有关
- B.多次
- C.两次
- D.一次
-
下列叙述中正确的是
- A.程序执行的效率与数据的存储结构密切相关
- B.程序执行的效率只取决于程序的控制结构
- C.程序执行的效率只取决于所处理的数据量
- D.以上三种说法都不对
-
若有以下函数调用语句:fun(m+n,x+y,f(m+n,z,(x,y)));在此函数调用语句中实参的个数是( )。
- A.6
- B.5
- C.4
- D.3
-
下列说法中错误的是( )
- A.公有继承时基类中的public成员在派生类中仍是public的
- B.公有继承时基类中的private成员在派生类中仍public是的
- C.私有继承时基类中的public成员在派生类中仍private是的
- D.保护继承时基类中的public成员在派生类中仍protected是的
-
下列字符数组的初始化,正确的是( )。
- A.char ch[5]={"a","b","c","d","e"};
- B.char ch[]={"a","b"};
- C.char ch[15]={"welcome to china"};
- D.char ch[14]={"I am a student"};
-
由于常对象不能被更新,因此( )。
- A.通过常对象只能调用它的常成员函数
- B.通过常对象只能调用静态成员函数
- C.常对象的成员都是常成员
- D.通过常对象可以调用任何不改变对象值的成员函数
-
重载赋值操作符时,应声明为( )函数。
- A.友元
- B.虚
- C.成员
- D.多态
-
有以下结构体说明和变量的定义,且指针p指向变量a,指针q指向变量b。则不能把结点b连接到结点a之后的语句是( )。 struct node {chardata; struct node if next; }a,b,*p:&a,*q=&b;
- A.a.next=q;
- B.p.next=&b;
- C.p->next=&b;
- D.(*p).next=q;
-
当+运算符被重载为友元函数时,友元运算符Obj1+obj2被C++编译器解释为 ______。
- A.operator+(objl, obj2)
- B.+(obj1, obj2)
- C.obj2.operator+(obj1)
- D.obj1,operator(obj2)
-
在设计程序时,应采纳的原则之一是
- A.不限制goto语句的使用
- B.减少或取消注解行
- C.程序越短越好
- D.程序结构应有助于读者理解
-
若已定义: int a[]={0,1,2,3,4,5,6,7,8,9},*p=a,i; 其中0≤i≤9,则对a数组元素不正确的引用是
- A.a[p-a]
- B.*(&a[i])
- C.p[i]
- D.a[10]
-
下列关于多态性的描述,错误的是
- A.C++语言中的多态性分为编译时的多态性和运行时的多态性
- B.编译时的多态性可通过函数重载实现
- C.运行时的多态性可通过模板和虚函数实现
- D.实现运行时多态性的机制称为动态绑定
-
下列叙述中正确的是( )。
- A.在面向对象的程序设计中,各个对象之间具有密切的关系
- B.在面向对象的程序设计中,各个对象都是公用的
- C.在面向对象的程序设计中,各个对象之间相对独立,相互依赖性小
- D.上述三种说法都不对
-
在结构化设计方法中生成的结构图(SC) 中,带有箭头的连线表示
- A.模块之间的调用关系
- B.程序的组成成份
- C.控制程序的执行顺序
- D.数据的流向
-
对于模板定义关键字class和typename说法不正确的是
- A.程序中的class并不能都替换为typename
- B.class和typename都可互相替换
- C.程序中的typename都能替换为class
- D.程序中的部分class可以替换为typename