- •Содержание
- •Введение
- •1. Структурное программирование
- •4. Семь основных элементов программирования
- •4.1. Вывод
- •4.1.1. Функция printf
- •4.1.2. Другие функции вывода: puts и putchar
- •4.2 Ввод
- •4.2.1. Функция scanf
- •4.2.2. Использование gets и getch для ввода
- •4.3. Потоковый ввод-вывод
- •4.4. Типы данных
- •4.4.1. Числа с плавающей точкой
- •4.4.2. Три типа целых
- •4.4.3. Определение строки
- •4.4.4. Идентификаторы
- •4.4.5. Преобразования типов
- •4.5. Операции
- •4.5.1. Операции присваивания
- •4.5.2. Одноместные и двуместные операции
- •4.5.4. Побитовые операции
- •4.5.5. Комбинированные операции
- •4.5.6. Адресные операции
- •4.6. Условные операторы
- •4.6.1. Операции сравнения
- •4.6.2. Логические операции
- •4.6.3. Операторы присваивания
- •4.6.5. Оператор запятая
- •4.6.6. Оператор if
- •4.6.7. Условный оператор (?:)
- •4.7. Циклические конструкции в программах
- •4.7.1. Цикл while
- •4.7.2. Цикл for
- •4.7.3. Цикл do...While
- •4.7.4. Оператор switch (переключатель)
- •4.7.5. Оператор break
- •4.7.6. Оператор continue
- •4.7.7. Оператор goto
- •4.7.8. Использование команд передачи управления
- •4.8. Функции
- •4.8.1. Анализ программы
- •4.8.2. Глобальные описания
- •4.8.3. Описание функции void
- •4.8.4. Оператор return
- •4.8.5. Использование прототипов функций и полных определений функций
- •4.9. Комментарии
- •5. Обзор структур данных
- •5.1. Указатели
- •5.1.1. Динамическое распределение
- •5.1.2. Указатели и функции
- •5.1.3. Адресная арифметика
- •5.1.4. Неправильное употребление указателей
- •5.1.5. Использование неинициализированных указателей
- •5.1.6. Ошибки при передаче по адресу
- •5.2. Массивы
- •5.2.1. Массивы и указатели
- •5.2.2. Массивы и строки
- •5.2.3. Многомерные массивы
- •5.2.4. Массивы и функции
- •5.2.5. Индексы массивов
- •5.3. Структуры
- •5.3.1. Структуры и указатели
- •5.4. Операции с файлами
- •5.5. Использование директивы typedef
- •Соглашения, принятые для описания алгоритмов
- •And do else fi for goto if od set then through to while
- •Библиографический список
And do else fi for goto if od set then through to while
Если с этих слов начинается предложение, начальные буквы — заглавные, например
Set, Do, If.
Чтобы отличить имена переменных и логические операции от слов языка операторов, имена переменных и логические операции пишутся полностью заглавными буквами. Обращаем внимание на разницу между AND и and в следующем примере:
If I<10 AND J<10 then set I←I+1; and set J←J + l fi.
Операторы присваивания. Операторы присваивания записываются с помощью стрелки (←). Слово set необязательно; например,
Set ←1 или
Set ←1; J ←2; and /←3.
Операторы If. Операторы if могут быть двух видов, а именно:
If I<J then set I ←I+1 fi или
If I<J then set I ←I+1
else set J ←J-1 fi.
После then и else могут появляться заключенные в скобки предложения, если они улучшают или понимание, или читаемость, или и то и другое; например,
If I<J then [исключаем вершину] set I ←I+1
else [сдвигаем указатель] set PTR ←LEFT (PTR) fi.
Обычно рекомендуется ставить fi в конце оператора if, особенно когда его отсутствие может повлечь двусмысленность или неправильность оператора.
Рассмотрим оператор
If I<J then set I←I+1
else set J←J+l; K← 1.
Он может быть интерпретирован одним из двух способов:
If I<J then set I←I+1
else set J←J+l; K← 1 fi.
или
If I<J then set I←I+1
else set J←J+l fi; set K← 1.
В первом операторе К полагается равным 1, если только I не меньше J; во втором операторе К. полагается равным 1 независимо от значения I или J.
Операторы цикла. Операторы цикла появляются в разных формах; например,
1. Шаг i. [ ] Do шаг i+l while I≤M od.
Шаг i+1[ ] If COST(I, J) ≤ MIN
then set MIN←COST(I, J); and I←I+1 fi.
2. Шаг i. [ ] Do through шаг i+З while J>0 od.
Шаг i+l. [ ] Операторы.
Шаг i+2. [ ]Операторы.
Шаг i+3. [ ]Операторы.
Шаг i +4. [ ] Операторы.
Порядок выполнения цикла 2 следующий: выполняются шаги i+1, i +2 и i +З, затем проводится проверка, положительно ли J: J>0; если J≤0, то следующим выполняется шаг i+4; если J>0, то выполняются опять шаги i+l, i+2 и i+3 и J еще раз сравнивается с нулем и т. д. Предполагается, что где-то в пределах шагов i+l, i+2 или i+З значение J меняется; в противном случае существует возможность бесконечного цикла.
3. Шаг i. [ ] While PTR>0 do PTR ←LEFT (PTR) od.
4. Шаг i. [ ] While J >0 do through шаг i+2 od.
Шаг i+l. [ ] Операторы.
Шаг i+2. [ ] Операторы.
Шаг i+З. [ ] Операторы.
Выполнение цикла while-do отличается от выполнения цикла do-while только тем, что в одной форме проверка осуществляется перед первым выполнением шага (шагов), предписанного оператором do, а не после. Использование od, как в форме 3, служит для определения конца действия do; его применение идентично применению fi.
5. Шаг i. [ ] For I ←1 to N do шаг i+1 od.
Цель формы 5 — допустить выполнение типичного DO- или FOR-цикла с приращением, равным 1, вместо того, чтобы инициализировать индексную переменную I и увеличивать ее внутри цикла do-while или while-do.
Операторы goto. Хотя принципы структурного программирования исключают потребность в операторах goto, иногда встречаются ситуации, когда goto кажется подходящим и естественным средством. В таких случаях алгоритмы бывают обычно очень короткими, и применение операторов goto не мешает пониманию логики алгоритма. Поэтому мы умеренно используем операторы goto.
