wayground logo

Free Printable Worksheets

Font size

S
M
L
XL
Worksheets

Программирование на C++ 2_курс_1_семестр_2_рубежка

Total questions: 128

Worksheet time: 1hrs 8mins

Name
Class
Date
1.

Дана строка символов  char W[ ] = "akrobat zavarka arkadia arkan";

Каково будет значение  W  после выполнения инструкций:

for ( K = 0 ; W[K]; K++ )

   if ( W[K] >= 'a'  W[K] <= 'z' )

      W[K] += 'A' - 'a';

a)

A) "AKROBAT ZAVARKA ARKADIA ARKAN"

b)

B) "AkrobAt zAvArkA ArkAdiA ArkAn"

c)

C) "krobt zvrk rkdi rkn"

d)

D) "AkrobAt zavarka arkadia arkan"

e)

E) "Akrobat zavarka arkadia arkan"

2.

Дана строка символов  char W[ ] = "akrobat zavarka arkadia arkan";

Каково будет значение  W  после выполнения инструкций:

char Z = 'a';

for ( K = L = 0; W[K]; K++ )

   if ( W[K] != Z )

      W[L++] = W[K]; W[L] = '\0';

a)

A) "aakrobat zavarka arkadia arkan"

b)

B) "akrobt zvrk rkdi rkn"

c)

C) "krobat zavarka arkadia arkan"

d)

D) "akrobat zavarka arkadia arka"

e)

E) "krobt zvrk rkdi rkn"

3.

Даны строки символов  char W[80] = "akrobat zavarka arkadia arkan", V[80] = "arka";

Каково будет значение  V  после выполнения инструкций:

K = L = 0;

while ( V[K] )

   K++;

while ( V[K++] = W[L++] ) ;

a)

A) "akrobat zavarka arkadia arkan"

b)

B) "arkaakrobat zavarka arkadia arkan"

c)

C) "akro"

d)

D) зацикливание

e)

E) "arkabat zavarka arkadia arkan"

4.

Даны строки символов  char W[80] = "akrobat zavarka arkadia arkan", V[80] = "arka";

Каково будет значение переменной  K  после выполнения инструкций:

for ( K = 0; W[K]; K++ ) {

   for ( L = K, I = 0; V[I] != '\0'  W[L] = = V[I]; L++, I++ ) ;

   if ( V[I] = = '\0' ) break;

}

a)

A) 24

b)

B) 10

c)

C) 16

d)

D) 12

e)

E) 11

5.

Укажите неправильное утверждение:

a)

A) класс используется для конструирования нового типа

b)

B) объект - это обычно переменная типа "класс"

c)

C)  использование класса всегда предполагает захват динамической памяти под объект класса

d)

D) в любой функции-члене класса видимы все остальные члены этого класса

e)

F)  класс может содержать несколько конструкторов и несколько деструкторов     

6.

Укажите правильное утверждение:

a)

A) перед именем функции-члена класса всегда указывается префикс "имя_класса"::

b)

B) в определении функции-члена класса вне класса заголовок всегда начинается с префикса "имя_класса"::

c)

C)  определение функции-члена класса может быть внутри, а может быть и вне класса

d)

F)  структура - это тоже класс, который может содержать элементы данных и функции-члены

e)

G)  объект - это обычно переменная нового сложного типа, в которой объединены элементы данных (поля) и функции-члены (функции-элементы, методы), обрабатывающие эти данные

7.

Функция-конструктор:

a)

A)  обычно неявно вызывается при объявлении объекта, хотя допустимы и явные вызовы

b)

B) может быть виртуальной

c)

C) всегда захватывает динамическую память для объекта

d)

D) может возвращать значение какого-то типа

e)

E) не может использоваться для преобразования типа

8.

Функция-деструктор:

a)

A) может использоваться для преобразования типа

b)

B) имеет имя, состоящее из символа "~"

c)

C) может возвращать значение какого-то типа

d)

D) может иметь параметры различных типов

e)

E)  обычно неявно вызывается при выходе из области видимости объекта

9.

Конструктор по умолчанию:

a)

A) вызывается только операцией new при захвате динамического объекта

b)

B) вызывается неявно только при объявлении объекта класса, а явно вызываться не может

c)

C) вызывается неявно при объявлении класса

d)

D)  это конструктор без параметров

e)

E) это конструктор, список параметров которого совпадает с набором всех элементов данных объекта

10.

Конструктор копирования:

a)

A) это конструктор без параметров

b)

B) это конструктор, перегрузивший операцию "="

c)

C) вызывается в инструкции присваивания

d)

D) это конструктор, список параметров которого совпадает с набором всех элементов данных объекта

e)

E)  принимает в качестве параметра ссылку на свой класс

11.

Укажите объявление, где допущена ошибка:

a)

B) class { int E; public: int X( void ); } v;

b)

C) struct S { S( void ); private: float F; };

c)

D) class X { int G; public: X( X  ); };

d)

E)  class X { int H; public: X( void ); X( int ); }++++

e)

G) class X { float R; public: X( void ); }

12.

Укажите объявление, где нет ошибки:

a)

A) class X { int N; public: int X( X ); };

b)

B)  class X { char S; public: X( void ); X( X  ); X( char ); };

c)

C) class X { float R; public: X( void ); }

d)

D) class X { double D; public: virtual X( void ); };

e)

E) class { long L; public: X( X  ); X( long ); } x;

13.

Дано объявление класса

class Avrora { int N; double R; public: double P( int, double ); } A;

тогда правильным будет следующее определение функции-члена класса:

a)

A) double Avrora::P( int K, double S );

b)

B) double Avrora.P( int K, double S ) { N = K; R = S K; return R R;}

c)

C) Avrora::double P( int K, double S ) { N = K; R = S K; return R R;}

d)

D) double A::P( int K, double S ) { N = K; R = S K; return R R;}

e)

E)  double Avrora::P( int K, double S ) { return K * S;}

14.

this - это:

a)

A) скрытый указатель на любой элемент класса

b)

B) скрытый указатель на невидимый элемент класса

c)

C)  скрытый элемент любого класса - указатель на этот класс

d)

D) пустой указатель "в никуда" - аналог указателя nil в языке Паскаль

e)

E) стандартная переменная - указатель на тип "класс"

15.

Дано объявление

class D {

 int E, F;

public:

 D( int Ea, int Fa ) { E = Ea; F = Fa; }

 void S( void ) { }

 ~D( ) { }

} *pD;

тогда следующая инструкция допустима:

a)

A) pD = new D;

b)

B) pD.S( );

c)

C) pD = new sizeof( D );

d)

D) delete pD -> ~D( );

e)

E)  pD = new D( 30, 75 );

16.

Дано объявление

class D {

 int E, F;

public:

 D( int Ea, int Fa ) { E = Ea; F = Fa; }

 void S( void ) { }

 ~D( ) { }

} *pD;

тогда следующая инструкция недопустима:

a)

A)  new pD( 30, 75 );

b)

B) pD -> S( );

c)

C) delete pD;

d)

D) pD = new D( 30, 75 );

e)

E) pD = ( D * ) new D( 30, 75 );

17.

Дан фрагмент программы

class D {

 int E, F;

public:

 D( int Ea, int Fa ) { E = Ea; F = Fa; }

 void S( void ) { E = E - F; F = E + F; E = F - E; }

 ~D( ) { cout << E << " " << F << endl; }

} *pD;

pD = new D( 30, 75 );

pD -> S( );

delete pD;

в результате его выполнения на экран будут выведены значения:

a)

A) 30 75

b)

B) -45 30

c)

C) -45 105

d)

D) -45 150

e)

E)  75 30

18.

Если элементом какого-то класса является объект другого класса, то неправильным будет следующее утверждение:

a)

A) конструктор для объекта-члена класса вызывается раньше, чем конструктор объемлющего класса

b)

B) деструктор для объекта-члена класса вызывается после вызова деструктора объемлющего класса

c)

C) обращения к конструкторам для объекта-члена класса располагаются в конце заголовка определения конструктора объемлющего класса

d)

D) при обращении к конструктору для объекта-члена класса в качестве его имени указывается имя самого объекта

e)

E)  обращения к конструкторам для объекта-члена класса располагаются в конце заголовка прототипа конструктора объемлющего класса

19.

Дано объявление класса

class Diana { int K; double P; public:

 Diana( int k, double p ) { K = k; P = p; } };

тогда следующее определение класса будет верным:

a)

A) class Pallada { Diana D; public: Pallada( int ); };

Pallada::Pallada( int K ): Diana( K, 3.14 ) { }

b)

B) class Pallada { Diana D; public: Pallada( int, double ); };

Pallada::Pallada( int K, double R ) D( K, R ) { }

c)

C)  class Pallada { Diana D; public: Pallada( int K ): D( K, 3.14 ) { } };+++++

d)

D) class Pallada { Diana D; public: Pallada( int K, double R ): D( K, R ); };

e)

H) class Pallada { Diana D; int N; public: Pallada( int K ): D( N = K, 3.14 ) { } };

20.

Дан фрагмент программы

class Diana {

 int S;

public:

 Diana( int Sa ) { S = Sa; }

 int Sum( int N ) { return S += N; }

};

class Pallada {

 Diana D;

public:

 Pallada( int Pa ): D( Pa ) { }

 int Sum( int );

};

int Pallada::Sum( int N ) {

 for ( int K = 1, S = 0; K <= N; K++ ) S += D.Sum( K );

 return S; }

Pallada P( 0 );

cout << P.Sum( 4 ) << endl;

в результате его выполнения на экран будет выдано:

a)

A) 10

b)

B) 35

c)

C) 40

d)

D) 4

e)

E)  20

21.

Дан фрагмент программы

class Diana {

 int S;

public:

 Diana( int Sa ) { S = Sa; }

 int Sum( int K ) { return S += K; }

};

class Pallada {

 Diana D;

public:

 Pallada( int Pa ): D( Pa ) { }

 int Srav( int N ) { return D.Sum( 2*N - 1 ) = = N * N; }

};

Pallada P( 0 );

for ( int K = 1; K <= 4; K++ )

 cout << " " << P.Srav( K );

в результате его выполнения на экран будет выдано:

a)

A) 0 0 0 0

b)

B) 1 3 5 7

c)

C)  1 1 1 1

d)

D) 1 4 9 16

e)

E) 1 1 1 0

22.

Дан фрагмент программы

struct Diana {

 int S;

 Diana( void ) { S = 0; }

 int Sum( int N ) { return S += N; } };

struct Pallada {

 int S;

 Pallada( void ) { S = 0; }

 int Sum( int N ) { return S += N; } };

struct Zeves {

 Diana D; Pallada P;

 Zeves( void ): D( ), P( ) { }

 int Sum( int N ) { return P.Sum( D.Sum( N ) ); } };

Zeves Z;

for ( int K = 1; K <= 4; K++ )

 cout << " " << Z.Sum( K );

в результате его выполнения на экран будет выдано:

a)

A) 1 2 3 4

b)

B) 1 3 6 10

c)

C) 0 1 2 3

d)

D)  1 4 10 20

e)

E) 0 1 3 6

23.

Дан фрагмент программы

