Решение задач на языках программирования Си и Си++
Покупка
Тематика:
Программирование на C и C++
Автор:
Быков Александр Юрьевич
Год издания: 2017
Кол-во страниц: 246
Дополнительно
Вид издания:
Учебно-методическая литература
Уровень образования:
ВО - Специалитет
ISBN: 978-5-7038-4577-6
Артикул: 803675.01.99
Рассмотрены особенности решения практических задач на языках программирования Си и Си++. Представлены примеры программирования с комментариями. Описаны возможности библиотеки классов MFC.
Для студентов, обучающихся по специальностям "Компьютерная безопасность" и "Информационная безопасность автоматизированных систем", а также по другим специальностям с изучением программирования.
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Специалитет
- 10.05.01: Компьютерная безопасность
- 10.05.03: Информационная безопасность автоматизированных систем
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
Московский государственный технический университет имени Н.Э. Баумана А.Ю. Быков Решение задач на языках программирования Си и Си++ Методические указания к выполнению лабораторных работ
УДК 004.43 ББК 32.973-018.1 Б95 ISBN 978-5-7038-4577-6 © МГТУ им. Н.Э. Баумана, 2017 © Оформление. Издательство МГТУ им. Н.Э. Баумана, 2017 Б95 Решение задач на языках программирования Си и Си++ : методические указания к выполнению лабораторных работ / А. Ю. Быков. — Москва : Издательство МГТУ им. Н. Э. Баумана, 2017. — 244, [4] с. : ил. ISBN 978-5-7038-4577-6 Рассмотрены особенности решения практических задач на языках программирования Си и Си++. Представлены примеры программирования с комментариями. Описаны возможности библиотеки классов MFC. Для студентов, обучающихся по специальностям «Компьютерная безопасность» и «Информационная безопасность автоматизированных систем», а также по другим специальностям с изучением программирования. УДК 004.43 ББК 32.973-018.1 Издание доступно в электронном виде на портале ebooks.bmstu.ru по адресу: http://ebooks.bmstu.ru/catalog/117/book1572.html Факультет «Информатика и системы управления» Кафедра «Информационная безопасность» Рекомендовано Редакционно-издательским советом МГТУ им. Н.Э. Баумана в качестве учебно-методического пособия Быков, А. Ю.
Предисловие Одним из наиболее распространенных языков программирования, особенно в операционных системах типа Linux, является язык Си++, также широко распространен его предшественник — язык Си. Предлагаемые вниманию учащихся методические указания по дисциплине «Алгоритмические языки» посвящены решению задач с применением этих языков. Издание состоит из двух частей. Первая часть включает в себя девять лабораторных работ, призванных изучить основные средства языка Си, вторая — состоит из шести работ, рассматривающих основные средства языка Си++ и библиотеки MFC. Цель выполнения таких лабораторных работ заключается в получении студентами навыков и умений практической разработки программ на указанных языках и расширении знаний об этих языках. Первая часть лабораторных работ призвана научить студентов разрабатывать программы, использующие следующие синтаксические конструкции и возможности языка Си (с некоторыми элементами языка Си++ ): • операции для расчета выражений; • условный оператор; • операторы циклов; • массивы, в том числе динамические; • структуры; • функции; • динамические структуры данных, такие как линейные списки; • функции ввода-вывода в файлы; • возможности графического интерфейса пользователя для операционной системы Windows. Вторая часть лабораторных работ обучит студентов разработке программ, использующих следующие синтаксические конструкции и возможности языка Си++: • классы; • перегрузка стандартных операций; • наследование классов;
• абстрактные классы и полиморфизм; • потоковая многозадачность; • библиотека классов МFC. При выполнении лабораторных работ целесообразно использовать программный продукт Microsoft Visual Studio версии 2013 или более поздних. Студенты могут получить этот программный продукт бесплатно, воспользовавшись программой DreamSpark (бывшая MSDN AA) [1], для этого достаточно зарегистрироваться на сайте библиотеки МГТУ им. Н.Э. Баумана. По каждой лабораторной работе студенты должны подготовить отчет, в котором необходимо последовательно и полно представить все основные шаги алгоритма решения задачи. В тексте программы следует представить соответствующие комментарии. В содержание отчета включают титульный лист, обозначают цель работы и условие задачи, представляют программу с комментариями, результаты работы программы (скриншот экрана). При необходимости можно представить результаты расчета контрольного примера небольшой размерности, разработанной программой, и ручной расчет этого же контрольного примера. В обязательном порядке в заключении к отчету приводятся выводы. Типовые варианты лабораторных работ представлены в приложении к методическим указаниям. Студенты выбирают вариант в соответствии с номером студента внутри группы, представленным в системе «Электронный университет».
Введение Язык программирования Си, разработанный в США сотрудниками фирмы Bell Lab в начале 1970-х гг. для операционной системы (ОС) UNIX, вместе с языком Си++, который дополнительно к возможностям языка Си включает в себя объектно-ориентированные средства, — наиболее распространенные языки программирования. Первое описание языка Си дано его авторами — Б. Керниганом и Д. Ритчи [2]. Язык Си иногда называют языком программирования среднего уровня. С одной стороны, язык поддерживает операции низкого уровня (операции над битами), а базовые типы отражают те же объекты, что и язык Ассемблера (байты, машинные слова, символы, строки). С другой — он имеет основные управляющие конструкции, присущие языкам высокого уровня. Таким образом, язык Си можно использовать для решения как системных, так и прикладных задач (хотя язык создавался прежде всего для системного программирования). Язык программирования Си++ разработан фирмой Bell Labs в начале 1980-х гг., создателем языка считается Бьерн Страуструп [3]. Он предложил ряд усовершенствований к языку Си, главное, включил в него объектно-ориентированные средства. Первоначально новый язык называли «Си с классами», название «Си++» появилось в 1983 г. Синтаксис языка Си++ (Си) оказался настолько удачным, что многие языки программирования, созданные позднее для других целей, например для разработки интернет-приложений, наследовали основные элементы синтаксиса языка Си++. К таким языкам относятся: Java, C# (Си шарп), PHP, JavaScript. Изучив язык Си++, освоить данные языки можно достаточно быстро.
Часть 1 РЕШЕНИЕ ЗАДАЧ НА ЯЗЫКЕ ПРОГРАММИРОВАНИЯ СИ С ЭЛЕМЕНТАМИ ЯЗЫКА СИ++ Лабораторная работа № 1.1 Изучение операций языка Си. Программирование линейных и разветвляющихся алгоритмов 1.1.1. Цель и задачи работы, выполнения Цель работы состоит в овладении навыками разработки программ на языке Си, имеющих линейную структуру, и программ, реализующих разветвляющиеся алгоритмы, т. е. использующих условный оператор и (или) оператор-переключатель. Для достижения цели необходимо выполнить следующие задачи: • изучить учебные материалы, посвященные константам и пере менным, а также условному оператору и переключателю языка Си [2, 4]; • разработать программы на языке Си для решения предложенных вариантов заданий; • отладить программы; • выполнить с помощью программы решение контрольного при мера и его ручной расчет. Выполнив работу, нужно подготовить отчет. 1.1.2. Краткая характеристика объекта изучения. Понятия переменной и типа данных Одним из основных понятий, используемых в процедурных языках программирования, является понятие переменной. Переменная — это поименованная либо адресуемая иным способом область памяти, адрес требования к результатам ее
которой можно использовать для осуществления доступа к данным. Данные, находящиеся в переменной (т. е. по указанному адресу памяти), называются значением этой переменной. Переменная принадлежит определенному типу данных. Тип данных определяет: • внутреннее представление данных в памяти компьютера; • множество значений, которые могут принимать величины этого типа; • операции и функции, которые можно применять к величинам этого типа. Переменная используется для хранения данных в процессе выполнения программ. Значение переменной можно изменять с помощью операции присваивания. Стандартные типы языка Си В языке Си существуют стандартные типы, которым могут принадлежать переменные. В языке Си стандарта ANSI классификация типов имеет следующий вид (также указана размерность переменной типа в оперативной памяти): • целые: — беззнаковые: unsigned char — переменная этого типа занимает в памяти 8 бит; unsigned short — 16 бит; unsigned int — 32 бита (в Win32); unsigned long — 32 бита (в Win32); — знаковые: char — 8 бит; short — 16 бит; int — 32 бита (в Win32); long — 32 бита (в Win32); • вещественные: float — 32 бита; double — 64 бита; long double — 80 бит. Назначение и диапазоны стандартных типов представлены в табл. 1.1. Следует отметить особенность типа char (unsigned char) в языке Си, отличающегося слабой типизацией. Поэтому символьный тип исполь
зуется двояко: с одной стороны, для хранения кодов символов в кодировке ASCII, с другой — для хранения целых чисел в заданном диапазоне. Таблица 1.1 Назначение и диапазоны стандартных типов Тип данных Размер, бит Диапазон значений Назначение типа unsigned char 8 0...255 Небольшие целые числа без знака и коды символов char 8 –128...127 Небольшие целые числа со знаком и ASCII-коды unsigned short 16 0...65 535 Целые числа без знака short 16 –32 768...32 767 Целые числа со знаком unsigned int 32 0...4 294 967 295 Большие целые числа без знака int 32 –2 147 483 648... ...2 147 483 647 Большие целые числа со знаком unsigned long 32 0...4 294 967 295 Большие целые числа без знака long 32 –2 147 483 648... ...2 147 483 647 Большие целые числа со знаком float 32 3.4Е–38…3.4Е + 38 (по модулю) Научные расчеты (7 значащих цифр) double 64 1.7Е–308...1.7Е + 308 (по модулю) Научные расчеты (15 значащих цифр) long double 80 3.4Е–4932...3.4Е + 4932 (по модулю) Финансовые расчеты (19 значащих цифр) Дополнительно компанией Microsoft введены так называемые платформенно-независимые целые типы, по сути, новые имена для уже существующих типов, но их размерность не будет изменяться при переходе к другим платформам (размерность этих типов в битах явным образом присутствует в названии): __int8 unsigned __int8 __int16 unsigned __int16 __int32 unsigned __int32 __int64 (long long) unsigned __int64(unsigned long long) Кроме того, дополнительно введены следующие типы, имена которых являются ключевыми словами:
bool — 1 байт, возможные значения true (1) и false (0); wchar_t — 2 байта (соответствует типу unsigned short), обычно используется для хранения кодов символов в кодировке Unicode (1 символ кодируется 2 байтами). Объявления переменных в языке Си Общий формат объявления переменных: [<спецификатор_класса_памяти>] [<модификатор>] <тип> <имя1>[=<инициализатор1>], <имя2>[=<инициализатор2>],…, <имяN>[=<инициализаторN>]; Необязательный элемент <спецификатор_класса_памяти> (необязательный элемент далее в записи форматов будет помещаться в квадратные скобки) — одно из ключевых слов: auto, register, static, extern. Необязательный элемент <модификатор> — ключевые слова const, volatile и др. Модификатор const означает, что инициализация (присвоение начального значения) переменной обязательна, и далее значение переменной изменять нельзя. Модификатор volatile означает, что данная переменная может быть изменена где-то в другом месте, а необязательно в этом потоке, например, в другом потоке (модификатор влияет на режим оптимизации работы компилятора). Пример: int i, j=10; const float pi=3.14; /* Далее запрещено изменять значение pi */ extern double x; /* Это есть описание, определение переменной в другом месте */ unsigned char C1=‘A’, C2=10, C3; Константы в языке Си Кроме переменных в программе часто используются константы. Константа — это значение, которое не может быть изменено в процессе работы программы. В языке Си выделяют следующие разновидности констант, которые могут иметь разные типы и формы представления.
1. Целые константы Целые константы существуют для представления в программе целых значений; константы могут иметь разные типы. Тип константы определяет ее представление в оперативной памяти: кодировку константы, объем в байтах, какой набор значений может представлять константа, а также операции, которые можно выполнять с константой. Существуют следующие типы целых констант: • int (по умолчанию); в оперативной памяти константа данного типа кодируется, в Win32 — 4 байтами, примеры: 1245, 6, 175, 5, 1425; • long; в оперативной памяти константа кодируется 4 байтами в Win 32 и будет иметь этот тип, если диапазон выходит за тип int в операционных системах, в которых тип long занимает больше места, чем тип int или явно указывается тип с помощью суффикса l (L), примеры: 12l, 14567L, 125234L ; • unsigned int и unsigned long; для явного указания необходимо использовать суффикс u (U), примеры: 105u (unsigned int), 105ul(unsigned long). Целые константы всегда задают неотрицательные значения, для задания отрицательного значения используют операцию «унарный минус», которую применяют к целой константе: –1000, –200l. Целые константы также могут иметь различные формы представления. Формы представления введены для удобства программиста, одно и то же значение константы может быть представлено в различных формах в исходном тексте программы, при этом после компиляции полученный исполняемый код и кодирование константы в памяти будут идентичны и не будут зависеть от формы представления. Для целых констант существуют три формы представления: • в десятичной системе счисления (по умолчанию) — 1234, 378l, 346; • в шестнадцатеричной системе счисления признаком данного представления являются два первых символа константы 0x (или 0X), в константе можно использовать шестнадцатеричные цифры: 0...9, A (a), B (b), …, F (f ), примеры: 0x10, 0x10acd, 0XFFFF; • в восьмеричной системе счисления признаком данного представления является первый символ 0, в константе можно использовать восьмеричные цифры: 0…7, примеры: 010, 070, 01237; 2. Вещественные константы Вещественные константы служат для представления вещественных значений, которые могут иметь целую и дробную части. По аналогии с целыми константами, существуют различные типы и формы пред