Задачи по языку С

       

Если судить по объему справочного


Если судить по объему справочного руководства, C не очень "большой" язык. Это объясняется немногими ограничивающими правилами, налагаемыми на язык. Пользователи С быстро сумеют оценить его изящность, проистекающую из ясных принципов построения языка. Такая изящность может быть излишне таинственной для начинающего программиста. Отсутствие ограничений означает, что программы на С могут писаться, и пишутся, с использованием развитых форм выражений, что может показаться новичку ошибочным. Способность конструкций языка С образовывать единое целое позволяет быстро находить ясные и компактные средства для решения программистских задач.
Процесс изучения языка программирования можно представить как последовательное прохождение трех этапов (каждый этап, несомненно, может повторяться неоднократно). Первый этап состоит в освоении синтаксиса языка, по крайней мере настолько, что транслятор перестает "ругаться", обнаружив в вашей программе бессмысленные конструкции. Второй этап состоит в осмыслении правильно построенных транслятором конструкций языка. На третьем этапе вырабатывается определенный стиль программирования, соответствующий духу языка, т.е. умение писать ясные, краткие и правильные программы.
Головоломки в этой книге предназначены для того, чтобы помочь читателю на втором этапе обучения языку. Они бросают вызов искусству владения читателем основными правилами языка, заводят его в "редко посещаемые закоулки" языка, подводят к граничным условиям и знакомят с немногими откровенными ловушками. (Конечно, С, как всякий язык программирования, имеет свою долю неясностей, которая познается на опыте.)
Примеры этой книги не следует рассматривать как образцы хорошего программирования. Но то, что делает программу плохой, может головоломку сделать интересной, это скажем:

  • двусмысленность выражений, требующая для их интерпретации обращения к описанию языка;
  • сложность структуры; структуру данных и структуру программы нелегко удержать в голове;
  • неочевидность конструкций, возникающая при использовании их нестандартным способом.



Язык С до сих пор остается развивающимся языком, поэтому некоторые конструкции, приведенные в книге, могут быть у вас не реализованы, и наоборот, некоторые реализованные конструкции могут здесь не исследоваться. Это зависит от выбранного вами "локального" транслятора. Но поскольку, к счастью, развитие языка происходит единообразно, маловероятно, чтобы используемый вами транслятор какие-то конструкции реализовал не так, как здесь описано.
Как пользоваться этой книгой?
Ее следует рассматривать как дополнительное пособие к книге Б.Кернигана и Д.Ритчи "Язык программирования С". Задачник делится на главы, и каждая глава посвящена какой-нибудь одной теме. В главе содержатся программы, отражающие различные аспекты этой темы. В программы вкраплены операторы печати, и основная цель приводимых головоломок состоит в том, чтобы выяснить, что напечатает каждая программа. все программы независимы друг от друга, хотя встречающиеся в тексте позднее подразумевают, что вам понятны свойства языка, иллюстрируемые предшествующими программами.
Результаты, выдаваемые на печать каждой программой, приводятся вслед за текстом программы. Каждая программа выполнялась в виде, полностью совпадающем с приведенным в тексте, на машинах фирмы DEC PDP-11/70 и VAX-11/780 под управлением операционной системы UNIX. Для тех немногих случаев, когда результаты , полученные на этих двух машинах различны, приводятся оба результата.
Большая часть книги посвящена подробному разбору решения задачи, т.е. пояснению процесса выполнения программы. Многие решения задач сопровождаются предостережениями и советами, касающимися программирования на С.
Порядок работы с задачником может быть таким:

  • познакомиться в книге Б.Кернигана и Д.Ритчи с соответствующей теме;
  • для каждой программы из главы задачника, посвященной этой теме:

  • мысленно выполнить программу,
  • сравнить ваши результаты с приводимыми на следующей странице задачника
  • прочесть разбор решения задачи.

Содержание раздела