二级C++选择题专项强化真题试卷1
选择题
1.有如下程序:
#include<iostream>
using namespace std;
int main(){
int a[6]={23, 15, 64, 33, 40, 58};
int s1, s2;
s1, s2=a[0];
for(int*p=a+1; p<a+6; p++) {
if(s1>*p)s1=*p;
if(s2<*p)s2=*p;
}
cout<<s1+s2<<end1;
return 0;
}
运行时的输出结果是( )。
A) 23
B) 58
C) 64
D) 79
(D)
A.
B.
C.
D.
解析:变量s1和s2的初值都等于23,那么在执行第一次for循环时,*p的值等于15,它小于23,所以把15赋给变量s1;执行第二次for循环时,*p的值等于64,它大于23,所以把64赋给变量s2;而数组a中a[2]后面的元素的值都大于15,小于64,因而变量s1,s2的值不会再发生变化,最终值为15+6=79,所以程序输出79。
2.有如下类模板定义:
template<typename T>
class BigNumber{
long n;
public:
BigNumber(T i):n(i){}
BigNumber operator+(BigNumber B) {
return BigNumber(n+b.n);
}
}
已知b1、b2是BigNumber的两个对象,则下列表达式中错误的是( )。
A) b1+b2
B) b1+3
C) 3+b1
D) 3+3(C)
A.
B.
C.
D.
解析:
3.已知主函数中通过如下语句序列实现对函数模板swap的调用:
int a[10], b[10];
swap(a, b, 10);
下列对函数模板swap的声明中,会导致上述语句序列发生编译错误的是( )。
A) template<typename T>
void swap(T a[], T b[], int size);
B) template<typename T>
void swap(int size, T a[], T b[]);
C) template<typename T1, typename T2>
void swap(T1 a[], T2 b[], int size);
D) template<class T1, class T2>
void swap(T1 a[], T2 b[], int size);(B)
A.
B.
C.
D.
解析:
4.判断char型变量c是否为小写字母的正确表达式是(D)
A. a’<=c<=’z’
B. (c>=A) &&(c<=z)
C. (’a’>=c)||(’z’<=c)
D. (c>=’a’)&&(c<=’z’)
解析:字符型数据在计算机内部是以ASCII码存储的,英文大写字母和小写字母在ASCII码表中都是连续的。大写字母A~Z是从65~90,小写字母a~z是从97~122。所以只要变量c大于等于a并且等于小于z就能保证其为小写字母。
5.下列关于模板的叙述中,正确的是(C)
A. 如果一个类中存在纯虚函数,这个类就是类模板
B. 函数模板不能有形式参数表
C. 类模板是一种参数化类型的类,是类的生成器
D. 类模板中不能包含构造函数
解析:
6.下列选项中,正确的C++表达式是(C)
A. counter++3
B. element3+
C. a+=b
D. ‘a’=b
解析:
7.有以下类定义 clas sMyClass { public: My Class() { cout<<1;} }; 则执行语句MyClassa,b[2],*p[2];后,程序的输出结果是(B)
A. 11
B. 111
C. 1111
D. 11111
解析:本题考核构造函数和析构函数。题中定义了类MyClass的对象a,对象数据 b,所以调用了构造函数3次,输出111。然后定义了对象指针*p[2],由于指针没有实例话,所以不会调用构造函数。
8.有以下程序 #include<iostream> using namespace std; class MyClass { public: MyClass(intn) {number=n;} //拷贝构造函数 MyClass (MyClass& other) {number=other.number;} ~MyClass(){} private: int number; }; MyClass fun (MyClass p) { MyClass temp(p); return temp; } intmain() { MyClass obj1(10),obj2(0); MyClass obj3(obj1); obj2=fun(obj3); return0; } 程序执行时,MyClass类的拷贝构造函数被调用的次数是(B)
A. 5
B. 4
C. 3
D. 2
解析:本题考核C++的拷贝构造函数。调用拷贝构造函数的情况为:一个新对象被另一个已存在的同类型对象初始化:当一个对象作为实参传递给函数时为初始化形参,要调用拷贝构造函数。在函数值返回时形参的生命期结束时它的结构函数被调用;在函数返回一个对象时调用拷贝构造函数。符合以上条件的有:用对象。obj1来初始化。obj3;obj3作为实参被传入;函数fun返回一个对象时;系统用返回值初始化一个匿名对象时调用了拷贝构造函数。总共调用4次。
9.C++流中重载的运算符>>是一个(B)
A. 用于输出操作的非成员函数
B. 用于输入操作的非成员函数
C. 用于输出操作的成员函数
D. 用于输入操作的成员函数
解析:本题考核运算符重载。C++中重载输入流运算符>>和输出流运算符<<只能作为非类成员函数重载,且必须使用如下原形:
istream& operator>>(istream&.<类名>&);
ostream& operator<<(ostream&,<类名>);
10.下列关于虚函数的描
本文档预览:3600字符,共9083字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载