Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на C / C++ / Основы программирования на Си.doc
Скачиваний:
324
Добавлен:
02.05.2014
Размер:
1.3 Mб
Скачать

Операция, уровень приоритета которой равен 14

Уровень приоритета операции равен 14, выполняются такие операции справа налево.

Операция простое присваивание: =

Тип операндов: арифметические, указатели, объединения или структуры. Тип результата: если оба операнда имеют арифметический тип, то значение правого операнда преобразуется к типу левого операнда.

Использование:

v=e

Присваивание значения e переменной v.

Пример:

x=y;

Операция сложное присваивание: =

Обозначим <знак> один из знаков : +, -, *, /, %, >>, <<, &, ^, |.

В результате выполнения операции присваивания

v=e

где v - переменная, а e - выражение, значение выражения становится новым значением переменной v.

Операция присваивания

v <знак>= e

приблизительно эквивалентна оператору присваивания

v = v<знак> e

Пример 1:

y+=2; /* Увеличение переменной y на 2 */

p+=n;

x-=3;

ptr-=2;

timesx*=x;

x/=2;

x%=10;

x>>=4;

x<<=1;

remitems&=mask;

control^=seton;

additems |=mask;

Типы операндов и результата сложного оператора присваивания можно определить на основании этой эквивалентности. Однако приведенный эквивалент для сложного оператора присваивания не совсем точен. В выражении

v <знак>= e

операнд v вычисляется только один раз, в то время как в выражении

v = v <знак> e

этот операнд вычисляется дважды. Это различие проявляется в побочных эффектах, связанных с вычислением операнда v, например, при изменении значения какой-либо переменной. Рассмотрим это на примерах:

a[i++]* = n;

При выполнении вычисление левого операнда дает побочный эффект - увеличение значения переменной i. Следовательно, это присваивание не эквивалентно присваиванию

a[i++] = a[i++]*n;.

Эквивалентом первой операции присваивания может служить последовательность операций

a[i]=a[i]*n;

i=i+1;

а эквивалентом второй - последовательность операций

a[i]=a[i+1]*n;

i=i+2;

или последовательность операций

a[i+1]=a[i]*n;

i=i+2;

в зависимости от того, какая часть операции присваивания вычисляется раньше - левая или правая. Порядок таких вычислений не определен.

Операция, уровень приоритета которой равен 15

Уровень приоритета операции равен 15, выполняются такие операции слева направо.

Операция запятая: ,

Тип результата совпадает с типом правого операнда. Операция объединяет два выражения в одно выражение, значением которого является значение правого операнда; значение левого операнда вычисляется только для получения побочных эффектов.

Использование:

el,e2

Сначала выполняется выражение e1, потом выражениее2. Значением всего выражения является значение выражения е2.

Пример:

for(i=A,j=B;i<j;i++,j--)

/* организация циклического повторения.

Оператор со счетчиком */

p[i]=p[j];

Примеры простых задач

/* Задача № 1 (пример на использование операции *)

Определить площадь боковой поверхности конуса радиуса

r и имеющего длину образующей l.*/

#include <stdio.h>

#include <math.h>

/* подключение библиотеки математических функций */

const float pi=3.14159;

float r=10; float l=50; float s;

main()

{

s=pi*r*l;

printf("\n Площадь боковой поверхности s=%f",s);

}

/* Задача № 2 (пример на использование операций +,

* и /). Тело движется прямолинейно с ускорением.

Даны а(м/сек2) - ускорение, V(M/C) - начальная

скорость. Требуется определить, какой путь пройдет

тело за t секунд.*/

#include <stdio.h>

float а, v, t, s ;

main()

{

a=20.2;

v=50.3;

t=65;

s=(v*t)+(a*t*t/2);

printf("\n Путь s=%f M",S);

}

/* Задача № 3 (пример на использование операций =,

/ и вычисления степени). Вычислите среднее арифметическое

и среднее геометрическое трех чисел а,b,с.*/

#include <stdio.h>

#include <math.h>

float a=b=c=2005.1; float x,у;

main ()

{

x=(a+b+c)/3;

y=pow( (a*b*c),(1/3));

/*функция pow берется из библиотеки math.h*/

ntf("\n среднее арифметическое x=%f",x);

ntf("\n среднее геометрическое y=%f",y);

}

/* Задача № 4 (пример на использование операций

=,*, / и функции hypot). Даны катеты прямоугольного

треугольника. Найти его гипотенузу и площадь.*/

#include <stdio.h>

#include <math.h>

float x=y=50.7; float z,s;

main()

{

z=hypot(х, у) ;/* вычисление гипотенузы*/

s=x*y/2;

ntf("\n гипотенуза=%f см",z);

printf("\n Плoщaдь=%f кв см",s);

}