点击查看:2016年计算机二级《C++》基础练习题及答案汇总
1[单选题]设有基类定义:
派生类采用何种继承方式可以使成员变量b成为自己的私有成员( )。
A.私有继承
B.保护继承
C.公有继承
D.私有、保护、公有
参考答案:A
参考解析:类的继承中有三种继承方式,他们和类的访问级别相结合在派生类中可以产生多种 访问级别。基类中成员为保护的,在派生类中要为私有的,可以采用私有继承。基类中的保护成员 在派生类中不是私有就是保护,即级别只能降低而不能升高。基类中的公有成员则可能为私有、保 护和私有。
2[单选题] 有下列程序:
#include
intfun(intx,inyy)
{if(x==y)return(x);
elsereturn((x+y)/2);
}
voidmain( )
{inta=4,b=5,c=6;
printf("%d\n",fun(2*a,fun(b,c)));
}
程序运行后的输出结果是( )。
A.3B.6C.8D.12
参考答案:B
参考解析:在程序中子函数fun(intX,inty)的功能是如果X的值等于y的值,则返回X的值,否则返回这两个数的算术平均值,在主函数中首先计算fun(5,6),其值等于5,然后再计算fun(8,5),其值等于6。所以正确答案为选项B。
3[单选题]下列选项中,作为是数据库系统的核心的是( )。
A.数据库B.数据模型C.软件工具D.数据库管理系统
参考答案:D
参考解析:数据库管理系统DBMS是数据库系统的核心。DBMS是负责数据库的建立、使用和维护的软件。DBMS建立在操作系统之上,实施对数据库的统一管理和控制。
4[单选题] 下列程序的输出结果是( )。#include
voidmain()
(char*str="12123434";
intx1=0,x2=0,x3=0,x4=0,i;
for(i=0;str[i]!='\0';i++)
switch(str[i])
{case'1':x4++;
case'2':x3++;
case'3':x2++;
case'4':x1++;
}
cout<
<","<
}
A.8,6,4,1B.8,6,3,2C.8,8,4,1D.8,6.4,2
参考答案:D
参考解析:本题考查循环的嵌套、for和switch语句的应用、C++中各种条件判断,循环语句的用法。只要注意在C++语言中,系统在字符指针的最后位置会增加一个字符串结束符'\0',执行8次for循环,再根据switch语句中的条件易知答案。
5[单选题]
A.
B.
C.
D.
参考答案:B
参考解析:
6[单选题]请阅读以下程序:
上面程序的输出结果是( )。
A.a=2,b=1 B.a=1,b=1 C.a=1,b=0D.a=2,b=2
参考答案:A
参考解析:本题考察switch语句的嵌套,以及break语句的使用规则,即break中断当前的执行流,不再执行下面的case语句,如果没有break语句,则会顺序执行随后语句。据此,读程序可知,内层switch执行case 0分支,故a增1,调出内层switch后,由于没有break语句,随后执行外层switch的case 2分支,a又增1,b增1。故答案为A。
7[单选题]对长度为n的线性表排序,在最坏情况下,比较次数不是n(n-1)/2的排序方法是( )。
A.快速排序B.冒泡排序C.直接插入排序D.堆排序
参考答案:D
8[单选题] 下列运算符函数中肯定不属于类FunNumber的成员函数的是( )。
A.int operator一(FunNumber);
B.FunNumber operator一();
C.FunNumber operator一(int);
D.int operator一(FunNumber,FunNumber);
参考答案:D
参考解析:本题考查运算符重载的一些规则:①一般情况下,单目运算符最好重载为类的成员函数,双目运算符则最好重载为类的友元函数;②双目运算符=、()、[]、->不能重载为类的友元函数;③类型转换函数只能定义为一个类的成员函数,而不能定义为类的友元函数;④若一个运算符的操作需要修改对象的状态,选择重载为成员函数较好;⑤若运算符所需的操作数(尤其是第一个操作数)希望有隐式类型转换,则只能选用友元函数;⑥当运算符函数是一个成员函数时,最左边的操作数(或者只有最左边的操作数)必须是运算符类的一个类对象(或者是对该类对象的引用);如果左边的操作数必须是一个不同类的对象,或者是一个内部类型的对象,该运算符函数必须作为一个友元函数来实现。所以答案为D。
9[单选题]下列数据结构中,插入时不需要移动其他元素的是( )。
A.有序线性链表B.无序线性链表C.栈和队列D.以上三种都是
参考答案:D
参考解析:在线性链表中插入或删除元素都不需要移动其他元素,只需改变指针即可;栈只能在一端插入或删除元素,也不需要移动其他元素;队列只能在一端插人元素.在另一端删除元素,也不需 要移动其他元素。
10[单选题]有如下程序:
#include
#include
using namespace std;
int main(){
cout << setfill('*')<
return 0;
}
运行输出结果是( )。
A.***123***456B.***123456***C.***123456D.123456
参考答案:C
参考解析:在主函数中第一次输出时调用函数setfill('*')设置填充字符为‘*’,调用函数 setw(6)设置每次输出的宽度为6,所以第一次输出123时,多余的三个空位用‘*’填充,即结果为***123,第二次从输出流中输出456。
相关推荐:
北京 | 天津 | 上海 | 江苏 | 山东 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
广东 | 河北 | 湖南 | 广西 | 河南 |
海南 | 湖北 | 四川 | 重庆 | 云南 |
贵州 | 西藏 | 新疆 | 陕西 | 山西 |
宁夏 | 甘肃 | 青海 | 辽宁 | 吉林 |
黑龙江 | 内蒙古 |