ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 03.03.2021

Просмотров: 581

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

sasha = ZERO;

masha = ZERO;

cout << "У Саши есть " << sasha << " рублей, а у Маши " << masha;

cout << " рублей." << endl;

cout << "Заберем у каждого по одному рублю." << endl << "Теперь ";

sasha = sasha - 1;

masha = masha - 1;

cout << "У Саши " << sasha << " рублей, а у Маши " << masha;

cout << " рублей." << endl << "Счасливая Маша!" << endl;

return 0;

}

На экране получим текст:

У Саши есть 32767 рублей, а у Маши 32767 рублей.

Добавим каждому по одному рублю.

Теперь у Саши -32768 рублей, а у Маши 32768 рублей.

Бедный Саша!

У Саши есть 0 рублей, а у Маши 0 рублей.

Заберем у каждого по одному рублю.

Теперь у Саши -1 рублей, а у Маши 65535 рублей.

Счастливая Маша!

Сейчас многие компиляторы включают в себя также типы данных (64 разряда)

long long

unsigned long long

Целочисленная константа – это константа, записываемая явно. Целочисленные константы могут записываться в трех системах счисления: десятичная, восьмеричная и шестнадцатеричная. Если первая цифра числа 1-9- десятичная, первая 0, а вторая 1-7 – восьмеричная и если первые два символа 0x, то шестнадцатеричная.

42 - 42

0x42 - 66

042 - 34

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

Для задания константы лучше всего пользовать квалификатором const. Он показывает, что значение переменной изменять нельзя. Создать константу можно следующим образом

const type name = value;

Например

const int MONTHS = 12; //или kmonths

Рассмотрим тип данных char, который предназначен для представления символов, например букв и цифр. Для хранения символов используется числовой код. Таким образом, тип данных char – это еще один тип целочисленных данных. В большинстве систем основной набор символов содержит менее 256 символов, поэтому для его хранения достаточно одного байта. (набор символов ASCII, A – код 65 ). Символьная константа записывается в апострофах (‘f’,’\t’).

char c = 'M';

int i = c;

cout <<"The ASCII code for '"< c <<" is "<< i << "\n";

c = c+1;

i = c;

cout <<"The ASCII code for "<< c <<" is "<< i << "\n";

Результат работы программы:

The ASCII code for M is 77

The ASCII code for N is 78

Тип данных wchar_t предназначен для работы с набором символов, для кодировки которых недостаточно 1 байта, например, Unicode. Размер этого типа зависит от реализации и обычно соответствует типу short. Символьная константа данного типа задается с помощью префикса L.

wchar_t bob = L'p';

Некоторые символы нельзя вводить в программу с клавиатуры непосредственно. Для таких символов имеется специальная форма записи, которая называется управляющей последовательностью (escape). Управляющая последовательность интерпретируется как одиночный символ.

\n

Новая строка

\t

Горизонтальная табуляция

\v

Вертикальная табуляция

\b

Возврат на одну позицию

\r

Возврат каретки

\a

Сигнал

\\

Обратная наклонная черта

\?

Вопросительный знак

\’

Апостроф

\”

Кавычка

Еще один тип данных bool. Переменная этого типа может принимать два значения true и false


bool isready = true;

Литералы true и false могут быть преобразованы в данные типа int путем повышения типа

int ans = true; //1

int promise = false; //0

Кроме того, любое ненулевое значение преобразуется в значение true, а нулевое в false.

bool start = -100; //true

bool stop = 0; //false

    1. Числа с плавающей точкой.

С помощью типов данных с плавающей точкой можно представлять числа с дробной частью.

Имеется два способа записи чисел с плавающей точкой

  • стандартный (12.34, 3965.25, 8.0)

  • экспоненциальная форма

3.45e6 (3450000) 3.45 – мантисса, 6 – экспонента.

2.52Е+8, 8.33е-4, 7Е5, 9.11е-31 (7.2 е6 - неверно)

Запись d.dddE+n означает: переместить десятичную точку на n позиций вправо, а запись d.dddE-n означает: переместить десятичную точку на n позиций влево.

Предусмотрено три типа данных с плавающей точкой, которые характеризуются количеством значащих цифр и допустимым диапазоном значений экспоненты.

  • float -37..38 32 разряда 6 значащих цифр

  • double -307..308 64 разряда 15 значащих цифр

  • long double не менее double

Некоторые строки файла <cfloat>

#define DBL_DIG 15 /* # of decimal digits of precision */

#define DBL_EPSILON 2.2204460492503131e-016

#define DBL_MAX 1.7976931348623158e+308 /* max value */

