Чтение онлайн

на главную

Жанры

Программирование. Принципы и практика использования C++ Исправленное издание
Шрифт:

9. Добавьте формат текстового вывода к библиотеке графического интерфейса. Например, при выполнении вызова

Circle(Point(0,1),15)
в поток вывода должна выводиться строка
Circle(Point(0,1),15)
.

10. Используя текстовый интерфейс из упр. 9, напишите более качественный тест для библиотеки графического пользовательского интерфейса.

11. Оцените время выполнения суммирования в примере из раздела 26.6, где

m
— квадратная матрица с размерами 100, 10 000, 1 000 000 и 10 000 000. Используйте случайные значения из диапазона
[–10:10]
. Перепишите процедуру вычисления величины
v
, используя более эффективный (не
O(n2)
)
алгоритм, и сравните продолжительность его выполнения.

12. Напишите программу, генерирующую случайные числа с плавающей точкой, и отсортируйте их с помощью функции

std::sort
. Измерьте время, затраченное на сортировку 500 тысяч чисел типа double и 5 миллионов чисел типа
double
.

13. Повторите эксперимент из предыдущего упражнения, но со случайными строками, длина которых лежит в интервале

[0:100]
.

14. Повторите предыдущее упражнение, но на этот раз используйте контейнер

map
, а не
vector
, чтобы сортировать его не требовалось.

Послесловие

Как программисты мы мечтаем о прекрасных программах, которые бы просто работали и желательно с первой же попытки. Реальность иная: трудно сразу написать правильную программу и предотвратить внесение в нее ошибок по мере того, как вы (и ваши коллеги) станете ее улучшать. Тестирование, включая проектирование с учетом тестирования, — это главный способ, гарантирующий, что система в итоге действительно будет работать. Живя в высокотехнологичном мире, мы должны в конце рабочего дня с благодарностью вспомнить о тестировщиках (о которых часто забывают).

Глава 27

Язык программирования С

“С — это язык программирования

со строгим контролем типов и слабой проверкой”.

Деннис Ритчи (Dennis Ritchie)

Данная глава представляет собой краткий обзор языка программирования С и его стандартной библиотеки с точки зрения человека, знающего язык С++. В ней перечислены свойства языка С++, которых нет в языке C, и приведены примеры того, как программистам на языке С обойтись без них. Рассмотрены различия между языками C и C++, а также вопросы их одновременного использования. Приведены примеры ввода-вывода, список операций, управление памятью, а также иллюстрации операций над строками.

27.1. Языки С и С++: братья

Язык программирования С был изобретен и реализован Деннисом Ритчи (Dennis Ritchie) из компании Bell Labs. Он изложен в книге The C Programming Language Брайана Кернигана (Brian Kernighan) и Денниса Ритчи (Dennis Ritchie) (в разговорной речи известной как “K&R”), которая, вероятно, является самым лучшим введением в язык С и одним из лучших учебников по программированию (см. раздел 22.2.5). Текст исходного определения языка С++ был редакцией определения языка С, написанного в 1980 году Деннисом Ритчи. После этого момента оба языка стали развиваться самостоятельно. Как и язык C++, язык C в настоящее время определен стандартом ISO.

Мы рассматриваем язык С в основном как подмножество языка С++. Следовательно, с точки зрения языка С++ проблемы описания языка С сводятся к двум вопросам.

• Описать те моменты, в которых язык С не является подмножеством языка C++.

• Описать те свойства языка С++, которых нет в языке C, и те возможности и приемы, с помощью которых этот недостаток можно компенсировать.

Исторически современный язык С++ и современный язык С являются “братьями”. Они оба являются наследниками “классического С”, диалекта языка С, описанного в первом издании книги Кернигана и Ритчи The C Programming Language, в который были добавлены присваивание структур и перечислений.

В настоящее время практически повсеместно используется версия C89 (описанная во втором издании книги K&R [12] ). Именно эту версию мы излагаем в данном разделе. Помимо этой версии, кое-где все еще по-прежнему используется классический С, и есть несколько примеров использования версии C99, но это не должно стать проблемой для читателей, если они знают языки C++ и C89.

