Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КРАТКИЙ ОБЗОР С.doc
Скачиваний:
1
Добавлен:
26.10.2018
Размер:
2.11 Mб
Скачать

4.8 Упражнения

1. (*1) Составьте следующие описания: функция с параметрами типа       указатель на символ и ссылка на целое, невозвращающая значения;       указатель на такую функцию; функция с параметром, имеющим тип       такого указателя; функция, возвращающая такой указатель. Напишите       определение функции, у которой параметр и возвращаемое значение       имеют тип такого указателя. Подсказка: используйте typedef. 2. (*1) Как понимать следующее описание? Где оно может пригодиться?       typedef int (rifii&) (int, int); 3. (*1.5) Напишите программу, подобную той, что выдает "Hello, world".       Она получает имя (name) как параметр командной строки и выдает       "Hello, name". Измените программу так, чтобы она получала       произвольное число имен и всем им выдавала свое приветствие:       "Hello, ...". 4. (1.5) Напишите программу, которая, беря из командной строки       произвольное число имен файлов, все эти файлы переписывает       один за другим в cout. Поскольку в программе происходит       конкатенация файлов, вы можете назвать ее cat от слова       concatenation - конкатенация). 5. (*2) Переведите небольшую программу с языка С на С++. Измените       заголовочные файлы так, чтобы они содержали описание всех       вызываемых функций и описание типов всех параметров. По возможности       все команды #define замените конструкциями enum, const или       inline. Удалите из файлов .c все описания внешних, а определения       функций приведите к виду, соответствующему С++. Вызовы malloc() и       free() замените операциями new и delete. Удалите ненужные операции       приведения. 6. (*2) Напишите функцию sort() ($$4.6.9), использующую более       эффективный алгоритм сортировки. 7. (*2) Посмотрите на определение структуры tnode в $$R.9.3. Напишите       функцию, заносящую новые слова в дерево узлов tnode. Напишите       функцию для вывода узлов дерева tnode. Напишите функцию,       которая производит такой вывод в алфавитном порядке.       Измените структуру tnode так, чтобы в ней содержался       только указатель на слово произвольной длины, которое размещается       с помощью new в свободной памяти. Измените функцию так, чтобы       она работала с новой структурой tnode. 8. (*1) Напишите функцию itoa(), которая использовалась в примере       из $$4.6.8. 9. (*2) Узнайте, какие стандартные заголовочные файлы есть в вашей       системе. Поройтесь в каталогах /usr/include или /usr/include/CC       (или в тех каталогах, где хранятся стандартные заголовочные       файлы вашей системы). Прочитайте любой показавшийся интересным       файл. 10. (*2) Напишите функцию, которая будет переворачивать двумерный       массив. (Первый элемент массива станет последним). 11. (*2) Напишите шифрующую программу, которая читает символы из       cin и пишет их в cout в зашифрованном виде. Можно использовать       следующий простой метод шифрации: для символа s зашифрованное       представление получается в результате операции s^key[i], где       key - массив символов, передаваемый в командной строке. Символы       из массива key используются в циклическом порядке, пока не будет       прочитан весь входной поток. Первоначальный текст получается       повторным применением той же операции с теми же элементами key.       Если массив key не задан (или задана пустая строка), шифрация не       происходит. 12. (*3) Напишите программу, которая помогает дешифрировать текст,       зашифрованный описанным выше способом, когда ключ (т.е. массив       key) неизвестен. Подсказка: см. D Kahn "The Codebreakers",       Macmillan, 1967, New York, стр. 207-213. 13. (*3) Напишите функцию обработки ошибок, первый параметр который       подобен форматирующей строке-параметру printf() и содержит форматы       %s, %c и %d. За ним может следовать произвольное количество       числовых параметров. Функцию printf() не используйте. Если смысл       формата %s и других форматов вам неизвестен, обратитесь к $$10.6.       Используйте <stdarg.h>. 14. (*1) Какое имя вы выбрали бы для типов указателей на функции,       которые определяются с помощью typedef? 15. (*2) Исследуйте разные программы, чтобы получить представление       о разных используемых на практике стилях именования. Как       используются заглавные буквы? Как используется подчерк? В каких       случаях используются такие имена, как i или x? 16. (*1) Какие ошибки содержатся в следующих макроопределениях?       #define PI = 3.141593;       #define MAX(a,b) a>b?a:b       #define fac(a) (a)*fac((a)-1) 17. (*3) Напишите макропроцессор с простыми возможностями, как у       препроцессора С. Текст читайте из cin, а результат записывайте       в cout. Вначале реализуйте макроопределения без параметров.       Подсказка: в программе калькулятора есть таблица имен и       синтаксический анализатор, которыми можно воспользоваться. 18. (*2) Напишите программу, извлекающую квадратный корень из двух (2)       с помощью стандартной функции sqrt(), но не включайте в программу       <math.h>. Сделайте это упражнение с помощью функции sqrt()       на Фортране. 19. (*2) Реализуйте функцию print() из $$4.6.7.