Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Текст_лекций_Си.doc
Скачиваний:
18
Добавлен:
16.03.2016
Размер:
1.06 Mб
Скачать

Глава 5 основные операторы

ВСЕ ЯВЛЯЕТСЯ ОПЕРАТОРОМ!

1) Принципиальная разница Си и других языков в том, что в Си все операторы равноправны. Скажем (для тех, кто имеет некоторый опыт в программировании на других языках), что вызов функции тоже является оператором.

2) Более того, каждый оператор (исключений нет!) возвращает некоторое значение – результат своей работы.

Ну, для оператора сложения все понятно: оператор a+b возвратит сумму чисел a и b. А что возвращает оператор присваивания (в Си он записывается как = )? Оказывается, значение выражения a = b равно a. Эта, на первый взгляд, бессмысленная возможность, во-первых, сильно упростила создание языка (нет необходимости разделять операторы на возвращающие значение и не возвращающие, да еще проверять на правильность.

Например, на Паскале (кто знает) необходимо специально проверять выражение на предмет выражений вроде a := (b := c), а во-вторых, позволила сильно сократить размер исходного текста программы.

    1. Оператор присваивания

Образуется формальным добавлением ;(точки с запятой) к выражению соперациейприсваивания.

Формат

<имя_переменной> <ОР>= <выражение>;

где ОР – одна из операций: , / % + – & ^ | << >>. Если рассматривать конструкцию ОР= как две операции, то вначале выполняется ОР, а затем =.

Пример: Х*=2; Z+=4; i/=X+4*Z;

Пример: x=–.127; i=i+1; i++;

a[i+1]=x*y+2*sin((z+1)*(x–2)); x+=a+b/2; –> x=x+a+b/2;

Многократное присваивание.

Например: a = b = c = d = 0;

Как будет работать такой участок кода? Начнем сначала. Данное выражение присваивает переменной a результат выполнения оператора b = c = d = 0, который, в свою очередь, присваивает переменной b результат выполнения оператора c = d = 0, который...

То есть этот участок кода как бы развертывается в такой:

d = 0;

c = d;

b = c;

a = b;

Итак, как мы видим, всем четырем переменным присвоено начальное значение всего одним оператором.

Пример:

  • i=j=k=0;  k=0; j=k; i=j;

  • i=1; j=3;

a[i][j]=i=i+1;  i=2 a[2][3]=2

    1. Оператор перехода

Формат goto <метка>;

<помеченный оператор>

<метка> := <идентификатор>, полноценный идентификатор, созданный по правилам языка Си.

<помеченный оператор>:= <метка>: <оператор>;

Пример:

goto label;

label: x++;

    1. Условный оператор. Пустой оператор

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

Формат

if ( <выражение> )

<оператор 1>;

[else

<оператор 2>; ]

Конструкция работает предельно просто: если условие не равно нулю, то выполняется оператор_1, в противном случае – оператор_2. Обратите внимание, что оператор_1 и оператор_2 должны представлять собой только одно выражение. Как вы уже догадались, так как условие должно возвращать некоторое значение, то оно не может быть составным.

Примеры:

if (a>b)

c=a;

else

c=b;

  • Обход if ( x*x + y*y > r*r ) z=0; /* без else */

if (x<0)

y=x+1;

else

y=1–x;

Вложенные if.

  • if (x > y)

if (z = = 0)

x = 5;

else

x = –5;

else

if (z > 10)

y = 5;

else

y = –5;

if (x < 0)

y = x*x–5;

else

if (x<=5)

y = sqrt(x)+3;

else

y=x–7;

Пустой оператор. Не выполняет никакого действия.