
- •Отображает данные, вводимые в ручную, во время обработки с устройств любого типа (клавиатура, переключатели, кнопки, световое перо, полоски со штрих кодом и т.д.).
- •Символ отображает хранимые данные в виде, пригодном для обработки. Носитель данных не определен. В схемах алгоритмов он предназначен для обозначения ввода-вывода данных в случае использования запоминающего устройства, управляемого процесса.
- •Тема 1. Основные этапы решения задач на ЭВМ
- •Постановка задачи разработки программного обеспечения
- •Анализ формальной постановки задачи
- •Выбор или разработка математической модели и метода решения
- •Разработка алгоритма
- •Базовые структуры алгоритма
- •Тема 2. Жизненный цикл программы. Критерии качества программы.
- •Техническое задание и спецификация программы
- •Разработка проекта программной системы
- •Программирование (кодирование) или программная реализация алгоритмов
- •Тестирование и отладка
- •Эксплуатация и сопровождение
- •Критерии качества программного обеспечения
- •Тема 3. Схемы алгоритмов, данных, программ
- •Символы данных
- •Символы процесса
- •Символы линий
- •Специальные символы
- •Правила применения символов в схемах
- •Правила выполнения соединений
- •Специальные условные обозначения
- •Тема 4. Язык программирования высокого уровня Си
- •Общие сведения о языке Си
- •Алфавит языка Си
- •Грамматика для описания языка, синтаксические диаграммы
- •Структура программы на языке Си
- •Имена объектов в программе
- •Выражения, операции и приоритеты
- •Тема 5. Стандартные типы данных
- •Тема 6. Составные типы данных
- •Данные регулярного типа (массивы)
- •Строки
- •Данные комбинированного типа (структуры)
- •Перечисления
- •Объединения
- •Указатели
- •Тема 7. Представление основных управляющих структур программирования
- •Оператор присваивания
- •Составной оператор
- •Оператор перехода Goto
- •Условный оператор If
- •Оператор выбора switch
- •Операторы цикла while, do – while, for
- •Операторы прерывания циклов
- •Форматированный ввод данных
- •Форматированный вывод данных
- •Преобразование типов
- •Инициализация данных
- •Тема 8. Функции
- •Определение функций в языке Си
- •Вызов функций в языке Си
- •Рекурсивные функции
- •Тема 9. Файлы
- •Тема 10. Приемы программирования. Примеры алгоритмов
- •Алгоритмы сортировки
- •Алгоритмы поиска
- •Динамические структуры данных
- •Линейные списки
- •Стек, очередь, дек
- •Деревья
- •Приложение 1. Стандартные библиотеки языка Си
- •Приложение 2. Примеры реализации алгоритмов
- •Не рекурсивный алгоритм решения задачи Ханойская башня.
- •Рекурсивный алгоритм решения задачи Ханойская башня.
- •Приложение 3. Лабораторные работы
- •Лабораторная работа №1
- •Лабораторная работа №2
- •Лабораторная работа №3
- •Лабораторная работа №4
- •Лабораторная работа №5
- •Лабораторная работа №6
- •Лабораторная работа №7
- •Лабораторная работа №8
- •Лабораторная работа №9
- •Лабораторная работа №10
- •Лабораторная работа №11
- •Лабораторная работа №12
- •Список литературы

0
Начало
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
a, b, h |
|
|
|
|
|
|
ввести a, b, h |
|
|
|
|
|
|
|||||
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
x ← a |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
3 |
|
|
3.1 |
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
Цикл x |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
вычислить f(x) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
3.2 |
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
х, f |
|
вывести х и f(x) |
|
|
|||||
3.4 |
|
|
3.3 |
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Цикл x |
|
|
|
|
x ← x + h |
|
|
|
|
|
|
|
||||||
|
|
x > b |
|
|
|
|
|
|
|
|
f |
|
|
|
s i n ( |
−*x |
) |
|||
4 |
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Конец
Рис. 17. Блок-схема алгоритма табулирования функции в соответствии ГОСТ 19.701-90
Тема 4. Язык программирования высокого уровня Си
Общие сведения о языке Си
Язык Си, созданный Денисом Ритчи в начале 70-х годов в Bell Laboratory американской корпорации AT&T, является одним из универсальных языков программирования. Язык Си считается языком системного программирования, хотя он удобен и для написания прикладных программ. Среди преимуществ языка Си следует отметить переносимость программ на компьютеры различной архитектуры и из одной операционной системы в другую, лаконичность записи алгоритмов, логическую стройность программ, а также возможность получить программный код, сравнимый по скорости выполнения с программами, написанными на языке ассемблера. Последнее связано с тем, что хотя Си является языком высокого уровня, имеющим полный набор конструкций структурного программирования, он также обладает набором низкоуровневых средств, обеспечивающих доступ к аппаратным средствам компьютера. С 1989 года язык Си регламентируется стандартом Американского института
50

