4920

Ввод и вывод чисел. Стандартные математические функции

Практическая работа

Информатика, кибернетика и программирование

Ввод и вывод чисел Числовые данные выводятся в выходной поток оператором вывода, определенным в заголовочном файле iostream.h. Этот оператор способен выводить данные любых стандартных типов, в том числе отдельные символы, строки. Приемником...

Русский

2012-11-29

67.5 KB

7 чел.

Ввод и вывод чисел

Числовые данные выводятся в выходной поток оператором вывода <<, определенным в заголовочном файле iostream.h. Этот оператор способен выводить данные любых стандартных типов, в том числе отдельные символы, строки. Приемником данных для выходного потока может быть стандартное устройство для вывода (экран) или дисковый файл. В iostream.h определена потоковая переменная cout, связанная со стандартным выходным устройством, которую надо использовать при выводе результатов на экран.

Для ввода чисел применяется оператор >> чтения из потока. Источником данных для входного потока может быть стандартное входное устройство (клавиатура) или файл на диске. При чтении чисел сначала пропускаются пробелы, затем читаются символы числа, ввод прекращается при поступлении пробела. При вводе с клавиатуры следует использовать стандартный входной поток cin, определенный в заголовочном файле iostream.h, связанный по умолчанию с клавиатурой.

При вводе данных любых типов оператором >> разделителем отдельных порций данных является пробел.

Оператор ввода >> читает из потока символы, которые допускаются в записи данных для типа вводимой величины. Например, при вводе чисел с плавающей точкой допустима буква e как обозначение порядка, а при вводе целых эта буква недопустима. При вводе с клавиатуры, набранные символы будут обрабатываться после нажатия Enter.

Стандартные математические функции

Упомянем наиболее употребительные математические функции, объявленные в math.h:

sin(x), cos(x), tan(x) – тригонометрические (x в радианах);

asin(x), acos(x), atan(x) – обратные тригонометрические;

exp(x), sinh(x), cosh(x), tanh(x) – экспонента и гиперболические;

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

sqrt(x) – , x≥0; pow(x, y) – возведение x в степень y.

Аргументы всех функций и возвращаемые ими значения имеют тип double.


Операторы присваивания

В языке C++ кроме обычного оператора присваивания, обозначаемого одним знаком =, существуют операторы присваивания, совмещенные с основными операциями. Они позволяют писать инструкции вида

a = a + b;

в более краткой форме

a+= b;

Операторы присваивания перечислены в табл.1.

Таблица 1. Операторы присваивания

Знак оператора

Выполняемое действие

Примеры выражений

=

+=

–=

*=

/=

%=

<<=

>>=

&=

|=

^=

Простое присваивание

Сложение и присваивание

Вычитание и присваивание

Умножение и присваивание

Деление и присваивание

Вычисление остатка и присваивание

Сдвиг влево и присваивание

Сдвиг вправо и присваивание

Побитовое  И  и присваивание

Побитовое  ИЛИ  и присваивание

Побитовое исключающее ИЛИ и присваивание

k = 2

k+=2

k–=2

k*=2

k/=2

k%=2

k<<=2

k>>=2

k&=2

k|=2

k^=2


Операторы цикла

Операторы цикла обеспечивают возможность многократно повторять один и тот же участок программы, проводя одинаковые вычисления с различными данными. В языке C++ имеются три вида циклов.

Цикл с предусловием while

Данный цикл записывается в виде:

while(выражение)

 инструкция

Сначала вычисляется выражение. Если оно истинно (не нуль) выполняется инструкция и снова вычисляется выражение. Повторения цикла завершаются, когда выражение станет ложным (нулем).

Инструкция, выполняемая в цикле, называется телом цикла.

Так как условие повторения проверяется до выполнения тела цикла, данный цикл называю циклом с предусловием.

Тело цикла может не выполниться ни одного раза, если выражение окажется ложным при первом его вычислении.

Цикл for

Конструкция цикла for имеет вид:

for(выр1; выр2; выр3)

 инструкция

Любое из трех выражений может отсутствовать, но точку с запятой опускать нельзя. Если отсутствует выр2, то оно считается истинным. Этот цикл эквивалентен конструкции

выр1;

while(выр2){

 инструкция

 выр3;

}

Выражение выр1 вычисляется единственный раз вначале цикла. Условием повторения цикла является истинность выр2. после выполнения инструкций из тела цикла вычисляется выр3.

