И.А. Волкова, А.А. Вылиток, Л.Е. Карпов - Сборник задач и упражнений по языку Си++
Описание файла
PDF-файл из архива "И.А. Волкова, А.А. Вылиток, Л.Е. Карпов - Сборник задач и упражнений по языку Си++", который расположен в категории "". Всё это находится в предмете "практика расчётов на пэвм" из 3 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст из PDF
МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТИМЕНИ М.В. ЛОМОНОСОВАФакультетвычислительной математикии кибернетикиИ. А. Волкова, А. А. Вылиток, Л. Е. КарповСборникзадач и упражненийпо языку Си++( учебное пособие для студентов II курса )Москва – 2013УДК 004.43(075.8)ББК 32.973-018.1я73В67Печатается по решению Редакционно-издательского советафакультета вычислительной математики и кибернетикиМГУ имени М.В. ЛомоносоваРецензенты:И.В. Машечкин — д.ф.-м.н.;С.Ю. Соловьев — д.ф.-м.н.Волкова И. А., Вылиток А.А., Карпов Л.
Е.В 67 Сборник задач и упражнений по языку Си++: Учебное пособие длястудентов II курса. — М.: Издательский отдел факультета ВМК МГУ имени М. В. Ломоносова (лицензия ИД № 05899 от 24.09.2001 г.); МАКСПресс, 2013 — 64 с.ISBN 978-5-317-04595-1B сборнике представлены задачи и упражнения по языку Си++, рекомендуемыестудентам 2 курса для подготовки к коллоквиуму по основам объектноориентированного программирования в рамках курса «Системы программирования».Рассматриваемая версия языка Си++ соответствует стандарту ISO/IEC (1998).В сборнике собраны задачи на использование основных механизмов объектноориентированных языков программирования: инкапсуляции, наследования, полиморфизма. Значительная часть задач предлагалась студентам в письменных проверочныхработах в 2008—2013 гг.Для студентов факультета ВМК в поддержку основного лекционного курса «Системы программирования», а также для преподавателей, ведущих практические занятияпо этому курсу.Авторы выражают благодарность преподавателям кафедры алгоритмических языков за участие в обсуждении и составлении задач.УДК 004.43(075.8)ББК 32.973-018.1я73Учебное изданиеВОЛКОВА Ирина АнатольевнаВЫЛИТОК Алексей АлександровичКАРПОВ Леонид ЕвгеньевичСБОРНИК ЗАДАЧ И УПРАЖНЕНИЙ ПО ЯЗЫКУ СИ++Учебное пособие для студентов II курса19992, ГСП-2, Москва, Ленинские Горы, МГУ им.
М.В. Ломоносова, 2-й учебный корпусISBN 978-5-317-04595-1 Факультет ВМК МГУ имени М.В.Ломоносова, 2013 Волкова И.А., Вылиток А.А., Карпов Л.Е., 20132I. Задачи и упражнения1.Абстрактные типы данных (АТД). Классы.Конструкторы и деструкторы1.1. Есть ли ошибки в приведенном фрагменте программы? Если есть, то объясните,в чем они заключаются.1 Как изменить описание класса А, не вводя новые методы и неменяя f(), чтобы в f() не было ошибок? Что будет напечатано в результате работыфункции f()?class A {int a, b;public:A (A & x) {a = x.a;b = x.b;cout << 1;}A (int a) {this -> a = a;b = a;cout << 2;}};void f () {A x (1);A y;A z = A (2.5, 4);A s = 6;A w = z;x = z = w;}1.2. Описать конструктор для некоторого класса А таким образом, чтобы были выполнены следующие условия:а) это единственный явно описанный конструктор класса А,б) справедливы следующие описания объектов класса А:AAAAa;b(1);c(1, 2);d('1’, 1);1.3. Если есть ошибки в приведенном фрагменте программы, то объясните, в чемони заключаются, и вычеркните ошибочные конструкции.Что будет выдано в стандартный канал вывода при вызове функции main ()?a)1class X {int i;double t;X(int k) {i = k;t = 0;cout << 1;}Везде, где это необходимо, предполагается наличие #include<iostream> и using namespace std или#include<cstdio>.3public:X(int k, double r = 0) {i = k;t = r;cout << 2;}X & operator= (X & a) {i = a.i;t = a.t;cout << 3;return * this;}X(const X & a) {i = a.i;t = a.t;cout << 4;}};int main() {X a;X b(1);X c (2, 3.5);X d = c;X e (6.5, 3);c = d = e;return 0;}b) class X {int i;double t;X( ) {i = 0;t = 1.0;cout << 1;}public:X(int k = 0, double r = 1.5) {i = k;t = r;cout << 2;}X(const X & a) {i = a.i;t = a.t;cout << 3;}};int main() {X a;X b(1);X c (1.5, 2);X d = b;X e = 3;b = c = e;return 0;}41.4.
Описать класс А таким образом, чтобы все конструкции функции main () быливерными, а на экран выдалось 100 300.int main () {A a1 (5), a2 = 3;a1 *= 10;a2 *=a1 *= 2;cout << a1.get() << a2.get() << endl;return 0;}1.5. Описать класс B таким образом, чтобы все конструкции функции main быливерными, а на экран выдалось 10 20 30.int main () {B b1, b2 = b1, b3 (b2);cout << b1.get() << b2.get() <<return 0;}b3.get () << endl;1.6. Описать класс C таким образом, чтобы все конструкции функции main быливерными, а на экран выдалось 14 10 48.int main () {C c1 (7), c2 = 5, c3 (c1 + c2);cout << c1.get() << c2.get() << c3.get () << endl;return 0;}Описать класс А так, чтобы:- все конструкции функции main были верными,- явно в классе А можно описать не более одного конструктора,- на экран выдалось 15 60 7.Нельзя использовать исключения и любые функции досрочного завершения программы.1.7.int main () {A a1(5), a2 = 4, а3;a2 *= a1 *= 3;cout << a1.get( ) << ' ' << a2.get() << ' ' <<return 0;}a3.get( ) << endl;Описать класс В так, чтобы:- все конструкции функции main были верными,- класс В содержал только один явно описанный конструктор,- на экран выдалось 17 11 6.Нельзя использовать исключения и любые функции досрочного завершения программы.1.8.int main () {B b1 (1), b2(2,3), b3 (b1);b1 += b2 += b3;cout << b1.get() << ' ' << b2.get() << ' ' << b3.get () << endl;return 0;}5Описать класс С так, чтобы:- в main ошибочным было только описание объекта с2,- класс C содержал только один явно описанный конструктор,- после удаления описания с2 на экран выдалось 14 56.Нельзя использовать исключения и любые функции досрочного завершения программы.1.9.int main () {C c1(7), c2 = 5, c3(c1 + c1);cout << с1.get ( ) << ' ' << с3.get ( ) << endl;return 0;}1.10.
Что напечатает следующая программа?class I {int i;public:I() : i(9) { cout << "sun" <<endl; }I(int a) : i(a) { cout << "venus " << i << endl; }I(const I & other) : i(other.i) { cout << "earth " << i << endl; }~I() { cout << "moon" << endl; }int Get() { return i; }void operator+= (const I & op) { i+=op.i; }};void f(I & x, I y) {y += 1000;x += y;}int main() {I i1;I i2(20);i2 += 400;f(i1, i2);cout << i1.Get() << i2.Get() << endl;return 0;}1.11. Что напечатает следующая программа?class I {int i;public:I() : i(6) { cout << "owl" << endl; }I(int a) : i(a) { cout << "sheep " << i << endl; }I(const I & other) : i(other.i) { cout << "horse " << i << endl; }~I() { cout << "wolf" << endl; }int Get() { return i; }void operator*=(const I & op) { i*=op.i; }};void f(I x, I & y) {x *= 1;y *= x;}6int main() {I i1;I i2(3);i1 *= 7;f(i1, i2);cout << i1.Get() << ' ' << i2.Get()<< endl;return 0;}1.12.
Что напечатает следующая программа?class I {int i;public:I() : i(5) { cout << "fist" << endl; }I(int a) : i(a) { cout << "lance " << i << endl; }I(const I & other) : i(other.i) { cout << "dagger " << i << endl; }~I() { cout << "pistole" << endl; }int Get() { return i; }void operator+=(const I & op) { i+=op.i; }};void f(I & x, I y) {y += 1000;x += y;}int main() {I i1;I i2(30);i2 += 700;f(i1, i2);cout << i1.Get() << ' ' << i2.Get() << endl;return 0;}1.13. Даны описания структуры, переменной и функции:struct mystr {int a, b;};int i = sizeof(mystr);int f(mystr s) {return 0;}Дополните описание структуры mystr (не изменяя описание функции f ) так, чтобытолько описание f стало ошибочным.1.14.
Опишите структуру с именем smartstr, удовлетворяющую двум условиям:(1) можно создать объект типа smartstr;(2) нельзя создать массив элементов типа smartstr в динамической памяти.71.15. Какие конструкторы и деструкторы и в каком порядке будут выполняться приработе следующего фрагмента программы:а)class A {};class B : public A {};class C : public B {};int main(){C c;A a = c;struct D {B b;D(): b(5){}} d;}b)class A {};class B : public A {};class C : public B {};int main(){class D {B b;A a;public:D (): a(b){ }} d;C c;}c)class A {};class B {};class C : public A, public B {};int main(){C c;class D {C c;B b;public: D(): b(c){}} d;}1.16. Что будет выдано на печать при работе следующей программы?struct S {int x;S (int n) { x = n; printf (" Cons"); }S (const S & a) { x = a.x;printf (" Copy~S ( ) { printf ("Des"); }};S f( S y ) {y = S(3);return y;}int main () {S s (1);f (s);printf ("%dreturn 0;}",s.x);8"); }1.17.
Что будет выдано на печать при работе следующей программы?struct S {int x;S(int n) { x = n; printf(" Cons"); }S(const S & a) { x = a.x; printf(" Copy~S() { printf("Des"); }};S"); }f( S & y ) {y = S(3);return y;}int main () {S s(1);f (s);printf("%dreturn 0;}",s.x);1.18. Что будет выдано на печать при работе следующей программы?struct S {int x;S( int n ) { x = n; printf( " Cons" ); }S( const S & a ) { x = a.x;printf( " Copy~S( ) { printf( "Des" ); }};" ); }S & f( S y , S & z) {y = S (3);return z;}int main ( ) {S s(1);f( s, s );printf( "%dreturn 0;}",s.x );1.19.
Внести добавления в описания заданных методов (не меняя вывод на экран!)структур B и D так, чтобы все конструкции main () были правильными, а на печать выдалось 5535324242.struct B {float x;B (float a) {x = a;~B( ) { cout << 2; }};struct D : B {D( ) { cout << 3; }~D( ) { cout << 4; }};cout << 5; }9int main ( ) {B * p1 = new B (1),delete p1;delete [ ] p2;return 0;}* p2 = new D[2];1.20. Внести добавления в описания заданных методов (не меняя вывод на экран!)структур B и D так, чтобы все конструкции main () были правильными, а на печать выдалось 11163343.struct B {int x;B (int a) {x = a;~B () { cout << 3; }};cout << 1; }struct D : B {D (int d ) : B (d) { cout << 6; }~D () { cout << 4; }};int main () {B * p1 = new B [2],delete [ ] p1;delete p2;return 0;}* p2 = new D (1);1.21.