На главную

Сборник занимательных задач по языку программирования C

Этот задачник я составлял с 1989-го по 1994-й год, когда активно писал на C. В начале 2000-х в него попали несколько задач по C++. Сейчас, не меняя содержания, я провёл параллели с современными наследниками C: Java и C#.

Предисловие

Без C мы имели бы BASI, OBOL и PASAL.

Моя друзья-программисты не всегда отвечали правильно на вопросы из этого задачника. Я и сам, когда сталкивался с этими примерами в реальной работе, тратил несколько часов или дней, чтобы понять, почему программа работает не так, как надо. Дело не в сложности задач, а в том, что они раскрывают тонкости языка, которые недоступны при первом знакомстве.

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

Иногда программисты смеются, узнав ответ на очередную задачу. Возможно, потому, что они открывают для себя C с неожиданной стороны.

Благодарности

В первую очередь следует поблагодарить Денниса М. Ритчи (Dennis M. Ritchie) и его ближайшего соратника Бриана В. Кернигана (Brian W. Kernighan), без которых не было бы ни языка C, ни той самой книги.

Без всякого сомнения, Бьярн Страустрап (Bjarne Stroustrup) заслуживает отдельной благодарности за создание C++.

Я в большом долгу перед друзьями и коллегами, которые не только не дали забросить мне моё безнадёжное начинание, но и помогали советами. В частности, я благодарю Диму Борток, Игоря Житко, Булата Зиганшина, Сашу Козлова, Сергея Рудницкого и Олега Сорока, тратящих свое время на обсуждение предлагаемых задач, Роберта Фахртдинова, преподавателя программирования на физфаке КГУ, автора нескольких вопросов. Всем им большое спасибо.

Введение

Везде, где идет ссылка на K&R, имеется в виду книга «Язык программирования Си», выпущенная издательством «Финансы и статистика» в 1992 году. Это перевод второго издания K&R (1988), где Ритчи и Керниган описали стандарт ANCI C. Автор перевода Вик.С. Штаркман, редакция и предисловие Вс.С. Штаркмана. Так же использовался «Первый рабочий проект» комитета X3J11 (1986), перевод Л.Е.Карпова (1988). Некоторые задачки уточнялись по Бьярну Страустрапу, «Язык программирования Си++», вторая редакция (1991), перевод В. Тропашко, выпущена издательством ДиаСофт в 1993г.

Текст логически разделен на три части и одно приложение. Первая часть содержит коварные вопросы по языку C. Во второй части вы найдёте два примера коротких, но поучительных программ на C, которые раскрывают малоизвестные возможности языка. Третья часть относится к области чистой программистской эстетики. Приложение А содержит таблицу приоритета и порядка разбора операторов.

Часть I

Часть II

Часть III

Приложение А: Приоритеты и ассоциативность операторов