Оператор присваивания является наиболее распространенным средством, позволяющим изменить значение переменной во время работы программы.
В простейшем случае он имеет следующий формат:
namev = expression;
- namev – имя переменной:
- expression – выражение, значение которого будет присвоено переменной namev .
Если переменная namev относится к категории числовых данных, то результат вычисления выражения тоже должен быть числовым. Типы переменной namev и значения выражения expression при этом могут не совпадать. О соответствующем преобразовании машинных форматов система позаботится сама. Но не забывайте, что при преобразовании вещественного значения в целочисленное дробная часть выражения (какой бы она ни была) будет отброшена. Таким образом, об округлении вы должны позаботиться сами. В тех случаях, когда тип выражения допускает более широкий диапазон представления данных, возможна потеря точности или переполнение диапазона, предусмотренного для переменной namev . В таких случаях компилятор выдает сообщение о возможных последствиях, и на такие сообщения программист обязан обратить внимание.
Перегрузка операторов пример. ООП. Перегрузка оператора присваивания. C++ Для начинающих. Урок#83
Если нескольким переменным необходимо присвоить значение одного и того же выражения, то оператор присваивания допускает расширенный формат:
v1=v2=v3=exp;
Используя такую форму множественного присвоения, не пытайтесь писать операторы , результат выполнения которых может по разному толковаться разными пользователями. Например:
i=5; i=a[i]=4; j=6; a[j]=j=2;
Результат таких действий зависит от алгоритма просмотра строки программы и последовательности выполнения присваиваний – слева направо или справа налево. Старайтесь избегать подобных ситуаций, т.к. в случае переноса программы в другую систему программирования можно получить неожиданный результат.
В программах на C, C++ очень часто встречаются специфические форматы записи операторов присваивания. В тех случаях, когда значение переменной должно быть увеличено или уменьшено на 1, используются следующие синтаксические конструкции:
x++; // вместо x=x+1; ++x; // вместо x=x+1; x—; // вместо x=x-1; —x; // вместо x=x-1;
В приведенных примерах размещение двойного знака сложения или вычитания роли не играет. Однако такая конструкция может входить в качестве операнда в арифметическое выражение (что встречается не очень часто) или выступать в роли индекса у элементов массива. Например:
y=a[i++]; z=b[++j];
В первом случае переменной y будет присвоено значение a[i] со старым индексом, после чего индекс i будет увеличен на 1. Во втором случае сначала индекс j будет увеличен на 1, а потом значение b[j] с новым индексом будет участвовать в операции присвоения.
Еще одна форма оператора присваивания ведет свое происхождение от условного арифметического выражения, впервые появившегося в языке АЛГОЛ -60:
v = (a > b)? e1 : e2;
Выполняется такой оператор следующим образом. Проверяется условие, записанное в круглых скобках и, если оно удовлетворяется, то переменной v присваивается значение выражения e1 . В противном случае в переменную v засылается значение выражения e2 .
Информатика 8 класс: Оператор присваивания и выражения в Паскале
5.4. Специальные формы оператора присваивания
Следующая группа операторов присваивания обязана своим происхождением формату машинных команд в двухадресных машинах:
COD A1,A2
- COD – код машинной операции;
- A1,A2 – адреса ячеек оперативной памяти и/или арифметических регистров.
Результат выполнения такой операции над содержимым A1 и A2 записывается по адресу A1 ( ). По аналогии с такой записью в языках C, C++ появилась следующая синтаксическая конструкция:
Здесь символ обозначает один из следующих знаков двухместных операций:
x += 2; //вместо x=x+2; z /= 1.5; //вместо z=z/1.5;
Довольно экзотически выглядит оператор присваивания , в правой части которого через запятую задана последовательность некоторых действий. Например:
x=(y=sin(a+b),z=cos(a-b),max(y,z));
Действия в скобках выполняются слева направо, т.е. сначала будет вычислено значение sin(a+b) , которое занесут в переменную y , затем будет вычислено значение переменной z . Окончательным результатом скобки, которое будет присвоено переменной x , станет вычисление значения функции max(y,z) .
5.5. Условный оператор
С помощью условного оператора в программе можно создать две альтернативные цепочки операторов, выполнение каждой из которых происходит в зависимости от истинности или ложности заданного условия:
if(условие) [else ]
Если условие, указанное в круглых скобках истинно, то выполняется цепочка операторов S1, S2, .. .. В противном случае выполняется цепочка операторов Q1,Q2. .. Альтернативная ветвь вместе со служебным словом else может отсутствовать. И тогда речь идет о выполнении или обходе цепочки операторов S1,S2. ..
Простейшие условия задаются в виде проверки соотношения двух однотипных выражений:
if(a>b) cout=0) y=sqrt(x);
Напомним, что операции отношения в языках C, C++ обозначаются следующими символами и их комбинациями:
== | равно | != | не равно | > | больше |
>= | больше или равно | меньше | меньше или равно |
Более сложные условия могут составляться из элементарных соотношений с помощью логических операций «ИЛИ» ( || ), «И» ( ), «НЕ» ( !). Например, проверка принадлежности x диапазону [ a,b ] выглядит следующим образом:
В качестве логического условия иногда можно встретить в круглых скобках обычное арифметическое выражение :
В языке C логические переменные отсутствуют. Вместо этого действует соглашение о том, что ложь эквивалентна нулевому значению числового выражения, а истина – не нулевому значению. Поэтому приведенная выше проверка эквивалентна соотношению:
Источник: intuit.ru
10. Оператор присваивания
Присваивание — это занесение значения в память. В общем виде оператор присваивания записывается так:
Здесь символами := обозначена операция присваивания. Внутри знака операции пробелы не допускаются.
Механизм выполнения оператора присваивания такой: вычисляется выражение и его результат заносится в память по адресу, который определяется именем переменной, находящейся слева от знака операции. Схематично это полезно представить себе так:
Константа и переменная являются частными случаями выражения. Примеры операторов присваивания:
Обратите внимание: b :=а иа :=b — это совершенно разные действия!
Примечание. Чтобы не перепутать, что чему присваивается, запомните мнемоническое правило: присваивание — это передача данных «налево».
Начинающие программисты часто делают ошибку, воспринимая присваивание как аналог равенства в математике. Чтобы избежать этой ошибки, надо понимать механизм работы оператора присваивания. Рассмотрим для этого последний пример (х : = х + 0.5). Сначала из ячейки памяти, в которой хранится значение переменной х, выбирается это значение.
Затем к нему прибавляется 0,5, после чего получившийся результат записывается в ту же самую ячейку. При этом то, что хранилось там ранее, теряется безвозвратно. Операторы такого вида применяются в программировании очень широко.
Правая и левая части оператора присваивания должны быть, как правило, одного типа. Говоря более точно, они должны быть совместимы по присваиванию. Например, выражение целого типа можно присвоить вещественной переменной, потому что целые числа являются подмножеством вещественных, и информация при таком присваивании не теряется:
вещественная переменная := целое выражение;
11. Простейший ввод-вывод на Паскале
11.1. Стандартные файлы Input и Output
к
ввод исходных данных ( из Input )
э
кран
вывод результатов (в Output)
Все программы должны обмениваться с внешней средой информацией, т. е. принимать из нее исходные данные и передавать в нее полученные результаты. Устройство, через которое происходит такой обмен, называется консолью (console).
Консоль — это комбинированное устройство, в котором для ввода данных используется клавиатура, а для вывода — экран монитора.
Поток символов, вводимый с клавиатуры и поток символов, выводимый на экран, принято называть файлом (файл — именованная область данных, размещенная на внешних носителях).
В Паскале за двумя этими потоками символов закреплены имена: Input (ввод с клавиатуры) и Output (вывод на экран). Это стандартные файлы, которые открываются и закрываются автоматически, хотя явно в операторах ввода-вывода они могут не указываться.
Особенностью файлов Input и Output является то, что ввод происходит в режиме эхо-отображения вводимых данных. Т.е. на экране происходит отображение того, что вводят с клавиатуры. Эхо-отображение заключается в том, что информация в файле Output изменяется не только при выводе в него, но и при вводе информации из файла Input. Это хорошо тем, что мы видим на экране то, что вводится с клавиатуры, т.е. ввод идет не вслепую.
Файлы Input и output являются текстовыми файлами, т.е. они состоят из символьных строк переменной длины. Каждая такая строка – это последовательность символов, в конце которой стоит
специальный признакEOLN или или или или два кода #13+#10, где
- #13 — символ «Возвратакаретки»» (ВК или CR). На экране курсор устанавливается в начало текущей строки;
- #10 – символ «Перевода строки». На экране курсор устанавливается на следующей строке в текущей позиции.
Источник: studfile.net
Операторы присваивания
Операторы присваивания сохраняют значение в объекте, указанном операндом слева. Существует два типа операций назначения:
- простое присваивание, при котором значение второго операнда хранится в объекте, указанном первым операндом.
- составное присваивание, при котором перед сохранением результата выполняется арифметическая, сдвиговая или побитовая операция.
Все операторы присваивания в следующей таблице, кроме оператора , = являются составным оператором присваивания.
Таблица операторов присваивания
= | Сохранение значения второго операнда в объект, указанный первым операндом (простое присваивание). |
*= | Умножение значения первого операнда на значение второго операнда; сохранение результата в объект, указанный первым операндом. |
/= | Деление значения первого операнда на значение второго операнда; сохранение результата в объект, указанный первым операндом. |
%= | деление по модулю первого операнда на значение второго операнда; сохранение результата в объект, указанный первым операндом. |
+= | Сложение значения первого операнда со значением второго операнда; сохранение результата в объект, указанный первым операндом. |
-= | Вычитание значения второго операнда из значения первого операнда; сохранение результата в объект, указанный первым операндом. |
Сдвиг значения первого операнда влево на количество битов, заданное значением второго операнда; сохранение результата в объект, указанный первым операндом. | |
>>= | Сдвиг значения первого операнда вправо на количество битов, заданное значением второго операнда; сохранение результата в объект, указанный первым операндом. |
сохранение результата в объект, указанный первым операндом. | |
^= | Выполнение операции побитового исключающего ИЛИ для значений первого и второго операндов; сохранение результата в объект, указанный первым операндом. |
|= | Выполнение операции побитового включающего ИЛИ для значений первого и второго операндов; сохранение результата в объект, указанный первым операндом. |
Ключевые слова операторов
Три из составных операторов присваивания имеют ключевое слово эквивалентов. К ним относятся:
или эквивалента не рекомендуется. В Microsoft C++ для включения альтернативной /permissive- орфографии требуется параметр компилятора или /Za .
Пример// expre_Assignment_Operators.cpp // compile with: /EHsc // Demonstrate assignment operators #include using namespace std; int main() < int a = 3, b = 6, c = 10, d = 0xAAAA, e = 0x5555; a += b; // a is 9 b %= a; // b is 6 c >>= 1; // c is 5 d |= e; // Bitwise—d is 0xFFFF cout >= 1 yields » Простое присваиваниеПростой оператор присваивания ( = ) приводит к тому, что значение второго операнда сохраняется в объекте, указанном первым операндом. Если оба объекта относятся к арифметическим типам, правый операнд преобразуется в тип левого перед сохранением значения. const Объекты типов и volatile могут быть назначены l-значениям типов, которые являются только volatile или не const являются или volatile . Назначение объектам типа класса ( struct , , union и class ) выполняется функцией с именем operator= . По умолчанию эта функция-оператор производит побитовое копирование; однако такое поведение можно изменить с помощью перегруженных операторов. Для получения дополнительной информации см. раздел Перегрузка операторов. Типы классов также могут иметь операторы присваивания копирования и перемещения . Дополнительные сведения см. в разделах Копирование конструкторов и операторов назначения копирования и Перемещение конструкторов и перемещение операторов присваивания. Объект любого класса, однозначно производного от некоторого базового класса, можно присвоить объекту этого базового класса. Обратное неверно, так как существует неявное преобразование из производного класса в базовый класс, но не из базового класса в производный класс. Пример: // expre_SimpleAssignment.cpp // compile with: /EHsc #include using namespace std; class ABase < public: ABase() < cout >; class ADerived : public ABase < public: ADerived() < cout >; int main() < ABase aBase; ADerived aDerived; aBase = aDerived; // OK aDerived = aBase; // C2679 > Присваивание ссылочным типам выполняется так, как если бы выполнялось присваивание объекту, на который указывает ссылка. Для объектов типа класса присваивание отличается от инициализации. Для иллюстрации того, насколько сильно присваивание может отличаться от инициализации, рассмотрим код UserType1 A; UserType2 B = A; В предыдущем коде показан инициализатор; он вызывает конструктор для типа UserType2 , который принимает аргумент типа UserType1 . В коде UserType1 A; UserType2 B; B = A; может вызывать одно из указанных ниже действий.
Составное присваиваниеСоставные операторы присваивания отображаются в таблице Операторы назначения. Эти операторы имеют форму e1op= e2, где e1 — неизменяемое const l-значение, а e2 —: Форма e1op= e2 ведет себя как e1 = операцияe2, но e1 вычисляется только один раз. Составное присваивание перечисляемому типу создает сообщение об ошибке. Если левый операнд имеет тип указателя, правый операнд должен иметь тип указателя или быть константным выражением, результатом которого является 0. Если левый операнд имеет целочисленный тип, правый операнд не должен иметь тип указателя. Результат операторов присваиванияОператоры присваивания возвращают значение объекта, указанного левым операндом после присваивания. Результирующий тип — это тип левого операнда. Результатом выражения присваивания всегда является l-значение. Эти операторы имеют ассоциативность справа налево. Левый операнд должен быть изменяемым l-значением. В ANSI C результат выражения присваивания не является l-значением. Это означает, что допустимое выражение (a += b) += c C++ запрещено в C. Источник: learn.microsoft.com
Загрузка ...
|