
- •Л. Б. Бузюков, о. Б. Петрова
- •Учебное пособие
- •Предисловие
- •Глава 1. Введение в язык с
- •1.1. История создания и особенности языка с
- •1.3. Элементы языка с
- •1.3.1. Основные символы
- •1.3.2. Ключевые слова
- •1.3.3. Идентификаторы
- •1.3.4. Константы
- •1.3.5. Лексемы
- •1.3.6. Комментарии
- •Глава 2. Типы данных языка c
- •2.1. Числовые типы данных
- •2.2. Объявление переменных
- •2.3. Данные целого типа
- •2.4. Данные вещественного типа
- •Глава 3. Выражения
- •3.1. Операции
- •3.1.1. Арифметические операции
- •3.1.2. Операция присваивания
- •Глава 4. Составление простейших программ
- •4.1. Препроцессор и его функции
- •4.2. Основные директивы препроцессора
- •4.2.1. Директива include
- •4.2.2. Директива define
- •4.2.3. Директива undef
- •4.3. Структура и правила составления программ
- •4.3.1. Структура функции
- •4.3.2. Функция main()
- •4.3.3. Структура простой программы
- •4.3.4. Правила записи объявлений, операторов и комментариев
- •4.3.5. Пример простейшей программы
- •Глава 5. Средства ввода/вывода
- •5.1. Общие замечания
- •5.2. Функция форматированного вывода printf()
- •5.2.1. Основные форматы
- •5.2.2. Модификации форматов
- •5.3. Функция форматированного ввода scanf()
- •Глава 6. Управляющие операторы
- •6.1. Условные операторы
- •6.1.1. Логические выражения
- •6.1.2. Формы оператора if
- •6.1.3. Оператор выбора switch
- •6.2. Операторы цикла
- •6.2.1. Оператор while
- •6.2.2. Оператор for
- •6.2.3. Оператор do-while
- •6.3. Операторы перехода
- •6.3.1. Оператор break
- •6.3.2. Оператор continue
- •6.3.3. Оператор return
- •6.3.4. Применение оператора goto и меток
- •Глава 7. Функции
- •7.1. Основные понятия
- •7.2. Определение функции
- •7.3. Прототип функции
- •7.4. Вызов функции
- •Глава 8. Классы памяти
- •8.1. Логическаяструктура памяти программы
- •8.2. Особенности классов памяти
- •8.3. Объявления переменных
- •8.4. Объявления функций
- •8.5. Время жизни и область видимости программных объектов
- •8.6. Инициализация глобальных и локальных переменных
- •Глава 9. Указатели
- •9.1. Операция получения адреса
- •9.2. Операции над указателями
- •Глава 10. Массивы
- •10.1. Общие сведения о массивах
- •10.2. Одномерные массивы
- •10.3. Двумерные массивы
- •10.4. Массивы и указатели
- •10.5. Массивы и функции
- •Глава 11. Строки
- •11.1. Представление символьной строки при помощи одномерного массива
- •11.2. Указатель на символьную строку
- •11.3. Ввод/вывод символьных строк
- •11.4. Массивы символьных строк
- •11.5. Функции работы состроками
- •Глава 12. Структуры
- •12.1. Определение структуры
- •12.2. Структуры и функции
- •12.3. Указатели на структуру
- •12.4. Массивы структур
- •12.5. Вложенные структуры
- •12.6. Использование синонима типа
- •12.7. Объединения
- •Глава 13. Файлы
- •13.1. Работа с файлами
- •13.2. Функции ввода/вывода
- •Глава 14. Динамическая память
- •14.1. Распределение памяти
- •14.2. Функции управление памятью
- •Глава 15. Проект
- •15.1. Основы создания проекта
- •15.2. Пример создания проекта
- •Глава 17. Основы объектно-ориентированного программирования
- •17.1. Объектно-ориентированный подход
- •17.3. Конструкторы и деструкторы
- •17.4. Инкапсуляция
- •17.5. Полиморфизм
- •17.6. Наследование
- •17.7. Виды взаимодействия классов
- •17.8. Способы графического представления объектно-ориентированной задачи
- •18.2. Библиотека Win32 api
- •18.3. Библиотека owl
- •18.4. Библиотека vcl
- •18.5. Библиотека clx
- •18.6. Библиотека mfc
- •18.7. Библиотека OpenGl
- •19.3. Создание проекта
- •19.4. Редактирование проекта
- •19.5. Компиляция и выполнение программы
- •19.6. Файловая структура проекта
- •19.7. Создание консольного приложения
- •Глава 20. Разработка приложений для операционных систем windows
- •20.1. Взаимодействие программы и Windows
- •20.2. Компоненты библиотеки Win32 api
- •20.3.Функция WinMain()
- •20.4. Оконная процедура
- •20.5. Структура программы для ос Windows
- •20.6. Ресурсы Windows
- •20.7. Взаимодействие прикладной программы и устройств в Windows
- •Глава 21. Создание приложений для ос windows на основе библиотеки mfc
- •21.1. Обзор классов библиотеки mfc
- •21.2. Класс cString
- •21.3. Класс cFile
- •21.4. Класс cPoint
- •21.5. Класс cRect
- •21.7. Приложение, основанное на диалоге
- •21.8. Использование в приложении элементов управления
- •21.9. Мастер классов mfc ClassWizard
- •21.10. Установка начального значения элементам управления
- •21.11. Элементы управления Picture
- •21.12. Элемент управления Group Box
- •21.13. Элемент управления Radio Button
- •21.14. Элемент управления Check Box
- •21.15. Элемент управления List Box
- •21.16. Создание меню
- •21.17. Приложение с двумя диалоговыми панелями
- •21.18. Приложение sdi
- •21.19. Создание панели инструментов
- •21.20. Приложение mdi
- •21.21. Контекстыустройств в mfc
- •21.22. Графические объекты Windows в mfc
- •21.23. Графические операции в mfc
- •П.1. Основы методологии конструирования программ
- •П.1.1. Основные понятия. Программа и алгоритм
- •П.1.2. Этапы разработки программ
- •П.2. Алгоритмы
- •П.2.1. Алгоритм и его свойства
- •П.2.2. Способы описания алгоритмов
- •П.2.3. Средства графического изображения алгоритмов Схемы алгоритмов
- •Псевдокоды
- •Структурограммы
- •П.3. Основные приемы программирования
- •П.3.1. Разновидности структур программирования
- •П.3.2. Программирование линейных и разветвляющихся процессов
- •П.3.3. Программирование циклических процессов
- •Арифметический цикл (цикл с параметром)
- •Итерационный цикл
- •Вложенный цикл
- •Литература
Глава 1. Введение в язык с
1.1. История создания и особенности языка С 1.2. Язык С++ как развития языка С 1.3. Элементы языка С 1.3.1. Основные символы 1.3.2. Ключевые слова 1.3.3. Идентификаторы 1.3.4. Константы 1.3.5. Лексемы 1.3.6. Комментарии
1.1. История создания и особенности языка с
Язык C (СИ) был разработан в 1972 г. Д. Ритчи (Dennis M. Ritchie) в фирме Bell Laboratories. Истоком языка принято считать язык BCPL (Basic Combined Programming Language), разработанный M. Ричардсом (Martin Richards) в Кембридже. В 1970 г. в Bell Labs Кеном Томпсоном (Ken Thompson) был разработан вариант языка BCPL – язык B (БИ) для ранней версии операционной системы (ОС) Unix (компьютер PDP-11, Digital Equipment). Недостатки языка B, в частности, отсутствие типов данных привели к созданию на его основе нового языка C.
Язык C первоначально создавался для разработки ОС Unix, слабо зависящей от конкретной архитектуры ЭВМ и обладающей развитыми инструментальными возможностями. Достоинства ОС Unix вывели ее на одно из первых мест в мире по популярности среди специалистов в области информационных технологий. Все основные компоненты ОС Unix, транслятор и обслуживающие программы написаны на языке C.
Традиционно для разработки операционных систем и их компонентов используют Ассемблеры. Программирование на Ассемблере очень трудоемко и ориентировано на конкретную архитектуру ЭВМ, что не соответствовало задаче, поставленной перед разработчиками ОС Unix. Язык C, как язык программирования высокого уровня, свободен от этих недостатков. Он не связан с конкретной архитектурой ЭВМ. Компиляторы языка функционируют на разных по архитектуре ЭВМ под управлением ОС Unix, MS-DOS и т. д. Технология подготовки и отладки программ на C характерна для языков высокого уровня (Fortran, Pascal, Ada). В то же время ему присущи многие черты языков “низкого уровня” (доступ к адресам объектов и работа с ними, работа с битовыми величинами), позволяющие организовать эффективное управление устройствами и программами. По объему занимаемой памяти и времени выполнения программы на C близки программам на Ассемблере. В определенном смысле C занимает промежуточное положение между языками высокого уровня и машинно-ориентированными языками.
Для выработки определения языка С институтом американских национальных стандартов (ANSI) учрежден специальный комитет (1983). Результатом его работы явился стандарт ANSI-C (1989). Международная организация по стандартизации (International Standard Organization, ISO) приняла свой стандарт ISO C (1990), практически совпадающий с ANSI C. Стандартизированная версия языка описана в [1], а решения к упражнениям в [2].
Новый международный стандарт языка C ISO/IEC 9899:1999, получивший название C 99, принят в 1999 г. Новый стандарт преследует цели расширения области применения языка, его интернационализации и устранения явных недостатков, выявленных программистами-практиками. Так, в целях интернационализации языка внедряются способы обработки международных наборов символов. Появление стандарта C 99 говорит о большом значении языка C в международном программировании [3, 4].
Язык C обеспечивает разнообразие типов данных. Базовыми типами являются целые, вещественные числа и символы (литеры). Язык разрешает модификацию базовых типов данных, а также создание пользовательских типов. В языке используются стандартные типы данных int, char, float, double; применяются массивы, структуры (записи), файлы; имеется возможность конструирования очередей, списков.
Язык располагает управляющими инструкциями, позволяющими создавать хорошо структурированные программы:
|
{…} |
|
if – else |
|
switch |
|
while, for |
|
do |
|
break,continue |
Однако в C отсутствуют многие средства, присущие другим языкам программирования, в частности:
встроенные средства ввода/вывода, методы доступа к файлам;
средства работы с символьными строками;
средства работы с составными объектами (массивы, структуры).
Все это – механизмы высокого уровня, которые в C реализуются с помощью явно вызываемых функций.
Программа на C состоит из программных единиц одного типа – функций. Аргументы могут передаваться функциям посредством копирования значений этих аргументов; при этом вызванная функция не может изменить фактический аргумент в вызывающей подпрограмме.
Возможен иной вариант – передача параметра по ссылке, когда явно передается указатель, т. е. адрес, при этом функция сможет изменить объект, на который ссылается указатель.
В C предусмотрен ряд операций низкого уровня: прямой доступ к памяти, операции над битами данных и адресной арифметики.
Программы на языке C компактны и гибки. Язык C доверяет программисту и разрешает ему практически все; из-за этого C нельзя считать языком надежного программирования, и вся ответственность за качество программы лежит на программисте, который должен знать особенности языка и его реализации.
1.2. Язык C ++ как развитие языка C
Язык C++ был разработан Бьерном Страуструпом (Bjarne Stroustrup) в Bell Labs в конце 70-х годов [5]. Новый язык явился расширением языка C. Включив в язык C ряд дополнительных возможностей, Б. Страуструп еще в 1980 г. создал то, что первоначально было названо “C с классами”. Было произведено объединение классов и возможностей объектно-ориентированного программирования из языка Simula с мощью и эффективностью языка C.
Стандарт языка C++ реализован фирмой Borland в компиляторе Borland C++ версий 3.0 и 3.1 [6].
C++ представляет собой результат развития языка C, является универсальным языком программирования, позволяющим разрабатывать как объектно-ориентированные, так и алгоритмические программы. C++ предоставляет гибкие и эффективные средства определения новых типов, при использовании которых программа разделяется на части, легко поддающиеся контролю. Такой метод называется абстракцией данных.
Пользовательские типы данных используются для создания в программе объектов. Тип объекта может быть установлен во время компиляции или на этапе выполнения программы. Программирование с применением таких объектов называют объектно-ориентированным.
Ключевым понятием в C++ является класс. Класс – это тип, определяемый пользователем. Классы предназначены для создания объектов, обеспечивают инициализацию данных объекта, регламентируют доступ к данным, поддерживают преобразование типов, динамическое определение типа, неявное преобразование пользовательских типов, контролируемое управление памятью и перегрузку операторов.
При разработке C++ большое внимание было уделено совместимости с языком C. Ряд понятий был заимствован из других языков, так, из BCPL взят знак комментария, из Simula 67 – концепция классов, из Algol 68 – свобода расположения описаний.
Название C++ появилось летом 1983 г. Выбор такого имени должен был показать эволюционный переход от языка C (++ операция приращения). Принятие имени C+ явилось бы синтаксической ошибкой. Некоторые знатоки утверждают, что было бы лучше использовать имя ++С. Имя D язык не получил, поскольку он является расширением языка C. Интересно отметить, что плана разработки С++ на бумаге никогда не было; проект, документация и реализация производились одновременно.
Отметим ряд причин, по которым в качестве базы C++ был выбран язык C:
многоцелевой, лаконичный, относительно низкого уровня;
отвечает большинству задач системного программирования;
пригоден в среде программирования Unix и, как утверждают разработчики, язык C работает везде и на всем.
Почему была сохранена совместимость с языком C, хотя, отказавшись от определенной части наследия, можно было бы избежать ряда проблем:
имеются миллионы строк, написанных на C, полезных и для C++, которые не нужно переписывать с одного языка на другой;
имеются сотни библиотечных функций и сервисных программ на C, которые можно использовать на C++;
имеются десятки тысяч программистов, знающих C, которым необходимо освоить только особенности C++, а не заново изучать его основы;
поскольку C++ и C будет использоваться на одних и тех же системах, одними и теми же людьми, отличия должны быть или очень большими или очень маленькими, чтобы свести к минимуму ошибки и недоразумения.
Позднее была специально проведена проверка определения C++, чтобы удостовериться в том, что любая конструкция, допустимая в C, действительно означает то же самое и в С++. Стандартом языка C++ является ISO/IEC 14882 “Standard for the C++ Programming Language” (1998).