Лекция № 1

Тема: Знакомство с языком C++. Операторы и типы данных

 

План

1. История развития языка программирования С++

2. Структура программы на С++

3. Переменные и их типы

4. Операторы и математические функции

5. Операторы ввода/вывода на языке С++

6. Пример программы на С++

 

1. История развития языка программирования С++

 

Языка C++, объединяющий в себе свойства языка С и объектно-ориентированного программирова­ния, стал один из главных языков программирования в 90–е годы и твердо продолжает оставаться таким в начале XXI века. Язык C++ получил в наследство от языка С такие качества, как эффективность, компакт­ность, быстрота выполнения и переносимость про­грамм. От объектно-ориентированного программи­рования язык C++ получил новую методологию программирования, позволяющую справиться с возрос­шей сложностью современных задач программирования. А такие элементы языка, как улучшенные шаблоны, привносят в язык C++ еще одну новую методологию программирования: обобщенное программирование. Это тройное наследство является для языка C++ одновре­менно и благословением, и проклятием. Оно делают язык очень мощным, но в то же время и сложным; а это означает, что программистам приходится больше изу­чать.

В последние несколько десятилетий компьютерная тех­нология развивалась поразительными темпами. Языки программирования также претерпели значительную эво­люцию. В 70–е годы такие языки программирования, как С и Pascal, помогли войти в эру структурного программи­рования, принесшего порядок в ту область, которая силь­но нуждалась в этом. Язык С предоставил в распоряже­ние программиста инструменты, необходимые для структурного программирования, а также обеспечил со­здание компактных, быстро работающих программ и возможность адресации аппаратных средств, например, возможность управления портами связи и накопителя­ми на магнитных дисках. Эти качества помогли языку С стать господствующим языком программирования в 80–е годы. Вместе с тем в эти годы появилась новая мо­дель программирования: объектно-ориентированное программирование, или ООП, воплощенное в таких язы­ках, как SmallTalk и C++.

 

Язык С

Сотрудник компании Bell Laboratories Кена Томпсона в 1969 году разработал язык B (би) для создания других программных систем. Однако этот язык был интерпретируемым, что не позволяло создавать на нем независимые исполняемые файлы. Тем не менее, этот язык явился предшественником языка С.

В начале 70-х годов Денис Ритчи из компании Bell Laboratories занимался разработкой опе­рационной системы UNIX. Для выполнения этой ра­боты Ритчи нуждался в таком языке программирования, который был бы кратким, а также мог бы обеспечивать эффективное управление аппаратными средствами и создание компактных, быстро работающих программ. Традиционно такие потребности программистов удов­летворял язык ассемблера, который тесно связан с внут­ренним машинным языком компьютера. Однако язык ассемблера – это язык низкого уровня, т.е. он привязан к определенному типу процессора (или компьютера). Поэтому если программу на языке ассемблера необхо­димо перенести на компьютер другого типа, то ее при­ходится переписывать заново на другом языке ассемб­лера.

Операционная система UNIX пред­назначалась для работы на разнообразных типах компь­ютеров (или платформах). А это предполагало использование языка высокого уровня. Язык высокого уровня ориентирован на решение задач, а не на конкрет­ное аппаратное обеспечение. Специальные программы, которые называются компиляторами, транслируют про­грамму на языке высокого уровня в программу на внут­реннем языке конкретного компьютера. Таким образом, используя отдельный компилятор для каждой платформы, одну и ту же программу на языке высокого уровня можно выполнять на разных платформах. Ритчи нуждал­ся в языке, который бы объединял эффективность и возможность доступа к аппаратным средствам, имеющи­мся у языка низкого уровня, с более общим характером и переносимостью, присущим языку высокого уровня. Поэтому на основе имеющегося языка программирования В Ритчи разработал язык С. Принято считать, что авторами языка являются Ритчи и Томпсон.

Язык С, как и большинство основных языков программирования нашего времени, является процедурным.

 

Язык С++

С развитием объектно-ориентированной технологии возможностей стандартного языка С уже было недостаточно. В результате появился язык С++.