Языки С и С++ являются детищами Исследовательского центра компьютерных наук компании Bell Labs (Computer Science Research Center of Bell Labs), МюррейХилл, штат Нью-Джерси (Murray Hill, New Jersey) (кстати, мой офис находился рядом с офисом Денниса Ритчи и Брайана Кернигана).

12

Перевод на русский язык: Керниган Б., Ритчи Д. Язык программирования C, 2-е изд. — М.: ИД Вильямс, 2006.

Оба языка в настоящее время определены и контролируются комитетами по стандартизации ISO. Для каждого языка разработано множество реализаций. Часто эти реализации поддерживают оба языка, причем желаемый язык устанавливается путем указания расширения исходного файла. По сравнению с другими языками, оба языка, С и С++, распространены на гораздо большем количестве платформ.

Оба языка были разработаны и в настоящее время интенсивно используются для решения сложных программистских задач. Перечислим некоторые из них.

• Ядра операционных систем.

Драйверы устройств.

• Встроенные системы.

• Компиляторы.

• Системы связи.

Между эквивалентными программами, написанными на языках С и С++, нет никакой разницы в производительности.

Как и язык C++, язык C очень широко используется. Взятые вместе, они образуют крупнейшее сообщество по разработке программного обеспечения на Земле.

27.1.1. Совместимость языков С и С++

Часто приходится встречать название “C/C++.” Однако такого языка нет. Употребление такого названия обычно является признаком невежества. Мы используем такое название только в контексте вопросов совместимости и когда говорим о крупном сообществе программистов, использующих оба этих языка.

Язык С++ в основном, но не полностью, является надмножеством языка С. За несколькими очень редкими исключениями конструкции, общие для языков С и С++, имеют одинаковый смысл (семантику). Язык С++ был разработан так, чтобы он был “как можно ближе к языку С++, но не ближе, чем следует”. Он преследовал несколько целей.

Поделиться:
Популярные книги

Путь Чести

Щукин Иван
3. Жизни Архимага
Фантастика:
фэнтези
боевая фантастика
6.43
рейтинг книги
Путь Чести

Идеальный мир для Социопата 3

Сапфир Олег
3. Социопат
Фантастика:
боевая фантастика
6.17
рейтинг книги
Идеальный мир для Социопата 3

Кротовский, не начинайте

Парсиев Дмитрий
2. РОС: Изнанка Империи
Фантастика:
городское фэнтези
попаданцы
альтернативная история
5.00
рейтинг книги
Кротовский, не начинайте

Под маской моего мужа

Рам Янка
Любовные романы:
современные любовные романы
5.67
рейтинг книги
Под маской моего мужа

Элита элит

Злотников Роман Валерьевич
1. Элита элит
Фантастика:
боевая фантастика
8.93
рейтинг книги
Элита элит

Вперед в прошлое 3

Ратманов Денис
3. Вперёд в прошлое
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Вперед в прошлое 3

Темный Патриарх Светлого Рода 5

Лисицин Евгений
5. Темный Патриарх Светлого Рода
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Темный Патриарх Светлого Рода 5

Возвышение Меркурия. Книга 8

Кронос Александр
8. Меркурий
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 8

Менталист. Революция

Еслер Андрей
3. Выиграть у времени
Фантастика:
боевая фантастика
5.48
рейтинг книги
Менталист. Революция

Маршал Советского Союза. Трилогия

Ланцов Михаил Алексеевич
Маршал Советского Союза
Фантастика:
альтернативная история
8.37
рейтинг книги
Маршал Советского Союза. Трилогия

Штурм Земли

Семенов Павел
8. Пробуждение Системы
Фантастика:
боевая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Штурм Земли

Баоларг

Кораблев Родион
12. Другая сторона
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Баоларг

Измена. Верну тебя, жена

Дали Мила
2. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Верну тебя, жена

Законы Рода. Том 6

Flow Ascold
6. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 6