bmstu_iu6_Cpp1 (823967), страница 2
Текст из файла (страница 2)
Степень глубины проработки материала соответствует именно изложению второго языка. Однако пособие может быть полезно и студентам, изучающим С++ в качествепервого языка программирования. При первом знакомстве с материалом разделы, отмеченные звездочкой, целесообразно опустить.Оглавление5ВВЕДЕНИЕЯзык Си был создан в 1972 году Денисом Ритчи (см.
рисунок В.1). Языком системных программистов на тот момент был ассемблер, эффективность написания программ накотором весьма мала. Поэтому целью Дениса Ритчи было создание языка, специальнопредназначенного для написания системных программ.1967 - BCPL1972 - Си - Денис Ритчи1989 Стандарт ANSI Си1979 - С++ - Бьерн Страуструп1999 Новый стандарт Си1998 - Стандарт С++19.. Java19.. – C#Рисунок В.1 – Этапы развития языков семейства Си..С++Язык в то время мало выделялся из множества других, однако в его пользу говориликомпактный синтаксис, наличие библиотек часто используемых в системных программахподпрограмм и компиляторы для трех используемых на тот момент платформ: вычислительных машин семейства ЕС ЭВМ, АРМов (Автоматизированное Рабочее Место) и только появляющихся персональных ЭВМ на базе микропроцессора i8086.Особое место среди других языков программирования Си занял после того, какБьерн Страуструп создал на его основе язык С++, включающий средства объектной технологии программирования, а компания Microsoft приняла решение об придании ему статусасистемного языка Windows.В настоящее время Си и С++ – весьма популярные языки программирования, на базекоторых построены более современные языки программирования, такие как C# и Java,предназначенные для создания сетевых программ.Основные достоинства языка – компактный синтаксис, наличие большого количества специальных средств, упрощающих написание сложных системных программ, многоплатформенность.Основной недостаток – «незащищенный» синтаксис, при котором в языке возможносуществование близких по форме допустимых конструкций, что часто не позволяет иденОглавление6тифицировать ошибку на этапе компиляции программы, а потому удлиняет и усложняет ееотладку.Широко распространены следующие компиляторы С/С++:• gcc – GNU C Compiler;• Microsoft Visual C++;• Intel C++ Compiler.Компилятор gcc (GNU C Compiler) является свободно распространяемым программным продуктом и является де-факто стандартом для сборки C/C++ программ подоперационными системами Linux и FreeBSD.
Реализован для множества аппаратных платформ и различных операционных систем. Реализация для ОС Windows называется mingw.Используется для компиляции свободно распространяемых программных продуктов соткрытыми исходными кодами.Коммерческий компилятор Microsoft Visual C++ для процессоров семейств x86,x86-64 и IA-64 наиболее распространенный компилятор для создания приложений для ОСWindows (включая различные её версии для различных платформ Win32, Win64, WinCE).Чаще всего используется совместно со средой разработки MS Visual Studio. В отличии отgcc, ориентируется не на соблюдение принятых стандартов C/C++ как таковых, а на внутренние спецификации Microsoft. Компилятор лучше оптимизирует код программ, чемmingw или gcc, однако не полностью с ним совместим.Коммерческий компилятор Intel C++ Compiler для процессоров семейств x86,x86-64 и IA-64 позиционируется как оптимизирующий компилятор для приложений, критических к скорости работы или аппаратным ресурсам.
Может использоваться в качествезамены Microsoft Visual C++ для ОС MS Windows, в том числе совместно с MS Visual Studio. Данный компилятор также существует для ОС Linux и Mac OS, однако распространенмало и используется только для создания коммерческих приложений. Не полностью совместим с gcc.В настоящем пособии рассматривается компилятор Microsoft Visual C++ , входящийв состав Visual Studio 2008.Оглавление71ПРОСТЕЙШИЕ КОНСТРУКЦИИ ЯЗЫКА С++К простейшим конструкциям языка относятся операторы объявления данных и построения выражений.
Кроме того в настоящей главе рассмотрены стандартные функцииввода вывода, используемые для ввода данных с клавиатуры и вывода результатов наэкран дисплея.1.1 Алфавит языкаАлфавит языка C++ включает:•строчные и прописные буквы латинского алфавита: A..Z и a..z;•арабские цифры: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9;•шестнадцатеричные цифры: 0..9, а..f или A..F;•специальные символы, например «+», «-», «*», «/», «=», «<», «&», «;» и т. д.;•служебные слова.Служебные слова зарезервированы в языке для специального применения, т.е.
их нельзя использовать в качестве идентификаторов. Они применяются в конструкциях языка вкачестве стандартных описателей или ключевых слов. Стандарт ANSI языка Си предусматривает следующий список служебных слов:autodefaultexternintsignedtypedefbreakdofloatlongsizeofunioncasedoubleforregisterstaticunsignedcharelsegotoreturnstructvoidcontinueenumifshortswitchwhileВ разных реализациях есть дополнительные служебные слова, например, компиляторы фирмы Borland используют также: asm cdecl far pascal const volatile.Язык C++ добавляет еще несколько ключевых слов, например: catch class friendinline new operator private.Из символов алфавита строятся конструкции – слова и предложения языка.
Простейшей конструкцией является идентификатор.Идентификатор – последовательность букв латинского алфавита, десятичных цифри символов подчеркивания, начинающаяся не с цифры, например:ABCabcAbcABcAbC_a MY_Primer_1ОглавлениеPrim_1238Следует иметь в виду, что прописные и строчные буквы в идентификаторах различаются, т. е. идентификаторы ABC abc Abc ABc AbC с точки зрения компилятора языков Си и С++ различны.Идентификаторы используют для обозначения имен переменных, констант, типов,подпрограмм и т. д.На длину различаемой части идентификатора конкретные реализации накладываютограничения. Так компилятор Visual С++ 2008 компании Microsoft различает 2048-х первых символов любого идентификатора.1.2 Структура программыПрограмма, написанная на Cи или С++ с использованием средств процедурного программирования, в общем случае включает:• команды препроцессора;• объявления переменных, констант и типов;• прототипы функций;• определения функций.Препроцессор – это программа, которая обрабатывает исходный текст до компилятора.
Посредством команд препроцессора, например, определяется перечень файлов, содержащих прототипы стандартных функций из библиотек, которые должны быть подключеныпри компиляции программы.Выполнение программы всегда начинается с функции, имеющей имя main() – этоосновная функция программы, которая получает управление от операционной системыпри запуске программы и возвращает управление операционной системе при завершениипрограммы.
Остальные функции прямо или косвенно получают управление от основнойфункции программы.Описание каждой функции состоит из заголовка и тела функции:<Тип результата или void> <Имя функции> ([<Список параметров>]){ [ < Объявление переменных и констант >]<Операторы>}Примечание. При описании конструкций языка далее будет использоваться специальная общепринятая нотация. Согласно этой нотации за исключением оговоренных случаев:<…> – обозначает конструкцию языка, которая заменит свое описание;Оглавление9[…] – обозначает необязательный элемент конструкции, который может отсутствовать.Так в данном случае список параметров и объявление локальных переменных иконстант в описании функции могут отсутствовать.Пример 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;// возврат нулевого кода завершения}int nod(int a,int b)// заголовок функции nod(){while (a!=b)// цикл-пока a не равно bif (a>b) a=a-b; // если a>b, то вычитаем из a belse b=b-a;return a;// иначе вычитаем из b a// возвращаем результат функции}Первое предложение программы – команда препроцессора #include <locale.h>.
Она подключает к программе файл locale.h, содержащий прототип функции,которая обеспечивает возможность ввода/вывода русских букв. Команды препроцессора#include <stdio.h> и #include <conio.h> аналогично подключают файлыstdio.h и conio.h, содержащие прототипы используемых в программе функцийОглавление10ввода/вывода printf() и _getch(). Поиск подключаемых файлов при этом выполняется в стандартных путях среды (см. раздел 6.1).Затем объявлены внешние переменные целого типа a,b и c.Далее следует прототип функции nod().