Язык C++, так же как и язык С, является детищем ком­пании Bell Laboratories. Автор Бьярни Страуструп разработал этот язык в начале 80-х годов. По его собственным словам, «язык C++ был спроектирован главным образом так, чтобы мне и моим друзьям не приходилось программировать на ассемблере, С или различных современных языках высокого уровня». Его главная цель состояла в следующем: «сделать так, что­бы отдельным программистам было легче и приятнее писать хорошие программы».

Страуструп создал C++ на основе языка С, так как язык С был кратким, хорошо подходил для системного программи­рования, был широко доступен и тесно связан с опера­ционной системой UNIX. Объектно-ориентированная часть языка C++ возникла под влиянием языка модели­рования Simula67. Страуструп добавил элементы ООП в язык С, не изменяя при этом существенно сам язык С.

Название C++ происходит от обозначения оператора инкремента ++ в языке С, который добавляет единицу к значению переменной. Название C++ подразумевает, что этот язык является усовершенствованной (++) версией языка С.

 

Обобщенное программирование

Обобщенное программирование – это еще одна парадигма программирования, поддерживаемая языком C++. Оно имеет общую с ООП цель – упростить повторное ис­пользование кодов программ. Однако, в то время как в ООП основ­ное внимание уделяется данным, в обобщенном про­граммировании – упор делается на алгоритмы. И у него другая область применения. ООП – это инструмент для разработки больших проектов, тогда как обобщенное программирование предоставляет инструменты для вы­полнения задач общего характера, таких как сортиров­ка данных. Термин обобщен­ный означает создание кода программы, независимого от типа данных. В языке C++ имеются данные различных типов – целые числа, числа с дробной частью, симво­лы, строки символов, определяемые пользователем сложные структуры, состоящие из данных нескольких типов. Если, например, требуется сортировать данные различных типов, то обычно для каждого типа создает­ся отдельная функция сортировки. Обобщенное про­граммирование расширяет язык таким образом, что по­зволяет один раз написать функцию для обобщенного (т.е. неопределенного) типа данных и затем использовать ее для разнообразных реальных типов данных. Это обес­печивается с помощью шаблонов языка C++. (начало)

 

2. Структура программы на С++

Программа C++ строится из отдельных блоков, на­зываемых функциями. Как правило, программа разделя­ется на ряд крупных задач, а затем для выполнения этих задач разрабатываются отдельные функции.

Большинство программ на С++ имеют следующий вид:

 

раздел подключения заголовочных файлов

заголовок программы (функции)

{

тело функции

}

Заголовок программы

Программа C++ состоит из одного или более модулей, называемых функциями. Выполнение программы начи­нается с функции, имеющей имя main(), поэтому в про­грамме обязательно должна присутствовать функция с таким именем. Если в про­грамме нет такой функции, то нет и законченной программы; компилятор в этом случае указывает, что функция main() не была определена.

Описание такой функции выполняют в разделе заголовка программы и записывают в виде:

 

int main()

 

Важно учитывать тот факт, что компилятор С++ различает регистр символов. Поэтому, имя функции, набранное в другом регистре (например: Main() или MAIN()), будет распознаваться как неправильное.

 

Раздел подключения заголовочных файлов

При создании исполняемого кода программ C++, также как и в случае с программами С, используется пре­процессор. Это программа, которая обрабатывает исход­ный файл перед основной компиляцией. Чтобы вызвать этот препроцессор, не надо делать ниче­го особенного. Он запускается автоматически при ком­пиляции программы.

Каждая программа на С++ вначале имеет директиву вида:

 

#include <iostream.h>

 

Эта директива приводит к тому, что препроцессор добавляет в программу содержимое файла iostream. Это типичное для препроцессора действие: добавление или изменение текста в исходном коде перед компиляцией.

Директива #include приводит к тому, что содержимое файла iostream пере­дается в компилятор вместе с содержимым исходного файла. В сущности, содержимое файла iostream заменя­ет в программе строку #include <iostream.h>. Исходный файл не изменяется, а объединенный файл, созданный из исходного файла и файла iostream, обрабатывается на следующем этапе компиляции.

Такие файлы, как iostream, называются файлами вклю­чения (поскольку они включаются в другие файлы) или заголовочными файлами (поскольку они включаются в начале файла). Компиляторы C++ поставляются со мно­гими заголовочными файлами, каждый из которых под­держивает отдельное семейство программных средств. Заголовочные файлы в языке С по традиции имеют рас­ширение h, это самый простой способ идентификации типа файла по его имени. Например, заголовочный файл math.h поддерживает различные математические функ­ции языка С++.

