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