Главная страница
Навигация по странице:

  • Открыть документ .

  • Обозревателе решений

  • Задание 2

  • Комментарии в программе

  • Правка

  • Текстовый редактор

  • +

  • Вывод данных в языке C++

  • Форматированный вывод данных в языке С

  • Ввод данных в языке C++

  • Суммирование двух введенных чисел

  • Предотвращение закрытия окна консоли При запуске программы с помощью комбинации клавиш +

  • Использование функции getch()

  • Использование функции system()

  • Практикум ргппу 2017 3 Аннотация


    Скачать 3.14 Mb.
    НазваниеПрактикум ргппу 2017 3 Аннотация
    Дата10.05.2022
    Размер3.14 Mb.
    Формат файлаpdf
    Имя файлаShireva_CCPP.pdf
    ТипПрактикум
    #521016
    страница2 из 10
    1   2   3   4   5   6   7   8   9   10
    заголовок Флажок Пустой проект должен быть снят. Нажимаем кнопку Готово.

    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 " и из констекстного меню выберите пункт Открыть документ . В результате заголовочный файл stdio.h будет открыт на отдельной вкладке. Следует заметить, что файл stdio.h содержит объявления идентификаторов, предназначенных для операций ввода/вывода в языке С. Так как для вывода мы используем объект cout, объявленный в файле iostream, то подключение файла stdio.h можно вообще удалить из файла stdafx.h. Производить операции ввода/вывода мы будем только в стиле языка C++.
    Теперь рассмотрим содержимое файла Задание 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 <Pезультат выполнения этого примера будет таким:
    1081.5Hello, world!Hello, world!
    Как видно из результата, все данные выводятся на одной строке. Чтобы данные выводились на отдельных строках можно воспользоваться константой endl
    (сокращение от "end line"). Пример: cout<<"Stringl"; cout<Результат в окне консоли:
    String1
    String2
    На самом деле endl не совсем константа. Можно сказать, что это функция
    (называемая манипулятором), внутри которой производится вывод символа перевода строки и возвращается ссылка на поток вывода. Благодаря возврату ссылки можно строить цепочки из операторов << Например, предыдущий пример можно записать так: cout<<"Stringl"<Для перевода строки можно также воспользоваться комбинацией символов "\n"
    , которые обозначают символ перевода строки. Пример: 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 using namespace std; int main() { int x=0, у=0; cout<<"x="; cin>>x; cout<<"y="; cin>>у; cout<<"Summa = "<В первой строке производится подключение файла iostream. Далее инструкция подключения пространства имен std. Затем внутри функции main() объявляются две локальные переменные: х и у. Ключевое слово int в начале строки означает, что объявляются целочисленные переменные. При объявлении переменным сразу присваивается начальное значение (0) с помощью оператора =. Если значение не присвоить, то переменная будет иметь произвольное значение, так называемый "мусор". Как видно из примера, на одной строке можно объявить сразу несколько переменных, разделив их запятыми.
    В следующей строке с помощью объекта cout выводится подсказка для пользователя ("х = "). Благодаря этой подсказке пользователь будет знать, что от него требуется. После ввода числа и нажатия клавиши значение будет присвоено переменной х. Ввод значения производится с помощью объекта cin.
    После названия объекта указывается оператор >>, который как бы указывает направление ввода. При разработке собственных объектов можно перегрузить этот оператор и тем самым управлять, вводом. После оператора >> передается название переменной, в которой будут сохранены введенные данные.
    Далее производится вывод подсказки и получение второго числа, которое сохраняется в переменной у. В следующей строке производится сложение двух

    28 чисел и вывод результата. Процесс ввода двух чисел и получения суммы выглядит так: х=10 y=20
    Summa=30
    При вводе данных производится попытка преобразования к типу переменной.
    В нашем примере строка "10" будет преобразована в число 10, а строка "20" в число
    20. Однако, вместо числа пользователь может ввести буквы. В этом случае преобразование закончится неудачей, переменной не будет присвоено значение, а введенное значение останется в буфере и будет автоматически считано следующей операцией ввода.
    Предотвращение закрытия окна консоли
    При запуске программы с помощью комбинации клавиш + в конце автоматически вставляется строка "Для продолжения нажмите любую клавишу …".
    Нажатие любой клавиши приводит к закрытию окна консоли. Однако конечный пользователь таким образом запускать программу не будет. Если запуск производится из командной строки, то пользователь сможет увидеть результат, но если запуск производится с помощью двойного щелчка на значке файла, то окно консоли откроется, а затем сразу закроется. Чтобы окно не закрывалось необходимо вставить инструкцию, ожидающую нажатие клавиши. Сделать это можно несколькими способами.
    Первый способ заключается в использовании функции _getch(). Возвращаемое функцией значение можно проигнорировать. Прежде чем использовать функцию необходимо подключить файл conio.h.
    Использование функции getch()
    #include
    #include // Для _getch() using namespace std; int main() {
    // Инструкции cout <<"Press ... ";
    _getch(); return 0; }
    Второй способ заключается в использовании функции system (). Эта функция позволяет передать, команду операционной системе. Для вывода строки "Для продолжения нажмите любую клавишу" и ожидания нажатия клавиши предназначена команда pause. Прежде чем использовать функцию необходимо подключить файл cstdlib (или stdlib.h). Прототип функции:
    Использование функции system()
    #include
    #include // Для system() using namespace std; int main() {
    // Инструкции 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 char *setlocale(int Category, const char *Locale);
    В первом параметре указывается категория в виде числа от 0 до 5. Вместо чисел можно использовать макроопределения
    LC
    _
    ALL
    ,
    LC
    _
    COLLATE
    ,
    LC
    _
    CTYPE
    ,
    LC
    _
    MONETARY
    ,
    LC
    _
    NUMERIC и
    LC
    _
    TIME
    При компиляции макроопределения будут
    заменены соответствующими числами. Во втором параметре задается название локал и в виде строки (например, "Russian_Russia. 1251" или "1251") более короткий вариант: setlocal(0,‖‖). Вместо названия можно указать пустую строку. В этом случае будет использоваться локаль, настроенная в системе. Пример настройки локали и вывода русских букв
    Настройка локали
    #include
    #include
    #include // Для _getch() using namespace std; int main () { setlocale(0, "");

    30 cout<<"Добро пожаловать в C++!"< для закрытия окна..."; return 0; }
    При использовании 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. Что надо делать, чтобы на консольном экране отображались русские буквы.

    31
    1   2   3   4   5   6   7   8   9   10


    написать администратору сайта