Программирование C++ (1 сем, мага) / Лабы / Лабораторная работа №1
.docxМинистерство науки и высшего образования Российской Федерации
Федеральное государственное автономное образовательное учреждение высшего образования
«Национальный исследовательский ядерный университет «МИФИ»
Кафедра экспериментальной ядерной физики и космофизики (№7)
Программирование на С и С++
Отчет по лабораторной работе № 1
Выполнил:
студент группы M22-105 Васильева А.П.
Москва, 2022
Цель работы: написать программу, иллюстрирующую следующие операции языка C:
"^" – поразрядное исключающее ИЛИ;
"?:" – условная операция;
"--" – декремент;
"%=" – присваивание с остатком от деления;
"!=" – не равно.
Введение
Декремент (--) – унарная операция, в результате которой значение операнда уменьшается на единицу. Знак операции может быть записан как перед операндом (префиксная форма), так и после него (постфиксная форма). В первом случае изменение операнда происходит до его использования в выражении. Во втором случае сначала операнд используется в выражении, а затем его значение уменьшается на единицу.
Операция поразрядного исключающего ИЛИ (^) – бинарная операция, которая сравнивает каждый бит первого операнда с соответствующими битами второго операнда. Если один из сравниваемых битов равен 0, а второй бит равен 1, то соответствующий бит результата устанавливается в 1, в противном случае, т.е. когда оба бита равны 1 или 0, бит результата устанавливается в 0.
Присваивание с остатком от деления (%=) – бинарная операция составного присваивания, которая записывается как (операнд-1) %= (операнд-2) и эквивалентна записи (операнд-1) = (операнд-1) % (операнд-2). В результате выполнения этой операции операнд-1 принимает значение, равное остатку от его деления на операнд-2.
Операция "не равно" (!=) – бинарная операция отношения, которая возвращает true, если первый операнд не равен второму, и false, если оба операнда равны.
Условная операция – тернарная операция, которая имеет следующий формат записи:
операнд-1 ? операнд-2 : операнд-3
Вычисление операции выполняется следующим образом. Вначале вычисляется операнд-1, представляющий собой условие – логическое или арифметическое выражение, подобное тому, которое можно записать в операторе if. Если условие истинно, то результатом работы операции будет операнд-2, если ложно, то операнд-3.
Ход работы
Написана программа, в которой реализованы описанные выше пять операций. Код программы:
Далее программа была запущена в режиме отладки. При этом было установлено наблюдение за переменными a, b и с.
Произведен вход в функцию main(), строка с объявлением и инициализацией переменных ещё не отработала, поэтому переменные имеют произвольные значения.
Переменные a и b были не только объявлены, но и инициализированы, поэтому теперь они имеют заданные значения: a = 3, b = 15. Переменная c не инициализировалась и по-прежнему содержит произвольное значение.
Выполнена операция декремента над переменной a, поэтому ее значение уменьшилось на единицу и стало равно a = 2. Значения переменных b и c не изменились.
Выполнена проверка условия, что a не равно 5 – здесь использована операция !=. Результатом выполнения операции является true, т.к. значение переменной a действительно не равно пяти: 2 ≠ 5. Поэтому выполнен вход внутрь блока условного оператора if.
Выполнена операция присваивания с остатком от деления – переменной b присвоено значение, равное остатку от деления b на 7: 15%7 = 1.
Выполнена операция поразрядного исключающего ИЛИ. Переменная b = 1 в двоичном представлении имеет значение 012, а значение переменной a = 2 в двоичной системе счисления равно 102. В результате выполнения 01^10 получается 11, т.к. и в случае младшего бина, и в случае старшего один из сравниваемых бинов равен 1, а второй 0, соответственно результатом будет 1. Число 112 в десятичной системе счисления равно 3, поэтому переменная c принимает значение c = 3.
При выполнении условной операции выполнено сравнение значений переменных a и b. Т.к. 2 > 1, условие истинно и выполняется выражение c = 13. В результате условной операции переменной c присвоено значение 13.
На этом завершается выполнение представленной программы.
Примечания по декременту и условному оператору. Модифицированный код программы:
Знак операции декремента записан после операнда (постфиксная форма), поэтому сначала операнд участвует в выражении (в примере – выполняется операция присваивания переменной d значения переменной a), а уже после этого происходит уменьшение операнда на единицу:
До операции декремента a = 3. Сначала выполняется присваивание, в результате которого d = 3, а затем – декремент и переменная a принимает значение a = 2.
В выражениях внутри условного оператора, как правило, не используются операции присваивания, а полученное в результате его работы значение может быть присвоено какой-либо переменной:
В приведенном коде выполняется условие (a > b), т.к. 2 > 1, и переменной c присваивается значение 13.
Заключение
В лабораторной работе освоены следующие операции языка C:
"^" – поразрядное исключающее ИЛИ;
"?:" – условная операция;
"--" – декремент;
"%=" – присваивание с остатком от деления;
"!=" – не равно.
Результаты выполнения этих операций согласуются с теорией.
Также получены навыки работы с отладчиком, с помощью которого просматривались текущие значения переменных во время выполнения программы.
