Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
DOROGOVA.pdf
Скачиваний:
245
Добавлен:
05.06.2015
Размер:
853.4 Кб
Скачать

2.Особенности языка С

2.1.Характеристики языка

Выбирая язык программирования для решения конкретной задачи, программист должен помнить, что он служит двум целям и призван:

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

предоставить программисту инструмент для описания подлежащих выполнению действий.

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

Вторая цель требует от языка быть наиболее близким к машинному коду. Почему же многие программисты выбирают именно С? Потому что С:

один из немногих языков достигших первой цели (решение задачи в ее же терминах);

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

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

Кроме того, С используется сотнями тысяч программистов, во всех прикладных областях, язык поддерживается десятками независимых реализаций и сотнями библиотек. Существует огромное количество учебников, руководств, журналов, конференций. Все это заставляет программистов делать свой выбор в пользу С.

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

С наиболее компактный из современных языков программирования. Вместе с тем следует отметить богатый набор операторов, универсальность и возможность управления структурами данных. С не является языком "очень высокого уровня", он не рассчитан и на какую-то конкретную область применения. Обладая широким возможностями и универсальностью, он удобнее и эффективнее, чем более мощные языки.

Компактность С объясняется отсутствием некоторых механизмов программирования, традиционно включаемым во все языки высокого уровня.

С предлагает только простые, последовательные конструкции управления, такие как проверки, циклы, группирование и функции.

В языке отсутствуют:

операции, для работы с составными объектами, рассматриваемыми как целое, такими как массивы, строки символов, множества, списки;

операции ввода-вывода.

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

С не является языком со строгими типами данных.

Вотличие от большинства языков, он позволяет преобразование типов данных. Эта особенность языка

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

С современный язык.

Средства языка побуждают использовать современный стиль программирования, который включает:

нисходящее проектирование;

структурное программирование;

пошаговую разработку модулей.

С эффективный язык, легко переносимый (мобильный) язык.

Компилятор С не только очень компактный, но и отражает возможности современных компьютеров. Это обстоятельство делает программы на С весьма эффективными, сравнимыми по этому параметру с ассемблерными программами. C имеет дело с объектами того же вида, что и компьютер, а именно, с символами, числами и адресами. Можно сказать, что С является языком более близким к ассемблеру, чем другие языки высокого уровня, так как многие его инструкции адресованы непосредственно аппаратной части компьютера, поэтому программа на С выполняется очень быстро.

PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com

2.2. Элементы языка

Подобно естественному языку, язык программирования имеет следующие характеристики:

Алфавит символы, которые можно использовать в программах.

Лексика ключевые слова, идентификаторы, операторы.

Синтаксис выражения, конструкции.

Пунктуация (или разделители) - ( ) [] {} ; ,: … * = # .

Семантика (или смысловая составляющая) – что все это значит (то, что написано на языке), и что это должно обозначать для компьютера.

2.2.1. Алфавит

В алфавит языка С включены все символы присутствующие на клавиатуре персонального компьютера (не русифицированного) кроме символов @ и $..

Все допустивые символы можно разделить на несколько групп:

Прописные латинские буквы А..Z.

Строчные латинские буквы а..z.

Арабские цифры 0..9.

Символ подчеркивания _ (рассматривается как буква).

Эти символы используются для образования ключевых слов и имён языка. Имя есть последовательность букв и цифр, начинающихся с буквы и не являющаяся ключевым словом (символ подчеркивания "_" в начале имени ставить не рекомендуется).