class Diana {

 int S;

public:

 Diana( void ) { S = 0; }

 int Sum( int N ) { return S += N; }

};

class Pallada {

 Diana S, P;

public:

 Pallada( void ): S( ), P( ) { }

 int Sum( int N ) { return P.Sum( S.Sum( N ) ); }

};

Pallada P;

for ( int K = 1; K <= 4; K++ )

 cout << " " << P.Sum( K );

в результате его выполнения на экран будет выдано:

a)

A) 1 2 3 4

b)

B) 1 3 6 10

c)

C) 0 1 4 10

d)

D) 1 4 10 15

e)

E)  1 4 10 20

24.

Дан фрагмент программы

class Diana {

 int S;

public:

 Diana( void ) { S = 0; }

 int Sum( int K ) { return S += K * K; }

};

class Pallada {

 Diana D;

public:

 Pallada( void ): D( ) { }

 int Srav( int N ) { return D.Sum( N ) = = N ( N + 1 ) ( 2*N + 1 ) / 6; }

};

Pallada P;

for ( int K = 1; K <= 4; K++ )

 cout << " " << P.Srav( K );

в результате его выполнения на экран будет выдано:

a)

A) 0 0 0 0

b)

B) 1 5 14 30

c)

C)  1 1 1 1

d)

D) 1 6 18 40

e)

E) 1 1 1 0

25.

Укажите правильное утверждение:

a)

A) прототип функции-друга начинается с ключевого слова comrade

b)

B) прототип функции-друга располагается только в закрытой части класса

c)

E)  определение функции-друга обычно аналогично определению любой функции

d)

H)  функцией-другом класса называется функция-член этого класса, перед заголовком которой указано ключевое слово friend

e)

D) функция-друг только тогда имеет доступ к закрытой части класса, когда в этой части был указан её прототип

26.

Укажите неправильное утверждение:

a)

A) чтобы все функции-члены одного класса сделать друзьями другого класса, можно первый класс сделать другом второго класса

b)

B)  функции-другу класса не нужен параметр-объект этого классного типа - она по умолчанию имеет доступ к элементам класса

c)

C) прототип функции-друга начинается с ключевого слова friend

d)

D) функции-другу класса можно не задавать параметр-объект этого классного типа - она имеет право обрабатывать глобальные и локальные переменные-объекты этого класса

e)

F)  функцией-другом класса называется функция-член этого класса, перед заголовком которой указано ключевое слово friend

27.

Функции-друзья необходимы для:

a)

A) доступа к членам только одного класса

b)

B)  доступа к членам нескольких классов

c)

C) порождения производных классов

d)

D) реализация принципа полиморфизма в объектно-ориентированном программировании

e)

E) доступа из одной функции программы к локальным переменным другой функции

28.

Даны объявления, содержащие ошибки

class Avrora {

 int N;

public:

 Avrora( int K ) { N = K; }

 void Voshod( void ) { }

 friend void Germes( void );

};

class Afina {

 Avrora A, B;

public:

 Afina( void ) A( ), B( 10 ) { }

 friend void Germes( void );

};

void Germes( void ) { A.Voshod( ); this -> Voshod( ); }

тогда одно из следующих объяснений ошибок является неверным:

a)

A) вызовы конструкторов объектов-членов класса Afina должны следовать за двоеточием

b)

B) для вызова конструктора объекта-члена A класса Afina не определён соответствующий конструктор в классе Avrora

c)

C) обращение A.Voshod( ) в функции-друге Germes возможно, только если бы Germes была функцией-членом класса Afina

d)

D)  обращение A.Voshod( ) в функции-друге Germes невозможно, поскольку прототип Germes расположен в открытой, а не закрытой части класса Afina

e)

E) обращение this -> Voshod( ) в функции-друге Germes возможно, только если бы Germes была функцией-членом класса Avrora

29.

Даны определения двух классов и функции-друга, в которых есть одна ошибка

const int M = 2, N = 3;

class Vect {

 int V[N];

 friend void Prod( Matr  A, Vect  V, int W[M] );

public:

 Vect( void ) { } };

class Matr {

 int A[M][N];

public:

 Matr( void ) { }

 friend void Prod( Matr  A, Vect  V, int W[M] ); };

void Prod( Matr  A, Vect  V, int W[M] ) {

 for ( int I = 0; I < M; I++ ) {

 W[I] = 0;

 for ( int J = 0; J < N; J++ )

 W[I] += A.A[I][J] * V.V[J];

 }

}

укажите верное утверждение, содержащее объяснение ошибки:

a)

A) прототип функции-друга расположен в закрытой части класса Vect, что запрещается

b)

B)  перед определением класса Vect отсутствует описание класса Matr

c)

C) прототип функции-друга расположен в открытой части класса Matr, и поэтому не может иметь доступа к члену этого класса A, расположенному в закрытой части класса

d)

D) третий параметр функции-друга не принадлежит к типу "класс", другом которого она является

e)

E) перед определением функции-друга Prod отсутствует ключевое слово friend

30.

Дан фрагмент программы

struct Paralpiped;

struct Piramida {

 double A, B, H;

 Piramida( double Aa, double Ba, double Ha ) { A = Aa; B = Ba; H = Ha; }

 friend int Obyem( Piramida S, Paralpiped T ); } S( 3, 4, 5 );

struct Paralpiped {

 double A, B, C;

 Paralpiped( double Aa, double Ba, double Ca ) { A = Aa; B = Ba; C = Ca; }

 friend int Obyem( Piramida S, Paralpiped T ); } T( 2, 3, 4 );

int Obyem( Piramida S, Paralpiped T ) {

 double VS = S.A S.B S.H / 3, VT = T.A T.B T.C;

 if ( VS < VT ) return -1;

 else if ( VS > VT ) return +1;

 else return 0;

} какое значение будет получено после обращения к функции Obyem( S, T ):

a)

A)  -1

b)

B) 20

c)

C) 1

d)

D) 24

e)

E) 0

31.

*****

Дан фрагмент программы

const double Pi = 3.14159265358979323846;

struct Paralpiped;

struct Piramida {

 int N;

 double H, V;

 Piramida( int Na, double Ha, double Va ) { N = Na; H = Ha; V = Va; }

 friend int Plosh( Piramida S, Paralpiped T ); } S( 4, 3, 5 );

struct Paralpiped {

 double A, B, C;

 Paralpiped( double Aa, double Ba, double Ca ) { A = Aa; B = Ba; C = Ca; }

 friend int Plosh( Piramida S, Paralpiped T ); } T( 2, 3, 4 );

int Plosh( Piramida S, Paralpiped T ) {

 double PS = S.N S.H tan( Pi / S.N ) * ( S.H + S.V ),

 PT = 2 ( T.A T.B + T.A T.C + T.B T.C );

 if ( PS < PT ) return -1;

 else if ( PS > PT ) return +1;

 else return 0;

}

какое значение будет получено после обращения к функции Plosh( S, T ):

a)

A) 96

b)

B) -1

c)

C)  1

d)

D) 52

e)

E) 0

32.

Дан фрагмент программы

const double Pi = 3.14159265358979323846;

struct Paralpiped;

struct Piramida {

 int N;

 double A, H;

 Piramida( int Na, double Aa, double Ha ) { N = Na; A = Aa; H = Ha; }

 friend int Obyem( Piramida S, Paralpiped T ); } S( 4, 2, 3 );

struct Paralpiped {

 double A, B, C;

 Paralpiped( double Aa, double Ba, double Ca ) { A = Aa; B = Ba; C = Ca; }

 friend int Obyem( Piramida S, Paralpiped T ); } T( 2, 3, 4 );

int Obyem( Piramida S, Paralpiped T ) {

 double VS = S.N S.A tan( Pi / S.N ) S.A S.H, VT = T.A T.B T.C;

 if ( VS < VT ) return -1;

 else if ( VS > VT ) return +1;

 else return 0;

}

какое значение будет получено после обращения к функции Obyem( S, T ):

a)

A) 48

b)

B)  1

c)

C) -1

d)

D) 24

e)

E) 0

33.

Дан фрагмент программы

struct Paralgramm;

struct Trapecia {

 double A, B, H;

 Trapecia( double Aa, double Ba, double Ha ) { A = Aa; B = Ba; H = Ha; }

 friend int Plosh( Trapecia T, Paralgramm P ); } T( 3, 5, 4 );

struct Paralgramm {

 double A, H;

 Paralgramm( double Aa, double Ha ) { A = Aa; H = Ha; }

 friend int Plosh( Trapecia T, Paralgramm P ); } P( 4, 5 );

int Plosh( Trapecia T, Paralgramm P ) {

 double ST = 0.5 ( T.A + T.B ) T.H, SP = P.A * P.H;

 if ( ST < SP ) return -1;

 else if ( ST > SP ) return +1;

 else return 0;

}

какое значение будет получено после обращения к функции Plosh( T, P ):

a)

A) 16

b)

B) 0

c)

C) 20

d)

D)  -1

e)

E) 1

34.

Перегрузка операций

a)

A) достигается с помощью функций-операций

b)

A) достигается с помощью функций-операций

c)

C) достигается с помощью произвольных функций

d)

D)  это придание нового смысла знакам стандартных операций

e)

G)  необходима для более эффективного использования имеющихся знаков и имён в программе

35.

Укажите правильное утверждение:

a)

A) с помощью перегрузки можно изменить приоритет операций new и delete

b)

B)  имя функции-операции начинается с ключевого слова operator,,

c)

C) определение функции-операции начинается с ключевого слова operator

d)

D) определение функции-операции начинается с ключевого слова operation

e)

E) нельзя изменить приоритеты перегружаемых операций   

36.

Укажите неправильную рекомендацию:

a)

A)  для инициализации объекта однотипным объектом перегружайте операцию "="

b)

B) функция-операция, изменяющая состояние объекта, должна быть скорее членом, а не другом класса

c)

C) функция-операция, предполагающая неявное преобразование типа для всех операндов, должна быть скорее другом, а не членом класса

d)

D) инициализацию объекта однотипным объектом обычно лучше задавать конструктором класса с параметром "ссылка на этот класс"

e)

E) функцию-операцию перегрузки "=" лучше задавать функцией-членом класса

37.

Укажите правильное утверждение:

a)

A) инициализацию объекта однотипным объектом обычно задают функцией-операцией, перегружающей "="

b)

B)  для преобразования из произвольного типа T в тип "класс" обычно используют конструктор этого класса с параметром типа T

c)

C) присваивание "=" объекту однотипного объекта обычно задают конструктором класса

d)

D) инициализация и присваивание - это одинаковые действия

e)

A)  функция-друг перегрузки операции "*" допускает обращение к себе operator *( x, y )

38.

Укажите правильное утверждение:

a)

A)  функция-друг перегрузки операции "*" допускает обращение к себе operator *( x, y ),,

b)

B) нельзя перегрузить операцию "( )"

c)

C) операцию "? :" можно сделать бинарной

d)

E) функция-друг перегрузки операции "/" допускает обращение к себе operator /( x )

e)

F) можно перегрузить операцию "[ ]"

39.

Укажите неправильное утверждение:

a)

