Cредства процедурного программирования Microsoft Visual C++ 2008
Покупка
Новинка
Тематика:
Программирование на C и C++
Год издания: 2012
Кол-во страниц: 140
Дополнительно
Приведено описание средств процедурного программирования на языке Visual C++ в среде Microsoft Studio 2008. Подробно рассмотрены структура программы, типы данных, способы и особенности реализации вычислений, операторы организации ветвлений и циклов, а также адресная арифметика, основы работы с динамической памятью, особенности моделирования работы с массивами в C++. Особое внимание уделено также организации подпрограмм и различным способам передачи параметров в них и организации файловой системы хранения данных на внешних носителях информации.
Предназначено для студентов первого курса кафедры "Компьютерные системы и сети" (ИУ6) и студентов, обучающихся по аналогичной программе на Аэрокосмическом факультете университета (АК5), которые изучают C++ в качестве второго языка программирования. Пособие может быть полезно и студентам, изучающим C++ в качестве первого языка программирования.
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 09.03.01: Информатика и вычислительная техника
- 09.03.02: Информационные системы и технологии
- 09.03.03: Прикладная информатика
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
Московский государственный технический университет имени Н.Э. Баумана Г.С. Иванова, Т.Н. Ничушкина, Р.С. Самарев СРЕДСТВА ПРОЦЕДУРНОГО ПРОГРАММИРОВАНИЯ MICROSOFT VISUAL С++ 2008 Допущено Учебно-методическим объединением вузов по университетскому политехническому образованию в качестве учебного пособия для студентов высших учебных заведений, обучающихся по направлению 230100 «Информатика и вычислительная техника» Москва Издательство МГТУ им. Н.Э. Баумана 2012
УДК 681.3.06(075.8) ББК 32-018.1 И21 Рецензенты: С.Н. Казарин, Н.В. Новик И21 Иванова Г.С. Cредства процедурного программирования Microsoft Visual C++ 2008 : учеб. пособие / Г.С. Иванова, Т.Н. Ничушкина, Р.С. Самарев. – М.: Изд-во МГТУ им. Н.Э. Баумана, 2012. – 138, [2] с. : ил. Приведено описание средств процедурного программирования на языке Visual С++ в среде Microsoft Studio 2008. Подробно рассмотрены структура программы, типы данных, способы и особенности реализации вычислений, операторы организации ветвлений и циклов, а также адресная арифметика, основы работы с динамической памятью, особенности моделирования работы с массивами в С++. Особое внимание уделено также организации подпрограмм и различным способам передачи параметров в них и организации файловой системы хранения данных на внешних носителях информации. Предназначено для студентов первого курса кафедры «Компьютерные системы и сети» (ИУ6) и студентов, обучающихся по аналогичной программе на Аэрокосмическом факультете университета (АК5), которые изучают С++ в качестве второго языка программирования. Пособие может быть полезно и студентам, изучающим С++ в качестве первого языка программирования. УДК 681.3.06(075.8) ББК 32-018.1 c ⃝МГТУ им. Н.Э. Баумана, 2012
ВВЕДЕНИЕ Язык программирования Си был создан в 1972 г. Д. Ритчи. Языком системных программистов на тот момент был ассемблер, эффективность написания программ на котором весьма мала. Поэтому целью Д. Ритчи было создание языка, специально предназначенного для написания системных программ. Язык Си в то время мало выделялся из множества других, однако обладал рядом таких преимуществ, как компактный синтаксис, наличие библиотек, часто используемых в системных программах, подпрограмм и компиляторов для трех распространенных на тот момент платформ — вычислительных машин семейства единой серии ЭВМ, АРМов (автоматизированное рабочее место) и только появлявшихся персональных ЭВМ на базе микропроцессора i8086. Особое место среди других языков программирования Си занял после того, как Б. Страуструп создал на его основе язык С++, включающий средства объектной технологии программирования, а компания Microsoft приняла решение о придании ему статуса системного языка Windows. В настоящее время Си и С++ — весьма популярные языки программирования, на базе которых построены более современные языки программирования, такие как C# и Java, предназначенные для создания сетевых программ. Основные достоинства языка C++ — компактный синтаксис, наличие большого количества специальных средств, упрощающих написание сложных системных программ, многоплатформенность. Основной недостаток языка C++ — «незащищенный» синтаксис, при котором в языке возможно существование близких по 3
форме допустимых конструкций, что часто не позволяет идентифицировать ошибку на этапе компиляции программы, удлиняет и усложняет отладку программы. Широко распространены следующие компиляторы С/С++: • gcc (GNU C Compiler); • Microsoft Visual C++; • Intel C++ Compiler. Компилятор gcc (GNU C Compiler) является свободно распространяемым программным продуктом и де-факто — стандартом для сборки программ C/C++ под операционными системами Linux и FreeBSD. Реализован для множества аппаратных платформ и различных операционных систем (ОС). Реализация gcc для ОС Windows называется mingw и используется для компиляции свободно распространяемых программных продуктов с открытыми исходными кодами. Коммерческий компилятор Microsoft Visual C++ для процессоров семейств x86, x86-64 и IA-64 — наиболее распространенный компилятор для создания приложений, предназначенных для ОС Windows (включая различные ее версии для разных платформ: Win32, Win64, WinCE). Чаще всего используется совместно со средой разработки Microsoft Visual Studio. В отличие от компилятора gcc ориентирован не на соблюдение принятых стандартов C/C++ как таковых, а на внутренние спецификации Microsoft. Лучше оптимизирует код программ, чем компиляторы mingw и gcc, однако не полностью с ними совместим. Коммерческий компилятор Intel C++ Compiler для процессоров семейств x86, x86-64 и IA-64 позиционируется как оптимизирующий компилятор для приложений, критичных к скорости работы или аппаратным ресурсам. Может использоваться в качестве замены Microsoft Visual C++ для ОС Microsoft Windows, в том числе совместно с Microsoft Visual Studio. Данный компилятор также существует для ОС Linux и Mac OS, однако распространен мало и используется только для создания коммерческих приложений. Не полностью совместим с gcc. В настоящем пособии рассмотрен компилятор Microsoft Visual C++ , входящий в состав среды Visual Studio 2008. При первом знакомстве с материалом разделы, отмеченные звездочкой, целесообразно опустить.
Г ЛАВА 1 ПРОСТЕЙШИЕ КОНСТРУКЦИИ ЯЗЫКА С++ В настоящей главе рассмотрены простейшие конструкции языка С++, к которым относятся операторы объявления данных и построения выражений, а также стандартные функции ввода/вывода, используемые для ввода данных с клавиатуры и вывода результатов на экран дисплея. 1.1. Алфавит языка Алфавит языка C++ включает: • строчные и прописные буквы латинского алфавита: A..Z и a..z; • арабские цифры: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9; • шестнадцатеричные цифры: 0..9, а..f или A..F; • специальные символы, например «+», «-», «*», «/», «=», «<», «&», «;» и т. д.; • служебные слова. Служебные слова зарезервированы в языке C++ для специального применения, т. е. их нельзя использовать в качестве идентификаторов. Они применяются в конструкциях языка в качестве стандартных описателей или ключевых слов. Стандарт ANSI языка Си предусматривает следующий список служебных слов: 5
В разных реализациях компиляторов есть дополнительные служебные слова, в частности, компиляторы фирмы Borland используют также: asm cdecl far pascal const volatile. Язык C++ добавляет еще несколько ключевых слов, например: catch class friend inline new operator private. Из символов алфавита строятся конструкции: слова и предложения языка. Простейшей конструкцией является идентификатор. Идентификатор — последовательность букв латинского алфавита, десятичных цифр и символов подчеркивания, начинающаяся не с цифры, например: ABC abc Abc ABc AbC _a MY_Primer_1 Prim_123 Следует иметь в виду, что прописные и строчные буквы в идентификаторах различаются, т. е. идентификаторы ABC abc Abc ABc AbC с точки зрения компилятора языков Си и С++ различны. Идентификаторы используют для обозначения имен переменных, констант, типов, подпрограмм и т. д. На длину различаемой части идентификатора конкретные реализации компиляторов накладывают ограничения. Так, компилятор Visual С++ 2008 компании Microsoft различает 2048-х первых символов любого идентификатора. 1.2. Структура программы Программа, написанная на языке Cи или С++ с использованием средств процедурного программирования, в общем случае включает: • команды препроцессора; • объявления переменных, констант и типов; • прототипы функций; • определения функций. Препроцессор — это программа, которая обрабатывает исходный текст до компилятора. Посредством команд препроцессора, например, определяется перечень файлов, содержащих прототипы стандартных функций из библиотек, которые должны быть подключены при компиляции программы. Выполнение программы всегда начинается с функции, имеющей имя main() — это основная функция программы, которая получает управление от ОС при запуске программы и возвращает 6
управление ОС при завершении программы. Остальные функции прямо или косвенно получают управление от основной функции программы. Описание каждой функции состоит из заголовка и тела функции∗: <Тип результата или void> <Имя функции> ([<Список параметров>]){ [< Объявление переменных и констант >] <Операторы> } При описании конструкций языка С++ далее будет использоваться специальная общепринятая нотация. Согласно этой нотации, за исключением оговоренных случаев, следующие символы обозначают: <. . . > — конструкцию языка, которая заменит свое описание; [. . . ] — необязательный элемент конструкции, который может отсутствовать. Так, при описании функции список параметров и объявление локальных переменных и констант в описании функции могут отсутствовать. Пример 1.1. Разработать программу определения наибольшего общего делителя двух чисел. Текст программы: #include <locale.h> // команды препроцессора #include <stdio.h> #include <conio.h> int a=18,b=24,c; // объявление переменных int nod(int a,int b); // прототип функции nod() int main(){ // заголовок основной программы setlocale(0,"russian"); // набор русских букв c=nod(a,b); // вызов функции nod() printf("НОД=%d\n",c); // вывод результата puts("Нажмите любую клавишу..."); _getch(); // обработка нажатия любой клавиши return 0; // возврат нулевого кода завершения ∗Здесь и далее полужирным шрифтом выделены синтаксические правила описания конструкций языка. 7
} int nod(int a,int b) { // заголовок функции nod() while (a!=b) // цикл-пока a не равно b if (a>b) // если a>b, a=a-b; // то вычитаем b из a else b=b-a; // иначе вычитаем a из b return a; // возвращаем результат функции } Первое предложение программы — команда препроцессора #include <locale.h>. Она подключает к программе файл locale.h c прототипом функции, которая обеспечивает возможность ввода/вывода русских букв. Команды препроцессора #include <stdio.h> и #include <conio.h> аналогично подключают файлы stdio.h и conio.h, содержащие прототипы используемых в программе функций ввода/вывода printf() и _getch(). Поиск подключаемых файлов при этом выполняется в стандартных путях среды. Затем объявляются внешние переменные целого типа a, b и c. Далее следует прототип функции nod(). Прототипы используют, если вызов функции предшествует ее описанию, как в данном примере. Если бы функция nod() была описана первой, то прототип можно было бы в программу не включать. Функция nod() определяет наименьший общий делитель двух целых чисел. Основная функция main() осуществляет вызов функции nod() и вывод результатов работы. Кроме этого, она организует приостановку выполнения программы, пока пользователь не прочитает результат и не нажмет какую-либо клавишу. 1.3. Данные Любая программа существует для того, чтобы обрабатывать какие-либо данные. В качестве данных могут использоваться числа, а также текстовая информация, представленная в различных видах: вводимая с клавиатуры или из файла или, наоборот, выводимая на экран или в файл. При этом данные в программе могут быть неизменяемыми, т. е. константами, и изменяемыми, в которых сохраняются получаемые результаты. 8
1.3.1. Типы данных Тип данных — это характеристика данных, которая определяет: • интерпретацию значений и множество операций, которые могут выполняться над ними; • диапазон и шаг изменения хранимых значений. Стандартом определено некоторое количество скалярных (простых) типов данных, которые программист может использовать без предварительного описания. Во внутреннем представлении каждому типу сопоставлен собственный формат записи значений. В Visual С++ 2008 принято различать целочисленные (интегральные) и вещественные типы данных. Значениями целочисленных типов данных могут быть положительные, отрицательные и нулевые целые числа. В табл. 1.1 приведены стандартные целочисленные типы данных. Таблица 1.1 Целочисленные типы данных Visual C++ 2008 Имя типа Подтипы Размер, байт Диапазон значений [int] long _int32 4 −231 . . . 231 −1 0 . . . 232 −1 [signed] [int] unsigned [int] [signed] long unsigned long short _int16 [signed] short unsigned short 2 –32768. . . 32767 0. . . 65535 char _int8 [signed] char unsigned char 1 −128 . . . 127 0 . . . 255 long long _int64 [signed] long long unsigned long long 8 −263 . . . 263 −1 0 . . . 264 −1 bool – 1 false (0), true(1) Наиболее используемый тип int — целое число со знаком. Знак задается первым битом числа. При этом 0 обозначает «плюс», а 1 — «минус». Квадратные скобки в табл. 1.1 при указании типа int означают, что если тип данных при объявлении в программе не указан, то им присваивается тип int по умолчанию. 9
Тип long в данной реализации языка совпадает по характеристикам с типом int. В прошлых версиях компилятора это было не так и может быть не так для компиляторов других фирм. Типы short и long long применяются соответственно для небольших и очень больших чисел. Для хранения этих данных используются аналогичные форматы, различающиеся длиной внутреннего представления. Символы, как это принято в программировании, представляются своими кодами (номерами) по расширенной таблице ANSI. При этом тип char в языках Си и С++ соответствует целому числу со знаком. Поэтому при работе с символами, коды которых превышают значение 127, используют беззнаковый подтип символьного типа unsigned char. Логический тип в Си первоначально отсутствовал. При необходимости в качестве «истины» фигурировало любое целое число, отличное от нуля. Соответственно нуль интерпретировался как «ложь». Однако позднее логический тип bool все-таки был добавлен в С++. Для этого типа данных, как это принято в других языках программирования, true = 1, false = 0. Для хранения значений типа bool используется 1 байт памяти. Типы _int32, _int16 и _int64 были введены в Microsoft Visual C++ для простоты запоминания системы типов. К интегральным типам формально относится и специальный тип, используемый для представления адресов. Этот тип будет описан позднее. Описание стандартных вещественных типов данных приведено в табл. 1.2. Таблица 1.2 Стандартные вещественные типы данных Имя Минимальное положительное Максимальное положительное типа Размер, байт Значащие цифры число число float 4 6 1.175494351×10−38 3.402823466×1038 double (long double) 8 15 2.2250738585072014× ×10−308 1.797693134862318× ×10308 10