Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Алгоритмизация и программирование на языке С++. Ч.1. Учебник

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
3. Переменные итипы данных
41
Как уже говорилось ранее, изучать язык программиро­вания последовательно практически невозможно. Здесь пер­вый раз обратимся к понятиям глобального и локального определения переменных, к которым вернемся еще раз при рассмотрении функций в С++ (см. раздел 9).
#include <iostream> using namespace std; /* run this program using the console pauser or add your own getch, system("pause") or input loop */
int i = -1;
int main() {
cout << "NO main " << i << endl << endl; int i=0;
cout << «main “ << i << endl;
for(int i1=1; i1<3; i1++)
{
int i = 10;
cout << " for " << i << endl; }
cout << "main, после for " << i << endl;
}
Результат приведен на рис. 3.9.
Рис. 3.9. Иллюстрация глобального и локального
определения переменных
42
АЛГОРИТМИЗАЦИЯ ИПРОГРАММИРОВАНИЕ НАЯЗЫКЕ С++
 
Литералы используются в тексте программы для обозна­чения числовых значений, строк символов или логических констант. Другими словами, литерал представляет собой по­стоянное значение, у которого нет имени.
Целочисленные литералы записываются в привычном виде: последовательность цифр со знаком + или – (знак + можно опустить). Например, 25, –7, +553.
Литералы с плавающей точкой могут быть записаны в виде целой и дробной частей, разделенных точкой (целая часть может отсутствовать, если она равна 0; если дробная часть рав­на 0, то после точки должен быть записан 0) или в экспоненци­альной форме. В последнем случае число состоит из мантиссы (вещественной константы в десятичном представлении) и по­рядка – целого числа, перед которым располагается буква e или Е. Например, 2.3Е–2 обозначает число 2.310 Здесь 2.3 – мантисса, –2 – порядок. Например, 8.1, .23, 3.0, –5.3, 1E–1, 5e4.
Символьные литералы используются для представления одиночных символов (заключаются в одинарные кавычки).
Литералы для представления логических значений:
false
.
Примеры литералов приведены в табл. 3.3.
–2
(или 0,023).
true
,
Таблица 3.3
Литералы базовых типов С++
Символьный
символьный двухбайтовый Целочисленный с плавающей точкой с плавающей точкой двойной точности логический (булевый)
char '0'; u8'a'
u'b'; U'C'
wchar_t L'z'
int 3; +3; –33
oat 4.4, 4.4f
bouble 5.5l
bool true; false
Приведем фрагмент кода, в котором иллюстрируется ис­пользование вещественных литералов (с плавающей точкой).
3. Переменные итипы данных
43
auto a=1.2f;
cout << "type a : " << typeid(a).name() << endl;
// oat auto b=1.2F;
cout << "type b : " << typeid(b).name() << endl;
// double
auto c=1.2l;
cout << "type c : " << typeid(c).name() << endl;
Результат приведен на рис. 3.10.
Рис. 3.10. Вывод литералов вещественного типа
Еще приведем фрагмент программы, иллюстрирующий двоичные, восьмеричные и шестнадцатеричные литералы.
auto b1 = 0b1111; // Двоичный литерал auto o2 = 0111; // Восьмеричный литерал auto x3 = 0x11; // Шестнадцатеричный литерал
cout << " b1 binary " << typeid(b1).name() << " " << oct << b1; cout << " "<< dec << (int)b1 << endl; cout << " o2 oct " << typeid(o2).name() << " " << oct << o2; cout << " "<< dec << (int)o2 << endl; cout << " x3 hex " << typeid(x3).name() << " " << hex << x3; cout << " "<< dec << (int)x3 << endl;
Результат приведен на рис. 3.11.
Более полное описание всех типов литералов можно найти в [26, 27, 28].
\
В заключение отметим, что с помощью символа
(обрат-
ный слеш) можно указать некоторые специальные и управ-
\
ляющие символы. Последовательность
и следующего за ним
44
АЛГОРИТМИЗАЦИЯ ИПРОГРАММИРОВАНИЕ НАЯЗЫКЕ С++
символа называется управляющей последовательностью, или escape-последовательностью. Например, наличие в строке по-
\t
следовательности \n означает переход на новую строку,
горизонтальную табуляцию и т.п.
Рис. 3.11. Вывод литералов двоичного, восьмеричного
и шестнадцатеричного типов
Существует три вида escape-последовательностей: простая, восьмеричная и шестнадцатеричная. [29]. Примеры приведе­ны в табл. 3.4.
Таблица 3.4
Примеры escape-последовательностей
Значение Escape-последовательность
?
или
\n
\\
\t
\?
\v
\’
\b
\r
\0
\f
\ooo
\a
\xhh
Новая строка Обратная косая черта Горизонтальная табуляция Вопросительный знак Вертикальная табуляция Одинарная кавычка
BACKSPACE
Двойная кавычка Возврат каретки Нуль-символ Смена страницы Восьмеричный Оповещение (колокольчик) Шестнадцатеричный
Символ обратный слеш (\), когда он размещен в конце строки, является указанием о продолжении строки. Приве-
3. Переменные итипы данных
45
дем фрагмент программы, иллюстрирующий его использо­вание.
#include <iostream>
using namespace std;
int main() { cout<<"Hello \ World";
return 0; }
Результат выполнения в онлайн-компиляторе OnlineGDB приведен на рис. 3.12.
Рис. 3.12. Использование обратной косой черты для переноса
строки в тексте программы
И, наконец, приведем пример использования управляю-
\n
щих последовательностей (
и \b). Первая из них уже встре­чалась, она приводит к переводу в новую строку. А вторая при­водит к возврату на один символ назад. В тексте предыдущей
Hello
и
World
программы между словами
расположено 5 пробе­лов, четыре из которых находятся вначале второй строки. Если перед вторым словом пометить escape-последовательность
\b
то эти четыре пробела не напечатаются.
cout<<«Hello \ \b\b\b\bW\no\nr\nl\nd»;
Результат выполнения программы приведен на рис. 3.13.
,
46
АЛГОРИТМИЗАЦИЯ ИПРОГРАММИРОВАНИЕ НАЯЗЫКЕ С++
Рис. 3.13. Еще один вариант программы «Hello, world
 