#define DBL_MAX_10_EXP 308 /* max decimal exponent */

#define DBL_MIN 2.2250738585072014e-308 /* min positive value */

#define DBL_MIN_10_EXP (-307) /* min decimal exponent */

#define FLT_DIG 6 /* # of decimal digits of precision */

#define FLT_EPSILON 1.192092896e-07F

#define FLT_MAX 3.402823466e+38F /* max value */

#define FLT_MAX_10_EXP 38 /* max decimal exponent */

#define FLT_MIN 1.175494351e-38F /* min positive value */

#define FLT_MIN_10_EXP (-37) /* min decimal exponent */

По умолчанию константа с плавающей точкой имеет тип double. Если необходим тип float, тогда нужно добавить суффикс f. (234f, 45E20F). Заголовочный файл cfloat содержит предельные значения типов с плавающей точкой.

Для вывода данных с фиксированной точкой, в программу необходимо включить строчку

cout.setf(ios_base::fixed; ios_base::floatfield)

Целочисленные типы данных и типы с плавающей точкой вместе называются арифметическими типами данных.

Выражения

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

22+27 //59

x=20 //20

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

x=100;

Для объединения двух или более выражений в одно используется оператор запятая. Данный оператор гарантирует, что первое выражение вычисляется до второго, а также значение выражения с запятой равно значению второй его части. Более того данный оператор обладает самым низким приоритетом.

I = 20, j = 2*I //I равно 20, j равно 40

x = 17, 200 //значение выражения 200

int I, j // здесь запятая является разделителем, а не оператором

Арифметические операции.

Имеется 5 основных арифметических операций. В каждой из этих операций используется два числа (операнды) для вычисления результата.

  • + сложение

  • - вычитание

  • * умножение

  • / деление (если оба операнда целые числа, результатом будет целая часть частного)

  • % задает нахождения модуля первого операнда по отношению ко второму (остаток от деления). Оба операнда должны быть целочисленными данными.


Для вычисления операций необходимо помнить о приоритете операций и ассоциативности.

3+4*5=(35 или 23) //пользуемся приоритетом

120/4*5=(150 или 6) //ассоциативность «слева направо»

Рассмотрим некоторые сокращения записи арифметических операций (экономия времени при наборе), так называемые комбинированные операторы присваивания.

с+=5

с=с+5

с-=5

с=с-5

с*=5

с=с*5

с/=5

с=с/5

с%=5

с=с%5

с++

с=с+1

++с

с=с+1

с--

с=с-1

--с

с=с-1

Рассмотрим подробнее операторы инкремента и декремента. Существуют два варианта, префиксная ++x и постфиксная x++ форма. В первом случае изменение значения выполняется до обработки операнда, а во втором после.

int x = 5;

int y = ++x; // y=6, x=6

int z = 5;

int y = z++; // y=5, z=6

Приведение типов

В результате разных механизмов работы с различными типами данных в С++ осуществляется преобразование типов. Многие из них осуществляются автоматически. Преобразования типов данных осуществляются

  • когда данные одного арифметического типа присваиваются переменной другого арифметического типа.

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

  • когда в выражении содержатся данные разных типов.

  1. Интегральные повышения. Типы данных bool, char, unsigned char, signed char и short преобразуются в типы данных int.

  2. Алгоритм для компилятора при выполнении преобразований.

  1. Если один из операндов имеет тип long double, double, float другой операнд преобразуется в тот же тип.(важен порядок)

  2. В противном случае операнды целочисленные и выполняются интегральные повышения

  3. В этом случае если один из операндов имеет тип unsigned long другой операнд, преобразуется в тот же тип.

  4. Если один операнд long int, а другой unsigned int, то преобразование зависит от соотношения размерностей этих двух типов. Если величины данных типа long достаточны для представления данных типа unsigned int, то преобразуется в тип long

  5. В противном случае оба операнда преобразуются в тип unsigned long

  6. В противном случае, если один из операндов имеет тип long, unsigned int, другой операнд преобразуется в тот же тип.

  • при передаче аргументов в функции

Явное приведение типов можно сделать следующим образом

имяТипа (значение)

char ch = ‘Z’;

cout << int(ch); \\ на экране будет число 90

Операции сравнения

Для сравнения чисел в С++ существует шесть операций сравнения (отношения). Каждое сравнение может быть либо истинно, либо ложно. (<, <=, ==, >, >=, !=). Данные операции используются в логических выражениях.


Логические операции

Эти операции позволяют производить действия над булевыми переменными. Существует три логические операции

1

| |

логическое ИЛИ

or

2

&&

