Файл: Лабораторная работа 1 Изучение среды разработки программ 3 Лабораторная работа 2 Исследование базовых типов данных языка Си 18.doc
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 05.12.2023
Просмотров: 293
Скачиваний: 3
СОДЕРЖАНИЕ
Лабораторная работа № 1Изучение среды разработки программ
ОСНОВНЫЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
Лабораторная работа № 2Исследование базовых типов данных языка Си
Лабораторная работа № 4Применение управляющих инструкций языка для организации ветвлений в программе
ОСНОВНЫЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
ЗАДАНИЕ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ
Лабораторная работа № 5Исследование циклов
Лабораторная работа № 6Применение массивов и указателей для решения прикладных задач
ОСНОВНЫЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
Лабораторная работа № 7Исследование массивов и указателей
Лабораторная работа № 8Применение функций работы со строками для решения прикладных задач
ОСНОВНЫЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
Практическое занятие № 6Использование функций для работы с массивами
ОСНОВНЫЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
Практическое занятие № 7Программирование рекурсивных алгоритмов
ОСНОВНЫЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
Практическое занятие № 8Применение производных типов данных для решения прикладных задач
ОСНОВНЫЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
Лабораторная работа № 5Исследование методов доступа к файлам данных
Лабораторная работа № 6Исследование связанных списков данных
ЗАДАНИЕ НА ИССЛЕДОВАНИЕ
1. Исследование размерности типов данных и диапазона их представимости
-
используя операцию sizeof(), исследовать размерность стандартных типов данных языка Си в соответствии с таблицей 1; -
результаты исследований свести в таблицу 2; -
исследовать границы представимости целых чисел в языке Си путем задания граничных значений и проверки правильности отображения введенного числа; -
результаты исследований свести в таблицу 2;
Т аблица 2 – Классификация основных типов данных
Тип | Диапазон значений | Размер (байт) | |||||
теор | эксп | | теор | эксп | теор | эксп | |
bool | true | | и | false | | 1 | |
signed char | -128 | | … | +127 | | 1 | |
unsigned char | 0 | | … | 255 | | 1 | |
signed short int | -32768 | | … | +32767 | | 2 | |
unsigned short int | 0 | | … | 65535 | | 2 | |
signed long int | -2147483648 | | … | +2147483647 | | 4 | |
unsigned long int | 0 | | … | 4294967295 | | 4 | |
float | -3.4*1038 | | … | +3.4*1038 | | 4 | |
double | -1.7*10308 | | … | +1.7*10308 | | 8 | |
long double | -3.4*104932 | | … | +3.4*104932 | | 10 | |
-
в соответствии с примером 2 получить результат в соответствии с вариантом (номер по журналу):
Вариант
a
b
Вариант
a
b
Вариант
а
b
1
12720
-5
10
-7433
20
19
14509
2
-9489
12
11
13888
-13
20
-8555
29
3
11784
-7
12
-8991
45
21
11007
-47
4
22509
-9
13
-5303
21
22
-5311
22
5
43781
-3
14
22511
-17
23
-2999
53
6
12810
-5
15
-7433
20
24
14509
-8
7
-9699
11
16
9888
-13
25
-8555
19
8
10784
-7
17
-8991
35
26
5007
-47
9
22509
-8
18
-5303
27
27
-5311
19
-
в соответствии с примером 3 получить пару числу a:
Вариант | a | Вариант | a | Вариант | a |
1 | -1.34872e23 | 10 | -7.73975e13 | 19 | -5.44339e12 |
2 | 2.56832e-05 | 11 | 6.17430e-17 | 20 | 6.29802e-37 |
3 | -3.78349e28 | 12 | -5.02541e27 | 21 | -7.77319e04 |
4 | 4.74977e-12 | 13 | 4.35618e-36 | 22 | 8.54458e-27 |
5 | -5.46987e33 | 14 | -3.84209e31 | 23 | -9.28561e19 |
6 | -1.34562e23 | 15 | -7.73975e13 | 24 | -5.44339e12 |
7 | 2.52732e-05 | 16 | 6.17430e-17 | 25 | 6.29802e-37 |
8 | -3.73859e28 | 17 | -5.02541e27 | 26 | -7.77319e04 |
9 | 4.74977e-12 | 18 | 4.35618e-36 | 27 | 8.54458e-27 |
| | | | | |
2. Исследование порядка преобразования типов данных
-
в соответствии с примером 5 для числа a получить код символа b:
Вариант
a
Вариант
a
Вариант
a
Вариант
a
Вариант
a
1
-234
6
-198
11
-59
16
-81
21
-701
2
-54
7
-29
12
-119
17
-66
22
-376
3
-78
8
-77
13
-923
18
-401
23
-409
4
-212
9
-189
14
-63
19
-92
24
-509
5
-57
10
-32
15
-129
20
-65
25
-345
-
исследовать возможность преобразования типа:
-
типа int в float; -
типа int в double; -
типа float в тип int; -
целочисленного значения переменной типа float в тип int; -
целочисленного значения переменной типа double в тип int; -
типа int в bool; -
типа bool в int.
сделать выводы об обратимости преобразования типов.
Занятие № 3
Лабораторная работа № 3
Исследование операций языка Си
Цель занятия:
-
Совершенствование навыков объявления, инициализации переменных и ввода и вывода информации
-
Совершенствование навыков разработки программ в среде программирования MS Visual C++
-
Исследование возможностей языка С++ для реализации арифметических, логических и поразрядных операций над данными
Время на выполнение работы: 4 часа
Программа исследований:
-
Исследование арифметических операций
-
Исследование логических операций
-
Исследование поразрядных операций
Подготовка к выполнению работы:
-
Изучить рекомендованную литературу (структура программы на языке высокого уровня, алфавит и элементарные конструкции языка Си, переменные и константы, стандартные типы данных, выражения и операции в языке Си).
-
Изучить материал настоящего руководства.
Материалы для подготовки к занятию:
-
Конспект лекций.
-
[1] стр. 31-38.
Содержание отчета:
-
Цели исследования.
-
Программа работы.
-
Листинги программ.
-
Результаты исследований.
-
Выводы по каждому пункту и общий вывод.
МЕТОДИЧЕСКИЕ РЕКОМЕНДАЦИИ
Любое выражение языка состоит из операндов (переменных, констант и др.), соединенных знаками операций. Знак операции - это символ или группа символов, которые сообщают компилятору о необходимости выполнения определенных арифметических, логических или других действий. Операции выполняются в строгой последовательности. Величина, определяющая преимущественное право на выполнение той или иной операции, называется приоритетом. В таблице 3.1 перечислены различные операции языка Си. Их приоритеты для каждой группы одинаковы. Чем большим преимуществом пользуется соответствующая группа операций, тем выше она расположена в таблице. Приоритеты могут регулироваться с помощью круглых скобок.
Таблица 3.1 – Операции языка Си
Знак операции
Назначение операции
( )
Вызов функции
[ ]
Выделение элемента массива
.
Выделение элемента записи
->
Выделение элемента записи (тождественно(.))
!
Логическое отрицание
Поразрядное отрицание
-
Изменение знака
++
Увеличение на единицу
--
Уменьшение на единицу
&
Взятие адреса
*
Обращение по адресу
(тип)
Преобразование типа (т.е. (float) a)
sizeof( )
Определение размера в байтах
*
Умножение
/
Деление
%
Определение остатка от деления
+
Сложение
-
Вычитание
<<
Сдвиг влево
>>
Сдвиг вправо
<
Меньше, чем
<=
Меньше или равно
>
Больше, чем
>=
Больше или равно
= =
Равно
!=
Не равно
&
Поразрядное логическое "И"
^
Поразрядное исключающее "ИЛИ"
|
Поразрядное логическое "ИЛИ"
&&
Логическое "И"
||
Логическое "ИЛИ"
?:
Условная (тернарная) операция
=
Присваивание
+=, - =, *=, /=, %=, <<=,
>>=, &=, |=, ^=
Бинарные операции (например, а *= b
(т.е. a = a * b) и т.д.)
,
Операция запятая
Для исключения путаницы в понятиях "операция" и "оператор", необходимо отметить, что оператор - это наименьшая исполняемая единица программы. Различают операторы выражения, действие которых состоит в вычислении заданных выражений (например: a = sin(b)+c; j++;), операторы объявления, составные операторы, пустые операторы, операторы метки, цикла и т.д. Для обозначения конца оператора в языке С++ используется точка с запятой. Что касается составного оператора (или блока), представляющего собой набор логически связанных операторов, помещенных между открывающей ({) и закрывающей (}) фигурными скобками ("операторными скобками"), то за ним точка с запятой не ставится. Отметим, что блок отличается от составного оператора наличием определений в теле блока.
Охарактеризуем основные операции языка С++. Сначала рассмотрим одну из них - операцию присваивания (=). Выражение вида
х = у + z;
присваивает переменной х значение суммы переменных у и z. Наличие « ; » в конце операции говорит о том, что записан оператор.
На первый взгляд все просто. Но очень часто у начинающих программистов возникает путаница в понимании этого оператора. Это связано с тем, что с точки зрения математики следующие два выражения в общем-то эквивалентны:
х = у + z;
у + z = х;
Но программирование – есть процесс записи на формализованном языке последовательности команд, которые необходимо выполнить для достижения конечного результата. Из этого аспекта и вытекает ключевая разница из этих, казалось бы, тождественных выражений.
Для любого языка программирования операция присваивания « = » в обязательном порядке подразумевает следующий порядок ее выполнения. Справа от знака « = » задается источник присваивания (то, что присваивается), а слева – приемник (или то, чему присваивается источник):
х
=
у + z;
Приемник
Источник
Первым вычисляется результат источника, который затем присваивается приемнику, НО НЕ НАОБОРОТ! Именно поэтому выражение у + z = х не имеет смысла! Источником может быть любая последовательность операций. Приемником – только переменная.
По этой же причине оператор
у + z;
тоже бессмыслен, так как результат операции никуда не сохранен! (За исключением использования механизма перегрузки операции в классах, который будет рассмотрен во втором семестре).
Операцию "=" разрешается использовать многократно в одном выражении, например:
x = y = z = 100;
Различают унарные, бинарные итернарные операции. У первых из них один операнд, у вторых – два и у третьих - три. В языке Си выделяют три группы операций:
-
арифметические операции;
-
логические операции и операции отношения;
-
операции с битами.
1. Арифметические операции задаются следующими символами (таблица 3.1): +, -, *, /, %, -, !,
. Например:
a = b + c;
a = b - c;
a = b * c;
a = b / c;
a = b % c;
a = !b;
a = -b;
a =
b;
a = sizeof (b);
Операции +, -, * интуитивно понятны и не нуждаются в объяснении.
Операции увеличения и уменьшения на 1 (++ и --).Эти операции, называемые также инкрементом и декрементом, имеют две формы записи - префиксную, когда операция записывается перед операндом, и постфиксную. В префиксной форме сначала изменяется операнд, а затем его значение становится результирующим значением выражения, а в постфиксной значением выражения является исходное значение операнда, после чего он изменяется.
Операция определения размера sizeof предназначена для вычисления размера объекта или типа в байтах, и имеет две формы:
sizeof выражение или sizeof( тип )
Операции отрицания (-, ! и
). Арифметическое отрицание (унарный минус-) изменяет знак операнда целого или вещественного типа на противоположный. Логическое отрицание(!) дает в результате значение 0, если операнд есть истина( не нуль), и значение 1, если операнд равен нулю. Операнд должен быть целого или вещественного типа, а может иметь также тип указатель. Поразрядное отрицание(
), часто называемое побитовым, инвертирует каждый разряд в двоичном представлении целочисленного операнда.
Деление (/) и остаток от деления(%). Операция деления применима к операндам арифметического типа. Если оба операнда целочисленные, результат операции округляется до целого числа, в противном случае тип результата определяется правилами преобразования. Операция остатка от деления применяется только к целочисленным операндам. Знак результата зависит от реализации.
Бинарные операции +=, -=, *= и /= эквивалентны следующим:
-
a += 3;
a -= 3;
a *= 3;
a /= 3;
a = a + 3;
a = a - 3;
a = a * 3;
a = a / 3;
2. Поразрядные операции задаются следующими символами (таблица 3.1): <<, >>, &, |, ^. Например:
a = b << 3;
a = b >> 2;
a = b & c;
a = b | c;
a = b ^ c;
Операции сдвига (<< и >>) применяются целочисленным операндам. Они сдвигают двоичное представление первого операнда влево или вправо на количество двоичных разрядов, заданное вторым операндом. При сдвиге влево (<<) освободившиеся разряды обнуляются. При сдвиге вправо (>)освободившиеся биты заполняются нулями, если первый операнд беззнакового типа, и знаковым разрядом в противном случае. Операции сдвига не учитывают переполнение и потерю значимости.
Примеры:
int i=10, j, k ; /* i = 0000 1010 */
k = i<<2 ; /* k = 0010 1000 */
j = k<<1 ; /* j = 0101 0000 */
i = j>>4 ; /* i = 0000 0101 */
Битовые операции (&, |, ^) применяются только к целочисленным операндам и работают с их двоичными представлениями. При выполнении операций операнды сопоставляются побитового (первый бит первого операнда с первым битом второго, второй бит первого операнда со вторым битом второго, и т д.).
При поразрядной конъюнкции, или поразрядном И (операция обозначается &) бит результата равен 1 только тогда, когда соответствующие биты обоих операндов равны 1.
При поразрядной дизъюнкции, или поразрядном ИЛИ (операция обозначается |) бит результата равен 1 тогда, когда соответствующие биты хотя бы одного из операндов равен 1.
При поразрядном исключающем ИЛИ (операция обозначается ^) бит результата равен 1 только тогда, когда соответствующий бит только одного из операндов равен 1.
Примеры:
int i=6, j=5, k ; /* i = 0110, */
/* j = 0101 */
/* --------- */
k = i&j ; /* k = 0100 */
k = i|j ; /* k = 0111 */
k = j^j ; /* k = 0011 */
3. Логические операции и операции отношения задаются следующими символами (таблица 3.1): <, <=, >, >=, ==, !=, &&, ||.
Логические операции (&&и ||). Операнды логических операций И (&&) и ИЛИ (||) могут иметь арифметический тип или быть указателями, при этом операнды в каждой операции могут быть различных типов. Преобразования типов не производятся, каждый операнд оценивается с токи зрения его эквивалентности нулю (операнд, равный нулю, рассматривается как false, не равный нулю - как true).
Результатом логической операции является true или false. Результат операции логическое И имеет значение true только если оба операнда имеют значение true. Результат операции логическое ИЛИ имеет значение true, если хотя бы один из операндов имеет значение true. Логические операции выполняются слева направо. Если значение первого операнда достаточно, чтобы определить результат операции, второй операнд не вычисляется. Результаты логических операций могут быть представлены следующим образом:
Таблица 3.2 – Логические операции языка Си
x
y
x && y
x || y
0
0
0
0
0
1
0
1
1
0
0
1
1
1
1
1
Операции отношения (<, <=, >, >=, = =, !=) сравнивают первый операнд со вторым. Операнды могут быть арифметического типа или указателями. Результатом операции является значение true или false (любое значение, не равное нулю, интерпретируется как true). Операции сравнения на равенство и неравенство имеют меньший приоритет, чем остальные операции сравнения. Результаты операций отношения могут быть представлены следующим образом:
Таблица 3.3 – Операции отношения языка Си
x
y
x < y
x <= y
x > y
x >= y
x = = y
x != y
0
0
false
true
false
true
true
false
0
1
true
true
false
false
false
true
1
0
false
false
true
true
false
true
1
1
false
true
false
true
true
false
1>2>
1 2 3 4 5 6 7 8 9 ... 22
Лабораторная работа № 3
Исследование операций языка Си
Цель занятия:
-
Совершенствование навыков объявления, инициализации переменных и ввода и вывода информации
-
Совершенствование навыков разработки программ в среде программирования MS Visual C++
-
Исследование возможностей языка С++ для реализации арифметических, логических и поразрядных операций над данными
Время на выполнение работы: 4 часа
Программа исследований:
-
Исследование арифметических операций
-
Исследование логических операций
-
Исследование поразрядных операций
Подготовка к выполнению работы:
-
Изучить рекомендованную литературу (структура программы на языке высокого уровня, алфавит и элементарные конструкции языка Си, переменные и константы, стандартные типы данных, выражения и операции в языке Си).
-
Изучить материал настоящего руководства.
Материалы для подготовки к занятию:
-
Конспект лекций.
-
[1] стр. 31-38.
Содержание отчета:
-
Цели исследования.
-
Программа работы.
-
Листинги программ.
-
Результаты исследований.
-
Выводы по каждому пункту и общий вывод.
МЕТОДИЧЕСКИЕ РЕКОМЕНДАЦИИ
Любое выражение языка состоит из операндов (переменных, констант и др.), соединенных знаками операций. Знак операции - это символ или группа символов, которые сообщают компилятору о необходимости выполнения определенных арифметических, логических или других действий. Операции выполняются в строгой последовательности. Величина, определяющая преимущественное право на выполнение той или иной операции, называется приоритетом. В таблице 3.1 перечислены различные операции языка Си. Их приоритеты для каждой группы одинаковы. Чем большим преимуществом пользуется соответствующая группа операций, тем выше она расположена в таблице. Приоритеты могут регулироваться с помощью круглых скобок.
Таблица 3.1 – Операции языка Си
Знак операции
Назначение операции
( )
Вызов функции
[ ]
Выделение элемента массива
.
Выделение элемента записи
->
Выделение элемента записи (тождественно(.))
!
Логическое отрицание
Поразрядное отрицание
-
Изменение знака
++
Увеличение на единицу
--
Уменьшение на единицу
&
Взятие адреса
*
Обращение по адресу
(тип)
Преобразование типа (т.е. (float) a)
sizeof( )
Определение размера в байтах
*
Умножение
/
Деление
%
Определение остатка от деления
+
Сложение
-
Вычитание
<<
Сдвиг влево
>>
Сдвиг вправо
<
Меньше, чем
<=
Меньше или равно
>
Больше, чем
>=
Больше или равно
= =
Равно
!=
Не равно
&
Поразрядное логическое "И"
^
Поразрядное исключающее "ИЛИ"
|
Поразрядное логическое "ИЛИ"
&&
Логическое "И"
||
Логическое "ИЛИ"
?:
Условная (тернарная) операция
=
Присваивание
+=, - =, *=, /=, %=, <<=,
>>=, &=, |=, ^=
Бинарные операции (например, а *= b
(т.е. a = a * b) и т.д.)
,
Операция запятая
Для исключения путаницы в понятиях "операция" и "оператор", необходимо отметить, что оператор - это наименьшая исполняемая единица программы. Различают операторы выражения, действие которых состоит в вычислении заданных выражений (например: a = sin(b)+c; j++;), операторы объявления, составные операторы, пустые операторы, операторы метки, цикла и т.д. Для обозначения конца оператора в языке С++ используется точка с запятой. Что касается составного оператора (или блока), представляющего собой набор логически связанных операторов, помещенных между открывающей ({) и закрывающей (}) фигурными скобками ("операторными скобками"), то за ним точка с запятой не ставится. Отметим, что блок отличается от составного оператора наличием определений в теле блока.
Охарактеризуем основные операции языка С++. Сначала рассмотрим одну из них - операцию присваивания (=). Выражение вида
х = у + z;
присваивает переменной х значение суммы переменных у и z. Наличие « ; » в конце операции говорит о том, что записан оператор.
На первый взгляд все просто. Но очень часто у начинающих программистов возникает путаница в понимании этого оператора. Это связано с тем, что с точки зрения математики следующие два выражения в общем-то эквивалентны:
х = у + z;
у + z = х;
Но программирование – есть процесс записи на формализованном языке последовательности команд, которые необходимо выполнить для достижения конечного результата. Из этого аспекта и вытекает ключевая разница из этих, казалось бы, тождественных выражений.
Для любого языка программирования операция присваивания « = » в обязательном порядке подразумевает следующий порядок ее выполнения. Справа от знака « = » задается источник присваивания (то, что присваивается), а слева – приемник (или то, чему присваивается источник):
х
=
у + z;
Приемник
Источник
Первым вычисляется результат источника, который затем присваивается приемнику, НО НЕ НАОБОРОТ! Именно поэтому выражение у + z = х не имеет смысла! Источником может быть любая последовательность операций. Приемником – только переменная.
По этой же причине оператор
у + z;
тоже бессмыслен, так как результат операции никуда не сохранен! (За исключением использования механизма перегрузки операции в классах, который будет рассмотрен во втором семестре).
Операцию "=" разрешается использовать многократно в одном выражении, например:
x = y = z = 100;
Различают унарные, бинарные итернарные операции. У первых из них один операнд, у вторых – два и у третьих - три. В языке Си выделяют три группы операций:
-
арифметические операции;
-
логические операции и операции отношения;
-
операции с битами.
1. Арифметические операции задаются следующими символами (таблица 3.1): +, -, *, /, %, -, !,
. Например:
a = b + c;
a = b - c;
a = b * c;
a = b / c;
a = b % c;
a = !b;
a = -b;
a =
b;
a = sizeof (b);
Операции +, -, * интуитивно понятны и не нуждаются в объяснении.
Операции увеличения и уменьшения на 1 (++ и --).Эти операции, называемые также инкрементом и декрементом, имеют две формы записи - префиксную, когда операция записывается перед операндом, и постфиксную. В префиксной форме сначала изменяется операнд, а затем его значение становится результирующим значением выражения, а в постфиксной значением выражения является исходное значение операнда, после чего он изменяется.
Операция определения размера sizeof предназначена для вычисления размера объекта или типа в байтах, и имеет две формы:
sizeof выражение или sizeof( тип )
Операции отрицания (-, ! и
). Арифметическое отрицание (унарный минус-) изменяет знак операнда целого или вещественного типа на противоположный. Логическое отрицание(!) дает в результате значение 0, если операнд есть истина( не нуль), и значение 1, если операнд равен нулю. Операнд должен быть целого или вещественного типа, а может иметь также тип указатель. Поразрядное отрицание(
Лабораторная работа № 3
Исследование операций языка Си
Цель занятия:
-
Совершенствование навыков объявления, инициализации переменных и ввода и вывода информации
-
Совершенствование навыков разработки программ в среде программирования MS Visual C++
-
Исследование возможностей языка С++ для реализации арифметических, логических и поразрядных операций над данными
Время на выполнение работы: 4 часа
Программа исследований:
-
Исследование арифметических операций
-
Исследование логических операций
-
Исследование поразрядных операций
Подготовка к выполнению работы:
-
Изучить рекомендованную литературу (структура программы на языке высокого уровня, алфавит и элементарные конструкции языка Си, переменные и константы, стандартные типы данных, выражения и операции в языке Си).
-
Изучить материал настоящего руководства.
Материалы для подготовки к занятию:
-
Конспект лекций.
-
[1] стр. 31-38.
Содержание отчета:
-
Цели исследования.
-
Программа работы.
-
Листинги программ.
-
Результаты исследований.
-
Выводы по каждому пункту и общий вывод.
МЕТОДИЧЕСКИЕ РЕКОМЕНДАЦИИ
Любое выражение языка состоит из операндов (переменных, констант и др.), соединенных знаками операций. Знак операции - это символ или группа символов, которые сообщают компилятору о необходимости выполнения определенных арифметических, логических или других действий. Операции выполняются в строгой последовательности. Величина, определяющая преимущественное право на выполнение той или иной операции, называется приоритетом. В таблице 3.1 перечислены различные операции языка Си. Их приоритеты для каждой группы одинаковы. Чем большим преимуществом пользуется соответствующая группа операций, тем выше она расположена в таблице. Приоритеты могут регулироваться с помощью круглых скобок.
Таблица 3.1 – Операции языка Си
Знак операции
Назначение операции
( )
Вызов функции
[ ]
Выделение элемента массива
.
Выделение элемента записи
->
Выделение элемента записи (тождественно(.))
!
Логическое отрицание
Поразрядное отрицание
-
Изменение знака
++
Увеличение на единицу
--
Уменьшение на единицу
&
Взятие адреса
*
Обращение по адресу
(тип)
Преобразование типа (т.е. (float) a)
sizeof( )
Определение размера в байтах
*
Умножение
/
Деление
%
Определение остатка от деления
+
Сложение
-
Вычитание
<<
Сдвиг влево
>>
Сдвиг вправо
<
Меньше, чем
<=
Меньше или равно
>
Больше, чем
>=
Больше или равно
= =
Равно
!=
Не равно
&
Поразрядное логическое "И"
^
Поразрядное исключающее "ИЛИ"
|
Поразрядное логическое "ИЛИ"
&&
Логическое "И"
||
Логическое "ИЛИ"
?:
Условная (тернарная) операция
=
Присваивание
+=, - =, *=, /=, %=, <<=,
>>=, &=, |=, ^=
Бинарные операции (например, а *= b
(т.е. a = a * b) и т.д.)
,
Операция запятая
Для исключения путаницы в понятиях "операция" и "оператор", необходимо отметить, что оператор - это наименьшая исполняемая единица программы. Различают операторы выражения, действие которых состоит в вычислении заданных выражений (например: a = sin(b)+c; j++;), операторы объявления, составные операторы, пустые операторы, операторы метки, цикла и т.д. Для обозначения конца оператора в языке С++ используется точка с запятой. Что касается составного оператора (или блока), представляющего собой набор логически связанных операторов, помещенных между открывающей ({) и закрывающей (}) фигурными скобками ("операторными скобками"), то за ним точка с запятой не ставится. Отметим, что блок отличается от составного оператора наличием определений в теле блока.
Охарактеризуем основные операции языка С++. Сначала рассмотрим одну из них - операцию присваивания (=). Выражение вида
х = у + z;
присваивает переменной х значение суммы переменных у и z. Наличие « ; » в конце операции говорит о том, что записан оператор.
На первый взгляд все просто. Но очень часто у начинающих программистов возникает путаница в понимании этого оператора. Это связано с тем, что с точки зрения математики следующие два выражения в общем-то эквивалентны:
х = у + z;
у + z = х;
Но программирование – есть процесс записи на формализованном языке последовательности команд, которые необходимо выполнить для достижения конечного результата. Из этого аспекта и вытекает ключевая разница из этих, казалось бы, тождественных выражений.
Для любого языка программирования операция присваивания « = » в обязательном порядке подразумевает следующий порядок ее выполнения. Справа от знака « = » задается источник присваивания (то, что присваивается), а слева – приемник (или то, чему присваивается источник):
х
=
у + z;
Приемник
Источник
Первым вычисляется результат источника, который затем присваивается приемнику, НО НЕ НАОБОРОТ! Именно поэтому выражение у + z = х не имеет смысла! Источником может быть любая последовательность операций. Приемником – только переменная.
По этой же причине оператор
у + z;
тоже бессмыслен, так как результат операции никуда не сохранен! (За исключением использования механизма перегрузки операции в классах, который будет рассмотрен во втором семестре).
Операцию "=" разрешается использовать многократно в одном выражении, например:
x = y = z = 100;
Различают унарные, бинарные итернарные операции. У первых из них один операнд, у вторых – два и у третьих - три. В языке Си выделяют три группы операций:
-
арифметические операции;
-
логические операции и операции отношения;
-
операции с битами.
1. Арифметические операции задаются следующими символами (таблица 3.1): +, -, *, /, %, -, !,
. Например: Исследование операций языка Си
Совершенствование навыков объявления, инициализации переменных и ввода и вывода информации
Совершенствование навыков разработки программ в среде программирования MS Visual C++
Исследование возможностей языка С++ для реализации арифметических, логических и поразрядных операций над данными
-
Исследование арифметических операций -
Исследование логических операций -
Исследование поразрядных операций
Изучить рекомендованную литературу (структура программы на языке высокого уровня, алфавит и элементарные конструкции языка Си, переменные и константы, стандартные типы данных, выражения и операции в языке Си).
Изучить материал настоящего руководства.
Конспект лекций.
[1] стр. 31-38.
Цели исследования.
Программа работы.
Листинги программ.
Результаты исследований.
Выводы по каждому пункту и общий вывод.
Знак операции | Назначение операции |
( ) | Вызов функции |
[ ] | Выделение элемента массива |
. | Выделение элемента записи |
-> | Выделение элемента записи (тождественно(.)) |
! | Логическое отрицание |
| Поразрядное отрицание |
- | Изменение знака |
++ | Увеличение на единицу |
-- | Уменьшение на единицу |
& | Взятие адреса |
* | Обращение по адресу |
(тип) | Преобразование типа (т.е. (float) a) |
sizeof( ) | Определение размера в байтах |
* | Умножение |
/ | Деление |
% | Определение остатка от деления |
+ | Сложение |
- | Вычитание |
<< | Сдвиг влево |
>> | Сдвиг вправо |
< | Меньше, чем |
<= | Меньше или равно |
> | Больше, чем |
>= | Больше или равно |
= = | Равно |
!= | Не равно |
& | Поразрядное логическое "И" |
^ | Поразрядное исключающее "ИЛИ" |
| | Поразрядное логическое "ИЛИ" |
&& | Логическое "И" |
|| | Логическое "ИЛИ" |
?: | Условная (тернарная) операция |
= | Присваивание |
+=, - =, *=, /=, %=, <<=, >>=, &=, |=, ^= | Бинарные операции (например, а *= b (т.е. a = a * b) и т.д.) |
, | Операция запятая |
х | = | у + z; |
Приемник | | Источник |
арифметические операции;
логические операции и операции отношения;
операции с битами.
a = b + c;
a = b - c;
a = b * c;
a = b / c;
a = b % c;
a = !b;
a = -b;
a =
-
a += 3;
a -= 3;
a *= 3;
a /= 3;
a = a + 3;
a = a - 3;
a = a * 3;
a = a / 3;
x | y | x && y | x || y |
0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 |
1 | 0 | 0 | 1 |
1 | 1 | 1 | 1 |
x | y | x < y | x <= y | x > y | x >= y | x = = y | x != y |
0 | 0 | false | true | false | true | true | false |
0 | 1 | true | true | false | false | false | true |
1 | 0 | false | false | true | true | false | true |
1 | 1 | false | true | false | true | true | false |
ЗАДАНИЕ НА ИССЛЕДОВАНИЕ
-
Исследование арифметических операций
-
для заданных исходных данных исследовать влияние типа данных на конечный результат для всех арифметических операций.
Пример:
typedef signed short int INT;
int main(int argc, char* argv[])
{
INT a=12678, b=-19003, c;
float x=a,y=b,z;
char d=156,e=68,f;
cout<<"\n------------------\nInteger: a="<
c=a-b; cout<<"\n-: "<
c=a*b; cout<<"\n*: "<
c=a/b; cout<<"\n/: "<
c=a%b; cout<<"\n%: "<
c=-a; cout<<"\n-: "<
c=!a; cout<<"\n!: "<
c=
a; cout<<"\n
: "<ЗАДАНИЕ НА ИССЛЕДОВАНИЕ
-
Исследование арифметических операций
-
для заданных исходных данных исследовать влияние типа данных на конечный результат для всех арифметических операций.
Пример:
typedef signed short int INT;
int main(int argc, char* argv[])
{
INT a=12678, b=-19003, c;
float x=a,y=b,z;
char d=156,e=68,f;
cout<<"\n------------------\nInteger: a="<
c=a-b; cout<<"\n-: "<
c=a*b; cout<<"\n*: "<
c=a/b; cout<<"\n/: "<
c=a%b; cout<<"\n%: "<
c=-a; cout<<"\n-: "<
c=!a; cout<<"\n!: "<
c=
cout<<"\n------------------\nFloating: x="<
cout<<”\nd=”<
e=d>>k;
cout<<"\n”<
. . .
return 0;
}
-
для заданных исходных данных сравнить результаты битовых операций, полученные в программе с результатами, полученными вручную.
Например:
typedef signed short int INT;
int main(int argc, char* argv[])
{
INT d=156,e=67,f;
cout<<”\nd=”<
f=d&e;
cout<<"\n&: ”<
. . .
return 0;
}
-
по результатам исследований сделать выводы.
Исследование логических операций
-
для заданных исходных данных получить результаты операций отношения.
Например:
typedef signed short int INT;
int main(int argc, char* argv[])
{
INT a=12678, b=-19003;
cout<<"\na="<b: "<<(a>b);
. . .
return 0;
}
-
для заданных исходных исследовать влияние логических операций на составные операции отношения.
Например:
typedef signed short int INT;
int main(int argc, char* argv[])
{
INT a=12678, b=-19003;
cout<<"\na="<b) || (b>0): "<<((a>b)||(b>0));
cout<<"\n(a>b) && (b>0): "<<((a>b)&&(b>0));
. . .
return 0;
}
-
по результатам исследований сделать выводы.
ВАРИАНТЫ ЗАДАНИЙ
Вар. | a | b | d | e | j | k | Вар. | a | b | d | e | j | k |
1 | 18342 | -10234 | 213 | 73 | 1 | 3 | 14 | 30678 | -13447 | 180 | 67 | 3 | 2 |
2 | -15342 | 12987 | 189 | 102 | 2 | 1 | 15 | -25699 | 17332 | 227 | 105 | 1 | 4 |
3 | 18501 | -14555 | 178 | 69 | 3 | 2 | 16 | 16701 | -15660 | 199 | 95 | 3 | 2 |
4 | -14326 | 12809 | 192 | 89 | 2 | 1 | 17 | -14576 | 14222 | 205 | 83 | 1 | 2 |
5 | 20567 | -15886 | 239 | 121 | 3 | 1 | 18 | 20007 | -13529 | 217 | 139 | 2 | 1 |
6 | -31678 | 20111 | 201 | 119 | 1 | 2 | 19 | -32003 | 19358 | 185 | 121 | 1 | 3 |
7 | 23516 | -18338 | 181 | 99 | 1 | 4 | 20 | 17332 | -12094 | 230 | 79 | 2 | 3 |
8 | -28300 | 11909 | 138 | 70 | 2 | 3 | 21 | -16777 | 15986 | 251 | 145 | 3 | 2 |
9 | 12789 | -10999 | 213 | 145 | 3 | 1 | 22 | 23906 | -18340 | 243 | 139 | 2 | 1 |
10 | -28300 | 11909 | 138 | 70 | 2 | 3 | 23 | -16777 | 15986 | 251 | 145 | 3 | 2 |
11 | 11789 | -11999 | 202 | 140 | 3 | 1 | 24 | 22906 | -18740 | 240 | 129 | 2 | 1 |
12 | -18308 | 15393 | 241 | 138 | 2 | 3 | 25 | -29451 | 20006 | 195 | 96 | 3 | 1 |
13 | -19508 | 14093 | 247 | 138 | 2 | 3 | 26 | -28551 | 21906 | 235 | 106 | 3 | 1 |
Занятие 4