二级C++模拟491Word格式文档下载.docx
《二级C++模拟491Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《二级C++模拟491Word格式文档下载.docx(28页珍藏版)》请在冰点文库上搜索。
![二级C++模拟491Word格式文档下载.docx](https://file1.bingdoc.com/fileroot1/2023-5/8/c708e14d-940d-4a83-8341-cfc8999ffb99/c708e14d-940d-4a83-8341-cfc8999ffb991.gif)
Toy(char*_n){strcpy(name,_n);
count++;
~Toy(){count--;
char*GetName(){returnname;
staticintgetCount(){returncount;
private:
charname[10];
staticintcount;
};
intToy:
:
count=0;
intmain(){
Toyt1("
Snoopy"
),t2("
Mickey"
),t3("
Barbie"
);
cout<<t1.getCount()<<endl;
return0;
运行时的输出结果是______。
A.1
B.2
C.3
D.运行时出错
[解析]创建埘象t1、t2、t3时,调用含参构造函数三次,因为count是静态数据成员,三次count自加都是同一数据的自加,三次调用后count的值为3,利用对象调用静态成员函数输出count的值。
4.设有定义“intx=2;
”,下列表达式中,值不为6的是______。
A.x*=x+1
B.x++,2*x
C.x*=(1+x)
D.2*x,x+=2
[解析]本题考查了复合运算符“*=”和逗号表达式如何正确求值。
逗号表达式的作用是用逗号将表达式连起来,其有效值为最后一个表达式的值,其运算的结合性从左到右进行运算。
选项D是一个逗号表达式,其值为4。
5.将前缀运算符“--”重载为非成员函数,下列原型中能正确用于类中说明的是______。
A.Decr&
operator--(int);
B.Decroperator--(Decr&
int);
C.friendDecr&
operator--(Decr&
D.friendDecroperator--(Decr&
[解析]非成员函数重载用友元函数的形式实现,“--”运算符重载分为前置和后置两种重载方式。
用友元函数来实现“--”运算符的重载时,前置“--”运算符的重载的一般格式为:
friend<type>operator--(ClassName&
);
后置++运算符的重载的一般格式为:
int)。
所以答案为D。
6.下列函数原型声明中,错误的是______。
2.00)
A.intfunction(intm,intn);
B.intfunction(int,int);
C.intfunction(intm=3,intn);
D.intfunction(int&
m,int&
n);
[解析]在C++中,函数在使用之前要预先声明。
这种声明在标准C++中称为函数原型,函数原型给出了函数名、返回类型以及在调用函数时必须提供的参数个数和类型。
其语法为:
<返回类型><函数名>(<形参列表>);
使用函数原型说明有两种形式:
①直接使用函数定义的头部,并在后面加上一个分号;
②在函数原型说明中省略参数列表中的形参变量名,仅给出函数名、函数类型、参数个数及次序。
在选项C中,给出了形参变量m的初值。
7.关于关键字class和typename,下列表述正确的是______。
3.00)
A.程序中所有的class都可以替换为typename
B.程序中所有的typename都可以替换为class
C.A和B都可以
D.A和B都不可以
8.对于语句“cout<<setfill("
*"
)<<setw(10)<<1<<setfill("
)<<setw
(2)<<2;
”的输出结果是______。
A.*********1*2
B.********12
C.*******1*2
D.12********
[解析]C++语言中setfill的意思是在空格的地方填上setfill函数中的参数字符,setw的意思是设置整个输出字符串的字符个数,本题中用*来代替空格。
9.打开文件时可单独或组合使用下列文件打开模式______。
①ios_base:
app②ios_base:
binary
③ios_base:
in④ios_base:
out
若要以二进制读方式打开一个文件,需使用的文件打开模式为
A.①③
B.①④
C.②③
D.②④
[解析]模式ios_base:
binary作为二制进文件打开,ios_base:
out为输出而打开文件。
10.包容类Contain和内嵌类Embed定义如下:
classContain
private:
intX;
protected:
intz;
public:
classEmbed
inty;
Embed(){y=100;
intEmbed_Fun();
}MyEmbed;
intContain_Fun();
};
对上面的定义,正确的描述是____。
A.定义类Embed对象的语句是:
Contain?
Embedembed;
B.类Contain的成员函数Contain_Fun()中可以用MyEmbeD.y的方式访问类Embed的私有成员y
C.类Embed的成员函数Embed_Fun()中可以直接访问Contain的私有成员x
D.类Embed的成员函数Embed_Fun()中可以直接访问Contain的保护成员Z
11.下面程序的结果是
#include<iostream.h>
classA
{public:
A(){cout<<"
construtA"
<<end1;
virtual~A(){cout<<"
destructA"
}};
classB:
publicA
{};
classC:
classD:
publicB,publicC
{Dd;
}
A.constructAdestructA
B.constructAconstructAdestructAdestructA
C.constructAconstructAconstructAdestructAdestructAdestructA
D.constructAconstructAconstructAconstructAdestructAdestructAdestructAdestructA
类D继承了类C和类B,所以在构造的时候分别构造类B和类C。
12.下列代码段声明了3个类
classPerson{};
classStudent:
publicPerson{};
classUndergraduate:
Student{};
下列关于这些类之间关系的描述中,错误的是______。
A.类Person是类Undergraduate的基类
B.类Undergraduate从类student公有继承
C.类student是类Person的派生类
D.类Undergraduate是类Person的派生类
[解析]Student类公有继承自Person类,Undergraduate类私有继承自Student类。
所以Undergraduate类是从Student类私有继承的。
13.如有以下程序:
usingnamespacestd,
longfun(intn)
if(n>2)
return(fun(n-1)+fun(n-2));
else
return2;
intmain()
cout<<fun(3)<<end1;
则该程序的输出结果应该是______。
A.2
B.3
C.4
D.5
[解析]主函数中调用fun(3),在fun内部当n>
2时,递归调用fun(n-1)+fun(n-2),否则返回2。
所以当n=3时,调用fun
(2)+fun
(1),即返回2+2,等于4。
14.某二叉树共有7个结点,其中叶子结点只有1个,则该二叉树的深度为(假设根结点在第1层)______。
A.3
B.4
C.6
D.7
[解析]根据二叉树的基本性质3:
在任意一棵二叉树中,度为0的叶子结点总比度为2的结点多一个,所以本题中度为2的结点为1-1=0个,所以可以知道本题目中的二叉树的每一个结点都有一个分支,所以共7个结点共7层,即度为7。
15.当派生类从一个基类保护继承时,基类中的一些成员在派生类中成为保护成员,这些成员在基类中原有的访问属性是______。
A.任何
B.公有或保护
C.保护或私有
D.私有
[解析]保护继承时基类的public和protected是保护的,私有继承时基类的public和protected是私有的。
16.下列函数模版中的定义中,合法的是______。
A.template<typenameT>Tabs(Tx){returnx<0?
-x:
x;
}
B.templateclass<T>Tabs(Tx){returnx<0?
C.templateT<classT>abs(Tx){returnx<0?
D.templateTabs(Tx){returnx<0?
[解析]此题考查的是函数模板。
声明一个函数模板的格式是:
template<模板形参表声明>函数声明,其中的<模板形参表声明>是由一个或多个“模板形参”组成的,每个“模板形参”可具有以下几种形式:
typename参数名;
class参数名;
类型修饰参数名。
17.下列关于虚函数的描述中正确的是______。
A.如果在重定义函数时使用了保留字virtual,则该重定义函数仍然是虚函数
B.虚函数不得声明为静态成员函数
C.虚函数不得声明为另一个类的友元函数
D.派生类必须重新定义基类的虚函数
[解析]虚函数可以是另一个类的友元函数,但不能是静态成员函数,也不能是内联函数和构造函数。
在派生类中可以重新定义从基类继承下来的虚函数,也可能不需要。
虚函数在派生类中重定义后,重定义的函数仍然是一个虚函数,而且无论是否用virtual修饰。
18.下列关于函数的说法中,正确的是
A.C++允许在函数体中定义其他函数
B.所有的内联函数都要用inline说明
C.仅函数返回类型不同的同名函数不能作为重载函数使用
D.有默认值的参数应从左至右逐个定义
19.以下选项中合法的实型常数是
A.5E2.0
B.E-3
C..2E0
D.1.3E
[解析]本题考查实型常数的指数表示法,可以肯定的是指数不能为小数即必须为整数,故排除A.由于符号E前面必须有数字,故B也是错误的。
D在指数符号后面没有数字,是错误的。
答案为C。
20.下列程序的输出结果是____。
main()
intm=5;
if(m++>5)
cout<<m;
elsecout<<m--;
A.7
B.6
C.5
D.4
[解析]此题中,因为m++>5成立(此时m的值变为6),所以执行语句cout<<m;
输出结果为6。
21.下面程序段的运行结果是
voidmain()
intt,a,b,C;
a=1;
b=2;
C=2;
while(a<b<c)
{t=a;
a=b;
b=t;
c--;
cout<<a<<"
"
<<b<<"
<<C;
A.1,2,0
B.2,1,0
C.1,2,1
D.2,1,1
[解析]本题中(a<b<c)的运算次序是先算a<b,返回1,再运算1<c,返回1,所以表达式a<b<c的值为1。
22.有如下程序:
#include<iostream>
count++:
char*GetName(){returnname;
snoopy"
),t2("
),t3("
tout<<t1.getCount()<<endl;
[解析]析构函数主要用于最后函数的释放空间。
本题在已输出t1.getCount()后才调用即不影响所输结果。
23.以下程序运行后的输出结果是____。
voidmain()
charaft="
abbcabbcabbc"
;
inti=0,j=0,k=0;
while(a[i])
if(a[i]=="
a"
)
j++;
b"
k++;
i++;
cout<<j<<"
"
<<k<<end1;
A.2,6
B.3,5
C.4,7
D.3,6
[解析]程序中首先定义字符数组a,然后在while循环中统计字符a和b的个数。
其中j记录a的个数,k记录b的个数。
第一个if语句是当第i个字符为a时,i加1;
第二个if语句是当第i个字符为b时,k加1。
24.下列叙述中正确的是
A.循环队列有队头和队尾两个指针,因此,循环队列是非线性结构
B.在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况
C.在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况
D.循环队列中元素的个数是由队头指针和队尾指针共同决定的
[解析]循环队列是线性表的一种,所以选项A错误。
循环队列的入队和出队需要由队尾指针和队头指针完成,所以选项B和c错误。
25.有如下程序段:
inti=1;
intj=4;
intmain(){
inti=5;
j+=i;
cout<<i<<j<<endl;
运行时的输出结果是
A.14
B.95
C.59
D.55
[解析]main函数中的局部变量i屏蔽了全局变量的i,即在main函数中的i取值为5,所以j=4+5=9,输出结果为59,答案为C选项。
26.有如下程序:
classA{
staticinta;
voidinit(){a=1;
A(inta=2){init();
a++;
intA:
a=0;
Aobj;
cout<<obj.a;
运行时输出的结果是______。
A.0
B.1
C.2
D.3
[解析]本题考查构造函数,本题中对类中的a数据成员先是赋值为0,当定义了对象obj时,执行构造函数,将a的值变为了1,所以输出1。
27.下列不构成无限循环的语句或语句组是______。
A.n=0;
do{++n;
}while(n<=0);
B.n=0;
while
(1){n++;
C.while(n=10);
{n--;
D.for(n=0,i=1;
;
i++)n+=i
[解析]选项B中while
(1)永远为真,一直自加下次进入死循环;
选项C中while(n=10)同理死循环,没有下限范围;
选项D中for循环中i也没有循环限定条件也将进入死循环;
只有选项A中while(n<=0)循环判定成立,循环结束。
28.软件按功能可以分为:
应用软件、系统软件和支撑软件(或工具软件)。
下面属于应用软件的是______。
A.编译程序
B.操作系统
C.教务管理系统
D.汇编程序
[解析]编译软件、操作系统、汇编程序都属于系统软件,只有C教务管理系统才是应用软件。
29.下面叙述中错误的是______。
A.软件测试的目的是发现错误并改正错误
B.对被调试的程序进行“错误定位”是程序调试的必要步骤
C.程序调试通常也称为Debug
D.软件测试应严格执行测试计划,排除测试的随意性
[解析]软件测试的目的是为了发现错误而执行程序的过程,并不涉及改正错误,所以选项A错误。
程序调试的基本步骤有:
错误定位、修改设计和代码,以排除错误、进行回归测试,防止引进新的错误。
程序调试通常称为Debug,即排错。
软件测试的基本准则有:
所有测试都应追溯到需求、严格执行测试计划,排除测试的随意性、充分注意测试中的群集现象、程序员应避免检查自己的程序、穷举测试不可能、妥善保存测试计划等文件。
30.若有以下函数调用语句:
fun(m+n,x+y,f(m+n,z,(x,y)));
在此函数调用语句中实参的个数是____。
A.6
B.5
C.4
D.3
[解析]参数之间是用逗号分隔的,不要因为参数是表达式而被迷惑。
函数的第一个参数是表达式m+n,第三个参数是表达式f(m+n,z,(x,y))。
31.结构化分析方法是面向____的自顶向下、逐步求精进行需求分析的方法。
A.对象
B.数据结构
C.数据流
D.目标
[解析]结构化分析方法是面向数据流进行需求分析的方法,采用自顶向下、逐步求精,建立系统的处理流程,以数据流图和数据字典为主要工具,建立系统的逻辑模型。
32.若有下面的函数调用:
fun(a+b,3,max(n-1,b))
则fun的实参个数是______。
A.3
D.6
[解析]本题考查函数实参个数的基础知识,根据实参的概念,(a+b)、3、max(n-1,b)分别为其中的3个实参。
故答案为A。
33.实现运行时的多态性要使用____。
A.虚函数
B.重载函数
C.析构函数
D.构造函数
[解析]虚函数是实现动态联编的必要条件之一,没有虚函数一定不能实现动态联编。
34.______既可重载为一元运算符,义可重载为二元运算符。
A.“*”
B.“=”
C.“=”和“*”
D.“*”和“*++”
[解析]本题考查的是运算符的有关概念。
“*”是二元运算符,既可用于间接访问也可用于两数相乘;
而“=”和“++”都是一元运算符。
35.关于友元,下列说法错误的是______。
A.如果类A是类B的友元,那么类B也是类A的友元
B.如果函数fun()被说明为类A的友元,那么在fun()中可以访问类A的私有成员
C.友元关系不能被继承
D.如果类A是类B的友元,那么类A的所有成员函数都是类B的友元
[解析]一个类是另一个类的友元,意味着该类的每一个成员函数都是另—个类的友元函数。
36.已知各变量的定义如下
inti=8,k,a,b;
unsignedlongw=5;
doublex=1.42,y=5.2;
则以下符合C++语言语法的表达式是____。
A.a+=a-=(b=4)*(a=3)
B.a=a*3+2
C.x%(-3)
D.y=floati
37.关于构造函数A()的拷贝构造函数正确的是
A.A(A*B);
B.A(AB);
C.A(A&
B);
D.A(A);
[解析]考查拷贝构造函数的方法。
[解题要点]固定的一种拷贝方式就是<类名>:
<类名>const<类名>&
<引用对象名>
[考点链接]如果一个类中没有声明,拷贝构造函数,编译器会自动生成一个如上述形成的仅有的拷贝构造函数。
3