Заголовочные файлы находятся в папке include среды разработки C++. Если при запуске программы выдается ошибка, указывающая на отсутствие подключаемого заголовочного файла, то в среде C++ необходимо выполнить настройку. Для этого выполните команду OptionsDirectories, в поле  Include Directories введите ..\INCLUDE, а в поле Library Directories введите ..\LIB.

Тело функции

Тело функции содержит инструкции для ком­пьютера, т.е. определяет то, что собственно делает фун­кция.

Тело функции имеет следующий вид:

{

описание переменных;

операторы;

return;

}

Как видно, тело функции заключается в фигурные скобки. Описание переменных будет рассмотрено в следующем разделе лекции.

Оператор представляет собой инструкцию для компьютера. Чтобы понять исходный код, компилятор должен знать, когда заканчивается один оператор и начи­нается другой. В некоторых языках программирования используются разделители операторов. В языке Pascal один оператор от следующего отделяется точкой с запятой. В некоторых случаях точку с запятой в языке Pascal можно опускать, например, после оператора перед словом END, когда фактически не происходит разделение двух операторов. Но в языке C++, так же как и в языке С, применяется скорее признак (указатель) конца, чем разделитель. Признак конца – это точка с запятой, которая отмечает конец оператора; она является скорее частью оператора, чем разделителем между операторами. Практический резуль­тат заключается в том, что в языке C++ никогда нельзя опускать точку с запятой.

Инструкция return 0 указывает на завершение работы функции и возврат в вызывающую программу. В главной функции main() эту инструкцию можно не указывать.