Логическое И

and

3

!

Логическое НЕ

not

  1. Ложно в том случае, если оба выражения ложны, в остальных случаях истина. Если выражение в левой части истинно, тогда выражение в правой части вычисляться не будет

5==5 || 5==9 //истинно

5>3 || 5>10 //истинно

5>8 || 5<10 //истинно

5<8 || 5>2 //истинно

5>8 || 5<2 //ложно

  1. Истина в том случае, если оба выражения истины, в противном случае ложь. Если выражение в левой части ложно, тогда выражение в правой части вычисляться не будет

5==5 && 4==4 //истинно

5==3 && 4==4 //ложно

5>3 && 5>10 //ложно

5>8 && 5<10 //ложно

5<8 && 5>2 //истинно

5>8 && 5<2 //ложно

Определим истинность

age > 17 && age < 35 //для интервалов

17 < age < 35 //всегда истинно

  1. Истина меняется на ложь, а ложь на истину

!(x>5) // x <= 5, а также !x > 5 – всегда ложно

Операции логического И и логического ИЛИ имеют более низкий приоритет, чем любые операции сравнения, а операция ! имеет более высокий приоритет, чем любые операции сравнения и арифметические операции.

Управляющие структуры

Любая программа на языке С++ может быть написана с использованием трех управляющих структур

  • Структура следования

  • Структура выбора

  • Структура повторения

  1. Структура выбора

  1. Оператор if /else

Оператор if предназначен для реализации разветвляющегося вычислительного процесса. В общем виде условный оператор записывается следующим образом:

if (логическое выражение)

оператор1

else

оператор2

Если логическое выражение истинно, то выполняется оператор1, иначе выполняется оператор2. Затем выполняется переход к следующему оператору. Имеется также сокращенная форма данного оператора.

if (логическое выражение)

оператор

Если логическое выражение истинно, то выполняется оператор, иначе выполняется переход к следующему оператору.

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

Задача1. Даны три различных числа a, b, c. Найти максимальное из этих чисел.

Решение:

#include <iostream>

using namespace std;

int main()

{

int a, b, c;

cin >> a >> b >> c;

if (a > b && a > c)

cout << a;

else if (b > c)

cout << b;

else

cout << c;

return 0;

}

  1. Оператор ? :

Это условный оператор (тернарная операция), которую часто используют вместо if/else. Это единственный оператор С++, требующий использования трех операндов.

выражение1 ? выражение2 : выражение3


Если выражение1 истинно, то значение всего условного выражения будет выражение2, в противном случае выражение3.

5>3 ? 10 : 12 //5>3 истинно, поэтому значение выражения – 10

3==9 ? 25 :18 //3==9 ложно, поэтому значение выражения – 18

if (k>5) My_res=10; else My_res=x*y; (My_res=k>5 ? 10 : x*y)

  1. Оператор switch

Этот оператор обеспечивает выбор из расширенного списка и используется при большом количестве вложенных проверок

switch (целочисленное выражение)

{

case метка1 : оператор(ы)

case метка2 : оператор(ы)

………………………………………

default : оператор(ы)

}

Оператор switch действует как переключатель, который указывает компьютеру, какую строку программы нужно выполнить следующей. Встретив ключевое слово switch, программа переходит к строке, помеченной значением, совпадающим со значением целочисленного выражения. Если таких меток нет, тогда выполняется строчка default. Если же такой строчки нет, тогда выполняется оператор следующий за switch. При переходе к определенной строке в данном операторе, выполнение операции не останавливается автоматически на следующем варианте. Чтобы прервать выполнение в конце некоторой группы операторов, необходимо использовать оператор break: тогда выполнение продолжится с оператора, следующего за switch.

Если реализация вариантов требует использования диапазонов, осуществления проверки значений с плавающей точкой или сравнения двух переменных, следует использовать оператор if else.

Задача 2 Написать программу, которая по двум введенным целым числам и знаку операции над ними (-, +, *, /) выполняет соответствующее математическое действие.

#include <iostream>

#include <clocale>

using namespace std;

int main()

{

setlocale(LC_ALL, "Russian");

cout << "Введите числа и знак операции\n";

int a, b;

char znak;

cin >> a >> znak >> b;

switch(znak)

{

case '-': cout << (a-b); break;

case '+': cout << (a+b); break;

case '*': cout << (a*b); break;

case '/': cout << (a/b); break;

}

return 0;

}

  1. Структура повторения

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

  1. Цикл for (цикл с предусловием)

for (инициализация; условие продолжения цикла; обновление переменной цикла)

тело цикла;

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

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

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