Упражнения

  1. (*1) Напишите следующие описания: функция, получающая параметр типа указатель на символ и ссылку на целое и не возвращающая значения; указатель на такую функцию; функция, получающая такой указатель в качестве параметра; и функция, возвращающая такой указатель. Напишите определение функции, которая получает такой указатель как параметр и возвращает свой параметр как возвращаемое значение. Подсказка: используйте typedef.
  2. (*1) Что это значит? Для чего это может использоваться?
3. typedef int (rifii&) (int, int);
  1. (*1.5) Напишите программу вроде "Hello, world", которая получает имя как параметр командной строки и печатает "Hello, имя". Модифицируйте эту программу так, чтобы она получала получала любое количество имен и говорила hello каждому из них.
  2. (*1.5) Напишите программу, которая читает произвольное число файлов, имена которых задаются как аргументы командной стоки, и пишет их один за другим в cout. Поскольку эта программа при выдаче конкатенирует свои параметры, вы можете назвать ее cat (кошка).
  3. (*2) Преобразуйте небольшую C программу в C++. Измените заголовочные файлы так, чтобы описывать все вызываемые функции и описывать тип каждого параметра. Замените, где возможно, директивы #define на enum и const или inline. Уберите из.c файлов описания extern и преобразуйте определения функций к синтаксису C++. Замените вызовы malloc() и free() на new и delete. Уберите необязательные приведения типа.
  4. (*2) Реализуйте sort() (#4.6.7) используя эффективный алгоритм сортировки.
  5. (*2) Посмотрите на определение struct tnode в с.#8.5. Напишите функцию для введения новых слов в дерево узлов tnode. Напишите функцию для вывода дерева узлов tnode. Напишите функцию для вывода дерева узлов tnode со словами в алфавитном порядке. Модифицируйте tnode так, чтобы в нем хранился (только) указатель на слово произвольной длины, помещенное с помощью new в свободную память. Модифицируйте функции для использования нового определения tnode.
  6. (*2) Напишите "модуль", реализующий стек. Файл.h должен описывать функции push(), pop() и любые другие удобные функции (только). Файл.c определяет функции и данные, необходимые для хранения стека.
  7. (*2) Узнайте, какие у вас есть стандартные заголовочные файлы. Составьте список файлов, находящихся в /usr/include и /usr/include/CC (или там, где хранятся стандартные заголовочные файлы в вашей системе). Прочитайте все, что покажется интересным.
  8. (*2) Напишите функцию для обращения двумерного массива.
  9. (*2) Напишите шифрующую программу, которая читает из cin и пишет в cout закодированные символы. Вы можете воспользоваться следующей простой схемой шифровки: Зашифрованная форма символа c - это c^key[i], где key (ключ) - строка, которая передается как параметр командной строки. Программа использует символы из key циклически, пока не будет считан весь ввод. Перекодирование зашифрованного текста с той же строкой key дает исходный текст. Если не передается никакого ключа (или передается пустая строка), то никакого кодирования не делается.
  10. (*3) Напишите программу, которая поможет расшифровывать тексты, зашифрованные описанным выше способом, не зная ключа. Подсказка: David Kahn: The Code-Breakers, Macmillan, 1967, New York, pp 207-213.
  11. (*3) Напишите функцию error, которая получает форматную строку в стиле printf, которая содержит директивы %s, %c и %d, и произвольное количество параметров. Не используйте printf(). Если вы не знаете значения %s и т.д., посмотрите #8.2.4. Используйте.
  12. (*1) Как вы будете выбирать имя для указателя на тип функции, определенный с помощью typedef?
  13. (*2) Посмотрите какие-нибудь программы, чтобы создать представление о разнообразии стилей и имен, использующихся на практике. Как используются буквы в верхнем регистре? Как используется подчерк? Где используются короткие имена вроде x и y?
  14. (*1) Что неправильно в следующих макроопределениях?
18. #define PI = 3.14159319. #define MAX(a,b) a>b?a:b20. #define fac(a) (a)*fac((a)-1)
  1. (*3) Напишите макропроцессор, который определяет и расширяет простые макросы (как C препроцессор). Читайте из cin и пишите в cout. Сначала не пытайтесь обрабатывать макросы с параметрами. Подсказка: В настольном калькуляторе (#3.1) есть таблица имен и лексический анализатор, которые вы можете модифицировать.

*1 или линкер. (прим. перев.)

* 2C разработан так, чтобы в большинстве случаев позволять осуществлять неявную компоновку. Применение C, однако, возросло неимоверно, поэтому случаи, когда можно использовать неявную линковку, сейчас составляют незначительное меньшинство. (прим. автора)

*3 Легко изменить один компоновщик, но сделав это и написав программу, которая зависит от усовершенствований, как вы будете переносить эту программу в другое место? (прим. автора)

*4 Мышь - это указывающее устройство по крайней мере с одной кнопкой. Моя мышь красная, круглая и с тремя кнопками. (прим. автора)

*5 часто называемые также макроопределениями. (прим. перев.)


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: