Классификация языков программирования
В.Л.Бусько, А.Г.Корбит, Т.М.Кривоносова
Конспект лекций по курсу
ОСНОВЫ АЛГОРИТМИЗАЦИИ И ПРОГРАММИРОВАНИЯ
для студентов всех специальностей и всех форм обучения
Минск 2004
УДК 621.3.6 (075.8)
ББК22.193 Я73
С 35
Рецензент: канд. техн. наук, доцент, зав. кафедры ПОИТ БГУИР В.В.Бахтизин
Бусько В.Л., Корбит А.Г., Кривоносова Т.М.
Конспект лекций по курсу «Основы алгоритмизации и программирования» для студентов всех специальностей и всех форм обучения. - Мн.: БГУИР, 2004. - 89 с.: ил. 4.
ISBN
Общий курс программирования предполагает знакомство с устройством ПЭВМ, теорией кодирования и хранения данных в памяти; изучение и закрепление навыков разработки вычислительных алгоритмов решения задач; изучение языка программирования Си; освоение операционных систем, изучение и освоение различных технологий программирования при решении конкретных задач.
Усвоение этих разделов осуществляется при подготовке студентов информационного профиля. Для студентов радиотехнических специальностей в первую очередь необходимо получить навыки алгоритмизации и программирования, освоить способы решения, в первую очередь, вычислительных задач.
Настоящее пособие по курсу «Основы алгоритмизации и программирования» представляет собой конспект лекций по темам, охватывающим основные конструкции языка Си. Неотъемлемой частью данного пособия является лабораторный практикум [1], при выполнении которого студенты осваивают основные конструкции среды программирования и получают навыки алгоритмизации и решения задач на персональном компьютере.
УДК 621.3.6 (075.8)
ББК22.193 Я73
ISBN
ã Коллектив авторов, 2004
СОДЕРЖАНИЕ
Стр. | |
1. Введение | |
1.1. История создания ЭВМ | |
1.2. Структура ПЭВМ | |
1.3. Классификация языков программирования | |
1.4. Размещение данных и программ в памяти ПЭВМ | |
1.5. Программные модули | |
1.6. Ошибки | |
1.7. Функциональная и модульная декомпозиции | |
1.8. Файловая система хранения информации | |
1.9. Операционная система | |
2. Основные понятия и определения | |
2.1. Этапы решения задач на ЭВМ | |
2.2. Понятие алгоритма и способы его записи | |
2.3. Свойства алгоритмов | |
2.4. Способы описания алгоритмов | |
2.5. Графическое описание алгоритма | |
2.6. Основные символы схемы алгоритма | |
2.7. Пример простейшего линейного алгоритма | |
2.8. Немного истории | |
3. Синтаксис языка Cи | |
3.1. Алфавит языка | |
3.2. Лексемы | |
3.3. Идентификаторы и ключевые слова | |
3.4. Знаки операций | |
3.5. Литералы (константы) | |
3.6. Комментарии | |
4. Базовые типы объектов | |
4.1. Простейшая программа | |
4.2. Основные типы данных | |
4.3. Декларация (объявление) объектов | |
4.4. Данные целого типа (int) | |
4.5. Данные символьного типа (char) | |
4.6. Данные вещественного типа (float, double) | |
5. Константы в программах | |
5.1. Целочисленные константы | |
5.2. Константы вещественного типа | |
5.3. Символьные константы | |
5.4. Строковые константы | |
Стр. | |
6. Обзор операций | |
6.1. Операции, выражения | |
6.2. Арифметические операции | |
6.3. Операции присваивания | |
6.4. Сокращенная запись операции присваивания | |
6.5. Преобразование типов операндов арифметических операций | |
6.6. Операция приведения типа | |
6.7. Операции сравнения | |
6.8. Логические операции | |
6.9. Побитовые логические операции. Операции над битами | |
6.10. Операция , (запятая) | |
7. Обзор базовых инструкций языка С | |
7.1. Стандартная библиотека языка Си | |
7.2. Стандартные математические функции | |
7.3. Функции вывода данных на дисплей | |
7.4. Функции ввода информации | |
7.5. Ввод - вывод потоками | |
7.6. Дополнительные функции | |
8. Синтаксис операторов языка C | |
8.1. Условные операторы | |
8.2. Условная операция «? :» | |
8.3. Оператор выбора альтернатив (переключатель) | |
9. Составление циклических алгоритмов | |
9.1. Понятие цикла | |
9.2. Оператор с предусловием while | |
9.3. Оператор цикла с постусловием do – while | |
9.4. Оператор цикла с предусловием и коррекцией for | |
10. Операторы передачи управления | |
10.1. Оператор безусловного перехода goto | |
10.2. Оператор continue | |
10.3. Оператор break | |
10.4. Оператор return | |
11 . Указатели | |
11.1. Указатели | |
11.2. Операции над указателями (косвенная адресация) | |
12. Массивы | |
12.1. Понятие массива | |
12.2. Одномерные массивы | |
12.3. Многомерные массивы | |
12.4. Операция sizeof | |
12.5. Применение указателей | |
12.6. Указатели на указатели | |
12.7. Адресная функция | |
Стр. | |
13. Работа с динамической памятью | |
13.1. Пример создания одномерного динамического массива: | |
13.2. Пример создание двуxмерного динамического массива: | |
4. Строки в языке Си | |
14.1. Русификация под Visual | |
15. Функции пользователя | |
15.1. Декларация функции | |
15.2. Вызов функции | |
15.3. Операция typedef | |
15.4. Указатели на функции | |
15.5. Параметры командной строки функции main | |
15.6. Функции с переменным числом параметров | |
16. Классы памяти и области действия объектов | |
16.1. Классы памяти объектов в языке Cи | |
16.2. Автоматические переменные | |
16.3. Внешние переменные | |
16.4. Область действия переменных | |
17. Структуры, объединения, перечисления | |
17.1. Структуры | |
17.2. Декларация структурного типа данных | |
17.3. Создание структурных переменных | |
17.4. Вложенные структуры | |
17.5. Массивы структур | |
17.6. Размещение структурных переменных в памяти | |
17.7. Объединения | |
17.8. Перечисления | |
18. Файлы в языке С | |
18.1. Открытие файла | |
18.2. Закрытие файла | |
18.3. Запись - чтение информации | |
18.4. Текстовые файлы | |
18.5. Бинарные файлы | |
Список рекомендуемой литературы | |
Список используемой литературы | |
Приложение 1. Таблицы символов ASCII | |
Приложение 2. Операции языка Си | |
Приложение 3. Возможности препроцессора |
1. Введение
1.1. История создания ЭВМ
Проблема вычислений сопровождает человечество на всем историческом отрезке его существования. Первый счетный инструмент абак был известен еще в V веке до нашей эры в Египте, Финикии, Греции и представлял дощечку, покрытую слоем песка, на которой острой палочкой проводили линии и в получавшихся колонках по позиционному принципу размещали камешки. В древнем Риме абак назывался Calculi. От этого слова произошло в дальнейшем латинское calculatore (вычислять).
Первую счетную машину для выполнения сложения и вычитания сконструировал в 1623г. профессор математики и астрономии Тюбингенского университета В.Шинкард. Она была изготовлена в одном экземпляре и, сгорев во время пожара в 1624г., не оказала влияния на развитие идей счетной техники.
Биография механических счетных машин ведется от арифметической машины французского математика, физика и философа Б.Паскаля, созданной в 1642г. Над счетной машиной Б.Паскаль работал 12 лет и сделал около 50 действующих моделей. Первый арифмометр, выполняющий все четыре арифметических действия, был предложен в 1670г. немецким ученым Г.В.Лейбницем. В Беларуси первая суммирующая машина была изобретена и изготовлена в 1770г. в г. Несвиже Евной Якобсоном, часовым мастером и механиком.
Идею универсальной вычислительной машины с программным управлением впервые предложил в своем неосуществленном проекте в 1834 г. английский ученый Ч.Бэббедж. Ее структура совпадала по существу со структурой современных ЭВМ.
Отличительной особенностью электронных вычислительных машин (ЭВМ) от счетных машин является наличие устройства управления вычислениями и принцип хранения программы. Еще одной особенностью современных ЭВМ является применение двоичной системы счисления.
Двоичную арифметику разработал Г.В.Лейбниц. Он также предложил арифметизацию логики за 200 лет до создания алгебры Дж.Буля (1815). Как двоичная арифметика представляет все числа с помощью двух символов (0,1), так и булева алгебра оперирует с двумя понятиями (истина, ложь) и тремя операциями (и, или, не).
С помощью этих понятий можно смоделировать любые логические цепочки и построить 16 логических функций. На этой основе строятся все современные логические схемы различной сложности, реализуемые в ЭВМ.
Первая ЭВМ была создана в 1945г. (США), она представляла огромное сооружение, содержащее 18000 электронных ламп, 1500 реле и выполняла около 3000 умножений в секунду. Мировой парк ЭВМ к 1965г. насчитывал порядка 50 тысяч компьютеров, к началу 1975г. – более 200 тысяч.
Первые персональные ЭВМ (ПЭВМ) появились в начале 70-х годов. Скорость вычислений достигает 108 операций в секунду.
Структура ПЭВМ
ПЭВМ содержат клавиатуру, системный блок, и дисплей. Схема ПЭВМ представлена на рис. 1.
Рис.1.
В системном блоке ПЭВМ содержатся:
- центральный процессор (ЦП), который осуществляет управление работой и выполнение расчетов по программе;
- оперативное запоминающее устройство (ОЗУ), в котором во время работы компьютера располагаются выполняемые программы (при выключении компьютера - очищается);
- постоянное запоминающее устройство (ПЗУ), содержащее программы, необходимые для запуска компьютера;
- жесткий магнитный диск (ЖД), получивший название винчестер;
- дисковод (ГД) для сменных, гибких магнитных дисков (дискет);
- CD-Rom (СД) – устройство чтения компакт-дисков.
В системный блок встроены электронные схемы, управляющие работой различных устройств, входящих в состав компьютера. К системному блоку подключаются дисплей (монитор) для отображения информации, клавиатура для ввода данных и команд, устройство для визуального управления - «мышь», печатающее устройство - принтер, устройство для считывания и ввода графической информации - сканер.
Классификация языков программирования
1. По степени абстракции от архитектуры компьютера:
- языки программирования низкого уровня - машинный язык (язык машинных кодов). Используя такой язык, программист должен полностью владеть архитектурой ЭВМ;
- языки программирования среднего уровня - язык мнемонических кодов (язык ассемблера – символьная форма машинного языка с возможностями языков высокого уровня). Используя такие языки, необходимо владеть архитектурой ЭВМ, а также иметь специальную программу-переводчика инструкций пользовательской программы на язык машинных кодов, называемую транслятор;
- языки высокого уровня, или алгоритмические языки (Паскаль, Алгол, Фортран, Си). Алгоритмические языки имеют свой алфавит и синтаксис, а также трансляторы со встроенной средой программирования, которая обладает развитыми средствами подготовки, редактирования, отладки и выполнения программ. Инструкции программы на алгоритмическом языке записываются в виде операторов.
2. По структурному строению программ:
- процедурно-ориентированные языки (Pascal, C и др.) – используется метод разбивки всей задачи на более простые подзадачи (процедуры или функции) и их независимая реализация. Достоинство - создание достаточно сложных программ.
- объектно-ориентированные языки (C++, Java и др.) – из области решаемой проблемы выделяются классы, объединяющие связанные каким-либо признаком данные и функции по их обработке. Далее создаются объекты данных классов, которые, взаимодействуя друг с другом, осуществляют решение поставленной задачи.