Оператор присваивания и его сокращенные формы
Стр 1 из 2Следующая ⇒ Некоторые примеры операторов присваивания уже приводились ранее в этом разделе и в разделе «Краткая справка по языку C и разработке консольных приложений в среде Visual C++ 2008». Однако этими примерами не исчерпывается всё многообразие форм записи и правил использования операторов присваивания языка C. Ниже в данном и следующих разделах приведено более детальное рассмотрение этих вопросов. Одним из знаков оператора присваивания, как указывалось ранее, является знак =. Справа от него записывается выражение (в частном случае константа, переменная или вызов функции), а слева – переменная, которая получит вычисленное значение выражения (правила записи и вычисления выражений представлены в следующем разделе). Например, int I=5, K; float X, Y=2.3; double Z = 1.0e-2; const float pi = 3.1415926535; X = tan(pi/3); //X получит значение 1.732 Типы переменной и выражения могут не совпадать. В этом случае перед присваиванием значение выражения автоматически преобразуется к типу переменной. Если переменная имеет тип целый, а выражение – вещественный, то перед преобразованием типа дробная часть отбрасывается, например, K = -tan(pi/3); //K получит значение -1 Есть и сокращенные формы операторов присваивания. Они бывают двух видов: одноместные и двуместные. Знаками одноместных операторов присваивания являются составные знаки ++ (рядом два знака +) и -- (рядом два знака -), обозначающие соответственно увеличение на 1 (инкрементацию) и уменьшение на 1 (декрементацию) переменной, рядом с которой они расположены. Эти знаки могут располагаться либо перед, либо после переменной, которую требуется увеличить или уменьшить на 1, и это не имеет значения, если такой оператор не является частью выражения, где следует учитывать приоритеты операций. Например,
I--; // то же, что и оператор I = I-1;, и оператор –-I; ++I; // то же, что и оператор I = I+1;, и оператор I++; Знаками двуместных операторов присваивания являются составные знаки, состоящие из знака операции (для числовых данных это знаки + - * / %) и знака =. Так, если X - переменная, которой присваивается новое значение, а W выражение, то оператор X += W; // эквивалентен оператору X = X + W, Арифметические выражения Арифметическое выражение записывается в виде последовательности целых и\или вещественных констант, переменных и обращений к функциям, разделенных знаками арифметических операций и круглыми скобками. Обращения к функциям и вычисления выражений в скобках выполняются до операций над их результатами. В выражения могут также входить операторы присваивания в различных формах, так что вычисление выражения будет приводить и к изменению значений входящих в эти операторы переменных. Результат вычисления выражения будет целого типа, если на завершающих шагах операторы будут выполняться над целыми константами, переменными и функциями целого типа, иначе результат будет вещественного типа. Например, результатом вычисления выражения 6+tan(3*3.14/4) будет вещественное число 4.9976, так как в последней операции (+) второй операнд - вещественное число -1.0024 (значение тангенса угла, примерно равного 450), а результатом вычисления выражения 6+(i=tan(3*3.14/4))
В выражениях преобразование операнда целого типа к вещественному выполняется автоматически (см. предыдущие примеры), если другой операнд вещественный, но если требуется преобразовать вещественное в целое не используя присваивания, необходимо применить явное преобразование типа: непосредственно перед операндом в круглых скобках записать имя целого типа. Например,
6+(int)tan(3*3.14/4) Явное преобразование типа иногда приходится применять и для перехода от целого к вещественному. Например, для получения вещественного значения типа float натурального основания (e) в степени, вычисляемой выражением целого типа, например, I%3, следует использовать вызов функции exp((float)i%3). Последовательность выполнения операторов в выражении определяется их приоритетами и порядком их следования, а при необходимости изменения порядка вычислений, как уже упоминалось, используют круглые скобки. Сейчас рассмотрим использование в выражениях только арифметических операций. В выражениях в первую очередь вычисляются обращения к функциям и содержимое круглых скобок, затем – унарные операции изменения знака (-), затем - операции типа умножения (*, /, %) в порядке слева направо, затем – операции типа сложения (+ и -) в порядке слева направо. Если двуместная операция выполняется над вещественными данными разных типов (float и double), то результат будет иметь тип, представляющий больший диапазон значений (double). Например, для вычисления выражения в программе можно записать pow(sin(X),2.0f)*cos(pow(Y,3))*1.2E-4/sqrt(X)/Y/pow(Z,2.0/3.0) Порядок вычислений поясняет следующий рисунок где линиями подчеркнуты части выражения, соответствующие отдельным операциям, а номера справа от линий указывают последовательность соответствующих действий. Результатом вычисления выражения будет значение типа double, так как вещественные константы без суффикса, а также ранее объявленная переменная Z (см. выше) имеют тип double. В C выражения могут включать операторы присваивания в различных формах. Как и унарный минус (–), унарные операторы инкрементации (++) и декрементации
i=2*k--+-++j значением переменной i будет -9, k станет равным -4, а j – равным 3. Действия будут выполнены в следующем порядке: вначале будет выполнено ++j и j получит значение 3, затем, так как унарные операции выполняются в порядке справа налево, унарный минус сохранит значение –j, то есть -3, в некоторой дополнительной переменной, затем по части выражения 2*k при исходном значении k будет вычислено значение -6 и прибавлено к -3 (значению -j), и только потом k будет уменьшено на 1 и станет равным -4. Эти же результаты можно получить, выполнив следующие три оператора присваивания: j=j+1; i=2*k-j; k=k-1; Последний способ описания процесса вычисления значений переменных i, k и j обладает большей наглядностью и его следует использовать, если это возможно, чтобы уменьшить вероятность появления ошибки. Если в рассмотренном выражении сделать декрементацию k префиксной: i=2*--k+-++j; то i получит значение -11, так как до умножения на 2 переменная k будет уже иметь значение -4. Двуместные формы оператора присваивания имеют одинаковый низший приоритет и выполняются в порядке справа налево. После выполнения каждого из них переменная получает новое значение, которое и используется для продолжения вычисления выражения. Так, одним выражением можно задать последовательность вычислений значений нескольких переменных, причем значением всего выражения будет значение, присвоенное последней, самой левой переменной. Например, площадь S основания и объём V цилиндра радиуса R и высотой L можно вычислить одним выражением V=L*(S=3.1415926535*R*R) Одним выражением можно присвоить одно и то же значение нескольким переменным, например, после вычисления выражения X=Y=Z=3.5 переменные X, Y и Z будут иметь значение 3,5. Такая форма уменьшает текст программы и делает её более наглядной.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|