- •Программирование на языке высокого уровня
- •Составитель: л.А. Прокушев
- •Подписано к печати Формат 60х84 1/16. Бумага тип. №3
- •Редакционно-издательский отдел
- •190000, Санкт-Петербург, ул. Б. Морская, 67
- •Алгоритмизация вычислительных процессов
- •Средства программирования вычислительных процессов
- •Данные и их типы
- •Константы
- •Переменные
- •Ввод-вывод данных
- •Ввод-вывод данных в стиле с
- •Форматированный ввод
- •Форматированный вывод
- •Консольный ввод-вывод
- •Функция ввода символа (без отображения):
- •Функция очистки экрана результатов:
- •Выражения и операции
- •Логические выражения и операции.
- •Работа с ветвящимися процессами Операторы
- •Оператор присваивания
- •Условный оператор (if)
- •Операторы передачи управления
- •Оператор break (прервать) используется для прерывания работы текущего сложного оператора, в теле которого находится оператор break, и передачи управления на следующий по порядку оператор.
- •Оператор выбора (switch)
- •Действие оператора выбора состоит в следующем:
- •Введите 2 числа х, y : 3 8
- •Работа с циклическими вычислительными процессами
- •Циклы с фиксированным числом повторений Оператор цикла с предусловием (while)
- •Прерывание цикла
- •Циклы с неизвестным числом повторений Вычисление рекуррентных последовательностей
- •Оператор цикла с постусловием (do)
- •Вложенные циклы и организация диалога в программе
- •Оператор цикла с параметром (for)
- •Программа:
- •Работа с массивами
- •Описание массива
- •Доступ к элементам массива
- •Указатель.
- •Занесение данных в массив
- •Многомерные массивы
- •Работа с функциями
- •Определение функции
- •Вызов функции
- •Передача параметров функции
- •Передача данных по значению
- •Передача данных по адресу
- •Прототип (шаблон) функции
- •Блочная структура программы
- •Внешние описания переменных
- •Многомодульные программы Проект программы
- •Внешние ссылки
- •Создание проекта программы
- •Работа с указателями Объявления объектов со сложными описателями
- •Массивы указателей
- •Указатель на указатель
- •Указатель на функцию
- •Использование указателя на функцию как аргумента
- •Массивы указателей на функции
Министерство образования Российской Федерации
Санкт-Петербургский
государственный университет аэрокосмического приборостроения
Программирование на языке высокого уровня
Структурное программирование на С/С++
Методические указания
к выполнению лабораторных работ
Санкт-Петербург
2009
Составитель: л.А. Прокушев
Рецензент: канд. техн. наук В.П. Попов
Даются методические указания к выполнению лабораторных работ, которые предназначены для выработки навыков алгоритмизации и структурного программирования на языках С/С++.
Рассмотрены основные понятия программирования: построения программы; описания типов и ввода-вывода данных; операций и операторов, реализующих последовательные, ветвящиеся и циклические алгоритмы; принципа модульного программирования по организации ветвящихся и циклических алгоритмов. Показаны способы решения типовых задач с целью выработки у студентов практических навыков по составлению и отладке программ при выполнении лабораторных работ.
Методические указания предназначены для студентов всех специальностей, изучающих дисциплины «Программирование на языке высокого уровня», «Алгоритмические языки и программирование», «Информатика».
Подготовлены к публикации кафедрой открытых информационных систем и информатики по решению редакционно-издательского совета Санкт-Петербургского государственного университета аэрокосмического приборостроения.
Санкт-Петербургский государственный университет аэрокосмического приборостроения, 2009
Подписано к печати Формат 60х84 1/16. Бумага тип. №3
Печать офсетная. Усл. печ. л. Уч.-изд. л.
Тираж экз. Заказ №
Редакционно-издательский отдел
Отдел оперативной полиграфии СПбГУАП
190000, Санкт-Петербург, ул. Б. Морская, 67
Введение
Языки программирования высокого уровня (ЯВУ) предназначены для записи алгоритмов решения задач в виде программы для ЭВМ. ЯВУ – формализованный язык для описания данных и набор правил (инструкций, операторов) их обработки для реализации алгоритма задачи. Программа, получив исходные данные, должна за конечное число операций по обработке информации выдать определенный результат. Для того чтобы изучить язык, необходимо разобраться в том, как этот язык реализует семь основных понятий программирования:
Представление данных разных типов и выделение для них места в оперативной памяти.
Ввод данных, то есть чтение информации, например, с клавиатуры или внешних носителей данных.
Вывод результатов (промежуточных и выходных) для пользователя либо запись на внешний носитель данных.
Последовательное выполнение операций и команд по обработке данных (для реализации линейных процессов).
Выполнение операций и команд по заданному условию для разветвления вычислений (для реализации ветвящихся процессов).
Повторное выполнение команд по заданному условию (для реализации циклических процессов).
Выделение группы команд в поименованный программный модуль (подпрограмму) и обращение к нему из программы и других подпрограмм (для реализации модульного принципа программирования).
Языки высокого уровня (ЯВУ), поддерживающие модульность, блочную структуру программ, возможность раздельной компиляции модулей, называют языками структурного программирования. Этими базовыми элементами программирования не исчерпываются возможности развитых алгоритмических языков, но их изучение помогает быстро освоить новый язык и писать на нем программы.
Язык С (читается СИ) был создан Денисом Ритчи в начале 1970-х в США как язык программирования системных и прикладных программ для профессиональных программистов. В нем реализован компромисс между машинно-ориентированным языком ассемблера (прямой доступ к ячейкам памяти и манипулирование битами) и процедурно-ориентированным языком, который включает все управляющие конструкции структурного программирования. Такие свойства языка С, как лаконичность, мощность, гибкость, предоставляют программисту возможность создавать большие структурированные программы любой сложности и назначения. Однако в отличие от Паскаля, язык С не является строго типизированным, что не гарантирует надежности программ. Ответственность за надежность программного продукта ложится на программиста, что предъявляет высокие требования к его квалификации. Поэтому программист должен хорошо знать особенности языка, чтобы со знанием дела его использовать.
В начале 1980-х годов Бьерн Страуструп (США) разработал новый язык С++, который, как видно из его названия, является наследником языка С. С++ является надмножеством над С и использует все его возможности. Новизна С++ состоит в том, что он впитал в себя идеи объектно-ориентированного программирования (ООП) таких языков, как Симула 67. В типичных языках структурного программирования таких, как С или Паскаль, данные и обрабатывающие их функции разделены. В языках ООП появились понятия объекта и класса объектов. Класс представляет собой новый обобщенный тип объектов, который содержит единую совокупность данных и функций (методов) их обработки для схожих объектов. Вместе с другими идеями ООП представляет собой технологию программирования, позволяющую формировать более адекватные модели объектов реального мира. С++ расширяет существующие конструкции языка С. Программы на С могут компилироваться в среде С++, но не наоборот. Появляются новые средства для ввода-вывода данных и известных в С операций, а также совсем новые конструкции и правила организации программ для реализации концепций ООП. Нередко алгоритмы методов, описывающих поведение объектов настолько сложны, что требуют использования всех возможностей структурного программирования. Разработка программного обеспечения ЭВМ в настоящее время осуществляется с использованием двух основных технологий – структурного (процедурного) программирования и объектно-ориентированного программирования. Таким образом, опытным программистам необходимо знать обе технологии программирования и уметь ими пользоваться.
Концепции структурного программирования
Структурное программирование предполагает выполнение последовательности этапов разработки программ для решения задач с использованием ЭВМ.
Постановка задачи – формулирование задачи и целей ее решения на естественном языке и установление критериев решения задачи. Результат этапа – техническое задание на разработку программного обеспечения.
Формализация задачи с использованием математического аппарата и получение ее абстрактной математической модели в виде формул и уравнений.
Выбор численного метода из возможных вариантов с учетом требований по времени и точности решения и занимаемого объема памяти ЭВМ.
Алгоритмизация – построение общего плана решения, т. е. алгоритма задачи в виде логической последовательности этапов (шагов, действий, операций), приводящих от исходных данных к искомому результату за конечное время на языке понятном человеку.
Программирование – перевод алгоритма задачи на язык ЭВМ (систему команд), т.е. кодирование алгоритма. Процесс разработки программы делится на следующие этапы: 1) запись алгоритма на ЯВУ в виде исходного файла в памяти (например, prog1.c); 2) компиляция и редактирование связей (объектный файл – prog1.obj); 3) загрузка программы в оперативную память (исполняемый файл – prog1.exe); 4) исполнение программы; 5) получение результатов программы.
Отладка программы – поиск и исправление ошибок в программе. Этот процесс разбивается на два этапа: 1) синтаксическая отладка – исправление формальных ошибок, связанных с нарушением норм языка программирования, с помощью ЭВМ; 2) семантическая отладка – исправление логических (смысловых) ошибок с применением специальных тестовых данных.
Исполнение (эксплуатация) программы с любыми допустимыми данными и получение результатов решения задачи.
Интерпретация результатов и поддержка программы в процессе эксплуатации – изменение программы в соответствии с требованиями пользователей, а также исправление ошибок, выявленных в процессе ее эксплуатации.
Существование программы можно разделить на три периода: 1) разработка (этапы 1– 4); 2) реализация (этапы 5, 6); 3) сопровождение (этапы 7, 8).
Функциональная декомпозиция.
При решении сложной задачи разработка и реализация ее алгоритма потребует написания длинной программы, которую трудно отлаживать из-за возможного большого числа ошибок. Внесение изменений вызовет необходимость дополнительного выполнения этапов разработки и реализации программы в целом.
Целесообразно такую задачу разбить на легко решаемые подзадачи, которые в совокупности дают решение исходной задачи. Такой метод решения задач называется функциональной декомпозицией. Для применения этого метода на ЭВМ используется принцип модульного программирования. Каждая подзадача реализуется в виде отдельной подпрограммы (функции, процедуры). Для решения всей задачи создается главная функция, которая вызывает другие функции, передавая им исходные аргументы и получая промежуточные результаты.
Большую программу целесообразно разделить на несколько программных модулей (автономно компилируемых файлов), например, файл подпрограмм и файл главной функции, а для их соединения в общую программу создается файл проекта. При этом файл подпрограмм можно рассматривать как библиотеку готовых подпрограмм, которые можно использовать в других задачах, что сократит время их решения.
Для структурного программирования характерно то, что данные и методы их обработки (функции, процедуры) отделены друг от друга. Данные рассматриваются как пассивные элементы, обрабатываемые функциями.