A) если в классе X определён конструктор X( X  ), то он вызывается не только при инициализации, но и при копировании объекта как параметра функции и как значения функции

b)

B) можно перегрузить операцию "[ ]"

c)

C) нельзя изменить приоритет операции ","

d)

D) для перегрузки операции "/" в классе X можно задать функцию-друга класса

friend X operator /( X , X  )

e)

E)  перегружаемую операцию можно обозначить символом @

40.

Укажите неправильный прототип функции-операции для класса X:

a)

A) X operator /( X  );

b)

B)  friend X operator #( X , X  );

c)

C) X operator ++( void );

d)

D) friend X operator *( X , X  );

e)

E)  operator X( void );

41.

Укажите правильный прототип функции-операции для класса X:

a)

A) X operator ::( X  );

b)

B) friend operator !( );

c)

C)  operator double( void );

d)

D) X operator =( X  );

e)

E)  X operator ( )( X  ),,,,бошкаси йук булса;

42.

Дано определение класса, содержащее ошибку

class Afrodita {

 int Scilla, Haribda;

public:

 Afrodita( ) { }

 Afrodita( int A ) { Scilla = A; Haribda = 2 * A; }

 Afrodita( Afrodita  A )

 { this -> Scilla = A.Scilla; this -> Haribda = A.Haribda; }

 operator double( int Koef ) { return double( Scilla * Koef ); }

 Afrodita operator =( Afrodita  );

} A( 1 ), B( 10 ), C( 100 );

Afrodita Afrodita::operator =( Afrodita  A )

{ this -> Scilla = A.Scilla; this -> Haribda = A.Haribda; return A; }

укажите верное утверждение, содержащее объяснение ошибки:

a)

A) отсутствует деструктор класса

b)

B) конструктор по умолчанию - пустой

c)

C) операция "=" - бинарная, а функция-операция operator = имеет только один параметр

d)

D) конструктор инициализации объектом такого же типа Afrodita использует запрещённый указатель this

e)

E)  функция-операция преобразования типа Afrodita в тип double не должна иметь параметров

43.

Даны определения констант и класса, содержащие ошибки

const int M = 3, N = 2;

class Matr {

 int A[M][N];

public:

 Matr( ) { }

 Matr( Matr  );

 Matr( int B[ ][ ] );

 Matr operator =( Matr  );

 Matr operator ~( Matr  );

 Matr operator <( Matr , Matr  );

 friend Matr operator >>=( Matr  );

} A;

тогда одно из следующих объяснений ошибок является неверным:

a)

A) в прототипе конструктора с матричным параметром отсутствуют размерности параметра

b)

B) в функции-операции "~" не должно быть параметров                                                     

c)

C)  имя объекта A совпадает с именем члена класса - матрицей A

d)

D) в функции-операции "<" должен быть один параметр

e)

E) в функции-операции ">>=" должно быть два параметра

44.

Дан класс матриц class Matr { int A[2][2] ... }; В нём перегружены операции

const int M = 2, N = 2;

Matr Matr::operator +( Matr  B ) {

 Matr C;

 for ( int I = 0; I < M; I++ )

 for ( int J = 0; J < N; J++ )

 C.A[I][J] = A[I][J] + B.A[I][J];

 return C; }

Matr Matr::operator *( Matr  B ) {

 Matr C;

 for ( int I = 0; I < M; I++ )

 for ( int J = 0; J < N; J++ )

 C.A[I][J] = A[I][J] * B.A[I][J];

 return C; }

тогда для матриц A[2][2] = {4, 3, 2, 1}, B[2][2] = {1, 9, 3, 7}, C[2][2] = {1, -1, 1, -1}

найдите значение выражения A + B * C:

a)

A) {-6, 5, -6, 5}

b)

B) {5, 5, -6, -6}

c)

C)  {5, -6, 5, -6}

d)

D) {14, -7, 12, -9}

e)

E) {2, 5, 0, 3}

45.

Дан класс матриц class Matr { int A[2][2] ... }; В нём перегружены операции

const int M = 2, N = 2;

Matr Matr::operator +( Matr  B ) {

 Matr C;

 for ( int I = 0; I < M; I++ )

 for ( int J = 0; J < N; J++ )

 C.A[I][J] = A[I][J] + B.A[I][J];

 return C; }

Matr operator *( int K, Matr  B ) {

 Matr C;

 for ( int I = 0; I < M; I++ )

 for ( int J = 0; J < N; J++ )

 C.A[I][J] = K * B.A[I][J];

 return C; }

тогда для матриц A[2][2] = {1, 9, 3, 0}, B[2][2] = {1, 9, 6, 1}

найдите значение выражения 4 * A + B:

a)

A)  {5, 45, 18, 1}

b)

B) {8, 72, 36, 4}

c)

C) {5, 18, 45, 1}

d)

D) {5, 45, 18, 5}

e)

E) {5, 18, 9, 1}

46.

Дан класс матриц class Matr { int A[2][2] ... }; В нём перегружены операции

const int M = 2, N = 2;

Matr Matr::operator +( int K ) {

 Matr C;

 for ( int I = 0; I < M; I++ )

 for ( int J = 0; J < N; J++ )

 C.A[I][J] = A[I][J] + K;

 return C; }

Matr operator *( int K, Matr  B ) {

 Matr C;

 for ( int I = 0; I < M; I++ )

 for ( int J = 0; J < N; J++ )

 C.A[I][J] = K * B.A[I][J];

 return C; }

тогда для матрицы A[2][2] = {1, 9, 5, 3} найдите значение выражения 3 * A + 5:

a)

A) {8, 20, 32, 14}

b)

B) {8, 9, 5, 3}

c)

C)  {8, 32, 20, 14}

d)

D) {18, 42, 30, 24}

e)

E) {18, 30, 42, 24}

47.

Дан класс матриц class Matr { int A[2][2] ... }; В нём перегружены операции

const int M = 2, N = 2;

Matr Matr::operator +( Matr  B ) {

 Matr C;

 for ( int I = 0; I < M; I++ )     

 for ( int J = 0; J < N; J++ )

 C.A[I][J] = A[I][J] + B.A[I][J];

 return C; }

int operator !=( Matr  A, Matr  B ) {

 for ( int I = 0; I < M; I++ )

 for ( int J = 0; J < N; J++ )

 if ( A.A[I][J] != B.A[I][J] ) return 1;

 return 0; }

тогда для матриц A[2][2] = {1, 4, 9, 16}, B[2][2] = {1, 3, 5, 7}, C[2][2] = {0, 1, 4, 8}

найдите значение выражения A != B + C:

a)

A) {1, 4, 9, 15}

b)

B)  1

c)

C) {1, 1, 1, 0}

d)

D) 0

e)

E) {0, 0, 0, 1}

48.

Дан класс матриц class Matr { int A[2][2] ... }; В нём перегружены операции

const int M = 2, N = 2;

Matr Matr::operator -( void ) {

 Matr C;

 for ( int I = 0; I < M; I++ )

 for ( int J = 0; J < N; J++ )

 C.A[I][J] = -A[I][J];

 return C; }

int operator = =( Matr  A, Matr  B ) {

 for ( int I = 0; I < M; I++ )

 for ( int J = 0; J < N; J++ )

 if ( A.A[I][J] != B.A[I][J] ) return 0;

 return 1; }

тогда для матриц A[2][2] = {2, -4, -8, 12}, B[2][2] = {-2, 4, 8, -12}

найдите значение выражения A = = -B:

a)

A) {2, -4, -8, 12}

b)

B)  1

c)

C) {1, 1, 1, 1}

d)

D) 0

e)

E) {0, 0, 0, 0}

49.

Дан класс матриц class Matr { int A[2][2] ... }; В нём перегружены операции

const int M = 2, N = 2;

Matr Matr::operator ++( void ) {

 for ( int I = 0; I < M; I++ )

 for ( int J = 0; J < N; J++ )

 ++A[I][J];

 return *this; }

Matr operator >( Matr  A, Matr  B ) {

 Matr C;

 for ( int I = 0; I < M; I++ )

 for ( int J = 0; J < N; J++ )

 C.A[I][J] = A.A[I][J] > B.A[I][J];

 return C; }

тогда для матриц A[2][2] = {2, -4, -8, 7}, B[2][2] = {0, 4, 8, 6}

найдите значение выражения A > ++B:

a)

A) {1, 1, 1, 0}

b)

B) 1

c)

C)  {1, 0, 0, 0}

d)

D) 0

e)

E) {1, 0, 0, 1}

50.

Дан класс матриц class Matr { int A[2][2] ... }; В нём перегружены операции

const int M = 2, N = 2;

Matr Matr::operator ++( void ) {

 Matr C;

 C = *this;

 for ( int I = 0; I < M; I++ )

 for ( int J = 0; J < N; J++ )

 ++A[I][J];

 return C; }

Matr operator >( Matr  A, Matr  B ) {

 Matr C;

 for ( int I = 0; I < M; I++ )

 for ( int J = 0; J < N; J++ )

 C.A[I][J] = A.A[I][J] > B.A[I][J];

 return C; }

тогда для матриц A[2][2] = {2, -4, -8, 7}, B[2][2] = {1, 4, 8, 7}

найдите значение выражения B++ > A:

a)

A) {0, 1, 0, 1}

b)

B) {1, 0, 0, 1}

c)

C)  {0, 1, 1, 0}

d)

D) {1, 0, 1, 0}

e)

E) {0, 1, 1, 1}

51.

Дан класс векторов class Vect { int V[4] ... }; В нём перегружены операции

const int N = 4;

Vect Vect::operator +( Vect  B ) {

 Vect C;

 for ( int K = 0; K < N; K++ )

 C.V[K] = V[K] + B.V[K];

 return C; }

Vect Vect::operator *( Vect  B ) {

 Vect C;

 for ( int K = 0; K < N; K++ )

 C.V[K] = V[K] * B.V[K];

 return C; }

тогда для векторов A[4] = {4, 6, -7, 1}, B[4] = {-1, -1, 2, 4}, C[4] = {3, 9, 5, 8}, D[4] = {-2, 1, -1, 2}

найдите значение выражения A B + C D:

a)

A) -6

b)

B) 6

c)

C) {-10, 3, -19, 12}

d)

D) {-10, 3, 9, 20}

e)

E)  {-10, 3, -19, 20}

52.

Дан класс векторов class Vect { int V[4] ... }; В нём перегружены операции

const int N = 4;

Vect Vect::operator +( Vect  B ) {

 Vect C;

 for ( int K = 0; K < N; K++ )

 C.V[K] = V[K] + B.V[K];

 return C; }

int Vect::operator *( Vect  B ) {

 int Sum = 0;

 for ( int K = 0; K < N; K++ )

 Sum += V[K] * B.V[K];

 return Sum; }

тогда для векторов A[4] = {4, 6, -7, 1}, B[4] = {-1, -1, 2, 4}, C[4] = {3, 9, -5, 8}, D[4] = {-2, 1, -1, 2}

найдите значение выражения A B + C D:

a)

A) -4

b)

B) -10

c)

C) {-10, 3, -9, 20}

d)

D) {-10, 3, -19, 20}

e)

E)  4   

53.