Цикл for можно рассматривать как цикл с параметром, обеспечивающим заданное число повторений, например, цикл

for(i =0; i < n; i++)

 …

повторяется n раз. Начальное значение для i равно 0, после каждого выполнения тела цикла i увеличивается на 1 за счет выражения i++. Таким образом, i пробегает последовательность значений: 0, 1, 2,…, n-1, n. После выхода из цикла параметра цикла i сохраняет последнее полученное значение i = n, которое можно использовать в дальнейших вычислениях.

Цикл do-while

Данный цикл записывается в виде:

do

 инструкция

while(выражение)

Сначала выполняется инструкция, затем вычисляется выражение и проверяется его значение. Если оно истинно, снова выполняется инструкция. Когда выражение становится ложным, цикл прекращает работу. Так как условие повторения цикла проверяется после выполнения тела цикла, данный цикл называется циклом с постусловием. Данный цикл целесообразно применять, когда тело цикла должно быть выполнено, по крайней мере, один раз.


Массивы

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

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

Одномерные массивы

Объявление массива отличается от объявления простой переменной указанием вслед за именем массива количества его элементов в квадратных скобках, например,

double x[100];

Здесь x – это имя массива из 100 элементов типа double. Так как нумерация элементов массива начинается с нуля, то первый элемент массива есть x[0], последний – x[99], не существует элемента x[100]. Массивы в языке C++ имеют всегда конкретную размерность, нельзя определять массивы переменной длины. Массив может состоять из элементов любых типов.

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

