- •1. Модель компьютера для программиста
- •2.Программное обеспечение. Компиляторы и интерпретаторы
- •3. Создание программ. Жизненный цикл программного обеспечения.
- •4. Транслятор и компоновщик. Библиотека языка Си.
- •5. Базовые элементы языка Си. Алфавит и словарь языка.
- •6. Правила образования идентификаторов. Ключевые слова и имена. Символы операций и разделителей.
- •7. Литералы. Структура предложений в Си.
- •9.Константы и переменные в Си
- •10. Типы данных и их роль в языке Си
- •11. Стандартные скалярные типы данных
- •11.Массивы
- •Структуры
- •14 .Арифметические выражения и операции
- •15. Выражение
- •16. Выражения присваивания.
- •17. Условные и логические операции.
- •18. Выражения с указателями
- •19. Постфиксное выражение
- •21.Приоритет операций и скобочная структура выражений
- •22. Структура программы на Си
- •23. Базовые операторы языка Си
- •24. Условные операторы языка Си.
- •25. Оператор Switch . Организация множественного выбора.
- •26. Оператор return
- •27. Операторы цикла
- •28. Оператор continue как средство управления циклом
- •30. Указатели
- •31. Массивы. Синтаксис объявления.
- •32. Основные свойства массивов
- •Массив и константный указатель
- •34. Символьная строка и массив символов
- •37. Многомерный массив
- •38. Многомерные массивы и указатели
- •39. Директива процессора #define
- •40. Директива #include
- •Предварительная инициализация параметров функции
- •Предварительная инициализация параметров функции 2
- •43. Вызовы функций
- •44. Массивы и параметры
- •48. Объявление функции
- •50. Преобразование основных типов.
- •51. Тип функции
- •52. Стандартные функции библиотеки Си
3. Создание программ. Жизненный цикл программного обеспечения.
При написании программ следует придерживаться следующей стратегии. Во-первых, весь процесс написания программы можно разделить на два этапа: фаза решения задачи и фаза реализации. И во-вторых, следует придерживаться формализованного способа документирования написания программы. Результатом фазы решения задачи является алгоритм, записанный в виде последовательности инструкций. Затем этот алгоритм переводиться на язык программирования. Эта фаза составляет суть фазы реализации.
В соответствии с предложенной стратегией, вначале нужно убедиться, что решаемая задача корректно поставлена. Необходимо решить, что будет являться входной информацией, что выходной, в какой форме эта информация будет представлена. Алгоритм решения может быть записан на языке программирования или в виде обычных предложений. Главное, чтобы алгоритм отражал последовательность точных инструкций решения задачи. Результат обеих фаз создания программы необходимо подвергнуть тщательной проверке. Такая проверка осуществляется мысленным прохождением всех инструкций алгоритма. На практике ошибки и недочеты в программе обнаруживаются на самых разных стадиях создания программы и это вынуждает возвращаться назад на предыдущие этапы и начинать все заново.
Разработку программных продуктов принято делить на шесть этапов создания программы:
1 Анализ и точное определение проблемы (постановка задачи)
2 Разработка программы (разработка алгоритма)
3 Реализация алгоритма (кодирование задачи)
4 Тестирование
5 Поддержка и развитие системы
6 Старение.
Текст программы на языке С можно записать в любом редакторе. После этого ее надо скомпилировать. Способ компиляции и работы С программ зависит от особенностей используемой системы. Наиболее распространенные это Турбо Борланд и Microsoft visual studio. В любом случае нужно уметь компилировать, компоновать и запускать программу в конкретной среде программирования.
При обнаружении синтаксической ошибки компилятор сообщает об этом пользователю, прекращает работу и указывает на приблизительное место ошибки. Иногда компилятор выдает предупреждение об ошибке. Это означает, что в программе есть строки не противоречащие синтаксису языка, но они могут содержать ошибку или другую некорректность использования ЭВМ. Существуют ошибки времени выполнения (например, деление на ноль), которые также сообщает среда программирования.
Ошибки при составлении алгоритма или переводе алгоритма на машинный язык называются логическими. Пока не существует методов обнаружения этих ошибок и поэтому надо тщательно составлять алгоритм программы с учетом всех особенностей решаемой задачи.
4. Транслятор и компоновщик. Библиотека языка Си.
Программирование с использованием подпрограмм требует ещё одной специальной программы, которая обеспечивает сборку единой программы из отдельных фрагментов-подпрограмм и её размещение в памяти ЭВМ. Эта программа называется компоновщиком.
Программа - это последовательность инструкций, предназначенных для выполнения компьютером. Процесс создания программы предполагает несколько этапов. За этапом разработки проекта программы следует этап программирования. На этом этапе пишется программа. Программистами этот текст воспринимается легче двоичного кода, поскольку различные мнемонические сокращения и имена заключают дополнительную информацию.
Файл с исходным текстом программы (его также называют исходным модулем) обрабатывается транслятором, который осуществляет перевод программы с языка программирования в понятную машине последовательность кодов. Процесс трансляции разделяется на несколько этапов. На первом этапе исходный текст (он обычно хранится в виде текстового файла) подвергается лексической обработке. Программа разделяется на предложения, предложение делится на элементарные составляющие (лексемы). Каждая лексема распознаётся (имя, ключевое слово, литерал, символ операции или разделитель) и преобразуется в соответствующее двоичное представление. Этот этап работы транслятора называют лексическим анализом.
Затем наступает этап синтаксического анализа. На этом этапе из лексем собираются выражения, а из выражений - операторы. В ходе трансляции последовательности терминальных символов преобразуются в нетерминалы. Невозможность достижения очередного нетерминала является признаком синтаксической ошибки в тексте исходной программы.
После синтаксического анализа наступает этап поэтапной генерации кода. На этом этапе происходит замена операторов языка высокого уровня инструкциями ассемблера, а затем последовательностями машинных команд. Результат преобразования исходного текста программы записывается в виде двоичного файла (его называют объектным модулем) с расширением ".obj".
Рассмотрим в общих чертах процесс компоновки. Программа строится из инструкций и операторов. В свою очередь, операторы включают выражения, которые состоят из операций и операндов. По крайней мере, части операндов в выражениях должны соответствовать отдельные "участки" оперативной памяти, предназначаемые, например, для сохранения результатов вычислений.
В ходе трансляции устанавливается соответствие между операндами и адресами областей памяти вычислительной машины. Так вот задача компоновщика состоит в согласовании адресов во всех фрагментах кода, из которых собирается готовая к выполнению программа. Компоновщик отвечает за то, чтобы конкретному операнду выражения соответствовала определённая область памяти. Компоновщик также добавляет к компонуемой программе коды так называемых библиотечных функций (они обеспечивают выполнение конкретных действий - вычисления, вывод информации на экран дисплея и т.д.), а также код, обеспечивающий размещение программы в памяти, её корректное начало и завершение. Преобразованная компоновщиком программа называется загрузочным или выполнимым модулем. Файлы, содержащие загрузочные модули, называют загрузочными или выполнимыми файлами.
Всякий раз, когда нам нужно использовать такие функции, как printf(), getcharf() и strlen(), мы обращаемся в библиотеку языка Си. Она содержит множество функций и макроопределений. Библи¬отеки меняются от системы к системе, но есть ядро функций (назы¬ваемое стандартной библиотекой), которое используется чаше все¬го.
Получение доступа к библиотеке зависит от системы, поэтому вам нужно посмотреть в своей системе, как применять наиболее распространенные операторы. Во-первых, есть несколько раз¬личных мест расположения библиотечных функций. Например, getchar() обычно задают как макроопределение в файле stdio.h, в то время как stflen( ) обычно хранится в библиотечном файле. Во-вторых, различные системы имеют разные способы доступа к этим функциям. Вот три из них.
Во многих больших системах UNIX вы только компилируете программы, а доступ к более обшим библиотечным функциям вы¬полняется автоматически.
Если функция задана как макроопределение, то можно директи¬вой #include включить файл, содержащий ее определение. Часто подобные функции могут быть собраны в соответствующим обра¬зом названный заголовочный файл. Например, некоторые системы имеют файл ctype.h, содержащий макроопределения, задающие тип символа: прописная буква, цифра и т. д.
На некотором этапе компиляции или загрузки программы вы можете выбрать библиотеку. В нашей системе, например, есть файл Ic.llb, содержащий скомпилированную версию библиотечных функций, и мы предлагаем редактору связей IBM PC использовать эту библиотеку. Даже система, которая автоматически контролиру¬ет свою стандартную библиотеку, может иметь другие библиотеки редко применяемых функций, и эти библиотеки следует запраши¬вать явно, указывая соответствующий признак во время компиляции.
Очевидно, мы не сможем рассмотреть все особенности всех си¬стем, но эти три примера должны показать, что вас ожидает. Те¬перь давайте рассмотрим некоторые функции.