Дан класс векторов class Vect { int V[4] ... }; В нём перегружены операции

const int N = 4;

Vect Vect::operator +( Vect  B ) {

 Vect C;

 for ( int K = 0; K < N; K++ )

 C.V[K] = V[K] + B.V[K];

 return C; }

Vect operator *( int L, Vect  B ) {

 Vect C;

 for ( int K = 0; K < N; K++ )

 C.V[K] = L * B.V[K];

 return C; }

Vect operator !=( Vect  A, Vect  B ) {

 Vect C;

 for ( int K = 0; K < N; K++ )

 C.V[K] = A.V[K] != B.V[K];

 return C; }

тогда для векторов A[4] = {1, 2, -4, -1}, B[4] = {1, -1, -20, 4}, C[4] = {4, 9, 0, 16}

найдите значение выражения 5 * A != B + C:

a)

A) {0, 0, 0, 1}

b)

B)  {0, 1, 0, 1}

c)

C) {1, 0, 1, 0}

d)

D) 0

e)

E) 1

54.

Дан класс векторов class Vect { int V[4] ... }; В нём перегружены операции

const int N = 4;

Vect Vect::operator +( int L ) {

 Vect C;

 for ( int K = 0; K < N; K++ )

 C.V[K] = V[K] + L;

 return C; }

Vect Vect::operator *( Vect  B ) {

 Vect C;

 for ( int K = 0; K < N; K++ )

 C.V[K] = V[K] * B.V[K];

 return C; }

Vect operator = =( Vect  A, Vect  B ) {

 Vect C;

 for ( int K = 0; K < N; K++ )

 C.V[K] = A.V[K] = = B.V[K];

 return C; }

тогда для векторов A[4] = {1, 2, -4, -2}, B[4] = {1, -1, -20, 2}, C[4] = {4, 9, 0, 1}

найдите значение выражения A + 4 = = B * C:

a)

A) 1

b)

B) {1, 0, 1, 1}

c)

C) 0

d)

D) {1, 1, 0, 0}

e)

E)  {0, 0, 1, 1}

55.

Дан класс векторов class Vect { int V[4] ... }; В нём перегружены операции

const int N = 4;

Vect Vect::operator +( Vect  B ) {

 Vect C;

 for ( int K = 0; K < N; K++ )

 C.V[K] = V[K] + B.V[K];

 return C; }

int operator <( Vect  A, Vect  B ) {

 for ( int K = 0; K < N; K++ )

 if ( A.V[K] >= B.V[K] ) return 0;

 return 1; }

тогда для векторов A[4] = {1, 2, -4, -2}, B[4] = {1, -1, -2, 2}, C[4] = {4, 9, 0, 1}, D[4] = {-1, 1, -1, 2}

найдите значение выражения A + B < C + D:

a)

A) 0

b)

B) {1, 1, 1, 1}

c)

C)  1

d)

D) {0, 0, 0, 0}

e)

E) {1, 0, 1, 1}

56.

Дан класс векторов class Vect { int V[4] ... }; В нём перегружены операции

const int N = 4;

Vect Vect::operator +( Vect  B ) {

 Vect C;

 for ( int K = 0; K < N; K++ )

 C.V[K] = V[K] + B.V[K];

 return C; }

Vect operator >>( Vect  A, int L ) {

 Vect C;

 int K, M;

 L %= N;

 for ( K = L; K < N; K++ )

 C.V[K] = A.V[K - L];

 for ( K = 0, M = N - L; K < L; K++, M++ )

 C.V[K] = A.V[M];

 return C; }

тогда для векторов A[4] = {2, 3, -3, -1}, B[4] = {2, 0, -1, 3}

найдите значение выражения ( A >> 3 ) + B:

a)

A) {1, 2, 2, 0}

b)

B)  {5, -3, -2, 5}

c)

C) {-1, -1, 1, 6}

d)

D) {4, 3, -4, 2}

e)

E) {3, -3, -1, 2}

57.

Дан класс векторов class Vect { int V[4] ... }; В нём перегружены операции

const int N = 4;

Vect Vect::operator +( Vect  B ) {

 Vect C;

 for ( int K = 0; K < N; K++ )

 C.V[K] = V[K] + B.V[K];

 return C; }

Vect operator >>( Vect  A, int L ) {

 Vect C;

 for ( int K = 0; K < N; K++ )

 C.V[K] = A.V[K] >> L;

 return C; }

тогда для векторов A[4] = {4, 5, 7, 9}, B[4] = {2, 0, -1, 3}

найдите значение выражения B + ( A >> 2 ):

a)

A)  {3, 1, 0, 5}

b)

B) {4, 2, 2, 7}

c)

C) {2, 0, -1, 4}

d)

D) {1, 1, 1, 2}

e)

E) {2, 2, 3, 4}

58.

Дан класс строк class String { char S[80] ... }; В нём перегружены операции

const int N = 80;

String operator +( String  A, String  B ) {

 String C;

 strcpy( C.S, A.S ); // копируем A.S в C.S

 strcat( C.S, B.S ); // добавляем B.S к концу C.S

 return C; }

String operator >>( String  A, int L ) {

 String C;

 L %= N;

 for ( int K = 0; K < L; K++ )

 strcpy( C.S + K, " " ); // копируем " " в K-ю позицию C.S

 strcpy( C.S + L, A.S ); // копируем A.S в C.S с L-й позиции

 return C; }

int operator = =( String  A, String  B )

 { return strcmp( A.S, B.S ) = = 0; } // если A.S = = B.S, strcmp возвращает 0

тогда для строк char A = "Array", B = "Video", *C = "VideoArray"

найдите значение выражения C = = B + ( A >> 5 ):

a)

A) 1

b)

B) "VideoArray"

c)

C) "Video_____Array"

d)

D) "Array_____Video"

e)

E)  0

59.

Дан класс строк class String { char S[80] ... }; В нём перегружены операции

String operator +( String  A ) {

 String C;

 int N = strlen( A.S ); // длина строки

 for ( int K = 0; K <= N; K++ )

 C.S[K] = ( 'a' <= A.S[K]  A.S[K] <= 'z' ) ? A.S[K] -= 'a' - 'A' : A.S[K];

 return C; }

String operator -( String  A, int L ) {

 String C;

 strcpy( C.S, A.S ); // копируем A.S в C.S

 C.S[ strlen( A.S ) - L ] = '\0'; // зануление L-го с конца элемента строки

 return C; }

int operator !=( String  A, String  B ) // если A.S < B.S, strcmp возвращает число < 0

 { return strcmp( A.S, B.S ) != 0; } // если A.S > B.S, strcmp возвращает число > 0

тогда для строк char A = "Simon_Bolivar", B = "Simon"

найдите значение выражения +A - 7 != +B:

a)

A) 0

b)

B) "Simon"

c)

C) "Simon_"

d)

D) "SIMON"

e)

E)  1

60.

Дан класс строк class String { char S[80] ... }; В нём перегружены операции

String operator +( String  A, String  B ) {

 String C;

 strcpy( C.S, A.S ); // копируем A.S в C.S

 strcat( C.S, B.S ); // добавляем B.S к концу C.S

 return C; }

String operator <<( String  A, int L ) {

 String C;

 strcpy( C.S, A.S + L ); // копируем A с L-й позиции в C.S

 return C; }

int operator <( String  A, String  B ) // если A.S < B.S, strcmp возвращает число < 0

 { return strcmp( A.S, B.S ) < 0; } // если A.S > B.S, strcmp возвращает число > 0

тогда для строк char A = "Garibaldi", B = "Juzeppe", *C = "GaribaldiJuzeppe"

найдите значение выражения A + B < ( C << 9 ):

a)

A) 0

b)

B) "GaribaldiJuzeppe"

c)

C)  1

d)

D) "Juzeppe"

e)

E) {1, 1, 1, 1, 1, 1, 1}

61.

Дан класс строк class String { char S[80] ... }; В нём перегружены операции

String operator +( String  A, String  B ) {

 String C;

 strcpy( C.S, A.S ); // копируем A.S в C.S

 strcat( C.S, B.S ); // добавляем B.S к концу C.S

 return C; }

String operator -( String  A ) {

 String C;

 int N = strlen( A.S ); // длина строки

 for ( int K = 0; K <= N; K++ )

 C.S[K] = ( 'A' <= A.S[K]  A.S[K] <= 'Z' ) ? A.S[K] -= 'A' - 'a' : A.S[K];

 return C; }

int operator = =( String  A, String  B )

 { return strcmp( A.S, B.S ) = = 0; } // если A.S = = B.S, strcmp возвращает 0

тогда для строк char A = "ChelovekAmfibiya", B = "chelovek", *C = "Amfibiya"

найдите значение выражения -A = = B + C:

a)

A) 1

b)

B) "chelovekamfibiya"

c)

C)  0

d)

D) "chelovekAmfibiya"

e)

E) "cHELOVEKaMFIBIYA"

62.

Дан класс строк class String { char S[80] ... }; В нём перегружены операции

String operator +( String  A, String  B ) {

 String C;

 strcpy( C.S, A.S ); // копируем A.S в C.S

 strcat( C.S, B.S ); // добавляем B.S к концу C.S

 return C; }

String operator +( String  A ) {

 String C;

 int N = strlen( A.S ); // длина строки

 for ( int K = 0; K <= N; K++ )

 C.S[K] = ( 'a' <= A.S[K]  A.S[K] <= 'z' ) ? A.S[K] -= 'a' - 'A' : A.S[K];

 return C; }

int operator >( String  A, String  B ) // если A.S < B.S, strcmp возвращает число < 0

 { return strcmp( A.S, B.S ) > 0; } // если A.S > B.S, strcmp возвращает число > 0

тогда для строк char A = "PieSlice", B = "PIE", *C = "SLICE"

найдите значение выражения +A > B + C:

a)

A) 1

b)

B) "PIESLICE"

c)

C) "PieSlice"

d)

D) "pieslice"

e)

E)  0

63.

Дан класс строк class String { char S[80] ... }; В нём перегружены операции

String operator -( String  A ) {

 String C;

 int N = strlen( A.S ); // длина строки

 for ( int K = 0; K <= N; K++ )

 C.S[K] = ( 'A' <= A.S[K]  A.S[K] <= 'Z' ) ? A.S[K] -= 'A' - 'a' : A.S[K];

 return C; }

String operator -( String  A, int L ) {

 String C;

 strcpy( C.S, A.S ); // копируем A.S в C.S

 C.S[ strlen( A.S ) - L ] = '\0'; // зануление L-го с конца элемента строки

 return C; }

String operator +( String  A, String  B ) {

 String C;

 strcpy( C.S, A.S ); // копируем A.S в C.S

 strcat( C.S, B.S ); // добавляем B.S к концу C.S

 return C; }

String operator <<( String  A, int L ) {

 String C;

 strcpy( C.S, A.S + L ); // копируем A с L-й позиции в C.S

 return C; }

тогда для строк char A = "Огни", B = "большого", *C = "города"

найдите значение выражения -A - 3 + ( B << 8 ) + C - 1:

a)

A) "огород"

b)

B) "Обольшогогорода"

c)

C) "Оогород"

d)

