- •Часть 1
- •1. Основы программирования на языке Си
- •1.1. Структура программы на языке Си.
- •1.2. Структура простейшей одномодульной программы
- •1.2.1. Комментарии в программе на языке Си
- •1.2.2. Начальные сведения о препроцессоре
- •1.2.3. Определение функции main().
- •1.2.4. Пример простейшей программы
- •1.3. Алфавит, синтаксис и семантика
- •1.4. Алфавит языка Си
- •1.5. Понятие о типе
- •1.6. Система типов языка Си
- •1.7. Понятие об объекте
- •1.8. Лексемы
- •1.9. Зарезервированные слова
- •1.10. Идентификаторы
- •1.11. Литералы
- •1.11.1. Целочисленные литералы
- •1.11.2. Литерал вещественного типа
- •1.11.3. Символьные литералы
- •1.11.4. Строковый литерал
- •1.12. Переменные
- •1.13. Символические константы в языке Си
- •1.14. Операторы, выражения и инструкции. Общие сведения.
- •1.14.1. Классификация операторов
- •1.14.2. Приоритет и ассоциативность операторов.
- •1.14.3. Побочные эффекты при вычислении выражений
- •1.14.4. Порядок вычисления выражений
- •1.15. Арифметические операторы и выражения
- •1.15.1. Унарные операторы
- •1.15.2. Бинарные операторы
- •1.15.3. Преобразования типа при выполнении бинарных операторов
- •1.15.3.1. Автоматическое преобразование типов
- •1.15.3.2. Явное преобразование типа
- •1.15.4. Математические функции
- •1.16. Оператор присваивания и инструкция присваивания
- •1.16.1. Простой оператор присваивания
- •1.16.2.Множественное присваивание
- •1.16.3. Составной оператор присваивания
- •1.16.4. Преобразование типа при присваивании
- •1.17. Начальные сведения об указателях. Выходные параметры функции
- •1.18. Принятие решений и логические величины. Операторы отношения и сравнения на равенство
- •1.18.1. Логические операторы
- •1.18.2. Поразрядные операторы
- •1.19. Условные выражения (оператор ?:)
- •1.20. Оператор запятая
- •1.21. Оператор sizeof
- •1.22.4. Инструкция return
- •1.23. Составная инструкция
- •1.24. Инструкция if else
- •1.24.1. Полная и сокращенная формы инструкции if
- •1.24.2. Вложенные инструкции if
- •1.25. Инструкция switch
- •1.25.1. Синтаксис инструкции switch
- •1.25.2. Использование инструкции switch
- •1.26. Функциональные компоненты цикла
- •1.27. Арифметические и итерационные циклы
- •1.27.1. Задачи, приводящие к арифметическим циклам
- •1.27.2. Задачи, приводящие к итерационным циклам
- •1.28. Циклические управляющие инструкции
- •1.29. Цикл, управляемый инструкцией for
- •2. Примеры решенных задач
- •2.1. Линейные вычислительные процессы
- •2.2. Организация разветвлений
- •2.2.1. Простейшие разветвления
- •2.2.2. Многовариантные разветвления
- •2.2.2.1. Использование переключателя switch
- •2.2.2.2. Использование вложенных инструкций if else if
- •2.2.2.3. Использование вложенных инструкций if ... If
- •2.2.2.4. Использование сокращённых форм инструкции if
- •2.2.3. Рекомендации по программированию
- •2.3. Организация циклов
- •2.3.1. Простые циклы
- •2.3.2. Циклы и разветвления
- •2.3.2.1. Разветвление до цикла
- •2.3.2.2. Разветвление внутри цикла
- •2.3.2.3. Разветвление после цикла
- •2.3.2.4. Циклы в ветвях разветвлений.
- •2.3.3. Рекомендации по программированию
- •Содержание
- •1. Основы программирования на языке Си
- •Литература
1.7. Понятие об объекте
Объект – это термин, ориентированный на работу с оперативной памятью компьютера. Под объектом в языке Си понимается участок оперативной памяти компьютера, в котором хранится некоторое значение. Одни данные в языке Си являются объектами, другие – объектами не являются. К объектам относятся переменные (кроме регистровых переменных). Литералы (константы) к объектам не относятся. К объектам также не относятся символические константы, объявляемые с помощью директивы define
Замечание. Возникает следующий вопрос, каким образом можно отличить данные, являющиеся объектом от данных таковыми не являющихся? Для ответа на этот вопрос к этому данному следует применить оператор взятия адреса (&). Такая операция может использоваться только для объектов, а для данных, не являющихся объектами, эта операция оказывается недопустимой.
1.8. Лексемы
Программа, написанная на языке Си, состоит из отдельных предложений. Предложения в свою очередь состоят из лексем. Лексемы играют роль “кирпичиков”, из которых строятся предложения языка. Лексемы неделимы и сами по себе определяют некоторое содержание. В языке Си различают следующие виды лексем:
● Зарезервированные слова.
● Идентификаторы.
● Литералы
● Разделители (знаки пунктуации).
● Операторы.
Зарезервированные слова и идентификаторы играют роль слов в предложениях программы, написанной на языке Си. Литералы применяются для обозначения фиксированных значений данных, используемых в программе.
Операторы применяются для обозначения операций, предусмотренных языком программирования. Например, оператор “+” используется для обозначения операции сложения двух чисел.
К разделителям относятся следующие лексемы: “[“, “]”, “(“, “)” и другие.
1.9. Зарезервированные слова
Зарезервированные слова имеют фиксированный смысл, который закреплен за ними определением языка, Этот смысл не может быть изменен программистом. В связи с этим зарезервированные слова не могут использоваться в качестве слов пользователя, к которым относятся идентификаторы (смотри ниже). Не будем перечислять все зарезервированные слова, предусмотренные языком Си. Будем вводить эти слова по мере необходимости.
1.10. Идентификаторы
Идентификатор – это конструкция языка, используемая для целей наименования. Идентификаторы выбираются программистом по своему усмотрению, но с учетом синтаксиса языка. В языке Си в качестве идентификатора может использоваться любая последовательность цифр и букв, которая начинается с буквы. Символ подчеркивания считается буквой. Следует учитывать, что идентификаторы языка Си чувствительны к регистру. Стандарт языка Си не ограничивает длину идентификатора. Ограничивается количество значащих символов в идентификаторе. В соответствии со стандартом C89 количество значащих символов в идентификаторе равно 31, а в стандарте С99 – 63 символа.
В языке Си существует традиция записывать имена переменных строчными символами, а имена символических констант, которые определены с помощью директивы define, – заглавными.
Во избежание возможных конфликтов с именами, зарезервированными для системных целей, рекомендуется не начинать пользовательские имена с двух подчёркиваний и подчёркивание, за которым следует заглавная буква.
Примеры корректных идентификаторов:
Number number /* Идентификаторы Number и number – это два разных идентификатора */ _number count_words /* Идентификатор состоит из двух смысловых частей (слов), разделенных символом подчеркивания*/ number_
Примеры некорректных идентификаторов:
for /* совпадает с зарезервированным словом */ 1_st_slovo /* начинается с цифры */ super+ /* содержит недопустимый символ*/
Примеры идентификаторов, которые могут конфликтовать с системными идентификаторами
_Name /* Начинается с символа подчеркивания, за которым следует заглавная буква */ __file /* Начинается с двух подряд следующих символов подчеркивания */
