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

Программирование на языке С++. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
Целочисленные литералы состоят из цифр от 0 до 9 со знаком +, — или без
знака. Например, +25, –7, 553. Литералы с плавающей точкой могут быть записа­ны в виде целой и дробной частей, разделенных точкой (целая часть может отсут­ствовать, если она равна 0, если дробная часть равна 0, то после точки должен быть записан 0) или в экспоненциальной форме (вместо основания степени 10 ис-
пользуется e или E). Например, 8.1, 0.2, 3.0, –5.3E–1, 5e4.
Строковые литералы используются для представления текстовых строк. Это
строка символов, заключенная в кавычки. Например, «Город Москва « или «Ре­зультаты вычислений».
char symbol = 'x';
Литералы для представления логических значений: true, false. Ключевое
слово null является литералом, представляющим пустую ссылку, которая не ссы-
лается ни на один объект.
Операторы
Тело программы, написанной на языке C++, представляет собой последователь­ность инструкций (команд), каждая из которых состоит из выражений (операндов) и операторов. Операторы служат для присваивания значений переменным, реализации
переходов между различными инструкциями в программе, вызова функций и т. п.
Операторы могут быть унарными, бинарными или тринарными. Если операторы при-
меняются к одному операнду — они являются унарными. Если операторы применяют­ся к двум операндам, то они — бинарные. Условный оператор, который обозначается как ?:, является единственным тринарным оператором — он имеет три операнда.
Величины
Вам уже известно, что всякий алгоритм составляется для конкретного исполни­теля. Сейчас в качестве исполнителя мы будем рассматривать компьютер, оснащенный
системой программирования на определенном языке.
Компьютер-исполнитель работает с определенными данными по определенной программе. Программа — это алгоритм записанный на каком-либо языке программи­рования. Данные — это множество величин.
Компьютер работает с информацией, хранящейся в его памяти. Отдельный ин-
формационный объект (число, символ, строка, таблица и пр.) называется величиной.
Величины в программировании, как и в математике, делятся
на переменные и константы. Значение константы остается неизменной в течении всей программы, значение переменной величины может изменяться.
У каждой переменной есть имя, тип и текущее значение. Имена переменных называют идентификаторами (от глагола «идентифицировать», что значит «обозна- чать», «символизировать»).
11
2. ТИПЫ ДАННЫХ ЯЗЫКА С++
Наименование типа
Тип данных
Размер, байт
Диапазон значений
Символьный
char
1
-128…127 (0…255)
Целый
int 2 -32768…32767
Короткий
short
2
-32768…32767
Длинный
long
4
-2147483648…2147483647
Беззнаковый целый
unsigned int
2
0…65535
Беззнаковый длинный
unsigned long
4
0…424967295
Замечание:
При записи вещественного числа пробелы внутри числа не допускаются.
Для отделения целой части от дробной используется не запятая, а точка.
Основная цель любой программы состоит в обработке данных. Данные раз-
личного типа хранятся и обрабатываются по-разному. В любом алгоритмическом
языке каждая константа, переменная, результат вычисления выражения или функ-
ции должны иметь определенный тип.
Тип данных определяет:
• внутреннее представление данных в памяти компьютера;
• множество значений, которые могут принимать величины этого типа;
• операции и функции, которые можно применять к величинам этого типа.
В языке C применяются данные двух категорий: простые (скалярные) и
сложные (составные) типы данных. К основным (базовым) типам данных относят-
ся целочисленный (int), вещественный с одинарной точностью (float), веществен­ный с двойной точностью (double),bool(логический), символьный (char) типы. Используя модификаторы signed/unsigned (знаковый/беззнаковый) и модификато­ры длины short/long (короткий/длинный) из базовых типов данных можно полу-
чить дополнительные типы. Величины символьного типа возможно использовать
для работы с короткими целыми числами, представимыми как коды символов.
Размеры и возможные диапазоны базовых целых типов данных приведены в табл. 1.
2.1. ЦЕЛОЧИСЛЕННЫЕ ТИПЫ ДАННЫХ
Таблица 1
12
2.2. ПЛАВАЮЩИЕ (ВЕЩЕСТВЕННЫЕ) ТИПЫ ДАННЫХ
Наименование типа
Тип данных
Размер, байт
Диапазон значений
Вещественный
float
4
-3.4*10
38
…3.4*10
38
Вещественный с двойной точностью
double
8
-1.74 *10
308
...1.74
*10
308
Таблица 2
Действительные (вещественные) числа представляются в виде чисел с деся-
тичной точкой.
Для записи очень больших или очень маленьких по модулю чисел использу-
ется так называемая запись «с плавающей точкой» (также называемая «экспонен­циальная»).
Вещественная константа в экспоненциальном формате представляется в ви­де мантиссы и порядка. Мантисса записывается слева от знака экспоненты (E или
e), порядок — справа от знака. Значение константы определяется как произведе­ние мантиссы и возведенного в указанную в порядке степень числа 10.
Арифметические операции с действительными числами
Характерные операции для действительных чисел: сложение (+); вычитание (-); деление (/); умножение (*).
Однако в C++ один знак / означает две разные операции. Если один или оба
операнда — вещественные, то выполняется обычное деление, если оба операн­да — целые, то выполняется деление нацело и результат будет целого типа.
Замечание:
При преобразовании к целому типу true имеет значение 1.
2.3. ЛОГИЧЕСКИЙ ТИП ДАННЫХ
Логический (булевый) тип обозначается словом bool. Данные булевого типа
могут принимать только два значения: true и false. Значение false обычно равно
числу 0, значение true — числу 1. Под данные булевого типа отводится 1 байт.
Логические операции
• && логическое И (AND),
• || логическое ИЛИ (OR),
• !- логическое НЕ (NOT).
13
Результаты воздействия логических операторов на различные комбинации
A B !A
A&&B
A||B
0 0 10 0
0 1 10 1
1 0 00 1
1 1 01 1
значений операндов показаны в таблице.
Пример программы :
#include<iostream> #include<conio.h> using namespace std; int main() /*1.cpp Использование логических функций*/ int main() { const bool T=true; const bool F=false; cout<<« Negation Operation»<<endl; //Отрицание cout<<T<<« «<<!T<<endl; //!T=F cout<<F<<« «<<!F<<endl<<endl; //!F=T
Таблица 1
cout<<« OR Operation»<<endl; //Операция ИЛИ cout<<(F||F)<<endl; //F||F=F cout<<(F||T)<<endl; //F||T=T cout<<(T||F)<<endl; //T||F=T cout<<(T||T)<<endl<<endl; //T||T=T
cout<<« AND Operation»<<endl; //Операция И cout<<(F&&F)<<endl; //F&&F=F cout<<(F&&T)<<endl; //T&&F=F cout<<(T&&F)<<endl; //F&&T=F cout<<(T&&T)<<endl<<endl; //T&&T=T
cout<<« De Morgan:!(x&&y)=!x||!y» <<endl; cout<<!(F&&F)<<«=«<<!F||!F)<<endl; //T cout<<!(F&&T)<<«=«<<(!F||!T)<<endl; //T cout<<!(T&&F)<<«=«<<(!T||!F)<<endl; //T cout<<!(T&&T)<<«=«<<(!T||!T)<<endl<<endl; //F
cout<<« De Morgan:!(x||y)=!x&&!y» <<endl; cout<<!(F||F)<<«=«<<(!F&&!F)<<endl; //T cout<<!(F||T)<<«=«<<(!F&&!T)<<endl; //F cout<<!(T||F)<<«=«<<(!T&&!F)<<endl; //F cout<<!(T||T)<<«=«<<(!T&&!T)<<endl<<endl; //F
int m=0, n=10; double x=0.0, y=10.0; cout<<«Integers and double as logical values»<<endl; cout<<«m=«<<m<<«,!m=«<<!m<<endl; //!m=1; cout<<«n=«<<n<<«,!n=«<<!n<<endl; //!n=0;
14
cout<<«x=«<<x<<«,!x=«<<!x<<endl; //!x=1; cout<<«y=«<<y<<«,!y=«<<!y<<endl; //!m=1; getch(); return 0;
}
Замечание:
Символы бывают двух видов: графические и управляющие.
Расширенный символьный тип (wchar_t) предназначен для работы с набо-
ром символов, для кодировки которых недостаточно 1 байта, например, Unicode.
2.4. ТИП ДАННЫХ (char)
Для представления символов в памяти компьютера используется тип char.
Примеры:
const char c1 = 'A';// константная переменная
char c = c1, c2; // переменные
Под данные типа char отводится 1 байт. Тип char является целым типом, по­этому внутреннее представление для данных типа char (их коды) — это просто це­лые числа.
Для кодировки символов используется ASCII-код (American Standard Code for Information Interchange — американский стандартный код для обмена инфор-
мацией). Это семибитный код, позволяющий записать 128 различных комбинаций
(знаков). Так как под данные типа char отводится 8 двоичных цифр (бит), то име-
ется возможность закодировать ещё 128 знаков. Таким образом, кодовая таблица
состоит из двух частей: младшая — соответствует ASCII-код, старшая — исполь-
зуется для представления национальных шрифтов, символов псевдографики
и прочее.
Для различных систем кодировок младшая часть кодовой таблицы всегда одинакова, а старшая может быть различной. В нашей стране сейчас наиболее по-
пулярной является Windows-кодировка (Кодовая таблица 1251), для совместимо­сти со старыми программами применяется DOS-кодировка (Кодовая таблица 866),
а при работе в операционной системе Linux довольно распространена кодировка
KOI8-R.
Для работы с данными типа char можно использовать все арифметические
операции, операции сравнения и побитовые операции, хотя, если учесть, что этот тип используется для представления не чисел, а именно символов, то, естественно,
чаще всего применяют операции сравнения.
Символы бывают двух видов: графические и управляющие. Графические
символы: буквы, цифры и другие знаки. Управляющие символы (или как их ещё
называют — escape-последовательность) — символы которые выталкиваются в
15
16
поток вывода, с целью форматирования вывода или печати некоторых управляю­щих знаков С++. Основной список управляющих символов языка программирова-
ния C++ представлен ниже.
Символ
Описание
\r
возврат каретки в начало строки
\n
новая строка
\t
горизонтальная табуляция
\v
вертикальная табуляция
\»
двойные кавычки
\’
апостроф
\\
обратный слеш
\0
нулевой символ
\?
знак вопроса
\a
сигнал бипера (спикера) компьютера
3. ОПЕРАЦИИ В ЯЗЫКЕ С++
Название операции
Знак операции
Запись на С++
Результат
Сложение
+
x+4
x+4
Умножение
*
x*y
x*y
Деление
/
10/3
3
Вычисление остатка
%
10%3
1
Замечание:
Приоритет операций:
1. ( );
2. ++ и -- ;
3. -,+ унарные;
4. *, /, %;
5. +, — .
В C++ один знак / означает две разные операции. Если один или оба операн-
да — вещественные, то выполняется обычное деление, если оба операнда — це­лые, то выполняется деление нацело и результат будет целого типа.
Различают унарные и бинарные операции. У первых из них один опе-
ранд(a=-b), а у вторых — два(c=a+b).
3.1. АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ С ЦЕЛЫМИ ЧИСЛАМИ
Любое выражение языка состоит из операндов (переменных, констант и др.),
соединенных знаками операций. Знак операции — это символ или группа симво-
лов, которые сообщают компилятору о необходимости выполнения определенных
арифметических, логических или других действий.
Таблица 1
3.2. ОПЕРАЦИИ СРАВНЕНИЯ
• == равенство;
• > больше;
• < меньше;
• != неравно;
• >= больше или равно;
• <= меньше или равно.
Замечание:
17
18
Слева от знака = может быть только переменная, справа же можно записать и константу, и переменную и вообще выражение любой сложности.
3.3. ОПЕРАТОР ПРИСВАИВАНИЯ
В языке C++ оператором присваивания служит одиночный знак равенства (=).
• переменная = выражение.
Данный оператор работает следующим образом: вначале вычисляется выраже-
ние, записанное справа от символа операции = (равно), затем полученный результат присваивается переменной, стоящей слева от знака =. Тип результата должен совпа- дать с типом переменной, записанной слева, или быть к нему приводимым.
Пример операторов: x=3; r=x; y=x+3*r; s=sin(x);
• множественное присваивание — в таком операторе последовательно спра-
ва налево нескольким переменным присваивается одно и то же значение, напри-
мер: a=b=c=1;
• комбинированное (присваивание с одновременным выполнением какой-
либо операции):
Полная запись
Сокращенная запись
Значение
a=a+b;
a+=b;
к a прибавить b
a=a-b;
a-=b;
из a вычесть b
a=a*b;
a*=b;
a умножить на b
a=a/b;
a/=b;
a поделить на b
a=a%b;
a%=b;
остаток от деления a на b
3.4. ИНКРЕМЕНТ И ДЕКРЕМЕНТ
Помимо стандартных арифметических операций в С++ есть унарная опера-
ция инкремента ++ (увеличение на 1) и унарная операция декремента — (уменьшение на 1). Эти операции используются для более короткой записи уве- личения переменной на единицу. Например, целочисленную переменную i можно увеличить на единицу так: i= i + 1;, либо записать i++;, что будет идентично.
Кроме того, различают постфиксную и префиксную формы записей инкре­мента и декремента. При префиксной форме записи переменная сначала увеличи­вается, а затем это уже новое значение используется в том выражении, в котором
он встретилась. Префиксная форма имеет следующий вид записи: ++i, ++j, ++x, —
y, —k, —l.
При постфиксной форме записи в выражении используется текущее значе­ние переменной, а уже после переменная наращивается на единицу. Постфиксная
форма имеет следующий вид записи: i++, j++, g++, h—, k—, l—.
Пример написанный ниже наглядно показывает как работает постфиксная и
префиксная формы:
#include<iostream> #include<conio.h> using namespace std; int main() { int n=2; int m=2; double x=2.2; double y=2.2; cout<<«m=«<<++m<<endl; //m=3 cout<<«m=«<<m<<endl; //m=3 cout<<«n=«<<n++<<endl; //n=2 cout<<«n=«<<n<<endl<<endl; //n=3
cout<<«m=«<<--m<<endl; //m=2 cout<<«m=«<<m<<endl; //m=2 cout<<«n=«<<n--<<endl; //n=3 cout<<«n=«<<n<<endl<<endl; //n=2
cout<<«x=«<<++x<<endl; //3.2 cout<<«x=«<<x<<endl; //3.2 cout<<«y=«<<y++<<endl; //2.2 cout<<«y=«<<y<<endl<<endl; //3.2
cout<<«m=«<<--x<<endl; //2.2 cout<<«m=«<<x<<endl; //2.2 cout<<«n=«<<y--<<endl; //3.2 cout<<«n=«<<y<<endl<<endl; //2.2 n=++m+5; //n=(2+1)+5=8,m=3 x=y--+5.0;; //x=2.2+5=7.2, y=1.2
cout<<«n=«<<n<<endl; //8 cout<<«x=«<<x<<endl; //7.2 cout<<«m=«<<m<<endl; //3 cout<<«y=«<<y<<endl<<endl; //1.2 return 0; }
3.5. ПРЕОБРАЗОВАНИЕ ТИПОВ ДАННЫХ
В процессе работы программы или вычисления выражений может возник-
нуть необходимость в преобразовании типов данных отдельных значений.
В C++ различают явное и неявное преобразование типов данных. Неявное
преобразование типов данных выполняет компилятор С++, а явное преобразова­ние данных выполняет сам программист.Результат любого вычисления будет пре­образовываться к наиболее точному типу данных, из тех типов данных, которые участвуют в вычислении». Для наглядного примера представлю программу с пре-
образованиями типов данных.
19
20
Фрагмент программы неявного преобразования данных:
double d,r; int n;
d=15; // d получает значение 15.0 n=15.0 // n получает значение 15 r=n; // r получает значение 15.0 d+=n/2; // d получает значение 22.0 n=d/3+n/4; // n получает значение 10
Фрагмент программы явного преобразования данных:
double ave1, ave2, ave3 , ave4; int s=24; int n=5; ave1=s/n; // ave1 получает значение 4.0 ave2=double(s)/n; // ave2 получает значение 4.8 ave3=s/double(n); // ave3 получает значение 4.8 ave4=double(s/n); // ave3 получает значение 4.8
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]