D) "оггород"

e)

E)  "Огород"

64.

Дан класс строк class String { char S[80] ... }; В нём перегружены операции

String operator +( String  A ) {

 String C;

 int N = strlen( A.S ); // длина строки

 for ( int K = 0; K <= N; K++ )

 C.S[K] = ( 'a' <= A.S[K]  A.S[K] <= 'z' ) ? A.S[K] -= 'a' - 'A' : A.S[K];

 return C; }

String operator <<( String  A, int L ) {

 String C;

 strcpy( C.S, A.S + L ); // копируем A с L-й позиции в C.S

 return C; }

String operator +( String  A, String  B ) {

 String C;

 strcpy( C.S, A.S ); // копируем A.S в C.S

 strcat( C.S, B.S ); // добавляем B.S к концу C.S

 return C; }

String operator -( String  A, int L ) {

 String C;

 strcpy( C.S, A.S ); // копируем A.S в C.S

 C.S[ strlen( A.S ) - L ] = '\0'; // зануление L-го с конца элемента строки

 return C; }

тогда для строк char A = "Лунная", B = "соната", *C = "Бетховена"

найдите значение выражения +( A << 5 ) + B - 3 + C - 9:

a)

A) "Ясон"

b)

B) "ЯсонБ"

c)

C)  "ясон"

d)

D) "аясон"

e)

E) "Аясон"

65.

Дан класс множеств class Set { char S[256] ... }; с конструктором и перегруженными операциями

const int N = 256;

Set::Set( char * S1 ) { // конструктор: преобразует строку символов S1

 for ( int K = 0; K < N; K++ ) // во множество символов, обозначая символы

 S[K] = 0; // единицами в соответствующих элементах

 for ( K = 0; S1[K] != '\0'; K++ ) // массива S, а отсутствующие символы - нулями

 S[ ( unsigned char )S1[K] ] = 1; }

Set operator *( Set  A, Set  B ) {

 Set C;

 for ( int K = 0; K < N; K++ )

 C.S[K] = A.S[K] != 0  B.S[K] != 0;

 return C; }

Set operator +( Set  A, Set  B ) {

 Set C;

 for ( int K = 0; K < N; K++ )

 C.S[K] = A.S[K] != 0 || B.S[K] != 0;

 return C; }

Set A( "Чапаев" ), B( "Пархоменко" ), C( "Фрунзе" ), D( "Федько" );

Найдите значение выражения A + B C D + Set( "Ус" ) при заданных переменных A, B, C, D:

a)

A) {У, Ч, а, в, е, с}

b)

B)  {У, Ч, а, в, е, п, с}

c)

C) {У, Ф, Ч, а, в, е, п, с}

d)

D) {У, Ф, Ч, а, в, е, н, с}

e)

E) ошибка: конструктор класса явно вызывать запрещено

66.

Дан класс множеств class Set { char S[256] ... }; с конструктором и перегруженными операциями

const int N = 256;

Set::Set( char * S1 ) { // конструктор: преобразует строку символов S1

 for ( int K = 0; K < N; K++ ) // во множество символов, обозначая символы

 S[K] = 0; // единицами в соответствующих элементах

 for ( K = 0; S1[K] != '\0'; K++ ) // массива S, а отсутствующие символы - нулями

 S[ ( unsigned char )S1[K] ] = 1; }

Set operator *( Set  A, Set  B ) {

 Set C;

 for ( int K = 0; K < N; K++ )

 C.S[K] = A.S[K] != 0  B.S[K] != 0;

 return C; }

Set operator -( Set  A, Set  B ) {

 Set C;

 for ( int K = 0; K < N; K++ )

 C.S[K] = A.S[K] != 0  B.S[K] = = 0;

 return C; }

Set A( "Щаденко" ), B( "Щорс" ), C( "Будённый" ), D( "Котовский" );

Найдите значение выражения Set( "Ворошилов" )-A*B*C-D при заданных переменных A, B, C, D:

a)

A) {В, л, о, р, ш}

b)

B) {В, в, и, л, о, р, ш}

c)

C) {В, л, ш}

d)

D)  {В, л, р, ш}

e)

E) ошибка: конструктор класса явно не вызывается

67.

Дан класс множеств class Set { char S[256] ... }; с конструктором и перегруженными операциями

const int N = 256;

Set::Set( char * S1 ) { // конструктор: преобразует строку символов S1

 for ( int K = 0; K < N; K++ ) // во множество символов, обозначая символы

 S[K] = 0; // единицами в соответствующих элементах

 for ( K = 0; S1[K] != '\0'; K++ ) // массива S, а отсутствующие символы - нулями

 S[ ( unsigned char )S1[K] ] = 1; }

Set operator -( Set  A, Set  B ) {

 Set C;

 for ( int K = 0; K < N; K++ )

 C.S[K] = A.S[K] != 0  B.S[K] = = 0;

 return C; }

int operator >=( Set  A, Set  B ) {

 for ( int K = 0; K < N; K++ )

 if ( A.S[K] = = 0  B.S[K] != 0 ) return 0;

 return 1; }

Set A( "Максим" ), B( "максим" ), C( "Симсим" ), D( "Дегтярёв" );

Найдите значение выражения A >= B-C-D-Set( "Судаев" ) при заданных переменных A, B, C, D:

a)

A) 0

b)

B) {М, а, к, с, и, м}

c)

C)  1

d)

D) {а, к}

e)

E) ошибка: конструктор класса явно не вызывается

68.

Дан класс множеств class Set { char S[256] ... }; с конструктором и перегруженными операциями

const int N = 256;

Set::Set( char * S1 ) { // конструктор: преобразует строку символов S1

 for ( int K = 0; K < N; K++ ) // во множество символов, обозначая символы

 S[K] = 0; // единицами в соответствующих элементах

 for ( K = 0; S1[K] != '\0'; K++ ) // массива S, а отсутствующие символы - нулями

 S[ ( unsigned char )S1[K] ] = 1; }

Set operator *( Set  A, Set  B ) {

 Set C;

 for ( int K = 0; K < N; K++ )

 C.S[K] = A.S[K] != 0  B.S[K] != 0;

 return C; }

int operator = =( Set  A, Set  B ) {

 for ( int K = 0; K < N; K++ )

 if ( A.S[K] != B.S[K] ) return 0;

 return 1; }

Set A( "Калина" ), B( "красная" ), C( "Заря" ), D( "Востока" );

Найдите значение выражения A*B*Set( "вызрела" ) = = C*D при заданных переменных A, B, C, D:

a)

A) 0

b)

B)  1

c)

C) {а}

d)

D) {а, н}

e)

E) ошибка: конструктор класса явно не вызывается

69.

Дан класс структур class Struct { int X, Y, Z; ... }; с перегруженными операциями

Struct operator -( Struct  A ) {

 Struct C;

 C.X = -A.X; C.Y = -A.Y; C.Z = -A.Z;

 return C; }

Struct operator *( Struct  A, Struct  B ) {

 Struct C;

 C.X = A.X B.X; C.Y = A.Y B.Y; C.Z = A.Z * B.Z;

 return C; }

Struct operator +( Struct  A, Struct  B ) {

 Struct C;

 C.X = A.X + B.X; C.Y = A.Y + B.Y; C.Z = A.Z + B.Z;

 return C; }

тогда для структур A = {4, 6, 7}, B = {-1, 1, 1}, C = {2, 3, 9}, D = {1, 1, 1}

найдите значение выражения -A B + C D:

a)

A) {-2, 9, 16}

b)

B) {-2, -3, 2}

c)

C)  {6, -3, 2}

d)

D) 5

e)

E) 23

70.

Дан класс структур class Struct { int X, Y, Z; ... }; с перегруженными операциями

Struct operator -( Struct  A ) {

 Struct C;

 C.X = -A.X; C.Y = -A.Y; C.Z = -A.Z;

 return C; }

int operator *( Struct  A, Struct  B )

{ return A.X B.X + A.Y B.Y + A.Z * B.Z; }

Struct operator +( Struct  A, Struct  B ) {

 Struct C;

 C.X = A.X + B.X; C.Y = A.Y + B.Y; C.Z = A.Z + B.Z;

 return C; }

тогда для структур A = {4, 6, 7}, B = {1, 1, 1}, C = {2, 3, 9}, D = {-1, 1, 1}

найдите значение выражения -A B + C D:

a)

A) 27

b)

B) -3

c)

C) {-6, -3, 2}

d)

D) {2, 9, 16}

e)

E)  -7

71.

Дан класс структур class Struct { int X, Y, Z; ... }; с перегруженными операциями

Struct operator -( Struct  A ) {

 Struct C;

 C.X = -A.X; C.Y = -A.Y; C.Z = -A.Z;

 return C; }

Struct operator *( int L, Struct  B ) {

 Struct C;

 C.X = L B.X; C.Y = L B.Y; C.Z = L * B.Z;

 return C; }

int operator *( Struct  A, Struct  B )

{ return A.X B.X + A.Y B.Y + A.Z * B.Z; }

тогда для структур A = {4, 6, 9}, B = {1, 1, 1}, C = {2, 3, 8}, D = {-1, 1, 1}

найдите значение выражения -A B + 2 C * D:

a)

A) 37

b)

B) -37

c)

C) {-8, 0, 7}

d)

D)  -1

e)

E) {-8, 0, -1}

72.

Дан класс структур class Struct { int X, Y, Z; ... }; с перегруженными операциями

Struct operator -( Struct  A ) {

 Struct C;

 C.X = -A.X; C.Y = -A.Y; C.Z = -A.Z;

 return C; }

Struct operator +( Struct  A, Struct  B ) {

 Struct C;

 C.X = A.X + B.X; C.Y = A.Y + B.Y; C.Z = A.Z + B.Z;

 return C; }

int operator !=( Struct  A, Struct  B )

{ return A.X != B.X || A.Y != B.Y || A.Z != B.Z; }

тогда для структур A = {4, 6, 9}, B = {3, 4, 2}, C = {-2, -3, -8}, D = {1, 1, 1}

найдите значение выражения -A + B != C + D:

a)

A) 1

b)

B) {-1, -2, -7}

c)

C)  0

d)

D) {1, 1, 1}

e)

E) {0, 0, 0}

73.

*****

Дан класс структур class Struct { int X, Y, Z; ... }; с перегруженными операциями

Struct operator +( Struct  A, Struct  B ) {

 Struct C;

 C.X = A.X + B.X; C.Y = A.Y + B.Y; C.Z = A.Z + B.Z;

 return C; }

Struct operator +( Struct  A, int L ) {

 Struct C;

 C.X = A.X + L; C.Y = A.Y + L; C.Z = A.Z + L;

 return C; }

Struct operator -( Struct  A, int L ) {

 Struct C;

 C.X = A.X - L; C.Y = A.Y - L; C.Z = A.Z - L;

 return C; }

int operator >=( Struct  A, Struct  B )

{ return A.X >= B.X  A.Y >= B.Y  A.Z >= B.Z; }

тогда для структур A = {4, 6, 9}, B = {-1, -2, 2}, C = {-2, -3, -8}, D = {1, 1, 1}

найдите значение выражения A + B + 2 >= C + D - 4:

a)

A)  1

b)

B) {5, 6, 13}

c)

C) {-5, -6, 5}

d)

D) {1, 1, 0}

e)

E) 0

74.

Наследование - это:

a)

A)  создание производного класса на базе одного или нескольких классов

b)

B) перекрытие виртуальной функции-члена базового класса одноимённой функцией производного класса

c)

C) перекрытие невиртуальной функции-члена базового класса одноимённой функцией производного класса

d)

D) создание нескольких производных классов на основе всегда только одного базового класса

e)

E) описание внутри класса другого класса с ключевым словом friend

75.

Какое из определений класса X, производного от классов A, B, C, является правильным:

a)

A) class public X: A, B, C { };

b)

B) class X( A, B, C ) { };

c)

C) class A, B, C: X { };

d)

D) class X derived from A, B, C { };

e)

E)  class X: A, B, C { };

76.

Укажите правильное утверждение:

a)

A) если класс X порождён от классов A и B, то X называется базовым классом, а A и B - производными

b)

B) если в объявлении производного класса X перед именем базового класса A стоит public, то все члены класса A будут открытыми в классе X

c)

C) если в объявлении производного класса X перед именем базового класса A не стоит public, то по умолчанию все члены класса A будут открытыми в классе X

d)

D)  если в объявлении производного класса X перед именем базового класса A стоит public, то открытые члены класса A останутся открытыми в классе X

e)

E) если в объявлении производного класса X перед именем базового класса A не стоит public, то только закрытые члены класса A будут закрытыми в классе X

77.

Даны определения четырёх классов, содержащие одну ошибку

class A { int a; public: void f( void ) { a = 0; } };

class B { public: int b; };

class C { public: void g( void ) { cout << "это функция g из класса C"; } };

class X: public A, public B, public C { public: X( void ) { a = 1; b = 1; g( ); } };

укажите верное утверждение, содержащее объяснение ошибки:

a)

A) класс X является производным от более чем одного базового класса

b)

B) в классе C зад ано определение функции-члена g, а должен быть прототип

c)

C) в конструкторе класса X имеется обращение к функции g базового класса C, которая не доступна

d)

D) в функции-члене f класса A не доступен элемент a из закрытой части этого класса

e)

E)  в классе X не доступен элемент a класса A

78.

Даны определения трёх классов и двух объектов

class A {

 int a;

public:

 A( void ) { a = 1; }

 int Geta( void ) { return a; } };

class B {

 int b;

public:

 B( void ) { b = 2; }

 int Getb( void ) { return b; } };

class X: public A, public B {

 int x;

public:

 X( int AX ) { x = Geta( )*AX + Getb( )*AX; }

 int Getx( void ) { return x; }

} Obj1( 5 ), Obj2( 4 );

каковы будут значения обращений к функциям Obj1.Getx( ) и Obj2.Getx( ):

a)

A) 12 и 15

b)

B) 5 и 8

c)

C) 5 и 4

d)

D) 12 и 12

e)

E)  15 и 12

79.

Даны определения двух классов и трёх объектов

class A {

 int a;

public:

 A( void ) { a = 5; }

 int Geta( void ) { return a; } };

class X: public A {

 int x;

public:

 X( int AX ) { x = Geta( )*AX - 4*AX; }

 int Getx( void ) { return x; }

} Obj1( 7 ), Obj2( 4 ), Obj3( -2 );

каковы будут значения обращений к функциям Obj1.Getx( ), Obj2.Getx( ) и Obj3.Getx( ):

a)

A) 7, 4, 8

b)

B)  7, 4, -2

c)

C) 7, 20, 8

d)

D) 7, 4, 2

e)

E) 35, 20, -10

80.

Даны определения трёх классов и двух объектов

class A {

 int a;

public:

 A( void ) { a = 1; }

 int Geta( void ) { return a; } };

class B: public A {

 int b;

public:

 B( void ) { b = -1; }

 int Getb( void ) { return b + 2 * Geta( ); } };

class X: public B {

 int x;

public:

 X( int AX ) { x = ( Geta( ) - AX ) * ( Getb( ) - AX ); }

 int Getx( void ) { return x; }

} Obj1( 5 ), Obj2( 4 );

каковы будут значения обращений к функциям Obj1.Getx( ) и Obj2.Getx( ):

a)

A) 9 и 16

b)

B) 24 и 15

c)

C)  16 и 9

d)

D) 15 и 24

e)

E) ошибка: в конструкторе класса X имеется обращение к функции-члену класса A (Geta( )), но класс A не является базовым классом для X

81.

Укажите правильное утверждение:

a)

A)  производные объекты всегда разрешается присваивать их базовым объектам

b)

B) базовые объекты всегда разрешается присваивать их производным объектам

c)

C) указатель на производный класс всегда разрешается присваивать указателю на его базовый класс

d)

D) разрешается присваивание указателя на производный класс указателю на его базовый класс, если базовый класс закрыт

e)

E) полиморфизм в объектно-ориентированном программировании всегда реализуется с помощью функций-операций

82.

Даны определения трёх классов, трёх объектов и трёх указателей на эти классы

class A {

public:

 A( ) { ... }

} ObjA, *pObjA;

class B {

public:

 B( ) { ... }

} ObjB, *pObjB;

class X: public A, B {

public:

 X( ) { ... }

} ObjX, *pObjX;

тогда одно из присваиваний вызовет сообщение компилятора об ошибке:

a)

A) ObjX = X( ObjA );

b)

B) ObjA = ObjX;

c)

C) pObjA = pObjX;

d)

E) pObjX = ( X * ) pObjA;

e)

G)  pObjB = pObjX;,,

83.

Даны определения трёх классов, трёх объектов и трёх указателей на эти классы

class A {

public:

 A( ) { ... }

} ObjA, *pObjA;

class B {

public:

 B( ) { ... }

} ObjB, *pObjB;

class X: public A, B {

public:

 X( ) { ... }

 X( B  ) { ... }

} ObjX, *pObjX;

тогда одно из присваиваний будет верным, а остальные - нет:

a)

A) ObjX = X( ObjA );

b)

B) pObjX = pObjA;

c)

C) pObjX = ( X * ) pObjA;

d)

D) pObjX = pObjB;

e)

G)  ObjX = X( ObjB );

84.

Дан фрагмент программы

struct A {

 int a, b;

 A( void ) { a = b = 1; }

 A( int a1, int b1 ) { a = a1; b = b1; }

} ObjA( 10, 20 );

struct B: public A {

 int b;

 B( void ) { b = -1; }

 B( int b1 ): A( b1 + 1, b1 + 2 ) { b = b1; }

 B operator =( A  ObjA ) { a = ObjA.a; A::b = ObjA.b; return *this; }

 B operator =( B  ObjB )

 { a = ObjB.a; A::b = ObjB.A::b; b = ObjB.b; return *this; }

} ObjB1( 5 ), ObjB2;

ObjB2 = ObjA;

ObjA = ObjB1;

каковы будут значения объектов ObjA, ObjB1, ObjB2 в результате его выполнения

a)

A) {a = 10, b = 20} {a = 6, A::b = 7, b = 5} {a = 10, A::b = 20, b = -1}

b)

B) {a = 6, b = 7} {a = 6, A::b = 7, b = 5} {a = 1, A::b = 1, b = -1}

c)

C)  {a = 6, b = 7} {a = 6, A::b = 7, b = 5} {a = 10, A::b = 20, b = -1}

d)

D) {a = 6, b = 7} {a = 1, A::b = 1, b = 5} {a = 10, A::b = 20, b = -1}

e)

E) {a = 1, b = 1} {a = 1, A::b = 1, b = 5} {a = 10, A::b = 20, b = -1}

85.

Дан фрагмент программы

struct A {

 int a;

 A( void ) { a = 1; }

 A( int a1 ) { a = a1; }

} ObjA( 4 );

struct B: public A {

 int a, b;

 B( void ) { a = b = -1; }

 B( int a1, int b1 ): A( a1 * 2 ) { a = a1; b = b1; }

 B operator =( A  ObjA ) { A::a = ObjA.a; return *this; }

 B operator =( B  ObjB )

 { A::a = ObjB.A::a; a = ObjB.a; b = ObjB.b; return *this; }

} ObjB1( 5, 20 ), ObjB2;

ObjB2 = ObjA;

ObjA = ObjB1;

каковы будут значения объектов ObjA, ObjB1, ObjB2 в результате его выполнения:

a)

A) {a = 4} {A::a = 10, a = 5, b = 20} {A::a = 4, a = -1, b = -1}

b)

B) {a = 10} {A::a = 10, a = 5, b = 20} {A::a = 1, a = -1, b = -1}

c)

C)  {a = 10} {A::a = 10, a = 5, b = 20} {A::a = 4, a = -1, b = -1}

d)

D) {a = 1} {A::a = 1, a = 5, b = 20} {A::a = 4, a = 1, b = 1}

e)

E) {a = -1} {A::a = -1, a = 5, b = 20} {A::a = 4, a = -1, b = -1}

86.

Дан фрагмент программы

struct A {

 int a;

 A( void ) { a = 1; }

 A( int a1 ) { a = a1; }

} *pObjA = new A( 7 );

struct B: public A {

 int a, b;

 B( void ) { a = b = -2; }

 B( int a1, int b1 ): A( a1 * 2 ) { a = a1; b = b1; }

 B operator =( A  ObjA ) { A::a = ObjA.a; return *this; }

 B operator =( B  ObjB )

 { A::a = ObjB.A::a; a = ObjB.a; b = ObjB.b; return *this; }

} *pObjB1 = new B( 3, 14 ), ObjB2;

pObjA = pObjB1;

ObjB2 = *pObjA;

каковы будут значения объектов pObjA, pObjB1, ObjB2 в результате его выполнения:

a)

A) {a = 7} {A::a = 6, a = 3, b = 14} {A::a = 7, a = -2, b = -2}

b)

B)  {a = 6} {A::a = 6, a = 3, b = 14} {A::a = 6, a = -2, b = -2}

c)

C) {a = 6} {A::a = 6, a = 3, b = 14} {A::a = 1, a = -2, b = -2}

d)

D) {a = 6} {A::a = 6, a = 3, b = 14} {A::a = 1, a = 6, b = -2}

e)

E) {a = -2} {A::a = -2, a = 3, b = 14} {A::a = -2, a = -2, b = -2}

87.

Дан фрагмент программы

struct A {

 int a;

 A( void ) { a = 1; }

 A( int a1 ) { a = a1; }

} *pObjA = new A( 5 );

struct B: public A {

 int a;

 B( void ) { a = 0; }

 B( int a1, int a2 ): A( a1 ) { a = a2; }

 B operator =( A  ObjA ) { A::a = ObjA.a; return *this; }

 B operator =( B  ObjB )

 { A::a = ObjB.A::a; a = ObjB.a; return *this; }

} *pObjB1 = new B( 3, 14 ), ObjB2( 2, 82 );

pObjA = pObjB1;

*pObjA = ObjB2;

ObjB2 = *pObjA;

каковы будут значения объектов pObjA, pObjB1, ObjB2 в результате его выполнения:

a)