Выражения (в данном случае речь идет только о число­вых выражениях) аналогичны привычным алгебраическим выражениям. Выражение может содержать символы ариф­метических операций: сложения +, вычитания –, умноже­ния *, деления / и вычисления остатка при целочисленном делении % (как уже говорилось выше, операция возведения в степень в языке C++ отсутствует) и операнды, над которы­ми эти операции выполняются. Операндами могут быть ли­тералы, переменные и обращения к методам (функциям), ре­зультатом которых является одно значение.
i++
Также будем считать, что
++
волы инкремент») (а добавление к нему точки с запятой уже дела­ет эту синтаксическую конструкцию инструкцией).
типов. Тип результата каждой операции зависит от типа опе­рандов, участвующих в операции. Тип результата последней операции определяет тип результата вычисления выраже­ния.
операндами осуществляется в соответствии со следующими правилами:
тот же тип ( целое получается целое число. Остаток от деления теряется;
результат будет вещественный ( необходимости автоматически преобразуется к типу
лении) требует только целых операндов.
содержащего операнды одинакового типа (в данном случае это литералы типа int), будет иметь тот же тип.
определяют операцию, называемую «префиксный
Всего в списке операций С++ более 50.
В выражениях могут присутствовать операнды разных
Определение типа результата операции над числовыми
• если оба операнда целые (типа
int
). В соответствии с этим при делении целого на
• если один из операндов вещественный (тип
Оператор % (вычисление остатка при целочисленном де-
Например, результат вычисления значения выражения,
является выражением (сим-
int
), результат будет иметь
double
), то
double
). Второй операнд при
double
.
48
АЛГОРИТМИЗАЦИЯ ИПРОГРАММИРОВАНИЕ НАЯЗЫКЕ С++
1+2*3
А результаты вычисления значений этих выражений, со­держащих операнды разных типов
1+2/3
1.0+2/3
получат, соответственно, целый и вещественный тип, при этом оба значения будут равны 1, так как деление двух целых чисел приведут к значению целого типа. А вот если записать так
1+2.0/3
то результат будет вещественным и равным 1,67777.
Приведем пример, где операнды разных типов (
oat
и Переменной типа
) соединяются знаками арифметических операций.
char
присвоено значение
char, int
'1'
. Код этого символа 49. Второй переменной присвоено значение 2, а тре­тьей – 3.0. Здесь используется операция сложения, порядок операций сначала прямой, а затем обратный.
char c1='1'; int i2=2; oat f3 = 2.0;
cout << "\n" << "+ " << endl; cout << " char+char " << (c1+c1) << " " << (char) (c1+c1) <<endl; cout << " char+int " << (c1+i2) << endl;
cout << " char+oat " << (c1+f3) << endl; cout << " char+int+oat " << (c1+i2+f3) << endl;
cout << " (int)char " << ((int(c1))) << endl;
cout << "\n" << "2+ " << endl; cout << " int+char " << (i2+c1) << endl;
cout << " oat+char " << (f3+c1) << endl; cout << " oat+int+char " << (f3+i2+c1) << endl;
cout << " (int)char " << ((int(c1))) << endl;
Результат представлен на рис. 4.1.
char
Переменная типа и выражение ет символу
'1'+'1'
b
. Числовые переменные интерпретируются как 2
получит значение
сохраняет только один символ
2*49
. Это соответству-
4. Операции (выражения)
49
и 3. И их значения добавляются к коду 49. Обратный поря­док в операции сложения не меняет результата. При исполь­зовании операций умножения и деления ситуация такая же.
Рис. 4.1. Операция сложения с разными типами данных
cout << "\n" << "* " << endl; cout << " char*int " << (c1*i2) << endl;
cout << " char*oat " << (c1*f3) << endl; cout << " char*int*oat " << (c1*i2*f3) << endl;
cout << "\n" << "/ " << endl; cout << " char/int " << (c1/i2) << endl;
cout << " char/oat " << (c1/f3) << endl; cout << " char/int/oat " << (c1/i2/f3) << endl;
Результат представлен на рис. 4.2.
Если в выражении несколько операторов, то они выпол­няют действия в соответствии со следующими приоритетами:
*
операторы умножения и деления
+, –
и вычитания
. Операции одного приоритета выполняются
, /, %, операторы сложения
по порядку слева направо. Дополнительный приоритет уста­навливается при помощи скобок (как и в алгебраических выражениях). В частном случае выражение может состоять из одной константы или переменной. Если операндом какой­либо операции является обращение к функции, то сначала
50
АЛГОРИТМИЗАЦИЯ ИПРОГРАММИРОВАНИЕ НАЯЗЫКЕ С++
выполняется это обращение, чтобы получить в качестве опе­ранда числовое значение.
Рис. 4.2. Операции умножения и деления с разными типами
данных
Например, при вычислении выражения
1+2*3
сначала вы­полняется умножение, а уже затем сложение. Результат бу­дет равен 7. Если нужно сначала выполнить сложение, а за­тем умножение, то необходим использовать скобки – Тогда результат будет 9. Так же и в выражении
1+2.0/3
(1+2)*3
.
сна­чала выполняется деление (имеющее больший приоритет). При этом результат этой операции будет уже вещественным.
Таблица 4.1 содержит список приоритетов для версии
С++20 [30].
Таблица 4.1
Приоритеты операций С++
::
1
( ) [ ] . -> x++ x –
2
! ~ ++x --x *x &x (type) sizeof co_await new new[ ] delete delete[ ]
3
* ->*
4
* / %
5
+ –
6
<< >> co_yield
7
<=>
8
< <= > >=
9
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]