- •Московский государственный социальный университет академия информатики и информационных технологий
- •Введение
- •Часть. Основы программирования на Си
- •1.1. Структура простейшей Си-программы
- •1.2. Данные в Си и операции над ними
- •1.2.1. Свойства ячейки памяти. Переменные и константы
- •1.2.2. Типы данных в Си
- •1.2.3. Правила записи констант в Си
- •1.2.4. Описание переменных и именованных констант в Си.
- •1.2.5. Выражения в Си
- •1.3. Операторы преобразования данных
- •1.3.1. Общие положения
- •1.3.2. Функция форматного выводаprintf()
- •1.3.3. Функция форматного вводаscanf()
- •1.4. Разработка программ на Си
- •1.4.1. Понятие о качестве программы и основные технологические принципы разработки программ
- •1.4.2. Алгоритм и способы его записи.
- •1.4.3. Изображение алгоритмов в виде блок-схем
- •1.4.4. Базовые структуры алгоритмов и их кодирование на Си.
- •1. Следование
- •2. Разветвление (развилка)
- •If (условие)
- •If (условие)
- •3. Цикл
- •1.4.4. Примеры разработки программ
- •1.5. Массивы и указатели
- •1.5.1. Понятие массива. Основные правила работы с массивами в Си
- •1.5.2. Примеры программ с массивами.
- •1.5.3. Инициализация массивов
- •1.5.4. Указатели в Си10
- •1.5.5. Связь массивов с указателями в Си
- •Часть. Функции и многофайловые программы в Си
- •2.1. Общие сведения о подпрограммах и функциях
- •2.2. Функции си
- •2.2.1. Описание функции
- •2.2.2. Обращение к функции
- •2.2.3. Место описания функции в программе
- •2.2.4. Примеры программ, использующих функции
- •2.3. Краткие сведения о препроцессоре Си
- •2.3.2.Директива макроопределения #define
- •2.3.3. Директива #include включения файлов
- •2.3.4. Директивы условной компиляции
- •2.415. Многофайловые си-программы
- •2.4.1. Структура программы на Си. Область действия переменных
- •2.4.2. Время жизни и класс памяти переменных
- •Описатели класса памяти
- •2.4.3 Понятие о файле проекта
- •Часть. Обработка символьной информации и документов сложной структуры
- •3.1. Обработка символьной информации на Си
- •3.1.1. Символьный тип
- •3.1.2. Работа со строками символов в Си. Строковые литералы. .
- •3.1.3. Функции и макросы для работы с символьной информацией
- •3.1.4. Примеры программ
- •3.2. Тип "структура" в Си
- •Структура
- •3.3. Файлы в Си
- •3.3.1. Общие понятия.
- •3.2.Функции Си для работы с файлами
- •3.3.3. Примеры программ, использующих файлы
- •Литература
- •Содержание
1.4.4. Базовые структуры алгоритмов и их кодирование на Си.
Современная технология программирования предполагает, что алгоритм должен строиться из базовых структур. Таких структур три:следование, развилка, цикл.
1. Следование
Эта структура, изображенная на рис. 3, предполагает последовательное выполнение входящих в нее инструкций, которых может две и больше. Последовательно выполняемые операторы в программе на Си записываются друг за другом и разделяются точкой с запятой.
2. Разветвление (развилка)
Разветвление, блок-схема которого приведена на рис. 4, применяется в том случае, когда выполнение алгоритма должно развиваться по двум альтернативным ветвям. Ветви обязательно должны соединяться в одной точке, т. е. дальнейшее выполнение алгоритма должно происходить по одному пути; кроме того, ветви алгоритма не должны пересекаться, т. е. не должны иметь общих блоков.
Разветвление предполагает проверку некоторого условия. Если на момент проверки условие истинно, то будет выполнен оператор 1, иначе оператор 2. В языке Си ветвление кодируется с помощью условного оператора:
If (условие)
оператор 1;
else
оператор 2;
В принципе можно было бы записать оператор в одну строку или расположить его по строкам каким-либо другим способом, но практика показывает, что в приведенном виде фрагмент программы легче читается, и такая запись считается хорошим стилем программирования.
Возможна ситуация, когда ветвь “Нет ” не содержит операторов (т. е. либо выполняются операторы ветви “Да”, либо сразу переходим к точке соединения ветвей блок-схемы). В этом случае в условном операторе Си слово else и оператор 2 отсутствуют.
Если операторы 1 или 2 состоят из нескольких операторов (являются составными), то входящие в них операторы окаймляются фигурными скобками:
If (условие)
{оператор 1;
оператор 2;
…
оператор N;
}
else
{оператор 1;
оператор 2;
…
оператор M;
}
Таким образом, фигурные скобки позволяют объединить несколько операторов в один составной.
3. Цикл
Ц
.
На Си циклы кодируются следующим образом:
цикл-пока |
цикл-до |
while (условие) тело цикла; |
Do тело цикла; while (условие) |
Тело цикла должно представлять собой один оператор – простой или составной.
Замечания
Каждая из трех рассмотренных базовых структур имеет один вход и один выход. Это очень важно, так как любой прямоугольник на рисунках 3 – 5, может быть базовой структурой. Значит, цикл может включать в свой состав базовые структуры: следование, разветвление, цикл. Это утверждение также относится и к двум другим базовым структурам – следование и разветвление.
Втеории алгоритмов доказано, что для построения любого алгоритма достаточно иметь три базовых структуры: следование, ветвление, цикл. Это положение называется принципом Дейкстры. Причем безразлично, какую циклическую структуру – до или пока – выбрать в качестве базовой. Практика программирования, однако, сложилась так, что равноправно используются обе эти структуры.
Кроме того, в программировании широко используется еще одна базовая структура (избыточная), которая является частным случаем цикла-пока и называется параметрическим циклом (см. рис.6). Этот цикл управляется переменной (так называемым параметром, на блок-схеме для него выбрано имя i), которая меняется от начального значения до конечного с заданным шагом.
Для кодирования параметрического цикла в Си используется оператор:
for(i=нач_знач;i<=кон_знач; i=i+шаг)
тело цикла;
Как и для предыдущих операторов, тело цикла – один оператор, простой или составной. Заметим, что возможности оператора forв Си не ограничиваются параметрическим циклом, но их рассмотрение выходит за рамки этого пособия.