A)  {a = 2} {A::a = 3, a = 14} {A::a = 2, a = 82}

b)

B) {a = 3} {A::a = 3, a = 14} {A::a = 3, a = 82}

c)

C) {a = 5} {A::a = 3, a = 14} {A::a = 5, a = 82}

d)

D) {a = 1} {A::a = 3, a = 0} {A::a = 1, a = 82}

e)

E) ошибка: в последней инструкции неуказателю присваивается указатель

88.

При заданных определениях трёх классов и трёх объектов

class A { int p; public: int q; } ObjA;

class B { public: int r; } ObjB;

class X: public A, B { int s; public: int t; } ObjX;

какая инструкция содержит ошибку доступа к элементу класса:

a)

A) ObjA.q = 2;

b)

B) ObjX.q = ObjA.q + 3;

c)

C)  ObjX.t = ObjX.r + ObjB.r;

d)

D) ObjA.q = ObjX.q + 5 + ObjB.r;

e)

E) ObjB.r = 7;

89.

При заданных определениях трёх классов и трёх указателей на класс

class A { int p; public: int f( void ) { ... } } *pObjA;

class B { public: int r; } *pObjB;

class X: public A, B { int s; public: int h( void ) { ... } } *pObjX;

какая инструкция является безошибочной по доступу к элементу класса:

a)

A) pObjA -> p + pObjA -> f( );

b)

B) pObjA -> f( ) + pObjX -> s + pObjB -> r;

c)

C) pObjB -> r + pObjX -> p;

d)

D)  pObjX -> h( ) + pObjX -> f( );

e)

E) pObjX -> s + pObjA -> p;

90.

При заданных определениях трёх классов и трёх указателей на класс

class A { int p; public: int f( void ) { ... } } *pObjA;

class B { public: int g( void ) { ... } } *pObjB;

class X: public A, B { int s; public: int h( void ) { ... } } *pObjX;

какая инструкция содержит ошибку доступа к элементу класса:

a)

A) pObjA -> f( );

b)

B) pObjX -> f( ) + pObjA -> f( ) + 4;

c)

C)  pObjX -> h( ) + pObjX -> g( );

d)

D) pObjA -> f( ) + pObjB -> g( );

e)

E) pObjB -> g( );

91.

При заданных определениях двух классов и трёх объектов

class A { int a; public: int b; } ObjA;

class B: public A { int b; public: int c; } ObjB1, ObjB2;

какая инструкция содержит ошибку доступа к элементу класса:

a)

A) ObjA.b = 11;

b)

B)  ObjB1.b = ObjA.b + 23;

c)

C) ObjA.c = ObjB2.A::b - 9;

d)

D) ObjB1.c = ObjB2.b - 16;

e)

E) ObjB1.c = ObjA.b + ObjB2.c;

92.

Дано несколько объявлений

enum Bool { False, True } Flag;

struct TPoint { double x, y; } Point;

float Vect[12];

int K;

float S;

class A { public: void f( float, Bool, char * ); } ObjA;

class B: public A { public: void f( int, float [ ], TPoint, A ); } ObjB;

тогда одно из обращений к функции-члену класса содержит ошибку:

a)

A)  ObjB.f( 0.56, Flag, "Василий" );

b)

B) ObjB.f( K, Vect, Point, ObjA );

c)

C) ObjB.f( 12, Vect, Point, ObjB );

d)

D) ObjA.f( 2.8, Flag, "Степан" );

e)

E) ObjB.A::f( S, True, "Кондратий" );

93.

Дано несколько объявлений

enum Bool { False, True } Flag;

struct TPoint { double x, y; } Point;

float Vect[12];

int K;

float S;

class A { public: void f( float, Bool, char * ); } ObjA;

class B: public A { public: void f( int, float [ ], TPoint, A ); } ObjB;

тогда одно из обращений к функции-члену является безошибочным:

a)

A)  ObjB.A::f( 3.1, False, "Емельян" );

b)

B) ObjA.f( 75.4, Flag, '!' );

c)

C) ObjB.A::f( K, Vect, Point, ObjA );

d)

D) ObjB.f( 20, 9.8, Point, ObjA );

e)

E) ObjB.f( 30, Vect, 1.2, ObjA );

94.

Укажите правильное утверждение:

a)

A) виртуальная функция - это произвольная функция-член класса

b)

B)  виртуальная функция - это функция-член класса, перед заголовком которой указано слово virtual, либо она перекрывает одноимённую функцию в базовом классе, явно объявленную виртуальной

c)

C) виртуальная функция - это произвольная функция-друг класса

d)

D) виртуальная функция - это статически перекрытая функция-член производного класса

e)

H)  чисто виртуальной функцией называется виртуальная функция, в конце прототипа которой добавлен инициализатор = 0

95.

Укажите неправильное утверждение:

a)

A) при виртуализации функций адреса "своих" функций для каждого объекта берутся из таблицы виртуальных методов на стадии выполнения программы

b)

B)  произвольный деструктор любого класса является виртуальным

c)

C) статическое (раннее) связывание объектов со своими функциями не является виртуализацией этих функций

d)

D) конструкторы классов нельзя объявить виртуальными

e)

G)  чисто виртуальные функции невозможно определить в любом производном классе

96.

Какое из объявлений содержит ошибку:

a)

A) virtual void E( void );

b)

B) virtual F( void );

c)

C) virtual H( int ) = 0;

d)

D)  virtual int G = 0;

e)

E) virtual int I( int i ) { return ++i; }

97.

Дан фрагмент программы

class A { public:

 virtual void F( char * S ) { cout << " " << S; } } ObjA;

class B: public A { public:

 void F( char * S ) { cout << " Иван " << S; } } ObjB1, ObjB2;

void G( A  Obj, char * S ) { Obj.F( S ); }

int K = 1919;

switch ( K % 3 ) {

 case 0: G( ObjA, "Сусанин" ); break;

 case 1: G( ObjB1, "Телегин" ); break;

 default: G( ObjB2, "Болотников" ); }

в результате его выполнения на экран будет выведено:

a)

A) Иван Сусанин

b)

B) Сусанин

c)

C) Болотников

d)

D) Иван Телегин

e)

E)  Иван Болотников

98.

Дан фрагмент программы

class A { public:

 virtual void F( char * S ) { cout << " " << S; } } ObjA;

class B: public A { public:

 void F( char * S ) { cout << " мыс " << S; } } ObjB1, ObjB2;

void G( A  Obj, char * S ) { Obj.F( S ); }

int K = 1870;

switch ( K % 3 ) {

 case 0: G( ObjA, "Фидониси" ); break;

 case 1: G( ObjB1, "Калиакрия" ); break;

 default: G( ObjB2, "Корфу" ); }

в результате его выполнения на экран будет выведено:

a)

A) мыс Корфу

b)

B) Фидониси

c)

C) мыс Фидониси

d)

D) Калиакрия

e)

E)  мыс Калиакрия

99.

Дан фрагмент программы

class A { public:

 virtual void F( char * S ) { cout << " " << S; } } ObjA;

class B: public A { public:

 void F( char * S ) { cout << " бухта " << S; } } ObjB1, ObjB2;

void G( A  Obj, char * S ) { Obj.F( S ); }

int K = 1853;

switch ( K % 3 ) {

 case 0: G( ObjA, "Синоп" ); break;

 case 1: G( ObjB1, "Чесма" ); break;

 default: G( ObjB2, "Херсонес" ); }

в результате его выполнения на экран будет выведено:

a)

A) Херсонес

b)

B) бухта Чесма

c)

C) Синоп

d)

D)  бухта Херсонес

e)

E) бухта Синоп

100.

Дан фрагмент программы

class A { public:

 virtual void F( char * S ) { cout << " " << S; } } ObjA;

class B: public A { public:

 void F( char * S ) { cout << " пролив " << S; } } ObjB1, ObjB2;

void G( A  Obj, char * S ) { Obj.F( S ); }

int K = 1915;

switch ( K % 3 ) {

 case 0: G( ObjA, "Фермопилы" ); break;

 case 1: G( ObjB1, "Дарданеллы" ); break;

 default: G( ObjB2, "Босфор" ); }

в результате его выполнения на экран будет выведено:

a)

A) Дарданеллы

b)

B)  пролив Дарданеллы

c)

C) Фермопилы

d)

D) пролив Фермопилы

e)

E) пролив Дарданеллы пролив Босфор

101.

Дан фрагмент программы

class A { public:

 virtual void F( int K ) { cout << " " << K; } } ObjA;

class B: public A { public:

 void F( int K ) { cout << " Моонзунд " << K; } } ObjB1, ObjB2;

void G( A  Obj, int K ) { Obj.F( K ); }

int K = strcmp( "Turbo Pascal", "Turbo C" );

if ( K < 0 ) G( ObjA, 1905 ); // если op1 < op2, strcmp возвращает число < 0

else if ( K > 0 ) G( ObjB1, 1917 ); // если op1 > op2, strcmp возвращает число > 0

 else G( ObjB2, 1919 );

в результате его выполнения на экран будет выведено:

a)

A) 1917

b)

B) Моонзунд 1919

c)

C)  Моонзунд 1917

d)

D) 1919

e)

E) 1905

102.

Дан фрагмент программы

class A { public:

 virtual void F( int K ) { cout << " " << K; } } ObjA;

class B: public A { public:

 void F( int K ) { cout << " Измаил " << K; } } ObjB1, ObjB2;

void G( A  Obj, int K ) { Obj.F( K ); }

int K = strcmp( "Don Juan", "Don Kikhot" );

if ( K < 0 ) G( ObjB1, 1790 );

else if ( K > 0 ) G( ObjB2, 1895 );

 else G( ObjA, 1903 );

в результате его выполнения на экран будет выведено:

a)

A) 1790

b)

B) Измаил 1895

c)

C) 1895

d)

D)  Измаил 1790

e)

E) 1903

103.

Дан фрагмент программы

class A { public:

 virtual void F( int K ) { cout << " " << K; } } ObjA;

class B: public A { public:

 void F( int K ) { cout << " Нева " << K; } } ObjB1, ObjB2;

void G( A  Obj, int K ) { Obj.F( K ); }

int K = strcmp( "Siu", "Mogicane" );

if ( K < 0 ) G( ObjB1, 1242 );

else if ( K > 0 ) G( ObjB2, 1240 );

 else G( ObjA, 1237 );

в результате его выполнения на экран будет выведено:

a)

A) 1240

b)

B) 1237

c)

C)  Нева 1240

d)

D) Нева 1242

e)

E) Нева 1237

104.

Дан фрагмент программы

class A { public:

 virtual void F( int K ) { cout << " " << K; } } ObjA;

class B: public A { public:

 void F( int K ) { cout << " Угра " << K; } } ObjB1, ObjB2;

void G( A  Obj, int K ) { Obj.F( K ); }

int K = strcmp( "Danton", "Marat" );

 if ( K < 0 ) G( ObjB1, 1480 );

 else if ( K > 0 ) G( ObjB2, 1380 );

 else G( ObjA, 1223 );

в результате его выполнения на экран будет выведено:

a)

A) 1480

b)

B)  Угра 1480

c)

C) Угра 1380