В тексте программ допускается использовать комментарии. В языке C++ комментарии обозначаются двойной на­клонной чертой (//). В программах C+ + можно использовать комментарии из языка С, которые заключены между символами /*  и */.

Поскольку комментарий из языка С заканчивается не символом конца строки, а символом */, его можно продол­жать на несколько строк. В программах можно использо­вать любой из этих двух видов комментариев или оба вместе. (начало)

 

3. Переменные и их типы

Компьютеры – это точные, подчиняющиеся строгому порядку машины. Чтобы запомнить в компьютере какой-нибудь элемент информации, необходимо указать, в каком месте памяти он будет храниться, а также объем области памяти, требуемой для хранения этого элемен­та информации. В языке C++ это можно сделать отно­сительно безболезненно с помощью оператора объявле­ния, в котором указываются тип запоминаемой информации и идентификатор для выделяемой области памяти.

 

имя_типа  имя_переменной;

 

Этот оператор выделяет в памяти достаточно места для хранения информации, тип которой обозначается в операторе. Всю работу по выделению области памяти и присвоению ей идентификатора выполняет компилятор. В языке C++ требуется объявлять все переменные.

В языках С или Pascal все объявления переменных обычно располагаются в самом начале функции или процедуры. В языке C++ такое ограничение отсутству­ет. Действительно, в языке C++ принято объявлять пе­ременные непосредственно перед тем, как они впервые будут использоваться. В этом случае не требуется рыть­ся в программе в обратном направлении, чтобы увидеть тип переменной. Однако, данный стиль имеет тот недостаток, что объявления всех переменных не располагаются в одном месте. Таким образом, вы не можете с первого взгляда сказать, какие переменные используются в функции.

 

Имя переменной

Для переменных рекомендуется выбирать имена, имею­щие смысл. Вы должны следовать нескольким простым правилам именования переменных в языке C++:

 

Типы данных

В языке С++ типы данных можно разделить на несколько видов:

 

Целочисленные типы.

В языке С++ различные типы целочисленных дан­ных различаются объемом памяти, используемым для их хранения. Больший блок памяти может представлять больший диапазон целых чисел. Кроме того, одни типы данных (типы данных со знаком) могут представлять и положительные, и отрицательные значения, тогда как другие типы данных (типы данных без знака) не могут представлять отрицательные значения. Основные типы целочисленных данных языка C++ (в порядке возраста­ния размера) именуются short, int и long. Каждый из этих типов данных подразделяется на две разновид­ности: со знаком и без знака. В результате вы имеете на выбор шесть различных типов целочисленных данных.

В настоящее время во многих системах используют­ся минимальные гарантированные размеры данных и данные типа short имеют величину, равную 16 битам, а данные типа long – величину, равную 32 битам. Для дан­ных типа int остается возможность выбора. Их величи­на может быть равна 16, 24 или 32 битам. В более ранних реализациях языка C++ на компьютерах IBM PC данные типа int имеют, как правило, величину 16 битов, в Windows 95, Windows 98, Windows NT и во многих других peaлизациях языка C++ величины типа int имеют величину 32 бита.

При объявлении переменных имена данных этих типов используются точно также, как имена данных тина int:

 

short a; //создает переменную типа short int

int b;   //создает переменную типа int

long c;  //создает переменную типа long int

 

В действительности, short – это сокращение от short int, a long – сокращение oт long int. Данные этих трех типов: int, short и long – являются данными со знаком, а это означает, что диапазон их возможных значений разделяется приблизительно по­ровну между положительными и отрицательными зна­чениями. Например, 16-битовые данные типа int могут лежать в диапазоне от –32768 до +32767.

Для каждого из трех только что рассмотренных типов данных имеется его разновидность: тип данных без зна­ка. Данные этих типов не могут принимать отрицатель­ные значения. Преимуществом здесь является то, что увеличивается максимально возможное значение дан­ных. Например, тип данных short представляет данные, лежащие в диапазоне от -32768 до +32767, тогда как раз­новидность этого типа данных без знака может представ­лять данные, лежащие в диапазоне от 0 до 65535. Конеч­но, типы данных без знака можно использовать только для величин, которые никогда не бывают отрицательны­ми. Чтобы создать разновидность целочисленной пе­ременной без знака, просто модифицируйте объявление с помощью ключевого слова unsigned:

 

unsigned short a; //переменная типа unsigned short

unsigned int b;   //переменная типа unsigned int

unsigned long c;  //переменная типа unsigned long

 

Обратите внимание, что ключевое слово unsigned является сокращением от unsigned int.

 

Типы с плавающей точкой

Эти типы данных позволяют представлять числа с дробными частями. В языке C++, как и в стандарте ANSI С, имеется три типа данных с плавающей точкой: float, double и long double.

 

float a;     //создает переменную типа float

double b;         //создает переменную типа double

long double c;    //создает переменную типа long double

 

Все эти три типа данных могут иметь одинако­вые размеры. Однако, как правило, данные типа float имеют величину 32 бита, данные типа double – 64 бита и данные типа long double – 80, 96 или 128 битов.

У типов данных с плавающей точкой имеется два пре­имущества по сравнению с целочисленными данными. Во-первых, дробные числа могут быть представлены только типами данных с плавающей точкой. Во-вторых, типы данных с плавающей точкой имеют намного больший диапазон значений. С другой стороны, операции над типами дан­ных с плавающей точкой выполняются медленнее, чем операции над целочисленными данными, кроме того, для типов данных с плавающей точкой мо­жет произойти потеря точности.

 

Инициализация переменных

Инициализация позволяет присваивать переменным начальные значения сразу на этапе их описания. Инициализация позволяет избежать неопределенности, когда для переменной программист забывает задать начальное значение.

Для инициализации значения переменных ис­пользовать стандартные константы. Инициализировать переменную можно, присваивая ей значение другой пе­ременной, при условии, что эта переменная была опре­делена раньше. Можно даже инициализировать перемен­ную значением выражения при условии, что значения всех компонентов выражения известны во время компи­ляции:

 

int a=5;     //инициализирует переменную а значением 5

int b=a;     //инициализирует переменную b значением 5

float c=2.5; //инициализирует переменную c значением 2.5

float d=a+b+c;//инициализирует переменную d значением 12.5

 

Если объявление переменной a переместить в конец этого списка операторов, то инициализации пе­ременных b и d станут недействительными, по­скольку значение переменной a не будет известно в то время, когда компилятор будет пытаться проинициализировать эти две переменные.

 

Описание нескольких переменных

Если несколько переменных имеют один тип, то их можно описать в одной строке через запятую. Например:

 

int a,b;

unsigned short x,y;

float k,l,m;

 

Также в одной строке можно описать несколько переменных с их одновременной инициализацией:

 

int a=-1, b=6;

short x=0, y=6;

float k=0.12, l=3.68, m=125.365; (начало)

 

4. Операторы и математические функции

В C++ определены следующие арифметические операторы.

+ cложение;

– вычитание;

* умножение

/ деление

% деление по модулю

– – декремент (уменьшение на 1)

++  инкремент (увеличение на 1).

Действие операторов +, –, * и / совпадает с действием аналогичных опера­торов в алгебре. Их можно применять к данным любого встроенного числового типа.

После применения оператора деления (/) к целому числу остаток будет отбро­шен. Например, результат целочисленного деления 10/3 будет равен 3. Остаток от деления можно получить с помощью оператора деления по модулю (%). На­пример, 10%3 равно 1. Это означает, что в С++ оператор % нельзя применять к нецелочисленным типам данных.

Операторы инкремента (++) и декремента (– –) обладают очень интересными свойствами. Поэтому им следует уделить особое внимание.

Оператор инкремента выполняет сложение операнда с числом 1, а оператор декремента вычитает 1 из своего операнда. Это значит, что инструкция:

х = х + 1;

аналогична такой инструкции:

++х;

А инструкция:

х = х –1;

аналогична такой инструкции:

– – х;

Операторы инкремента и декремента могут стоять как перед своим операн­дом (префиксная форма), так и после него (постфиксная форма). Например, ин­струкцию

х = х + 1;

можно переписать в виде префиксной

++х;         //префиксная форма оператора инкремента

или постфиксной формы:

х++;         //постфиксная форма оператора инкремента

В предыдущем примере не имело значения, в какой форме был применен опе­ратор инкремента: префиксной или постфиксной. Но если оператор инкремента или декремента используется как часть большого выражения, то форма его при­менения очень важна. Если такой оператор применен в префиксной форме, то C++ сначала выполнит эту операцию, чтобы операнд получил новое значение, которое затем будет использовано остальной частью выражения. Если же опера­тор применен в постфиксной форме, то С++ использует в выражении его старое значение, а затем выполнит операцию, в результате которой операнд обретет но­вое значение.

Математические функции

В языке С++ имеются специальные функции для расчета алгебраических выражений. Все такие функции находятся в отдельном заголовочном файле math.h. Поэтому для использования функций в коде программы необходимо подключить данный файл с помощью директивы

 

#include <math.h>

 

Приведем основные алгебраические функции С++.

abs(x) - модуль целого числа;

labs(x) - модуль «длинного» целого;

fabs(x) - модуль числа с плавающей точкой;

sqrt(x) - извлечение квадратного корня;

pow(x,y) - возведение x в степень y;

cos(x) - косинус;

sin(x) - синус;

tan(x) - тангенс;

acos(x) - арккосинус;

asin(x) - арксинус;

atan(x) - арктангенс;

exp(x) - экспонента в степени x;

log(x) - натуральный логарифм;

log10(x) - десятичный логарифм;

round(x) – округление числа x по правилам арифметики, то есть round(1.5) == 2round(-1.5) == -2

floor(x) – округление числа x вниз, при этом floor(1.5) == 1, floor(-1.5) == -2

ceil(x) – округление числа x вверх, при этом ceil(1.5) == 2, ceil(-1.5) == -1

 

При возведении числа в дробную степень, знаменатель дробной степени нужно записывать в вещественном виде. Например: квадратный корень из а записывается так: pow(a,1/2.0)

 

Продемонстрируем использование функций на примерах.

y=(a+pow(b,2))/(sin(x)-4)

y=(sqrt(pow(a,3)+pow(b,2))-7)/(exp(4*x-1)+log(4*x))

y=(sin(pow(x,2))+pow(tan(z)))/fabs(pow(3*a,1/3)-exp(b+3))+pow(log(pow(b-2,2)),5) (начало)

 

5. Операторы ввода/вывода на языке С++

Для вывода сообщения на экран используется следующий оператор C++:

 

cout<<”текст”;

 

Оператор cout находится в заголовочном файле iostream.h. Поэтому для его использования данный файл нужно подключить с помощью директивы:

 

#include <iostream.h>

 

Информация, заключенная в двойные кавычки, яв­ляется сообщением, которое должно быть выведено на экран. В языке C++ любая последовательность симво­лов, заключенная в двойные кавычки, называется стро­кой потому, что она состоит из не­скольких символов, соединяемых вместе в более крупный блок (элемент).

Строка в операторе cout может содержать так называемые подстановочные символы – символы, которых нет на клавиатуре или они заняты под ключевые символы в тексте программы. Перед каждым таким подстановочным символов ставится символ «\».

Приведем перечень таких символов:

\a – звуковой сигнал

\n – переход на новую строку

\t – горизонтальная табуляция

\v – вертикальная табуляция

\\ - обратный слеш

\’ – одинарная кавычка

\” – двойная кавычка

\? – знак вопроса.

 

Например, оператор вида:

cout>>“пример\nтекста”;

Слово «пример» выведет на одной строке, а слово «текста» на другой.

 

Оператор вида:

cout>>“магазин\«чайка\»”;

Слово «чайка» отобразит в двойных кавычках.

 

Кроме текста оператор может выводить на экран значения переменных, комбинируя их с текстом.

int a=10, b=12;

cout<<”a=”<<a<<”, b=”<<b

 

Форматированный вывод

Для выдачи значений заданной длины или точности оператор cout имеет ряд настроек:

 

cout.width(число) – общая длина выводимого значения, т.е. количество позиций, которые занимает число. Свободные позиции будут заполнены пробелами.

cout.precision(число) – количество знаков в числе

cout.fill(‘символ-заполнитель’) – символ, которым заполняются лишние позиции на экране

 

Настройка cout.width после выполнения одного оператора вывода сбрасывается в начальное значение. Поэтому ее приходится указывать отдельно для каждой переменной или строки.

Настройки этих параметров должны проводиться до вызова оператора вывода.

Например:

//описываем переменные

float a=125.478, b=625.365;

 

//задаем количество знаков в числе

cout.precision(4);

//задаем заполнитель для лишних позиций

cout.fill(‘0’);

 

//выдаем значения переменных на экран

//выводим текст-подсказку

cout<<”a=”;

//задаем общую длину для числа

cout.width(8);

//выводим значение переменной a

cout<<a;

//выводим текст-подсказку

cout<<” b=”;

//задаем общую длину для числа

cout.width(8);

//выводим значение переменной b

cout<<b;

Регулировка ширины поля (width) и заполнителя (fill) имеет смысл при выдаче данных в таблицу. Чаще всего можно обойтись только настройкой precision.

Для округления числа (переменной) до определенного количества знаков после запятой, можно использовать следующую запись:

round(переменная*100)/100

 

При выводе переменной b вместо команды cout<<b; использовать команду

cout<<round(c*100)/100;

Библиотека iomanip.h

В заголовочном файле iomanip.h определены некоторые манипуляторы потокового ввода/вывода. Список самых популярных манипуляторов:

setprecision(число) – задает количество знаков после запятой при выводе чисел с плавающей точкой

setw(число) – задает ширину поля вывода (как и setprecision – только работает не только с числами)

setfill(‘символ-заполнитель’)  – задает символ, которым будут заполняться пробелы в выводимом тексте

setbase(число) – задает систему счисления, в которой будет выводиться число. Необходимо указать в скобках 2, 8, 16 – вид системы счисления.

oct – аналогично setbase(8) – вывод в восьмеричной системе счисления

dec – аналогично setbase(10) – вывод в десятеричной системе счисления

hex – аналогично setbase(16) – вывод в шестнадцатеричной системе счисления

left – выравнивание выводимого текста по левому краю

right – выравнивание выводимого текста по правому краю

fixed – выводит число с плавающей точкой, как число с фиксированной точкой

 

Примеры использования манипуляторов:

//описание числовых переменных

float a = 1.78956;

    int b = 15;

//описание строковой переменной

char str[] = "Это манипуляторы\n";

//вывод вещественного числа с четырьмя знаками после запятой

cout<<"Число с плавающей запятой "<< fixed<< setprecision(4)<<a<< endl;

//задается ширина строки в 20 символов

//строка str содержит 17 символов, оставшиеся 3 символа заполнятся #

cout<<setw(20)<<setfill('#')<<str<<endl;

//вывод числа b в восьмеричной системе счисления

cout<<setbase(8)<<b<<endl;

//вывод числа b в десятичной системе счисления

cout<<setbase(10)<<b<<endl;

//вывод числа b в шестнадцатеричной системе счисления

cout<<setbase(16)<<b<<endl;

//описание числовых переменных

int с = 15;

float d = 12.03;

//вывод числа b в восьмеричной системе счисления

cout<<oct<<c<<endl;

//вывод числа b в десятичной системе счисления

cout<<dec<<c<<endl;

//вывод числа b в шестнадцатеричной системе счисления

cout<<hex<<c<<endl;

//для вывода числа d отводится ширина в 10 позиций, задается выравнивание по левому краю

//устанавливается 3 знака после запятой

cout<<setw(10)<<left<<fixed<<setprecision(3)<<d<<endl;

 

Очистка экрана

Язык С++ имеет функцию, позволяющую очищать экран от текстовой информации. Эта функция имеет вид:

 

clrscr();

 

Функция clrscr() находится в заголовочном файле conio.h. Поэтому для ее использования данный файл должен быть подключен с помощью директивы:

#include <conio.h>

 

Для очистки экрана можно использовать команду

system (”cls”) ;

Команда system() используется для вызова команды операционной системы из программы на C / C ++.

Недостатки использования системной команды:

1)      ресурсоемкий вызов функции