национальных стандартов ANSI С. В настоящее время, кроме стандарта ANSI C разработан международный стандарт ISO C (International Standard Organization C).
Алфавит языка Си
Алфавит – совокупность символов, которые можно использовать в программах на языке Си.
В алфавит языка входят:
1.Большие и маленькие латинские буквы: A, B,..Z; a, b,..z и символ подчеркивания ( '_' ). Далее будем обозначать <буква>.
2.Десятичные цифры: 0, 1,..9. Далее будем писать просто <цифра>.
3.Специальные символы:
, . ; : ? ‘ ! | / \ ~ * + - ( ) { } < > [ ] # % & ^ = “
4.Управляющие и разделительные символы. К той группе символов относятся: пробел, символы табуляции, перевода строки, возврата каретки, новая страница и новая строка. Эти символы отделяют друг от друга объекты, определяемые пользователем, к которым относятся константы и идентификаторы. Последовательность разделительных символов рассматривается компилятором как один символ (последовательность пробелов).
5.Кроме выделенных групп символов в языке Си широко используются так называемые, управляющие последовательности, т.е. специальные символьные комбинации, используемые в функциях ввода и вывода информации. Управляющая последовательность строится на основе использования обратной дробной черты (\) (обязательный первый символ) и комбинацией латинских букв и цифр (табл.5).
Таблица 5. Управляющие последовательности языка Си.
Управляющая |
Наименование |
|
последовательность |
||
|
||
\a |
Звонок |
|
\b |
Возврат на шаг |
|
\t |
Горизонтальная табуляция |
|
\n |
Переход на новую строку |
|
\v |
Вертикальная табуляция |
51

