pta 第九章模版作业c++

判断题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

  • 23
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值