2)      использование system () делает программу непереносимой, т. е. это работает только в системах, в которых есть команда pause на системном уровне, таких как DOS или Windows. Но не Linux, MAC OSX и большинство других.

 

Организация паузы для просмотра результата

После выполнения программы обычно происходит автоматичский возврат в окно с исходным текстом. Это не позволяет просмотреть результат, который программа выдает на экран. Выходом из этой ситуации может быть использование клавиш Alt+F5, при нажатии на которые происходит скрытие окна с кодом программы. Повторное нажатие на эти клавиши возвращает окно с кодом на экран.

Однако, если создать исполняемый EXE файл, то использовать эти клавиши будет невозможно и результат останется невидимым для пользователя.

Для решения данной проблемы в конце программы можно добавлять функцию, которая приостанавливает работу до нажатия любой клавиши. Эта функция имеет вид:

getch();

Данная функция находится в заголовочном файле conio.h. Поэтому для ее использования данный файл должен быть подключен с помощью директивы:

#include <conio.h>

 

Оператор ввода данных с клавиатуры

Для вода данных  с клавиатуры в С++ имеется оператор:

 

cin>>переменная;

 

Данный оператор приостанавливает работу программы и ждет пока пользователь не введет значение переменной и не нажмет ENTER.

C помощью одного оператора можно ввести значения нескольких переменных. Для этого оператор записывают в виде:

 