\r |
Возврат каретки |
\f |
Перевод формата |
\” |
Кавычки |
\’ |
Апостроф |
\0 |
Ноль-символ |
\\ |
Обратная дробная черта |
\ddd |
Символ набора кодов ПЭВМ в восьмеричном представлении |
\xddd |
Символ набора кодов ПЭВМ в шестнадцатеричном представлении |
Примечание:
1.Каждая буква, цифра, специальный символ и служебное слово – это самостоятельная, неделимая конструкция языка.
2.В реализации языка на отечественных ЭВМ в алфавит добавляются большие и маленькие русские буквы и дополнительные знаки препинания. Однако эти дополнительные символы можно использовать только в символьных
истроковых константах.
3.В языке Си буквы нижнего регистра (а,...,z) отличаются от букв верхнего регистра (А,...,Z). Это означает, что следующие идентификаторы считаются разными: name, NaMe, NAME и т.д.
Грамматика для описания языка, синтаксические диаграммы
Символы алфавита являются элементарными синтаксическими конструкциями языка, из которых строятся более сложные конструкции (константы, имена, описания, выражения и операторы). Существует два способа описания синтаксиса языка программирования:
1)с использованием формальных грамматик;
2)с использованием синтаксических диаграмм.
Способ описания синтаксиса языка программирования на основе формальных грамматик базируется на следующих конструкциях:
1)Вводится множество терминальных символов, которые заключаются в одиночных кавычках. Под терминальным символом понимается неделимый символ языка, например ‘Begin’, ‘Program’, ‘1’, ‘5’. Иногда для сокращения кавычки можно опускать, если смысл конструкции при этом остается понятным.
52
2)Вводится множество нетерминальных символов, которые заключаются в треугольных скобках. Под нетерминальным символом понимается такая конструкция языка, которая может быть разложена на более мелкие составляющие части, т.е. состоит из различных частей, например <вещественное число>, <идентификатор>.
3)Вводится операция «=::» (или «→»), которая читается, как: «это есть», «является», «состоит из» и предназначено для уточнения состава нетерминальных символов.
4)Для обозначения альтернативных вариантов написания терминов в
языке вводится синтаксическая конструкция «альтернатива», которая обозначается вертикальной чертой «|» и может читаться как союз «или», например, такая конструкция «<операция> → ‘*’ | ‘/’ | ‘–‘ | ‘+’» обозначает следующее: «нетерминальный символ <операция> это есть терминальный символ ‘*’, или символ ‘/’, или символ ‘–‘ или, символ ‘+’».
5)Для необязательных конструкций языка, которые в одном случае могут присутствовать, а в другом могут отсутствовать используется конструкция «квадратные скобки». Ими обрамляются необязательные символы, например такое описание «<целое число> → [+] | – <цифры>» обозначает, что «конструкция <целое число> есть <цифры>, перед которыми необязательно присутствует знак ‘+’, либо обязательно знак ‘–‘».
6)Для повторяющихся конструкций используется два вида записи: либо с помощью многоточия «…» (если очевидно какая конструкция повторяется), либо повторяющиеся конструкции берутся в фигурные скобки. Иногда такая конструкция называется «итерация» или «повторение», например «< целое число> → [+] | – {<цифра>}», либо
«<целое число>→ [+] | – <цифра><цифра>… ».
Для наглядности изображения способа построения одних синтаксических конструкций из других используются синтаксические диаграммы (СД).
53

Синтаксическая диаграмма состоит из кружков, овалов, прямоугольников и стрелок. В кружках или овалах записываются неделимые (терминальные) конструкции языка или их обобщённые имена.
В прямоугольниках записываются ссылки на другие объекты, синтаксические диаграммы (нетерминальные символы). Стрелки указывают возможные направления движения по СД при построении синтаксической конструкции.
Пример 8. СД для понятия “целое число” (целое со знаком) (рис.18).
Целое
число
+
Цифра
–
Рис. 18. СД «Целое число со знаком»
При построении СД используется 5 основных конструкций: 1) Последовательность (рис.19).
|
|
|
С2 |
|
… |
|
СN |
|
С1 |
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Рис. 19. Типовая конструкция СД «Последовательность»
Порождает синтаксическую конструкцию (иногда говорят цепочку символов) C1C2C3…CN.
2) Альтернатива (рис.20).
54

С1
|
С2 |
|
Порождает |
|
|
|
цепочку C1, или |
||
|
|
|
||
|
|
|
||
… |
… |
… |
цепочку C2, или |
|
цепочку C3, …, или |
||||
|
|
|
||
|
|
|
цепочку CN. |
|
|
СN |
|
|
|
|
|
|
||
|
|
|
|
Рис. 20. Типовая конструкция СД «Альтернатива»
3) Альтернатива с пустой цепочкой (рис.21).
|
|
|
Порождает |
|
С |
|
или пустую цепочку |
|
|
||
|
|
|
или цепочку С. |
|
|
|
Рис. 21. Типовая конструкция СД «Альтернатива с пустой цепочкой»
4) Итерация с пустой цепочкой (рис.22).
Порождает или пустую цепочку
С или цепочку С, или цепочку СС, и т.д.
Рис. 22. Типовая конструкция СД «Итерация с пустой цепочкой»
5) Итерация без пустой цепочки (рис.23).
|
С |
|
|
Порождает |
|
|
|||
|
|
|
|
или цепочку С, |
|
|
|
|
|
|
|
|
||
|
|
|
|
или цепочку СС, и т.д. |
Рис. 23. Типовая конструкция СД «Итерация без пустой цепочки»
Синтаксические диаграммы и формальные грамматики позволяют формально описать только синтаксис конструкций языка. Семантику (смысл) будем описывать неформально, т.е. русским языком и на примерах.
55