int days[] ={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

Если размер массива не указан, то длину массива вычисляет компилятор по списку инициализации. Для приведенного примера это 12.

Если количество инициализаторов меньше заданной длины массива, оставшиеся элементы будут нулевыми. Задание слишком большого числа инициализаторов является ошибкой.

Оператор sizeof, примененный к массиву даст размер массива в байтах. Например, для days выражение sizeof(days) = 24, так как массив состоит из 12 элементов типа int, а размер int равен 2 байта.

Над массивами в целом нельзя выполнять какие-либо действия (присваивать, складывать т.п.), работать можно только с отдельными элементами.

Двумерные массивы

Двумерные массивы встречаются гораздо чаще, чем массивы с большим числом измерений.

Двумерный массив рассматривается как одномерный, элементами которого являются массивы.

Память под многомерные массивы отводится построчно, то есть сначала размещаются первые n элементов, затем вторые и т.д.

Рекурсия

Функция называется рекурсивной, если она вызывает сама себя.

Рассмотрим печать числа как последовательности цифр. Цифры числа легко получать, начиная с конца числа как остатки от деления на 10, но печатать их нужно в правильной последовательности. Напишем рекурсивную функцию printd, которая будет вызывать сама себя, чтобы напечатать все старшие цифры, и затем печатает последнюю младшую цифру.

Строки символов

Понятие строки:

Строки символов широко используются в программировании, так как общение пользователя с программой ведется, в основном, с помощью текстовых сообщений, состоящих из отдельных строк. Строка в языках Си и C++ это массив символов, ограниченный признаком конца строки, которым служит символ ’\0’ с нулевым кодом, например, массив s, определенный инструкцией

char *s[100];

может содержать строку длиной от 0 до 99 символов, так как из 100 символов, выделенных под массив, один занимает признак конца строки \0’. Данный символ может занимать любую позицию в массиве, поэтому строки могут иметь переменную длину. Если s[0]=\0’, то массив s содержит строку нулевой длины, иначе говоря, пустую строку.

Средства работы со строкам:

Для вывода строк можно использовать оператор <<.

При вводе с помощью оператора >> в строку будут включены все символы до первого пробела, поэтому для ввода строк, содержащих любые символы лучше использовать функцию getline(char s[], int n), которая читает из входного потока не более  1 символа. Чтение символов прекращается при поступлении символа новой строки ’\n’ или достижении конца файла. Прочитанный символ новой строки ’\n’ не включается в s.

Существует довольно обширная библиотека функций для работы со строками. Их прототипы помещены в заголовочном файле string.h. Отметим некоторые их этих функций. В описаниях используется обозначение size_t для типа unsigned int. Данное обозначение вводится инструкцией

typedef unsigned int size_t;

которая имеется в стандартных заголовочных файлах. Оператор typedef вводит новое названия для типа данных. Тип size_t используется для величин, которые не могут быть отрицательными, например, для размеров объектов.

size_t strlen(const char s[]);

возвращает длину строки s. Завершающий символ ’\0’ не учитывается.

char *strcpy(char *dest, const char *src);

копирует строку src в строку dest, возвращает указатель на копию dest.

int strcmp(const char *s1, const char*s2);

посимвольно сравнивает строки s1 и s2, причем сравниваются коды символов. Возвращается значение <0, если первый несовпадающий символ s1 имеет код меньше чем код соответствующего символа s2, значение >0, если первый несовпадающий символ s1 имеет больший код, чем символ s2 и 0 при полном совпадении строк.

Указатели

Указатели и адреса:

Указатель есть адрес некоторого объекта. Если p  указатель на объект, то *p есть сам объект. Адрес объекта возвращает оператор &, который ставится перед именем объекта.

int *pi; //pi – указатель на переменную целого типа

Существует унарный оператор &, выдающий адрес своего операнда. После выполнения инструкций

int i = 0;

pi = &i;

указатель pi будет содержать адрес переменной i (говорят, что pi ссылается на i).

Можно создавать указатели на величины любых типов.

Адресная арифметика:

Как уже говорилось, указатели можно складывать и вычитать с целыми. Если p – указатель на некоторый элемент массива, то выражение p++ изменяет p так, чтобы он указывал на следующий элемент массива. Выражение p+=i изменяет p так, чтобы он указывал на i-й элемент, после того, на который он указывал ранее.

Если p и q указывают на элементы одного и того же массива, то к ним можно применять операторы сравнения ==, !=, <, <=, >, >=. Выражение p < q истинно, если p указывает на более ранний элемент массива, чем q.

Любой указатель можно сравнивать на равенство и неравенство с нулем. Если значение указателя равно нулю, это трактуется так, что указатель никуда не указывает.

Допускается вычитание указателей. Если p и q указывают на элементы одного и того же массива и p < q, то q - p +1 есть число элементов от p до q включительно.

Символьные указатели:

Для работы со строками символов часто используются указатели на char. Их определение имеет вид:

char* pc;

Строковая константа, написанная в виде “Я строка” есть массив символов. Во внутреннем представлении этот массив заканчивается нулевым символом ‘\0’, по которому программа может найти конец строки. Адрес начала массива, в котором расположена строковая константа, можно присвоить указателю путем присваивания

pc = ”Я строка”;

Здесь копируется только адрес начала строки, сами символы не копируются. Указатель на строку можно использовать там, где требуются строки. Например, при выполнении следующей строки программы

cout << pc << длиной ” << strlen(pc) << символов”;

будет напечатано

Я строка длиной 8 символов

При подсчете символов строки учитываются и пробелы, а завершающий символ ’\0’ не учитывается.


 

А также другие работы, которые могут Вас заинтересовать

53492. Построение таблицы по бинарному дереву поиска 22.96 KB
  Уровень узла в бинарном дереве определяется следующим образом: уровень корня всегда равен нулю, а далее номера уровней при движении по дереву от корня увеличиваются на 1 по отношению к своему непосредственному предку
53493. Расчет козлового крана по заданным параметрам 799 KB
  Повышение качества создаваемого механического оборудования и конструкций необходимо связывать, прежде всего, с уменьшением их веса и стоимости, повышением надежности и улучшением ряда других характеристик
53494. Особенности и результат левого поворота поддерева AVL дерева 131.17 KB
  После добавления нового элемента необходимо обновить коэффициенты сбалансированности родительских узлов. Если любой родительский узел принял значение -2 или 2, то необходимо выполнить балансировку поддерева путем поворота
53495. Алгоритм вставки вершины AVL дерево. Случай одного (левого) поворота 129.41 KB
  Следовать по пути поиска, пока не окажется, что узла нет в дереве. Включить новый узел и определить показатель сбалансированности. Пройти обратно по пути поиска, определяя сбалансированность.
53496. Каким должен быть урок русского языка и литературы? 26 KB
  Учители русского языка и литературы играют важную роль в жизни человека. Так же важную роль в этом играет урок русского языка. В этом нам помогают учители русского языка.
53497. ГЕОИНФОРМАТИКА. В.С.Тикунова 28.88 MB
  В учебнике освещены общие вопросы геоинформатики, функциональные возможности географических информационных систем (ГИС), принципы проектирования, интеграции данных и технологий, особенности интеллектуализации ГИС и систем поддержки принятия решений. Вместе с учебным пособием «Сборник задач и упражнений по геоинформатике», дополненным компакт-диском, составляет учебный комплект.