В С++ прописные и строчные буквы различаются, поэтому имена ARG1 и arg1 являются различными. ∙ спецзнаки “ , { } | [ ] ( ) + - / % \ ; ` .: ? < = > _ ! & * # ~ ^

Управляющие символы приведены в таблице 2.1.

Обобщенные пробельные символы это символы, не имеющие графического представления и служащие для отделения частей текста программы, они имеют то же самое назначение, что и пробелы между словами и строками на печатной странице. К ним относятся: пробел, возврат каретки, новая строка,

табуляция, вертикальная табуляция, новая страница.

Таблица 2.1

 

Управляющие символы

 

 

 

Управляющая

 

Наименование

последовательность

 

cимвола

 

 

 

 

 

 

\a

 

Звонок

 

 

 

 

 

 

\b

 

Возврат на шаг

 

 

 

 

 

 

\t

 

Горизонтальная табуляция

 

 

 

 

 

 

\n

 

Новая строка

 

 

 

 

 

 

\v

 

Вертикальная табуляция

 

 

 

 

 

 

\r

 

Возврат каретки

 

 

 

 

 

 

\f

 

Новая страница

 

 

 

 

 

 

\"

 

Кавычки

 

 

 

 

 

 

\'

 

Апостроф

 

 

 

 

 

 

\0

 

Ноль-символ

 

 

 

 

 

 

\\

 

Обратная дробная черта

 

 

 

 

 

 

PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com

\ddd

Восмеричное представление кода символа

 

 

 

 

\xdd

Шестнадцатеричное представление кода символа

 

 

 

 

Пробельные символы часто используются для повышения читаемости (наглядности) программы.

Все остальные представимые символы (прописные и строчные буквы русского алфавита, знаки @ и $ , символы псевдографики и другие ) не включены в алфавит языка С, но могут содержаться в тексте программы в качестве данных или комментария.

2.2.2. Лексемы

Программа на языке С состоит из элементов, называемых лексемами (token).

Лексема это единица текста программы, которая имеет определенный смысл для компилятора и которая не может быть разбита на части в дальнейшем.

К лексемам следует отнести следующие понятия:

идентификаторы (identifiers);

ключевые слова (key words);

литералы (literals) или константы (constans);

операторы (operators);

знаки пунктуации (punctuators).

Между лексемами можно вставлять пробельные символы: пробелы, переходы на новую строку, табуляции и тому подобное. Число пробельных символов не ограничивается и зависит от предпочтений программиста. Основная цель создать наглядный и легко читаемый текст программы. Компилятор воспринимает текст как сплошной поток символов, для него важно наличие хотя бы одного разделителя между лексемами, поэтому позиционирование операторов и других лексем может быть произвольным.

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

2.2.3. Идентификаторы

Идентификатором называется последовательность цифр и букв, а также специальных символов (первой должна стоять буква или специальный символ).

Примеры правильного задания идентификаторов:

abc, ABC, A128B, Sa_128 .

Компилятор допускает любое количество символов в идентификаторе, хотя значимыми являются первые 31 символ. Итак, идентификаторы могут быть произвольной длины, но лучше названия выбирать покороче и со смыслом.

Пример:

 

i

переменная цикла

count

счетчик

buff_size

Имя из 2-х слов (размер буфера)

_name

имя со спецсимволом

Примеры ошибочного задания идентификаторов:

374q

идентификатор начинается с цифры

if

идентификатор совпадает с ключевым словом

Идентификатор создается на этапе объявления программного объекта (переменной, функции, структуры и тому подобное) после этого его можно использовать в последующих операторах разрабатываемой программы.

При выборе идентификатора необходимо учитывать следующее:

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

PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com

следует обратить особое внимание на использование символа _ (подчеркивание) в качестве первого символа идентификатора. С одного или двух таких символов начинаются имена системных функций и переменных, поэтому использование таких идентификаторов в программе могут сделать её непереносимой в другие среды программирования;

идентификаторы, используемые для связи между модулями, имеют дополнительные ограничения, накладываемыми редакторами связей (отметим, что характер ограничений зависит от конкретного редактора связей).

Еще раз отметим, что в языке С прописные и строчные символы различаются, поэтому если обозначить переменную как x, в дальнейшем, при обращении к ней, нужно учитывать регистр, так как с точки зрения компилятора x и X – это два разных имени.

2.2.4. Ключевые слова

Ключевые слова это заранее определенные в языке идентификаторы, имеющие конкретное значение для компилятора. Часто ключевые слова называют зарезервированными или служебными словами. Важно запомнить, что ключевые слова не могут быть использованы в качестве свободно выбираемых программистом имен, так как компилятор придаст такому идентификатору зарезервированный в языке смысл, а не тот, который подразумевает программист.

Ключевые слова можно разделить на группы, каждая из которых определяет некоторое понятие языка:

объявление типов данных:

int char double float short long signed unsigned void enum struct union volatile

создание языковых конструкций:

do while for if else goto switch case return default break continue

∙ все остальные понятия (классы памяти, модификаторы и тому подобное): const sizeof auto register extern near far huge typedef interrupt

Следует отметить, что ключевые слова всегда пишутся прописными буквами!

Если if – это ключевое слово для создания условной конструкции, то IF – может быть чем угодно, в зависимости от того в каком контексте эта лексема появилась в тексте программы, например именем переменной или функции.

2.2.5. Переменные и константы (или литералы)

Объектом языка С будем называть именованную область памяти это переменные и функции. Отметим,

что в языке С++ понятие объекта трактуется шире, и переменные рассматриваются как частный случай объекта.

Данные, значения которых могут изменяться в процессе работы программы, называются переменными.

Переменную чаще всего рассматривают как пару "имя-значение". Имени соответствует адрес участка памяти, выделенный под переменную, а значением является содержимое этого участка. Именем служит идентификатор, а значение соответствует типу переменной, определяющему множество допустимых значений и набор операций, в которых переменная может использоваться. Каждая переменная перед использованием должна быть определена, то есть для нее должна быть выделена память. Размер выделяемой памяти определяется типом переменной.

Во избежание ошибок, перед использованием переменной должны присваиваться начальные значения. Важно понять, почему это нужно делать? Дело в том, что память компьютера устроена так, что в ней всегда что-то записано, даже сразу после включения питания, когда содержимое памяти это хаотичное чередование битов-нулей и битов-единиц, этот "информационный мусор" можно трактовать как информацию. Итак, сразу после определения переменной её значение (область памяти) – есть "информационный мусор" не имеющий отношения к решаемой задаче. Задавая начальные значения, программист "настраивает" переменную на решаемую задачу. Очень часто для этой цели используется инициализация.

Инициализация переменной это одновременное выполнение двух действий: выделение памяти и задание начальных значений переменной.

Данные значения, которых программа не должна и не может изменить называются константами.

Значения констант определяются в исходном тексте программы до компиляции, они фиксированы и неизменны на протяжении выполнения всей программы. Также как для переменной, для константы её тип

PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]