- •Глава 1 элементы языка
- •Вывод: Пробелы употреблять везде, где это допустимо и улучшает читабельность программы.
- •Введение в си
- •Глава 2 элементы данных
- •Глава 3 массивы и структуры
- •Глава 4 операции и выражения
- •Глава 5 основные операторы
- •Формат: ;
- •Глава 6. Ввод – вывод данных
- •Форма представления одного данного
- •6.2 Функции getchar(), putchar(), getch()
- •Глава 7. Блоки и процедуры
- •Глава 8 Препроцессор
- •Вычисление квадратичной формы
- •Глава 9 Символьная информация и строки
- •9.3 Строки или строковые константы
- •Глава 10 фAйлы
Глава 5 основные операторы
ВСЕ ЯВЛЯЕТСЯ ОПЕРАТОРОМ!
1) Принципиальная разница Си и других языков в том, что в Си все операторы равноправны. Скажем (для тех, кто имеет некоторый опыт в программировании на других языках), что вызов функции тоже является оператором.
2) Более того, каждый оператор (исключений нет!) возвращает некоторое значение – результат своей работы.
Ну, для оператора сложения все понятно: оператор a+b возвратит сумму чисел a и b. А что возвращает оператор присваивания (в Си он записывается как = )? Оказывается, значение выражения a = b равно a. Эта, на первый взгляд, бессмысленная возможность, во-первых, сильно упростила создание языка (нет необходимости разделять операторы на возвращающие значение и не возвращающие, да еще проверять на правильность.
Например, на Паскале (кто знает) необходимо специально проверять выражение на предмет выражений вроде a := (b := c), а во-вторых, позволила сильно сократить размер исходного текста программы.
Оператор присваивания
Образуется формальным добавлением ;(точки с запятой) к выражению соперациейприсваивания.
Формат
<имя_переменной> <ОР>= <выражение>;
где ОР – одна из операций: , / % + – & ^ | << >>. Если рассматривать конструкцию ОР= как две операции, то вначале выполняется ОР, а затем =.
Пример: Х*=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
Оператор перехода
Формат goto <метка>;
<помеченный оператор>
<метка> := <идентификатор>, полноценный идентификатор, созданный по правилам языка Си.
<помеченный оператор>:= <метка>: <оператор>;
Пример:
goto label;
…
label: x++;
Условный оператор. Пустой оператор
Конструкции ветвления позволяет выполнять некоторые операторы только в том случае, если выполняется некоторое условие. Кроме того, расширенный оператор ветвления позволяет выполнить другой оператор в том случае, если условие не выполняется.
Формат
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;
Пустой оператор. Не выполняет никакого действия.