- •Укороченный язык си
- •Порядок обработки информации машиной с целью получения программы
- •Элементы языка си
- •История языка
- •Понятие языка программирования
- •Основные понятия языка программирования
- •Основные символы языка
- •Ключевые слова
- •Использование комментариев в тексте программы
- •Описательные и выполняемые операторы языка
- •Понятие идентификатора
- •Переменные и базовые типы данных
- •Константы
- •Указатели
- •Типы структурированных переменных
- •Массивы
- •Структуры
- •Структура программ
- •Составные части программы
- •Функции в языке си
- •Понятие модуля
- •Арифметические выражения и присваивания
- •Арифметические выражения
- •Приоритет арифметических операций
- •Преобразования типов при вычислении выражений
- •Странные операторы присваивания
- •Сокращенная запись арифметических выражений
- •Логические выражения
- •Операция sizeof
- •Программирование вычислительных структур
- •Исполняемые операторы
- •Структура альтернатива
- •Структура повторение
-
Структура повторение
ПОВТОРЕНИЯ в программировании называются циклами.
Обычно стандартом проекта предусмотрен ряд конструкций циклов.
Не универсальный ЦИКЛ-ДО в рамках изученного материала имеет три конструкции и используется для задания заданного числа повторений. Рассмотрим их запись на языке программирования Си.
Конструкция по возрастанию: Конструкция по убыванию:
for(int i=3; i<=5; i++) for (int i=5; i>=3; i--)
{ {
/*тело цикла i=3,4,5*/ /*тело цикла i=5,4,3*/
. . . . . .
} }
Здесь i – переменная цикла. Обычно эти циклы не требуют после кодирования дополнительного тестирования.
При работе с массивами языка Си используется структура, выполняющееся указанное число раз, но значение переменной цикла начинается с нуля. Следующий цикл должен выполниться 5 раз:
Конструкция по возрастанию:
for(unsigned int i=0; i<5; i++)
{
/*тело цикла i=0,1,…,4 (5 раз)*/
. . .
}
Помимо трех рассмотренных вариантов построения структуры Не универсальный ЦИКЛ-ДО, аналогичное построение имеют циклы, использующие арифметику указателей, но это выходит за рамки знакомства с языком Си.
Универсальные циклы имеют конструкции ЦИКЛ-ДО и ЦИКЛ-ПОКА. Их запись на языке Си приведена ниже:
Универсальный ЦИКЛ-ПОКА: Универсальный ЦИКЛ-ДО:
/*Подготовка*/ /*Подготовка*/
while(L) do
{ {
/*Тело цикла*/ /*Тело цикла*/
. . . . . .
} }
while(!(L))
Здесь L логическое выражение при значении true является условием продолжения выполнения ЦИКЛ-ПОКА или условием окончания выполнения ЦИКЛ-ДО. Подготовка и тело цикла являются СЛЕДОВАНИЯМИ. Тело цикла выполняется столько раз, сколько и весь цикл. Признаком ЦИКЛ-ПОКА является возможность не выполнения тела цикла ни разу. При равноценности, из двух конструкций ЦИКЛ-ДО и ЦИКЛ-ПОКА выбирают ту, запись которой короче.
Вообще ЦИКЛ-ДО можно закодировать структурой ЦИКЛ-ПОКА, если в подготовке записать некоторые действия из тела цикла. Из ЦИКЛА-ДО получается ЦИКЛ-ПОКА при его охвате структурой АЛЬТЕРНАТИВА.
Порядок декомпозиции циклов:
-
набирается "пустой" текст оператора цикла;
-
записывается логическое условие продолжения ЦИКЛ-ПОКА или завершения ЦИКЛ-ДО (при этом выявляется переменная цикла);
-
декомпозируется то действие тела цикла, которое изменяет логическое условие до невыполнения условия ЦИКЛ-ПОКА или до выполнения условия ЦИКЛ-ДО;
-
детализируется СЛЕДОВАНИЕ "Подготовка цикла";
-
детализируется оставшееся действие тела цикла как СЛЕДОВАНИЕ;
-
проводится проверка информационной согласованности всех элементов цикла;
-
проводится проверка правильности работы цикла с помощью безмашинного расчета трассы выполнения тестов с трехкратным (или более), однократным выполнением цикла и вообще без выполнения.
В текстах программ может использоваться еще одна вычислительная структура – РЕКУРСИЯ. Признаком этой структуры является наличие рекурсивных формул и вычислений. Все, что делает рекурсия, можно реализовать при помощи циклов и массивов. Однако если язык программирования допускает рекурсию, то ее использование может сократить код программы. Рекурсия всегда очень тщательно комментируется.