d)

D) 1380

e)

E) 1223

105.

Дан фрагмент программы

class A { public:

 int F( int K ) { return G( K ); }

 virtual int G( int K ) { return K * K % 2; } } ObjA;

class B: public A { public:

 int G( int K ) { return K % 5; } } ObjB1, ObjB2;

int M[2] = {12, 14};

for ( int K = 0; K < 2; K++ )

 switch ( M[K] % 3 ) {

 case 0: cout << " " << ObjA.F( 1 ); break;

 case 1: cout << " " << ObjB1.F( 2 ); break;

 default: cout << " " << ObjB2.F( 8 ); }

в результате его выполнения на экран будет выведено:

a)

A)  1 3

b)

B) 1 1

c)

C) 1 2

d)

D) 1 0

e)

E) 3 1

106.

Дан фрагмент программы

class A { public:

 int F( int K ) { return G( K ); }

 virtual int G( int K ) { return K * K % 2; } } ObjA;

class B: public A { public:

 int G( int K ) { return K % 5; } } ObjB1, ObjB2;

int M[2] = {11, 10};

for ( int K = 0; K < 2; K++ )

 switch ( M[K] % 3 ) {

 case 0: cout << " " << ObjA.F( 1 ); break;

 case 1: cout << " " << ObjB1.F( 3 ); break;

 default: cout << " " << ObjB2.F( 7 ); }

в результате его выполнения на экран будет выведено:

a)

A) 1 2

b)

B) 3 2

c)

C) 2 1

d)

D)  2 3

e)

E) 1 1

107.

Дан фрагмент программы

class A { public:

 int F( int K ) { return G( K ); }

 virtual int G( int K ) { return K * K % 2; } } ObjA;

class B: public A { public:

 int G( int K ) { return K % 5; } } ObjB1, ObjB2;

int M[2] = {8, 9};

for ( int K = 0; K < 2; K++ )

 switch ( M[K] % 3 ) {

 case 0: cout << " " << ObjA.F( 2 ); break;

 case 1: cout << " " << ObjB1.F( 4 ); break;

 default: cout << " " << ObjB2.F( 6 ); }

в результате его выполнения на экран будет выведено:

a)

A) 1 4

b)

B) 0 0

c)

C)  1 0

d)

D) 0 1

e)

E) 4 0

108.

Дан фрагмент программы

class A { public:

 int F( int K ) { return G( K ); }

 virtual int G( int K ) { return K * K % 2; } } ObjA;

class B: public A { public:

 int G( int K ) { return K % 5; } } ObjB1, ObjB2;

int M[2] = {8, 15};

for ( int K = 0; K < 2; K++ )

 switch ( M[K] % 3 ) {

 case 0: cout << " " << ObjA.F( 3 ); break;

 case 1: cout << " " << ObjB1.F( 5 ); break;

 default: cout << " " << ObjB2.F( 7 ); }

в результате его выполнения на экран будет выведено:

a)

A) 2 2

b)

B) 0 1

c)

C)  2 1

d)

D) 1 0

e)

E) 1 1

109.

Шаблон в объектно-ориентированном программировании это:

a)

A) программное средство ввода/вывода

b)

B) базовый класс

c)

C)  либо параметризованный класс, либо параметризованная функция

d)

D) абстрактный класс

e)

E) битовая маска

110.

Объявление шаблона имеет вид:

a)

A) sampler <список параметров> объявление класса или функции

b)

B) pattern (список параметров) объявление класса или функции

c)

C)  template <список параметров> объявление класса или функции

d)

D) template [список параметров] объявление класса или функции

e)

E) sample (список параметров) объявление класса или функции

111.

Список параметров шаблона включает:

a)

A) перечисление обычных имён переменных и констант

b)

B) перечисление обычных констант

c)

C) только элементы вида class T

d)

D)  элементы вида class T, обычные описания параметров, другие шаблоны

e)

E) только обычные описания параметров

112.

Дано объявление объекта класса

char Sym;

Lakonika <int, Sym, 60> Sparta;

какое определение шаблона класса ему соответствует:

a)

A) template <class A, char Sym, int C> class Lakonika { };

b)

B)  template <class TGorka, char * C, int K> class Lakonika { };

c)

C) template <class Lakonika, Sym, K> class Sparta { };

d)

D) template <class Sparta, “Flag”, 100> { };

e)

E) template <class Sparta, Sym, K> class { };

113.

Дано объявление объекта класса

float Eps;

Tavrida <int, '!', Eps> Kerch;

какое определение шаблона класса ему соответствует:

a)

A) template <class Tavrida, char C, float * E> class Kerch { };

b)

B) template <class, char C, float E> class Tavrida { };

c)

C) template <class Kerch, char C, float E> class Tavrida { };

d)

D)  template <class Mask, char C, float * E> class Tavrida { };

e)

E) template <class Kerch, char C, float * E> Tavrida { };

114.

Дано определение шаблона класса

template <class More, class Ozero, int Max, char Sym> class Ocean { };

какое объявление объекта класса ему соответствует:

a)

A) Ocean <float, float, int, char> Feodosiya;

b)

B) Odessa <int, int, 240, 'A'> Ocean;

c)

C) More <int *, int, 220, '?'> Kerch;

d)

D)  Ocean <int *, int, 220, '?'> Kerch;

e)

E) Ocean <int *K, int L, 200, '#'> Azov;

115.

Дано определение шаблона класса

template <class Planeta, class Sputnik, int Orbita, char Name> class Kosmos { };

какое объявление объекта класса ему соответствует:

a)

A)  Kosmos <int, float, 20, '@'> Luna;

b)

B) Planeta <long, double, 30, '%'> Luna;

c)

C) class Sputnik <int, float, 20, '+'> Luna;

d)

D) Kosmos <class, class, 40, '*'> Luna;

e)

E) Kosmos <10, 2.5, int, char> Evropa;

116.

Дано определение шаблона функции

template <class T> T max( T a, T b )

{ return ( a > b ) ? a: b; }

найти ошибочное объявление соответствующей шаблонной функции:

a)

A) int max( int, int );

b)

B) double max( double, double );

c)

C)  int max( char , char );

d)

D) char max( char , char * );

e)

E) Str max( Str, Str ); // в классе Str перегружена операция int Str::operator >( Str  A ) { ... }

117.

Дано определение шаблона функции

template <class T> T min( T a, T b )

{ return ( a < b ) ? a : b; }

найти безошибочное объявление соответствующей шаблонной функции:

a)

A) int min( double, double );

b)

B)  Str min( Str, Str ); // в классе Str перегружена операция int Str::operator <( Str  A ) { ... }

c)

C) int min( long, long );

d)

D) int min( char, char );

e)

E) long min( long , long );

118.

Даны определения шаблона класса и объектов

template <class Type, int I, int J> class Reka {

 Type M;

public:

 Reka( void ) { M = I + J; }

 Reka( Type T ) { M = T + I * J; } };

Reka <int, 4, 3> E1( 5 ), E2;

Reka <float, 2, 3> E3( 7.5 ), E4;

Reka <char, 2, 1> E5( 'A' );

каковы будут значения объектов E1, E2, E3, E4, E5 в результате инициализации:

a)

A)  {17} {7} {13.5} {5.0} {'C'}

b)

B) {12} {7} {7.5} {6.0} {'D'}

c)

C) {12} {7} {7.5} {5.0} {'A'}

d)

D) {17} {12} {13.5} {6.0} {'B'}

e)

E) {17} {7} {13.5} {3.0} {'\003'}

119.

Даны определения шаблона класса и объектов

template <class Top, class Bot, int K> class Flot {

 Top M;

 Bot N;

public:

 Flot( void ) { M = K; N = 2 * K; }

 Flot( Top T, Bot B ) { M = T + K; N = B * K; } };

Flot <int, int, 3> E1;

Flot <float, int, 2> E2( 7.5, 1 );

Flot <char, char, 1> E3( 'N', 'Z' );

каковы будут значения объектов E1, E2, E3 в результате инициализации:

a)

A)  {M = 3, N = 6} {M = 9.5, N = 2} {M = 'O', N = 'Z'}

b)

B) {M = 3, N = 2} {M = 9.5, N = 2} {M = 'Ю', N = 'В'}

c)

C) {M = 3, N = 3} {M = 15.0, N = 3} {M = 'P', N = 'B'}

d)

D) {M = 2, N = 2} {M = 9.5, N = 3} {M = 'N', N = 'A'}

e)

E) {M = 3, N = 6} {M = 15.0, N = 2} {M = 'O', N = 'Z'}

120.

Контейнер - это:

a)

A) класс с именем container

b)

B) шаблон абстрактного класса

c)

C) виртуальный класс

d)

D) объект, содержащий чисто виртуальные функции

e)

E)  объект, содержащий другие объекты

121.

При использовании контейнеров обычно:

a)

A) принимают сообщения от внешних устройств

b)

B) посылают сообщения между объектами

c)

C) собирают в них ненужные файлы

d)

D)  перебирают один за другим их элементы

e)

E) не применяют итераторы

122.

Итератор - это:

a)

A) любая переменная целого типа - счётчик цикла

b)

B)  класс, реализующий проход по элементам контейнера

c)

C) любая арифметическая переменная (целого или вещественного типа)

d)

D) индекс элемента массива

e)

E) специальная функция-член класса, например: begin( ) или end( )

123.

В стандартной библиотеке Си++ различают два основных типа контейнеров:

a)

A) абстрактные и виртуальные контейнеры

b)

B)  последовательности и ассоциативные контейнеры

c)

C) итераторы и ассоциации

d)

D) дружественные классы и списки

e)

E) ассоциативные массивы и множества

124.

В состав стандартных контейнеров-последовательностей входят:

a)

A) ассоциативные массивы, множества

b)

B) деревья, стеки, очереди, деки

c)

C) графы, вектора, списки

d)

D) списки, деревья, двоичные деревья, графы

e)

E)  вектора, списки, стеки, очереди, деки, очереди с приоритетом

125.

В состав стандартных ассоциативных контейнеров входят:

a)

A) ассоциативные деревья, стеки, очереди, деки

b)

B) ассоциативные графы, вектора, списки

c)

C) ассоциативные списки, деревья, двоичные деревья, графы

d)

D) ассоциативные вектора, списки, стеки, очереди, деки, очереди с приоритетом

e)

E)  ассоциативные массивы, множества

126.

Укажите неправильное утверждение:

a)

A) ассоциативный массив также часто называют отображением (map)

b)

B) ассоциативный массив также называют словарём (dictionary)

c)

C) ассоциативный массив состоит из пар (ключ, отображённое значение)

d)

D)  ассоциативный массив - это вектор-контейнер

e)

G)  дек - это очередь с двумя приоритетами

127.

Конструкторов в классе может быть:

a)

A) один и только один

b)

B)  неограниченное количество

c)

C) только один или ни одного

d)

D) только один или два

e)

E) один - виртуальный, а другой - не виртуальный

128.

Деструкторов в классе может быть:

a)

A) неограниченное количество

b)

B) один и только один

c)

C)  один или ни одного

d)

D) один или два

e)

E) один - виртуальный, а другой - не виртуальный