Практикум ргппу 2017 3 Аннотация
Скачать 3.14 Mb.
|
заголовок Флажок Пустой проект должен быть снят. Нажимаем кнопку Готово. 12 В результате будет создан новый проект, файлы которого можно увидеть в Обозревателе решений. Рассмотрим, для чего предназначены файла данного консольного приложения. Задание 2.срр — основной файл проекта; stdafx.h — файл для подключения заголовочных файлов, используемых в проекте. Этот файл необходимо подключать во всех файлах проекта, stdafx.cpp — файлы stdafx.h и stdafx.cpp используются для построения файла предкомпилированного заголовка (Задание 2.pch) и файла предкомпилированных типов (stdafx.obj); targetver.h— в этом файле подключается файл SDKDDKVer.h, который обеспечивает определение последней доступной платформы Windows. Файлы stdafx.cpp и targetver.h оставляем без изменений. В конец файла stdafx.h вставляем строку, позволяющую использовать в программе объект cout, предназначенный для вывода данных в окно консоли: #include 13 Директива pragma со значением once указывает, что содержимое файла может быть включено только один раз. Директивы include подключают файлы, в которых содержатся объявления идентификаторов. Такие файлы называются заголовочными файлами. Они содержат только объявление идентификаторов без описания их реализации. Обратите внимание на то, что в директиве include заголовочные файлы подключаются разными способами. Поиск файлов, указанных внутри угловых скобок, производится в системных каталогах, а поиск файлов, указанных внутри кавычек, производится в каталоге проекта. Таким образом, названия файлов стандартной библиотеки необходимо указывать внутри угловых скобок, а пользовательских файлов внутри кавычек. Три первых заголовочных файла содержат расширение h, а в последней директиве расширение файла не указано. Наличие расширения файла принято в стандартной библиотеке языка С. В стандартной библиотеке языка C++ расширение файла принято не указывать. Так как язык C++ наследует все библиотеки языка С, то файлы можно подключать как в стиле языка С, так и в стиле языка C++. Например, файл string.h из стандартной библиотеки языка С доступен в языке C++ под названием cstring, а файл math.h под названием cmath. Отличие между этими способами подключения заключается в импортировании идентификаторов. В языке С при подключении файла (например, math.h) все идентификаторы импортируются в глобальное пространство имен, а в языке C++ при подключении файла (например, cmath) идентификаторы определяются в пространстве имен под названием std. Поэтому перед идентификатором необходимо указать название пространства имен (например, std:: cout). Использование пространств имен позволяет избежать конфликта имен в программе. Чтобы посмотреть содержимое заголовочного файла (например, stdio.h) щелкните правой кнопкой мыши на строке "#include Теперь рассмотрим содержимое файла Задание 2.срр 14 Добавим текст программы в файл Задание 2.срр Сравните этот листинг с предыдущим примером Задание 1.cpp. Первое, что должно броситься в глаза— это название функции (вместо названия main() используется название _tmain()) и наличие двух параметров. Параметры расположены внутри круглых скобок и разделены запятой. Параметр состоит из объявления типа данных и названия. Первый параметр (argc) имеет тип int, который соответствует целочисленному значению. Через этот параметр доступно количество аргументов, переданных в командной строке. Следует учитывать, что первым аргументом является название исполняемого файла. Поэтому значение параметра argc не может быть меньше единицы. Через второй параметр (argv) доступны все аргументы в виде строки (тип _ TCHAR *). Квадратные скобки после названия второго параметра означают, что доступен массив строк. Для вывода строки "Welcome to C++!", как и в предыдущем примере, используется объект cout, объявленный в файле iostream. Файл iostream мы подключили в файле stdafx.h, поэтому повторно подключать его не нужно. Достаточно подключить только файл stdafx.h в начале программы. Обратите внимание на то, что перед объектом cout и константой endl не указано название пространства имен std, так как все идентификаторы, объявленные в пространстве имен std были импортированы в основную программу с помощью инструкции: using namespace std; Попробуем запустить проект Задание 2, выполнив уже описанные команды. 15 Но при запуске будет выполняться предыдущий проект. Для того, чтобы в рамках одного решения запускать разные проекты надо выполнить определенные действия Перед запуском нового проекта надо в Обозревателе решений щелкнуть правой кнопкой по названию нового проекта и выбрать команду Назначит запускаемым проектом (см рисунок). После этого для запуска без отладки нажимаем комбинацию клавиш Задание 2. Создайте и запустите проект Задание 2 Структура программы Запускать программу мы научились, теперь можно приступать к изучению языка C++. Как видно из предыдущих примеров, программа состоит из инструкций, расположенных в текстовом файле. Структура обычной программы выглядит так: <Подключение заголовочных файлов> <Объявление глобальных переменных> <Объявление функций, классов и др.> int main([ int argc, char *argv[] ]) 16 { <Инструкции> return 0; } <Определение функций и классов> В самом начале программы подключаются заголовочные файлы, в которых содержатся объявления идентификаторов без их реализации. Например, чтобы иметь возможность вывести данные в окно консоли необходимо подключить файл iostream, в котором содержится объявление объекта cout. Подключение осуществляется с помощью директивы include : #include С помощью директивы include можно подключать как стандартные заголовочные файлы, так и пользовательские файлы. После подключения файлов производится объявление глобальных переменных. Переменные предназначены для хранения значений определенного типа. Глобальные переменные видны во всей программе, включая функции. Если объявить переменную внутри функции, то область видимости переменной будет ограничена рамками функции и в других частях программы использовать переменную нельзя. Такие переменные называются локальными. Объявить целочисленную переменную можно так: int х; В этом примере мы объявили переменную с названием "х" и указали, что переменная может хранить данные, имеющие тип int. Ключевое слово int означает, что переменная предназначена для хранения целого числа. Попытка присвоить переменной значение, имеющее другой тип приведет к предупреждению или ошибке. Исключением являются ситуации, в которых компилятор может произвести преобразование типов данных без потери точности. Например, целое число без проблем преобразуется в вещественное число, однако попытка преобразовать вещественное число в целое приведет к выводу предупреждающего сообщения, даже если после точки стоит ноль. Пример сообщения: warning C4244:=: преобразование "double" в "int", возможна потеря данных Хотя компилятор предупреждает о потери данных, программа все равно будет скомпилирована. Поэтому обращайте внимание на сообщения, которые выводятся в окне Вывод на вкладке Построение при компиляции. Иначе программа будет работать, но результат выполнения будет некорректным. Обратите внимание на то, что объявление переменной заканчивается точкой с запятой. Большинство инструкций в языке C++ должно заканчивается точкой с запятой. Если точку с запятой не указать, то компилятор сообщит о синтаксической ошибке. Пример сообщения: error C2144: синтаксическая ошибка: перед "int" требуется ";" Чтобы увидеть строку, о которой сообщает компилятор, сделайте двойной щелчок мышью на сообщении в окне Вывод. В результате строка с ошибкой в 17 программе станет активной и слева от нее отобразится маркер. В нашем случае активной будет строка, расположенная сразу после объявления глобальной переменной. При объявлении можно сразу присвоить начальное значение переменной. Присваивание значения переменной при объявлении называется инициализацией переменной. Чтобы произвести инициализацию переменной после ее названия указывается оператор =, а затем значение. Пример: int х=10; Если глобальной переменной не присвоено значение при объявлении, то она будет иметь значение 0. Если локальной переменной не присвоено значение, то переменная будет содержать, произвольное значение. Как говорят в таком случае переменная содержит "мусор". Обратите внимание на то, что перед оператором = и после него вставлены пробелы. Количество пробелов может быть произвольным или пробелов может не быть вовсе. Кроме того, допускается вместо пробелов использовать символ перевода строки или символ табуляции. Например, эти инструкции вполне допустимы: int х=21; int у= 85; int z 56; Тем не менее, следует придерживаться единообразия в коде и обрамлять операторы одним пробелом. Если присваивание производится в объявлении функции (задается значение параметра по умолчанию), то пробелы принято не указывать вовсе. Следует учитывать, что это не строгие правила, а лишь рекомендации по оформлению кода. Как видно из предыдущего примера, инструкция может быть расположена на нескольких строках. Концом инструкции является точка с запятой, а не конец строки. Например, на одной строке может быть несколько инструкций: int х=21; int у = 85; int z =56; Из этого правила есть исключения. Например, после директив препроцессора точка с запятой не указывается. В этом случае концом инструкции является конец строки. Директиву препроцессора можно узнать по символу # перед названием директивы. Типичным примером директивы препроцессора является директива include, которая используется для подключения заголовочных файлов: #include После объявления глобальных переменных могут располагаться объявления функций и классов. Такие объявления называются прототипами. Схема прототипа функции выглядит следующим образом: <Тип возвращаемого значения> <Название функции> ([<Тип> [<Параметр1>] [,..., <Тип> [<Параметр N>] ] ]); Например, прототип функции, которая складывает два целых числа и возвращает их сумму выглядит так: int summa (int х, int у) ; 18 После объявления функции необходимо описать, ее реализацию, которая называется определением функции. Определение функции обычно располагается после определения функции main() . Обратите внимание на то, что объявлять прототип функции main ()не нужно, так как определение этой функции обычно расположено перед определением других функций. Пример определения функции summa() : int summa(int х, int у) { return х + у; } Как: видно из примера, первая строка в определении функции summa() совпадает с объявлением функции. Следует заметить, что в объявлении функции можно не указывать названия параметров. Достаточно указать информацию о типе данных. Таким образом, объявление функции можно записать так: int summa(int, int); После объявления функции ставится точка с запятой. В определении функции внутри фигурных скобок должна быть описана реализация функции. Так как в объявлении указано, что функция возвращает целочисленное значение, следовательно, после описания реализации необходимо вернуть значение. Возвращаемое значение указывается после ключевого слова return. Если функция не возвращает никакого значения, то перед названием функции вместо типа данных указывается ключевое слово void. Пример объявления функции, которая не возвращает значения: void print(int); Пример определения функции print () : void print(int x) { cout << x< Открывающая скобка может находиться на одной строке с определением функции, как в предыдущем примере, или вначале следующей строки. Пример: void print(int x) { cout< 19 Перед инструкциями внутри фигурных скобок следует размещать одинаковый отступ. В качестве отступа можно использовать пробелы или символ табуляции. При использовании пробелов размер отступа равняется трем или четырем пробелам для блока первого уровня. Для вложенных блоков количество пробелов умножают на уровень вложенности. Если для блока первого уровня вложенности использовалось три пробела, то для блока второго уровня вложенности должно использоваться шесть пробелов, для третьего уровня — девять пробелов и т. д. В одной программе не следует использовать и пробелы и табуляцию в качестве отступа. Необходимо выбрать что-то одно и пользоваться этим во всей программе. Закрывающая фигурная скобка обычно размещается в конце блока на отдельной строке. После скобки точка с запятой не указывается. Однако наличие точки с запятой ошибкой не является, так как инструкция может не содержать выражений вообще. Например, такая инструкция вполне допустима, хотя она ничего не делает: Самой главной функцией в программе является функция main() . Именно функция с названием main() будет автоматически вызываться при запуске программы. Функция имеет два прототипа: int main(); int main(int argc, char *argv[]); Первый прототип функции имеет синоним: int main(void); Значение void означает, что функция не принимает параметры. Подобный синтаксис используется в языке программирования С. В языке C++ указание ключевого слова void является излишним. Достаточно указать пустые скобки. Второй прототип применяется для получения значений, указанных при запуске программы из командной строки. Количество значений доступно через параметр argc, а сами значения через параметр argv. Перед названием функции указывается тип возвращаемого значения. Ключевое слово int означает, что функция возвращает целое число. Возвращаемое значение указывается после ключевого слова return в самом конце функции main() . Число 0 означает нормальное завершение программы. Если указано другое число, то это свидетельствует о некорректном завершении программы. Согласно стандарту, внутри функции main() ключевое слово return можно не указывать. В этом случае компилятор должен самостоятельно вставить инструкцию, возвращающую значение 0. Возвращаемое значение передается операционной системе и может использоваться для определения корректности завершения программы. В листинге 1.4 приведен пример программы, структуру которой мы рассмотрели в этом разделе. Не расстраивайтесь, если что-то показалось непонятным. Все это мы будем изучать более подробно в дальнейшем. На этом этапе достаточно лишь представлять структуру программы и самое главное уметь ее скомпилировать и запустить на выполнение Пример программы //Подключение заголовочных файлов #include 20 using namespace std; //Объявление глобальных переменных int х =21; int у =85; //Объявление функций, классов и др. int summa(int x,int у) ; void print(int x); // Главная функция int main () { int z; // Объявление локальной переменной z= summa(х,у); //Вызов функции summa() print (z); //Вызов функции print () return 0; } //Определение функций и классов int summa(int х, int у) { return х+у; } void print(int x) { cout< Комментарии в программе Комментарии предназначены для вставки пояснений в текст программы и компилятор полностью их игнорирует. Внутри комментария может располагаться любой текст, включая инструкции, которые выполнять не следует. Помните, комментарии нужны программисту, а не компилятору. Вставка комментариев в код позволит через некоторое время быстро вспомнить предназначение фрагмента кода. В языке C++ присутствуют два типа комментариев: однострочный и много строчный. Однострочный комментарий начинается с символов // и заканчивается в конце строки. Вставлять однострочный комментарий можно как в начале строки, так и после инструкции. Если символ комментария разместить перед инструкцией, то она не будет выполнена Если символы // расположены внутри кавычек, то они не является признаком начала комментария. Примеры однострочных комментариев: //Это комментарий cout<<"Hello, world!"; //Это комментарий //cout<<"Hello, world!"; //Инструкция выполнена не будет char s[] ="// Это НЕ комментарий!!!"; Многострочный комментарий начинается с символов /* и заканчивается символами */. Комментарий может быть расположен как на одной строке, так и на нескольких. Кроме того, много строчный комментарий можно размещать внутри выражения, хотя это и нежелательно. Следует иметь в виду, что много строчные комментарии не могут быть вложенными, поэтому при комментировании больших блоков следует проверять, что в них не встречается закрывающая комментарий комбинация символов */. Тем не менее, 21 однострочный комментарий может быть расположен внутри много строчного комментария. Примеры много строчных комментариев: */ Многострочный комментарий */ cout<<"Hello, world!"; /* Это комментарий */ /*cout<<"Hello, world!";// Инструкция выполнена не будет */ int х; х = 10 /* Комментарий */ + 50 /* внутри выражения */; char s[] = "/* Это НЕ комментарий!!! */"; Редактор в VC++ позволяет быстро закомментировать фрагмент кода. Для этого необходимо выделить одну инструкцию (или сразу несколько инструкций), а затем из меню Правка выбрать пункт Дополнительно|Преобразовать выделенный фрагмент в комментарий. Можно также нажать кнопку Закомментировать выделенные строки на панели инструментов Текстовый редактор. Если панель инструментов не отображена, в меню Вид выбираем пункт Панели инструментов | Текстовый редактор. Кроме того, можно воспользоваться клавишами быстрого доступа. Для этого следует нажать комбинацию клавиш Чтобы убрать комментарий следует выделить фрагмент, а затем из меню Правка выбрать пункт Дополнительно | Отменить преобразование в комментарий. Можно также нажать кнопку Отменить преобразование выделенных строк в комментарий на панели инструментов Текстовый редактор. Кроме того, можно воспользоваться клавишами быстрого доступа. Для этого следует нажать комбинацию клавиш Вывод данных в языке C++ Для вывода данных в языке C++ предназначены объекты cout, сеrr и clog, объявленные в файле iostream. Объект cout используется для вывода обычных сообщений в окно консоли. Объекты сеrr и clog применяются для вывода сообщений об ошибках. Также как и объект cout объекты сеrr и clog первоначально связаны с окном консоли, однако возможно перенаправить поток на другое устройство или в файл. Для понимания всех возможностей этих объектов требуется знание принципов объектно-ориентированного программирования (ООП). Так как ООП мы еще не изучали, в этом разделе будут рассматриваться только основные возможности объектов. Прежде чем использовать объекты необходимо подключить файл iostream с помощью директивы include: #include 22 Обратите внимание на то, что название файла указывается внутри угловых скобок без расширения h, так как файл iostream входит в состав стандартной библиотеки C++. После подключения файла все объекты будут доступны через пространство имен std, поэтому при обращении к объекту необходимо указать название пространства имен и два символа двоеточия перед названием объекта. Например, вывести строку "Hello, world!" можно так: std::cout<<"Hello, world!"; Если каждый раз указывать название пространства имен лень, то можно импортировать все идентификаторы в глобальное пространство имен с помощью инструкции: usinq namespace std; В этом случае название пространства имен указывать не нужно: Cout<<"Hello, world!"; После названия объекта указывается оператор <<, который как бы указывает направление вывода. После оператора << передается объект, который будет выведен в окне консоли. В качестве объекта можно указать число, строку, а также объект, в котором оператор << перегружен. Пример: cout<<10; // Целое число cout<<81.5; //Вещественное число cout<<"Hello, world!"; //Строка char str[]="Hello, world!"; cout < 1081.5Hello, world!Hello, world! Как видно из результата, все данные выводятся на одной строке. Чтобы данные выводились на отдельных строках можно воспользоваться константой endl (сокращение от "end line"). Пример: cout<<"Stringl"; cout< String1 String2 На самом деле endl не совсем константа. Можно сказать, что это функция (называемая манипулятором), внутри которой производится вывод символа перевода строки и возвращается ссылка на поток вывода. Благодаря возврату ссылки можно строить цепочки из операторов << Например, предыдущий пример можно записать так: cout<<"Stringl"< , которые обозначают символ перевода строки. Пример: cout<<"Stringl"<<"\n"<<"String2"; 23 Задание 3 Создать новый проект «Задание 3» в решении «Лабораторная 1». Набрать в файле Задание 3.cpp код: Установите Задание 3 загружаемым проектом и запустите без отладки. Результат: Обратите внимание на разные результаты деления. Это объясняется тем, что в C результат арифметических операций имеет тот же тип, что и данные, участвующие в этой операции. Операция вывода cout не позволяет форматировать выводимые данные Для форматированного вывода используются другие операции из другой библиотеки. Форматированный вывод данных в языке С Язык C++ поддерживает также операции вывода из языка С, объявленные в файле stdio.h. В языке C++ вместо этого файла можно подключать файл cstdio: # include Для вывода одиночного символа применяется функция putchar(). Пример вывода символа: putchar('w'); // w putchar(119); // w 24 Вывести строку позволяет функция puts(). Функция выводит строку Str и вставляет символ перевода строки. Пример: puts("Stringl"); puts("String2"); Результат выполнения: Stringl String2 Для форматированного вывода используется функция printf(). Прототип функции: int printf(const char *Format, ...) ; В параметре Format указывается строка специального формата. Внутри этой строки можно указать обычные символы и спецификаторы формата, начинающиеся с символа %. Вместо спецификаторов формата подставляются значения, указанные в качестве параметров. Количество спецификаторов должно совпадать с количеством переданных параметров. В качестве значения функция возвращает количество выведенных символов. Пример вывода строки и числа: printf ( "String\n") ; printf("Count %d\n", 10); printf("%s %d\n", "Count", 10); Результат выполнения: String Count 10 Count 10 В первом примере строка формата не содержит спецификаторов и выводится как есть. Во втором примере внутри строки формата используется спецификатор %d, предназначенный для вывода целого числа. Вместо этого спецификатора подставляется число 10, переданное во втором параметре. В третьем примере строка содержит сразу два спецификатора %sи %d. Спецификатор %s, предназначен для вывода строки, а спецификатор %d— для вывода целого числа Вместо спецификатора %sбудет подставлена строка "Count", а вместо спецификатора %d— число 10. Обратите внимание на то, что тип данных переданных значений должен совпадать с типом спецификатора. Если в качестве значения для спецификатора %sуказать число, то это приведет в ошибке времени исполнения. Никакой проверки соответствия типа на этапе компиляции не производится. Спецификаторы имеют cледующий синтаксис: %[<Модификаторы>][<Ширина>][.<Точность>]<Тип> В параметре <Тип> могут быть указаны следующие символы: с — символ: printf("%с",'w');//w printf{"%с",119); //w s - строка: printf("%s", "String"); //String d или i - десятичное целое число со знаком: printf("%d %i",10,30); //10 30 printf("%d %i",-10,-30); //-10 -30 u - десятичное целое число без знака: 25 printf("%u",10); //10 о - восьмеричное число без знака: printf("%o %o",10,077); / 12 77 printf("%#о %#o",10,077); // 012 077 f - вещественное число в десятичном представлении: printf("%f %f",18.65781452,12.5); //18.657815 12.500000 printf("%f",-18.65781452); //-18.657815 printf("%#.0f %.0f",100.0,100.0); //100. 100 e - вещественное число в экспоненциальной форме (буква "е" в нижнем регистре): printf ("%е",18657.81452); //1.865781е+004 printf("%е",0.000081452); //8.145200е-005 E - вещественное число в экспоненциальной форме (буква "е" в верхнем регистре): printf("%Е",18657.81452); //1.865781Е+004 g - эквивалентно f или е (выбирается более короткая запись числа): printf("%g %g %g",0.086578,0.000086578,1.865Е-005); //0.086578 8.6578е-005 1.865е-005 G - эквивалентно f или Е (выбирается более короткая запись числа): printf("%G %G %G",0.086578,0.000086578,1.865E-005); //0.086578 8.6578E-005 1.865E-005 % - символ процента (%): printf("10%%"); //10% Параметр <Ширина> задает минимальную ширину поля. Если строка меньше ширины поля, то она дополняется пробелами. Если строка не помещается в указанную ширину, то значение игнорируется и строка выводится полностью: printf("'%3s'","string"); //'string' printf("'%10s'","string"); //' string' Задать минимальную ширину можно не только для строк, но и для других типов: printf("'%l0d'",25); //' 25' printf("'%l0f'",12.5); //' 12.500000' Параметр <Точность> задает количество знаков после точки для вещественных чисел. Перед этим параметром обязательно должна стоять точка. Пример: printf("'%l0.5f'",3.14159265359); //' 3.14159' printf("'%.3f'",3.14159265359); //'3.142' Если параметр <точность> используется применительно к целому числу, то он задает минимальное количество цифр. Если число содержит меньшее количество цифр, то вначале числа добавляются нули. Пример: printf("'%7d'",100); //' 100' printf("'%.7d'",100); //'0000100' printf("'%.7d'",123456739);//'123456739' Если параметр <Точность>;- используется применительно к строке, то он задает максимальное количество символов. Символы, которые не помещаются будут отброшены. Пример: 26 printf("'%5.7s'","Hello, world!"); //'Hello, ‘ printf("'%15.20s'","Hello, world ! "); //' Hello, world!' Вместо минимальной ширины и точности можно указать символ *. В этом случае значения передаются через параметры функции printf () в порядке указания символов в строке формата. Примеры: printf('"%*.*f'",10,5,3.14159265359);//' 3.14159' printf("'%.*f'",3,3.14159265359);//'3.142' printf('"%*s'",10,"string");//' string' В первом примере вместо первого символа * подставляется число 10, указанное во втором параметре, а вместо второго символа * подставляется число 5, указанное в третьем параметре. Во втором примере, вместо символа * подставляется число 3, которое задает количество цифр после точки. В третьем примере символ * заменяется числом 10, которое задает минимальную ширину поля. В параметре <Модификаторы> могут быть указаны следующие символы: # - для вещественных чисел указывает всегда выводить дробную точку, даже если задано значение 0 в параметре <Точность>: printf("%#.0f %.0f",100.0,100.0); //100. 100 0 — задает наличие ведущих нулей для числового значения: printf ("'%7d'",100); //' 100' printf ("'%07d'",100);//'0000100' – - задает выравнивание по левой границе области. По умолчанию используется выравнивание по правой границе. Пример: printf("'%5d' '%-5d'",3,3);//' 3' '3 ' printf ("'%05d' '%-05d'",3,3);//'00003' '3 ' пробел - вставляет пробел перед положительным числом. Перед отрицательным числом будет стоять минус. Пример: printf("'% d' '% d'",-3,3);//'-3 ' '3' + - задает обязательный вывод знака, как для отрицательных, так и для положительных чисел. Пример: printf("'%+d' '%+d'",-3,3);//'-3 ' '+3 ' H - предназначен для вывода значения переменной, имеющей тип short int. Пример: short int х=32767; printf("%hd",x); //32767 1 (буква "эль") —предназначен для вывода значения переменной, имеющей тип long int. Пример: long int х=2147483647;. printf("%ld",x);//2147483647 L - предназначен для вывода значения переменной, имеющей тип long double. Пример: long double x=8е+245; printf("%Le",x); //8.000000е+245 27 Следует учитывать, что функции putchar () , puts () и printf () применяются в языке С. Хотя их можно использовать и в языке C++, тем не менее для вывода данных стоит отдать предпочтение объекту cout. Ввод данных в языке C++ Для ввод а данных в языке C++ предназначен объект сin, объявленный в файле iostream. Объект сin позволяет ввести данные любого встроенного типа, например, число, символ или строку. В этом разделе мы рассмотрим лишь основные возможности этого объекта, так как для понимания всех возможностей требуется знание принципов объектно-ориентированного программирования (ООП). Прежде чем использовать объект cin необходимо подключить файл iostream с помощью директивы include: #include В качестве примера использования объекта cin произведем суммирование двух целых чисел, введенных пользователем. Суммирование двух введенных чисел #include В следующей строке с помощью объекта cout выводится подсказка для пользователя ("х = "). Благодаря этой подсказке пользователь будет знать, что от него требуется. После ввода числа и нажатия клавиши После названия объекта указывается оператор >>, который как бы указывает направление ввода. При разработке собственных объектов можно перегрузить этот оператор и тем самым управлять, вводом. После оператора >> передается название переменной, в которой будут сохранены введенные данные. Далее производится вывод подсказки и получение второго числа, которое сохраняется в переменной у. В следующей строке производится сложение двух 28 чисел и вывод результата. Процесс ввода двух чисел и получения суммы выглядит так: х=10 y=20 Summa=30 При вводе данных производится попытка преобразования к типу переменной. В нашем примере строка "10" будет преобразована в число 10, а строка "20" в число 20. Однако, вместо числа пользователь может ввести буквы. В этом случае преобразование закончится неудачей, переменной не будет присвоено значение, а введенное значение останется в буфере и будет автоматически считано следующей операцией ввода. Предотвращение закрытия окна консоли При запуске программы с помощью комбинации клавиш Нажатие любой клавиши приводит к закрытию окна консоли. Однако конечный пользователь таким образом запускать программу не будет. Если запуск производится из командной строки, то пользователь сможет увидеть результат, но если запуск производится с помощью двойного щелчка на значке файла, то окно консоли откроется, а затем сразу закроется. Чтобы окно не закрывалось необходимо вставить инструкцию, ожидающую нажатие клавиши. Сделать это можно несколькими способами. Первый способ заключается в использовании функции _getch(). Возвращаемое функцией значение можно проигнорировать. Прежде чем использовать функцию необходимо подключить файл conio.h. Использование функции getch() #include #include // Инструкции cout <<"Press _getch(); return 0; } Второй способ заключается в использовании функции system (). Эта функция позволяет передать, команду операционной системе. Для вывода строки "Для продолжения нажмите любую клавишу" и ожидания нажатия клавиши предназначена команда pause. Прежде чем использовать функцию необходимо подключить файл cstdlib (или stdlib.h). Прототип функции: Использование функции system() #include #include // Инструкции system("pause"); 29 return 0; } Настройка отображения русских букв в консоли До сих пор во всех операциях вывода мы использовали латинские буквы. Для этого были основания. Например, попытаемся вывести текст на русском языке: cout << "Добро пожаловать в C++!"; В результате в окне консоли отобразится нечитаемый текст: —юсЁю яюцрыютрЕН! т C++! Причина искажения русских букв заключается в том, что по умолчанию в окне консоли используется кодировка ср8бб, а в программе мы выводим текст в кодировке Windows -1251. Коды русских букв в этих кодировках отличаются, поэтому происходит искажение. При использовании командной строки пользователь может сменить кодировку вручную, выполнив команду: chop 1251 Однако этого не достаточно. Кроме смены кодировки необходимо изменить название шрифта, так как по умолчанию используются точечные шрифты, которые не поддерживают кодировку Windows-1251. Для нормального отображения русских букв следует в свойствах окна выбрать шрифт Lucida Console. Все эти действия вы можете произвести на своем компьютере, однако пользователи не знают в какой кодировке выводятся данные из вашей программы. Следовательно необходимо предусмотреть вывод русских букв в текущей кодировке консоли. Изменить кодировку консоли можно с помощью' функции system() , однако сменить шрифт довольно проблематично. Проще изменить кодировку текста с Windows-1251 на ср866. При использовании Visual C++ преобразование кодировки производится автоматически после настройки покали (локальных настроек компьютера). Настроить локаль позволяет функция set locale () . Для использования этой функции необходимо подключить файл clocale (или locale.h). Прототип функции: #include В первом параметре указывается категория в виде числа от 0 до 5. Вместо чисел можно использовать макроопределения LC _ ALL , LC _ COLLATE , LC _ CTYPE , LC _ MONETARY , LC _ NUMERIC и LC _ TIME При компиляции макроопределения будут заменены соответствующими числами. Во втором параметре задается название локал и в виде строки (например, "Russian_Russia. 1251" или "1251") более короткий вариант: setlocal(0,‖‖). Вместо названия можно указать пустую строку. В этом случае будет использоваться локаль, настроенная в системе. Пример настройки локали и вывода русских букв Настройка локали #include #include #include 30 cout<<"Добро пожаловать в C++!"< При использовании Visual C++ эта программа корректно выводит русские буквы вне зависимости от того, используется в консоли кодировка Windows-1251 или ср866. Задание 4. Создайте в решении «Лабораторная 1» проект «Задание 4». Напишите код в котором: вводятся значения в переменные целого типа x и y; вычисляется сумма, разность, произведение и отношение этих переменных; вывести результаты вычислений в виде Сумма x+y = Разность x – y = Произведение x*y= Отношение x/y= отладить и запустить проект. Контрольные вопросы 1. Что такое Решение и как оно связано с проектом. 2. Что такое пустой проект. 3. Чем отличается создание пустого проекта от консольного приложения. 4. Какого назначение файла stdafx.h. 5. Где отображается результат построения проекта. 6. Что делать, если в меню нет пункта «Запуск без отладки». 7. Если решение содержит несколько проектов, Что надо сделать, чтобы запустить другой проект. 8. Для чего надо подключать директиву iostream. 9. Чем отличается комментарий // от комментария /*, */. 10. Какой оператор выводит данные на экран. 11. Для чего предназначен endl. 12. Что надо сделать, чтобы задержать экран консоль при выводе результатов. 13. Какой оператор предназначен для ввода данных. 14. С какой целью в начале кода пишется строка using namespace std; и что надо делать, если эта строка отсутствует. 15. Что надо делать, чтобы на консольном экране отображались русские буквы. |