Программирование C++. Пензенский государственный университет введение в программирование на языке с лабораторный практикум пенза 2010 г 2
Скачать 1.47 Mb.
|
1 ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ Государственное образовательное учреждение высшего профессионального образования ПЕНЗЕНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ____________________________________________________________ ВВЕДЕНИЕ В ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ С+ ЛАБОРАТОРНЫЙ ПРАКТИКУМ Пенза 2010 г 2 УДК 681.3 С 17 Рассматриваются базовые понятия программирования на языке С, необходимые для разработки сложных программ принципы взаимодействия программ и структура программных модулей основы структурной и объектно-ориентированной разработки программ работа в интегрированной среде программирования Microsoft Visual Studio. Приведены примеры программ и задания для выполнения лабораторных работ. Учебное пособие подготовлено на кафедре Математическое обеспечение и применение ЭВМ и рекомендуется для студентов специальности 23.01.05 Программное обеспечение вычислительной техники и автоматизированных система также бакалавров по направлнию 230200.62 Информационные системы. Составители Л.В.Гурьянов, Л.С. Гурьянова, Е.А.Дзюба, Д.В.Такташкин Рецензент Д.И.Прошин, к.т.н., начальник отдела бизнес-единицы Программное обеспечение НПФ КРУГ © Издательство ПГУ, 2010 3 СОДЕРЖАНИЕ Стр. ВВЕДЕНИЕ __________________________________________________________________ 1 Процесс построения исполняемой программы ___________________________________ 1 Библиотеки функций ________________________________________________________ 1 Заголовочные файлы С+ ____________________________________________________ 1 Главная программа __________________________________________________________ 1 Консольное приложение _____________________________________________________ 2 Первая программа ___________________________________________________________ 2 1. ОСНОВЫ. СИНТАКСИС, ЗНАЧЕНИЯ И УПРАВЛЯЮЩИЕ СТРУКТУРЫ ________ 4 1.1 Синтаксические элементы ______________________________________________ 4 1.2 Значения и типы ______________________________________________________ 4 1.3 Константы и переменные _______________________________________________ 6 1.4 Операции и выражения ________________________________________________ 7 1.5 Вводи вывод _________________________________________________________ 9 1.6 Управляющие структуры ______________________________________________ 11 1.7 Структура простой программы _________________________________________ 14 1.8 Примеры программ ___________________________________________________ 15 1.9 Задания для самостоятельной работы ___________________________________ 18 1.9.1 Составление простых программ 18 1.9.2 Программирование с использованием управляющих структур ______________ 19 2. ФУНКЦИИ. ОТ СТРУКТУРНОГО ПРОГРАММИРОВАНИЯ К МОДУЛЬНОМУ __ 21 2.1 Определение и вызов функций _________________________________________ 21 2.2 Глобальные данные и параметры _______________________________________ 23 2.3 Параметры по умолчанию _____________________________________________ 24 2.4 Рекурсия 25 2.5 Библиотечные функции _______________________________________________ 27 2.6 Перегрузка и шаблоны функций ________________________________________ 28 2.7 Задания для самостоятельной работы ___________________________________ 29 2.7.1 Разработка простых и рекурсивных функций ____________________________ 29 3. СТРУКТУРЫ ДАННЫХ. МАССИВЫ, СТРОКИ, УКАЗАТЕЛИ И СТРУКТУРЫ 31 3.1 Массивы ____________________________________________________________ 31 3.2 Строки – массивы символов ___________________________________________ 33 3.3 Указатели и ccылки __________________________________________________ 34 3.4 Указатели и массивы _________________________________________________ 36 3.5 Указатели и ссылки как параметры _____________________________________ 38 3.6 Передача массивов в качестве параметров _______________________________ 39 3.7 Структуры __________________________________________________________ 40 3.8 Примеры программ ___________________________________________________ 41 3.8.1 Стек как одномерный статический массив _______________________________ 41 3.8.2 Динамический двумерный массив ______________________________________ 43 3.8.3 Односвязный список _________________________________________________ 45 3.9 Задания для самостоятельной работы ___________________________________ 48 3.9.1 Разработка функций обработки числовых массивов и строк ________________ 48 3.9.2 Разработка динамических структур данных и функций их обработки ________ 50 4. КЛАССЫ И ОБЪЕКТЫ ___________________________________________________ 54 4.1 Конструкторы и деструкторы __________________________________________ 57 4.2 Перегрузка операций для классов _______________________________________ 58 4.3 Наследование и полиморфизм _________________________________________ 62 4.4 Примеры программ ___________________________________________________ 66 4.4.1 Класс Одномерный динамический массив _____________________________ 66 4 4.4.2 Класс Динамически размещаемая срока _______________________________ 69 4.4.3 Базовый и наследуемый классы для работы с линейным списком ___________ 71 4.5 Задания для самостоятельной работы ___________________________________ 77 4.5.1 Разработка классов для работы с динамическими структурами данных _______ 77 5. ДОПОЛНИТЕЛЬНЫЕ ЗАДАНИЯ __________________________________________ 81 5.1 Обработка числовых массивов и строк __________________________________ 81 5.2 Динамические структуры данных _______________________________________ 83 5.3 Классы для создания и обработки динамических структур данных ___________ 86 ЛИТЕРАТУРА ______________________________________________________________ 87 1 ВВЕДЕНИЕ Процесс построения исполняемой программы Процесс построения исполняемой программы файла) из исходной программы на языке С+ включает этапы компиляции и компоновки. На этих этапах широко применяются такие стандартные программные средства языка С как заголовочные файлы и библиотеки функций. Библиотеки функций Язык Сне содержит встроенных функций, например для операций ввода-вывода или математических вычислений. Все эти функции, а также функции работы со строками и многие другие функции, необходимые для разработки программ, включены в стандартные библиотеки функций языка. Имеется множество специализированных коммерческих библиотек функций для работы с графикой, базами данных, сетевыми ресурсами. Библиотеки функций являются составной частью Си позволяют значительно сократить время разработки программ. Заголовочные файлы С+ Заголовочные файлы содержат определения данных и функций, которые используется компилятором для генерации исполняемой программы. Заголовочные файлы содержат информацию, необходимую для выполнения пограммой математических операций, определения даты и времени, операций ввода-вывода и многих других операций. Включение в программу определений заголовочного файла осуществляется Borland C++: #include <имя_файла.h> Microsoft Visual Studio C++: #include <имя_файла> using namespace имя_пространства_имен; Главная программа Каждая программа на С имеет главную программу, main – часть программы, которая всегда выполняется первой. 2 Консольное приложение Все примеры программ на С, рассматриваемые далее, ориентированны на выполнение в режиме консоли. Этот режим не требует создания графического интерфейса пользователя ив качестве устройства ввода даных использует клавиатуру, а в качестве устройства вывода – дисплей. В Borland режим консоли устанавливается автоматически. В Microsoft Visual следует задать этот режим – Win32 Console Application – при выборе типа создаваемого проекта. Первая программа Наша первая программа Ex_001 выводит нечетные значения одномерного массива. Исходный код Ex_001, представленный в среде Borland C++ и Microsoft Visual показывает, что Сне так прост, как, например, Pascal или Для обращения к элементам массива С позволяет использовать адресную арифметику – m+i . Да, это сложение, ноне двух целых чисел, а адреса первого элемента массива и смещения i . Разыменование адреса – *(m+i) – дает значение, которое храниться поэтому адресу. Впрочем, С++ прекрасно понимает и обычную нотацию для обращения кому элементу массива – m [ i ] Как видно из этих примеров в консольном приложении различие исходного кода заключается прежде всего в операциях ввода-вывода. В примере для Borland C++ были использованы операторы языка C – scanf, printf, а в Microsoft Visual Studio – операторы языка C++ cin, cout. Сне только наследует выразительность и лаконичность языка С, но также включает всю мощь средств объектно-ориентированного программирования. Сегодня, С один из востребованных языков программирования и его знание является необходимой основой для разработки современного программного обеспечения. 3 4 1. ОСНОВЫ. СИНТАКСИС, ЗНАЧЕНИЯ И УПРАВЛЯЮЩИЕ СТРУКТУРЫ Синтаксические элементы К синтаксическим элементам языка программирования обычно относят следующие набор символов – буквы и цифры (например, символы ASCII, американского стандарта обмена информацией, а также ряд специальных символов идентификаторы – имена объектов языка (типов, констант, переменных и других. Идентификатор состоит из последовательности букв, цифр и знака подчеркивания Идентификатор не может начинаться с цифры. Отметим, что abc и Abc – два разных идентификатора, те. заглавные и строчные буквы различаются символы (знаки) операций, ограничители и скобки – символы арифметических и логических операций, например +, -, /, *, !, &, | ; символы операций отношения !=, =, >= и другие символ ограничитель операторов парные ограничители ( … ), [ … ] и операторные скобки – {…}; ключевые слова – идентификаторы, используемые в качестве фиксированной части синтаксиса какой-либо конструкции языка. Например int, char, if, while, выражения – конструкции языка для вычисления и изменения значений. Выражения включают символы операций и операнды (константы, переменные, функции и другие объекты языка); операторы – конструкции языка, необходимые для обработки данных и управления порядком действий. Оператор задает законченное описание некоторого действия. Различают операторы присваивания, ввода-вывода, операторы, реализующие управляющие структуры; комментарии – пояснения, включаемые в текст программы, ноне обрабатываемые компилятором. Комментарии в С++ : // – однострочный /* ... */ – многострочный, включающий несколько строк. Значения и типы Цель программы состоит в вычислении значений. Значение данных может представлять собой число, символ или указатель на другой объект данных. При этом компьютер оперирует с физическими представлениями значений, которыми являются совокупности битов, байтов или слов оперативной памяти. Одной из главных характеристик данных является тип. Тип данных определяет внутренне представление данных в памяти компьютера множество значений, которые могут принимать данные этого типа операции и функции, которые можно применять к значениям этого типа В таблице 1.1 перечислены простые типы данных С++ и приведены наиболее типичные диапазоны их значений. 5 Таблица 1.1. Встроенные типы языка С++ Название Обозначение Диапазон значений Байт от -128 до +127 Байт без знака unsigned от 0 до 255 Короткое целое число от -32768 до +32767 Короткое целое число без знака unsigned от 0 до 65535 Целое число от – 2147483648 до + 2147483647 Целое число без знака unsigned int (или просто unsigned ) от 0 до 4294967295 Длинное целое число от – 2147483648 до + 2147483647 Длинное целое число unsigned от 0 до 4294967295 Вещественное число одинарной точности от ±3.4e-38 до ±3.4e+38 (7 значащих цифр) Вещественное число двойной точности от ±1.7e-308 до ±1.7e+308 (15 значащих цифр) Вещественное число увеличенной точности long от ±1.2e-4932 до ±1.2e+4932 Логическое значение значения true (истина) или false (ложь) Пусто Не имеет значений. Используется для определения функций, которые не возвращают значения, для указания пустого списка аргументов функции, в операциях с указателями ив операции приведения типов Символьная информация представляется с помощью кодов (целые числа типа или unsigned char ) стандарта ASCII Для английского алфавита и знаков препинания этот стандарт определяет коды от 0 до 127 . Для представления русских букв используется стандарт КОИ или CP-1251 . В этих стандартах русские буквы кодируются числами от 128 до Для работы с китайским, японским, корейскими рядом других алфавитов одного байта недостаточно.Для символов этих языков используется кодировка с помощью двух байтов типа Преобразование типов в С выполняется с помощью специальных операторов приведения типов. Для приведения целых и вещественных типов при вычислении выражений используется оператор Например float f = 5.25; int i = static_cast < int >(f); //i=5 int first = 5, second = 10; double result= static_cast < double >(first)/second; //result=0.5 Внимание double result=first/second; //result=0! 6 Константы и переменные Константы – это данные, значения которых не изменяется при выполнении программы. Константы в языке С характеризуется типом, наименованием и значением const int X = 240; константа X , тип целый, значение 240 const int Z = 0xF0; константа Z , тип целый, значение в шестнадцатеричной // системе счисления При объявлении констант с помощью const обязательно укажите их значения При разработке программ в ряде случаев удобно объявить наименования констант с помощью перечисляемого типа enum {Red, Yellow, константам, Yellow, автоматически будут // присвоены целые значения 0, 1, 2 соответственно enum {EMPTY=-1, FULL=100}; константа имеет значение -1, FULL – Переменные это данные, значения которых изменяется при выполнении программы. Вовремя выполнения программы c каждой переменной связана определенная область памяти, где хранится текущее значение переменной. Переменные в языке С характеризуется типом, наименованием, значением и областью действия. В программе перед использованием переменные необходимо объявить и, если требуется, инициализировать (присвоить начальное значение, например так int a, b = 10; переменная a , тип целый, значение не определено переменная b , тип целый, значение 10 float f = -2.5; переменная f , тип вещественный, значение -2.5 char c = ’A’; переменная c, тип байт, значение 65 (код символа в) bool b = true; переменная b, тип логический, значение истина ( 1 ). Описание переменной явно или по умолчанию задает ее область действия. Область действия переменной – это часть программы, в которой переменную можно использовать для доступа к связанной с ней областью памяти. В зависимости от области действия переменная может быть локальной или глобальной. Если переменная определена внутри блока (это часть программы, ограниченная фигурными скобками, она называется локальной, область ее действия – от точки описания до конца блока, включая все вложенные блоки. Если переменная определена вне любого блока, она называется глобальной и областью ее действия считается программа, в которой она определена – от точки описания переменой и до конца программы. Класс памяти определяет время жизни и область видимости программного объекта, в частности и переменной. Область видимости чаще всего совпадает с областью действия. Если класс памяти не указан явным образом, он определяется компилятором исходя из контекста объявления. Для задания класса памяти используются следующие спецификаторы auto автоматическая переменная. Время жизни – с момента описания до конца блока. Создается при входе в блок. При выходе из блока область памяти, связанной с переменной, освобождается. Для глобальных переменных не используется, а для локальных задается по умолчанию extern внешняя переменная. Переменная определяется в другом месте программы. Используется для создания переменных, доступных во всех модулях программы, в которых они объявлены static статическая переменная. Время жизни – постоянное. Инициализируется один раз регистровая переменная. Аналогична auto , но память выделяется по возможности в регистрах процессора 7 Пространства имен это поименнованные области, которые служат для логического группирования объявлений и ограничения доступа к ним. Формат описания пространства имен следующий имя_области{объявления} или имя_области; Например namespace demo { int i = 1; int k = 0; } namespace std; объекты стандартной библиотеки ввода-вывода std Доступ к постранству имен в программе осуществляется с помощью оператора :: или оператора Операции и выражения Выражения используются для вычисления значений. Выражения состоят из операндов, знаков операций и скобок. Операнды задают данные для вычислений. Операции задают действия, которые необходимо выполнить. Каждый операнд является, в свою очередь, выражением или одним из его составляющих, например, константой, переменной иди функцией. Операции выполняются в соответствии с приоритетами. Для изменения порядка выполнения операций используются круглые скобки. В таблице 1.2 приведен список основных операций, определенных в языке Св соответствии сих приоритетами (по убыванию приоритетов, операции с разными приоритетами разделены горизонтальной чертой. В зависимости от количества операндов, которые используются в операциях, они делятся на унарные (один операнд, бинарные (два операнда) и тернарную (три операнда. Таблица 1.2 Основные операции языка |