判断题2 分
1-1
在C++语言中,变量和常量都有数据类型。
T
F
| 参考答案
答案
T
1分
1-2
常量对象必须初始化,并且不能在生成之后修改。
T
F
| 参考答案
答案
T
1分
单选题45 分
2-1
设int x;,则经过()后,语句*px=0;可将x值置为0。
A.
int * px;
B.
int const * px=&x;
C.
int * const px=&x;
D.
const int * px=&x;
| 参考答案
答案
C
1分
2-2
const int *p说明不能修改()。
A.
p指针;
B.
p指针指向的变量;
C.
p指针指向的数据类型;
D.
上述A、B、C三者;
| 参考答案
答案
B
1分
2-3
对于常数据成员,下面描述正确的是:
A.
常数据成员可以不初始化,并且不能更新
B.
常数据成员必须被初始化,并且不能更新
C.
常数据成员可以不初始化,并且可以被更新
D.
常数据成员必须被初始化,并且可以更新
| 参考答案
答案
B
1分
2-4
定AA是一个类,“AA* abc()const;”是该类中一个成员函数的原型,若该函数返回this值,当用x.abc()调用该成员函数后,x的值:
A.
已经被改变
B.
可能被改变
C.
不变
D.
受到函数调用的影响
| 参考答案
答案
C
1分
2-5
下列说法中正确的是( )
A.
在函数参数定义中可以使用const说明符,其值在函数体内不可改变
B.
在函数参数定义中可以使用const说明符,但必须指定缺省值
C.
在函数参数定义中可以使用const说明符,但只能有一个参数使用const
D.
在函数参数定义中不可以使用const说明符
| 参考答案
答案
A
1分
2-6
f()函数是类的一个常成员函数,它有一个int型参数,并且返回类型为int。下列对该常成员函
数进行声明的选项中,正确的是( )
A.
int f(int)const;
B.
const int f(int);
C.
int f(const int);
D.
const int f(const int);
| 参考答案
答案
A
1分
2-7
下列关于常指针的定义,错误的是:
A.
const int * p;
B.
int * const p;
C.
const int * const p;
D.
int * p const;
| 参考答案
答案
D
1分
2-8
下列哪个定义表明指针指向的内容不能修改( )
A.
const char *p
B.
char* const p
C.
const char& p
D.
char p
| 参考答案
答案
A
1分
2-9
下列代码能正确执行的是( )
A.
char a='C'; const char *p=&a;
B.
char a='C'; char* const p; p=&a;
C.
char a='C'; const char& p; p=a;
D.
char a='C'; char& p; p=a;
| 参考答案
答案
A
1分
2-10
下列代码能正确执行的是( )
A.
char a='C'; const char& p=a;
B.
char a='C'; char* const p; p=&a;
C.
char a='C'; const char& p; p=a;
D.
char a='C'; char& p; p=a;
| 参考答案
答案
A
1分
2-11
下列代码能正确执行的是( )
A.
char a='C'; const char* const p=&a;
B.
char a='C'; char* const p; p=&a;
C.
char* p=&'C';
D.
char& p='C';
| 参考答案
答案
A
1分
2-12
下列语句中,错误的是( )
A.
const int buffer = 256;
B.
const int temp;
C.
const double* point;
D.
double* const pt = new double(5.5);
| 参考答案
答案
B
1分
2-13
关于函数模板,描述错误的是。
A.
函数模板必须由程序员实例化为可执行的函数模板
B.
函数模板的实例化由编译器实现
C.
一个类定义中,只要有一个函数模板,则这个类是类模板
D.
类模板的成员函数都是函数模板,类模板实例化后,成员函数也随之实例化
| 参考答案
答案
A
1分
2-14
下列的模板说明中,正确的是。
A.
template < typename T1, T2 >
B.
template < class T1, T2 >
C.
template < typename T1, typename T2 >
D.
template ( typedef T1, typedef T2 )
| 参考答案
答案
C
1分
2-15
假设有函数模板定义如下:
template
Max( T a, T b ,T &c)
{ c = a + b ; }
下列选项正确的是( )。
A.
int x, y; char z ;Max( x, y, z ) ;
B.
double x, y, z ;Max( x, y, z ) ;
C.
int x, y; float z ;Max( x, y, z );
D.
float x; double y, z;Max( x, y, z ) ;
| 参考答案
答案
B
1分
2-16
下列有关模板的描述,错误的是____。
A.
模板把数据类型作为一个设计参数,称为参数化程序设计
B.
使用时,模板参数与函数参数相同,是按位置而不是名称对应的
C.
模板参数表中可以有类型参数和非类型参数
D.
类模板与模板类是同一个概念
| 参考答案
答案
D
1分
2-17
有函数模板定义如下:
template<typename T> Max(T a, T b, T& c){c = a + b ;}
则下列调用中正确的是____。
A.
int x, y; char z; Max(x, y, z);
B.
double x, y,z; Max(x, y, z);
C.
int x, y; float z; Max(x, y, z);
D.
float x, double y, z; Max(x, y, z);
| 参考答案
答案
B
1分
2-18
模板函数的真正代码是在哪个时期产生的____。
A.
源程序中声明函数时
B.
源程序中定义函数时
C.
源程序中调用函数时
D.
运行执行函数时
| 参考答案
答案
C
1分
2-19
声明模板的关键字为____。
A.
static
B.
template
C.
typename
D.
class
| 参考答案
答案
B
1分
2-20
下列对模板的声明,正确的是____。
A.
template<T>
B.
template<class T1, T2>
C.
template<class T1, class T2>
D.
template<class T1, class T1>
| 参考答案
答案
C
1分
2-21
下列选项中,哪一个函数可以定义为对许多数据类型完成同一任务____。
A.
函数模板
B.
递归函数
C.
模板函数
D.
重载函数
| 参考答案
答案
A
1分
2-22
下列关于模板的描述中,错误的是____。
A.
模板把数据类型作为一个设计参数,称为参数化程序设计
B.
使用时,模板参数与函数参数相同,是按位置而不是名称对应的
C.
模板参数表中可以有类型参数和非类型参数
D.
类模板与模板类是同一个概念
| 参考答案
答案
D
1分
2-23
模板的使用是为了()。
A.
提高代码的可重用性
B.
提高代码的运行效率
C.
加强类的封装性
D.
实现多态性
| 参考答案
答案
A
1分
2-24
假设声明了一下的函数模板:
template<class T>
T max(T x, T y)
{
return (x>y)?x:y;
}
并定义了int i; char c;
错误的调用语句是()。
A.
max(i,i);
B.
max(c,c);
C.
max((int)c,i);
D.
max(i,c);
| 参考答案
答案
D
1分
2-25
关于函数模板,描述错误的是( )。
A.
函数模板的实例化由编译器实现
B.
函数模板必须由程序员实例化为可执行的函数模板
C.
类模板的成员函数都是函数模板,类模板实例化后,成员函数也随之实例化
D.
一个类定义中,只要有一个函数模板,这个类就是类模板
| 参考答案
答案
B
1分
2-26
有如下函数模板定义:
template
T func(T x, T y) { return x>y?x:y; }
在下列对func的调用中,错误的是( )
A.
func(3, 5);
B.
func(3.0, 5.5);
C.
func (3, 5.5);
D.
func('a', 'b');
| 参考答案
答案
C
1分
2-27
现有声明:
template
class Test{...};
则以下哪一个声明不可能正确。
A.
Test a;
B.
Test < int> a;
C.
Test < float> a;
D.
Test< Test < int> > a;
| 参考答案
答案
A
1分
2-28
关于类模板,描述错误的是。
A.
一个普通基类不能派生类模板
B.
类模板可以从普通类派生,也可以从类模板派生
C.
根据建立对象时的实际数据类型,编译器把类模板实例化为模板类
D.
函数的类模板参数需生成模板类并通过构造函数实例化
| 参考答案
答案
A
1分
2-29
建立类模板对象的实例化过程为。
A.
基类-派生类
B.
构造函数-对象
C.
模板类-对象
D.
模板类-模板函数
| 参考答案
答案
C
1分
2-30
在C++中,容器是一种。
A.
标准类
B.
标准对象
C.
标准函数
D.
标准类模板
| 参考答案
答案
C
1分
2-31
下列关于类模板的描述中,错误的是____。
A.
一个普通基类不能派生类模板
B.
类模板从普通类派生,也可以从类模板派生
C.
根据建立对象时的实际数据类型,编译器把类模板实例化为模板类
D.
函数的类模板参数须通过构造函数实例化
| 参考答案
答案
A
1分
2-32
下列关于类模板的参数的描述中,正确的是____。
A.
只能作为数据成员的类型
B.
只可作为成员函数的返回类型
C.
只可作为成员函数的参数类型
D.
以上三种均可
E.
替换为错误项
| 参考答案
答案
D
1分
2-33
类模板的模板参数____。
A.
只可作为数据成员的类型
B.
可作为成员函数的返回类型
C.
可作为成员函数的参数类型
D.
以上三者皆可
| 参考答案
答案
D
1分
2-34
类模板的使用实际上是将类模板实例化成一个____。
A.
函数
B.
对象
C.
类
D.
抽象类
| 参考答案
答案
C
1分
2-35
下列关于模板的说法中,错误的是____。
A.
用模板定义一个对象时,不能省略参数
B.
类模板只能有虚拟参数类型
C.
类模板的成员函数都是模板函数
D.
类模板在编绎中不会生成任何代码
| 参考答案
答案
C
1分
2-36
下列选项中,哪一项是类模板实例化的时期____。
A.
在编绎时期进行
B.
属于动态联编
C.
在运行时进行
D.
在连接时进行
| 参考答案
答案
A
1分
2-37
一个____允许用户为类定义一种模式,使得类中的某些数据成员及某些成员函数的返回值能取任意类型。
A.
函数模板
B.
模板函数
C.
类模板
D.
模板类
| 参考答案
答案
C
1分
2-38
下列关于类模板的定义,正确的是____。
A.
template<class T, int i = 0>
B.
template<class T, class int i>
C.
template<class T, typename T>
D.
template <class T1, T2>
| 参考答案
答案
B
1分
2-39
下列关于pair<>类模板的描述中,错误的是。
A.
pair<>类模板定义头文件utility中
B.
pair<>类模板作用是将两个数据组成一个数据,两个数据可以是同一个类型也可以是不同的类型
C.
创建pair<>对象只能调用其构造函数
D.
pair<>类模拟提供了两个成员函数first与second来访问这的两个数据
| 参考答案
答案
C
1分
2-40
根据下列类模板声明,正确初始化对象的方式是( )
template<typename T> class MyClass{ private: T e; public: MyClass(T _e):e(_e){} };
A.
MyClass<int> a(10);
B.
MyClass a(10);
C.
MyClass a;
D.
MyClass a(int,10);
| 参考答案
答案
A
1分
2-41
根据下列类模板声明,正确初始化对象的方式是( )
template<typename T1, typename T2> class MyClass{ private: T1 x; T2 y; public: MyClass(T1 _x, T2 _y):x(_x),y(_y){} };
A.
MyClass<int,int> a(10,10);
B.
MyClass a(10,10);
C.
MyClass<int,int> a;
D.
MyClass a;
| 参考答案
答案
A
1分
2-42
根据下列类模板声明,正确初始化对象的方式是( )
template<typename T1, typename T2> class MyClass{ private: T1 x; T2 y; public: MyClass(T1 _x, T2 _y):x(_x),y(_y){} };
A.
MyClass<int,char> a(10,'a');
B.
MyClass a(10,'a');
C.
MyClass<int,char> a;
D.
MyClass a;
| 参考答案
答案
A
1分
2-43
根据下列类模板声明,正确初始化对象的方式是( )
template<typename T1, typename T2> class MyClass{ private: T1 x; T2 y; public: MyClass(T1 _x, T2 _y):x(_x),y(_y){} };
A.
MyClass<int,string> a(10,"abc");
B.
MyClass a(10,"abc");
C.
MyClass<int,string> a;
D.
MyClass a;
| 参考答案
答案
A
1分
2-44
类模板的参数错误的说法是:
A.
可以有多个
B.
可以有0个
C.
不能有基本数据类型
D.
参数不能给初值
| 参考答案
答案
B
1分
2-45
C++中的模板包括:
A.
对象模板和函数模板
B.
对象模板和类模板
C.
函数模板和类模板
D.
变量模板和对象模板
| 参考答案
答案
C
1分
函数题53 分
6-1你好,类模板(圆的面积2)
完善Square
的两个成员函数的实现,使得程序正确运行:
裁判测试程序样例:
#include <iostream>
using namespace std;
template <typename T>
class Square {
public:
Square(T width);
T getArea() const;
private:
T m_width;
};
// 请将答案填写在这里
int main() {
int width1;
cin >> width1; // 输入正方形的边长
Square<int> square1(width1);
cout << square1.getArea() << endl; // 输出正方形的面积
double width2;
cin >> width2; // 输入正方形的边长
Square<double> square2(width2);
cout << square2.getArea() << endl; // 输出正方形的面积
return 0;
}
输入样例:
在这里给出一组输入。例如:
3
1.1
输出样例:
在这里给出相应的输出。例如:
9
1.21
| 参考答案
答案
编译器: GXX
template <typename T>
Square<T>::Square(T width){
m_width=width;
}
template <typename T>
T Square<T>::getArea() const{
return m_width*m_width;
}
(参考)
10分
6-2最大值(模板)*
请设计求两个对象最大值的函数模板。
#include <iostream>
using namespace std;
/* 你提交的代码将被嵌在这里 */
int main()
{
int a, b, c;
cin >> a >> b;
c = Max(a, b);
cout << c << endl;
return 0;
}
输入样例
37 29
输出样例
37
| 参考答案
答案
编译器: GXX
template <typename TYPE>
TYPE& Max(const TYPE &x, const TYPE &y)
{
return (TYPE&)(x >= y ? x : y);
}
(参考)
10分
6-3绝对值函数模板*
请设计求对象绝对值的函数模板。
#include <iostream>
using namespace std;
/* 你提交的代码将被嵌在这里 */
int main()
{
int a, b;
cin >> a;
b = Abs(a);
cout << b << endl;
return 0;
}
输入样例1
37
输出样例1
37
输入样例2
-37
输出样例2
37
提示:运用条件运算符(?:),写出高效的代码。
| 参考答案
答案
编译器: GXX
template <typename T>
T Abs(T val) {
return (val < 0) ? -val : val;
}
(有误)
10分
6-4你好,函数模板(交换)
完善myswap
的定义,使得程序正确运行:
裁判测试程序样例:
#include <iostream>
using namespace std;
// 请将答案填写在这里
int main() {
int a, b;
cin >> a >> b;
myswap(a, b); // 交换两个数
cout << a << " " << b << endl;
double x, y;
cin >> x >> y;
myswap(x, y); // 交换两个数
cout << x << " " << y << endl;
return 0;
}
输入样例:
在这里给出一组输入。例如:
8 9
9.9 8.8
输出样例:
在这里给出相应的输出。例如:
9 8
8.8 9.9
| 参考答案
答案
编译器: GXX
template <typename T>
T myswap(T &a,T &b)
{
T t;
t=a;
a=b;
b=t;
return 0;
}
(参考)
10分
6-5你好,函数模板(求数组中最大元素)
请完善mymax
的定义,使得程序正确运行:
裁判测试程序样例:
#include <iostream>
using namespace std;
// 请将答案填写在这里
int main() {
int size;
cin >> size; // 大于0
int *array1 = new int[size];
for (int i = 0; i < size; ++i) {
cin >> array1[i]; // 输入size个正整数
}
cout << mymax(array1, size) << endl; // 求数组中最大的元素
cin >> size; // 大于0
double *array2 = new double[size];
for (int i = 0; i < size; ++i) {
cin >> array2[i]; // 输入size个大于0的double类型的数
}
cout << mymax(array2, size) << endl; // 求数组中最大的元素
return 0;
}
输入样例:
在这里给出一组输入。例如:
2
3 88
3
1.1 2.2 3.3
输出样例:
在这里给出相应的输出。例如:
88
3.3
| 参考答案
答案
template <typename T>
T mymax(T *a,int n){
T t=a[0];
for(int i=1;i<n;i++)
{
if(t<a[i])
t=a[i];
}
return t;
}
参考
编译器: GXX