Г. Шилтд - Самоучитель C++ (PDF) (1114887), страница 72
Текст из файла (страница 72)
I* В этой программе рассчитывается наименьшее общее кратноеV#include <iostream>using namespace std;int main ( ){jint a, b, d, min;cout « "Введите два числа: ";cin » a » b;min = a > b ? b: a/-for (d=2; d<min; d4-+)if(«a%d)==0) && ((bld)=0)) break;if {d==rain) {cout « "Нет общего кратного\п";return 0;}cout « "Наименьшее общее кратное равно " « d « "\n";return 0;1.41. Этот комментарий, хотя и выглядит довольно странно, вполне допустим.1.52. ^include <iostream>^include <cstring>using namespace std;Приложение В. Ответы на вопросы и решения упражненийclass card {char title[80]; // заглавие книгиchar author[40]; // авторint number; // количество имеющихся экземпляровpublic:void store(char *t, char *name, int num);void show();void card::store(char *t, char *name, int num)istrcpy(title, t);strcpy(author, name);number = num;void card: :show().cout « "Заглавие: " « title « "\n";cout « "Автор: " « author « "\n";cout « "Количество экземпляров: " « number « "\n";int main()card bookl, book2, bookS;bookl.store("Dune", "Frank Herbert", 2);book2.store("The Foundation Trilogy", "Isaac Asimov", 2);books.store("The Rainbow", "D.
H. Lawrence", 1);bookl. show{) ;book2. show() ;bookS. show{) ;return 0;3. ^include <iostream>using namespace std;#define SIZE 100class q_type (int queue[SIZE]; // содержит очередьint head, tail; // индекс вершины и хвостаpublic:void i n i t ( ) ; // инициализацияvoid q(int num); // запоминание477478_Самоучительint deq(); // восстановление};// Инициализацияvoid q_type: :init (){head = tail = 0;// Помещение значения в очередьvoid q_type: :q{int num){if (tail + l-=head I I (tail + 1==SIZE && Ihead) ) (cout « "Очередь полна";return;if (tail==SIZE) tail = 0; // круговой циклqueue[tail] = num;)// Удаление значения из очередиint q_type: :deq(){if (head==tail) (cout « "Очередь пуста";return 0;if (head==SIZE) head = 0; // круговой циклreturn queue [head];int main ()q_type ql, q2;int i ;q2.init() ;for{i-l; i<=10; iql.q(i);q2.q(i * i);for(i=l; i<=10; icout « "Элемент из очереди 1: " « ql.deqO « "\ncout « "Элемент из очереди 2: " « q2 .
deq ( ) « "\nC++Приложение В. Ответы на вопросы it решения упражненийreturn 0;1.61. У функции f() нет прототипа.1.71. ^include <iostream>^include <cmath>using namespace std;// Перегрузка функции sroot() для integers, longs и doublesint sroot(int i);long sroot(long i) ;double sroot (double i);int main(}{cout «cout «cout «cout «cout «"Квадратный корень 90.34 равен: " « sroot (90.34);"\n";"Квадратный корень 90L равен: " « sroot(90L);"\n";"Квадратный корень 90 равен: " « sroot(90);return 0;// Возвращает квадратный корень целогоint sroot(int i){cout « "расчет корня целогсЛп";return (int) sqrt((double)i);// Возвращает квадратный корень длинного целогоlong sroot(long i){cout « "расчет корня длинного целого\п";return (long) sqrt((double)i);}// Возвращает квадратный корень вещественногоdouble sroot(double i){cout « "расчет корня вещественного\п";return sqrt(i);iА[79480_______Самоучитель C++2.
Функции atof(), atoi() и atol() нельзя перегружать потому, что они отличаются только типом возвращаемого значения. Перегрузка функции требует, чтобы было отличие либо в типе, либо в числе аргументов.3. // Перегрузка функции min()^include <iostream>#include <cctype>using namespace std;char min{char a, char b) ;int minfint a, int b} ;double min (double a, double b) ;int main(){cout « "Минимум равен: " « min ( ' x ' , 'a') « "\n";cout « "Минимум равен: " « rninflO, 20) « "\n";cout « "Минимум равен: " « min{0.2234, 99.2} « "\n";return 0;}// Минимум для charschar min (char a, char b){return tolower(a) < tolower(b) ? a: b;}// Минимум для intsint min (int a, int b){return a < b ? a: b;}\// Минимум для doublesdouble min (double a, double b){return a < b ? a: b;4.
^include <iostream>using namespace std;// Перегрузка функции sleep ( ) для вызова с целым либо со строкойvoid s l e e p f i n t n) ;void sleepfchar *n) ;// Измените эту величину// в соответствии с быстродействием вашего процессора^define DELAY 100000Приложение В. Ответы на вопросы и решения упражнений481int main {)cootsleep (3) ;cout « ' . ' ;sleep("2") ;cout « ' . ' ;return 0;// Функция sleep () с целым аргументомvoid sleep (int n){long i;for!; n; n — )for (1=0; i<DELAY;// Функция sleep () с аргументом типа char *void sleep (char *n){long i;int j;j = atoi (n) ;for(; j; j — )for(i-0; i<DELAY;Проверка усвоения материала главы 11. Полиморфизм — это механизм, посредством которого можно использоватьодин общий интерфейс для доступа к разным реализациям задачи.
Инкапсуляция обеспечивает защищенную связь инструкций и данных, с которымиработает программа. Доступ к таким скрытым частям программы может бытьзатруднен и этим предотвращается несанкционированный доступ к ним. Наследование — это процесс, посредством которого один объект может приобрести свойства другого. Наследование используется для поддержки иерархииклассов.2. Комментарии могут включаться в программу C++ либо как обычные комментарии в стиле С, либо как однострочные комментарии, характерные дляс++.3. #include <iostream>using namespace std;482_Самоучительint main ( }{int b, e, r;cout « "Введите основание степени: ";cin » b;cout « "Введите показатель степени : " ;cin » e;r = 1;for(; e; e — } r = r * b;cout « "Итог: " « r;return 0;4. ^include <iostream>#include <cstring>using namespace std;// Перегрузка функции реверса строкиvoid rev_str(char *s); // реверс строки по адресу svoid rev_str(char *in, char *out) ; // реверс строки и пересылка ее//по адресу outint main (){char sl[80], s 2 [ 8 0 J ;strcpy(sl, "Это проверка");rev_str (si, s2) ;cout « s2 « "\n";rev_str{Sl);cout « si « "\n";return 0;// Реверс строки и передача результата по адресу svoid rev strfchar *s)char temp [80] ;int i , j ;for(i=strlen(s)-l, j=0; i>=0; i~, j++)temp [ j ] = s [ i ] ;teinp[ j ] = '\0'; // нуль завершает строкуstrcpy(s, temp);C++Приложение В.
Ответы на^ вопросы и решения упражнений// Реверс строки и передача результата по адресу outvoid rev_str(char *in, char *out)int i, j;for(i=strlen(in}-l/ j=0; i>=0; i—, j++)out[ j ] = in[ i ];out[ j ] = r\0'; // нуль завершает строку5. ^include <iostream.h>int f(int a);int main(}{cout « f(10);return 0;int f(int a)гreturn a * 3.1416;6. Тип данных bool предназначен для хранения значений булева типа. Значениями булева типа являются только два значения — это true и false.ГЛАВА 2Повторение пройденного1.
^include <iostreara>#include <cstring>using namespace std;int min{>ichar s[80];cout « "Введите строку: ";cin » s;cout « "Длина строки равна: " « strlen(s) « "\n";return 0;483Самоучитель C++4842. #include <iostream>#include <cstring>using namespace std;class addr {char name[40J ;char street [40] ;char city[30] ;char state [3] ;char zip[10] ;publ i с :void store(char *n, char *s, char *c, char *t, char *z);void display () ;);void addr: : store (char *n, char *s, char *c, char *t, char *z)\strcpy(name, n) ;strcpy ( street , s ) ;strcpy {city, c) ;strcpy(state, t) ;strcpy (zip, z) ;void addr: : display (){cout « name « "\n";cout « street « "\n";cout « city « "\n";cout « state « "\n";cout « zip « "\n\n";int main ( )faddr a;a.store("J1. И. Иванов", "Невский проспект", "С.-Петербург","Рос", "46576"};a.
display {) ;return 0;3. ^include <iostream>using namespace std;int rotate (int i);long rotate (long i) ;ПриложениеintВ.Ответынавопросыирешенияупражнений_455main(}{int a;long b;a = 0x8000;b = 8;cout « rotate ( a ) ;cout « " \ n " ;cout « rotate ( b ) ;return 0;}int rotate (int i){int x;if (i & 0x8000} x = 1;else x = 0;i = i « 1;•i_L•1 = vЛ •еreturn i;>long rotateflong i){int x;if (i S 0x80000000) x = 1;else x = 0;i = i « 1;i += x;return i;4.
Целое i является закрытым для класса myclass, и к нему нет доступа изфункции main()Упражнения2.11. ^include <iostream>using namespace std;486 _Самоучительttdefine SIZE100class q_type {int queue[SIZE]; // содержит очередьint head, tail; // индексы вершины и хвостаpublic :q_type ( ) ; // конструкторvoid q{int num) ; // запоминаниеint deq(); // извлечение из памяти};// Конструкторq_type: :q_type()(head = tail = 0;// Постановка значения в очередьvoid q_type: :q{int num)iif {tail + l==head I I (tail + 1==SIZE && Ihead}cout « "Очередь полна";return;if (tail==SIZE) tail = 0; // круговой циклqueue [tail] = num;\II Выталкивание значения из очередиint q_type : : deq ( )iif (head==tail) {cout « "Очередь пуста";return 0;}head++;if (head==SIZE) head = 0; // круговой циклreturn queue [head] ;int main ( ){q_type ql, q2;int i;for{i=l; i<=10;ql.q(i) ;q2.q(i * i) ;C++Приложение В.
Ответы на вопросы и решения упражненийfor (i=l; i<=10; H-+) {cout « "Элемент из очереди 1: " « ql.deq() « "\n";cout « "Элемент из очереди 2: " « q2.deq() « "\n";}return 0;\2. II Имитация секундомера^include <iostream>^include <ctime>using namespace std;class stopwatch {double begin, end;public:stopwatch();-stopwatch();void start (};void stop () ;void show{) ;stopwatch::stopwatch(){.begin = end = 0.0;stopwatch::~stopwatch(){cout « "Удаление объекта stopwatch .,.";show();}void stopwatch::start(){begin = (double) clock () / CLOCKS_PER_SEC;Ivoid stopwatch::stop(){end = (double) clock(} / CLOCKS_PER_SEC;}void stopwatch::show(){cout « "Затраченное время: " « end — begin;cout « "\n";I487488Самоучитель C++int main (}stopwatch watch;long i;watch.start() ;for(i=0; K320000; i++) ; // время циклаwatch.stop();watch.show();return 0;}3.
У конструктора не может быть возвращаемого значения.2.2\. (I Динамическое выделение памяти для стека^include <iostream>^include <cstdlib>using namespace std;// Объявление класса stack для символовclass stack {char *stck; // содержит стекint tos; // индекс вершины стекаint size; // размер стекаpublic:stack(int s); // конструктор~stack(); // деструкторvoid push{char ch); // помещает в стек символchar pop(); // выталкивает из стека символ// Инициализация стекаstack::stack(int s)tcout « "Работа конструктора стека\п";tos - 0;stck = (char *) malloc(s);if (!stck) {cout « "Ошибка выделения памяти\п";exit{l);}size = s;,ПриложениеВ.Ответынавопросыирешенияупражнений_.stack: :~stack (}{free (stck) ;}// Помещение символа в стекvoid stack: :push(char ch){if (tos==size) {cout « "Стек полон \п";return;}stck[tos] = ch;tos++;*// Выталкивание символа из стекаchar stack:: pop (){if (tos=0) {cout « "Стек пуст \п";return 0; // возврат нуля при пустом стеке)tos — ;return stck [tos];iint main{){// образование двух, автоматически инициализируемых, стековstack sl(10) , s2(10) ;int i;si.