cin>>переменная1>>переменная2>>. . .>>переменнаяn;

 

При запуске программы каждое значение вводится через пробел и в конце нажимают ENTER.

Оператор cout находится в заголовочном файле iostream.h. Поэтому для его использования данный файл нужно подключить с помощью директивы:

#include <iostream.h> (начало)

 

6. Пример программы на С++

Для демонстрации решим одну задачу. Составить программу для нахождения значения функции:

c=sina+cos2b

 

Программа может иметь вид:

 

//подключаем файл для организации ввода/вывода

#include <iostream.h>

//подключаем файл для использования алгебраических функций

#include <math.h>

 

//заголовок главной программы

int main()

{

//отображение русских символов

system("chcp 1251>nul");

//описываем три переменные вещественного типа

float a,b,c;

//выдаем текстовую подсказку на экран

cout<<"Введите значения a и b:";

//запрашиваем ввод с клавиатуры двух переменных: a и b

cin>>a>>b;

//считаем значение функции

c=sin(a)+pow(cos(b),2);

//устанавливаем количество знаков (3) для вывода результата

cout.precision(3);

//выводим результат на экран

cout<<"Функция равна:"<<c<<"\n";

cout<<"Для продолжения нажмите любую клавишу. . .";

//делаем паузу для просмотра результата

system("pause");

//завершаем работу главной программы

return 0;

}