Новосибирский Государственный Университет
Опубликован: 26.08.2005 | Доступ: свободный | Студентов: 17198 / 2756 | Оценка: 4.07 / 3.55 | Длительность: 13:11:00
ISBN: 978-5-9556-0057-4
Лекция 4:

Операторы

< Лекция 3 || Лекция 4: 1234 || Лекция 5 >
Аннотация: Выражения. Простейшие выражения. Операторы. Составные операторы.

Выражения

Выражение представляет собой объединение операций и операндов. Напомним, что операндом называется то, над чем выполняется операция. Простейшее выражение состоит из одного операнда. Опираясь на это понятие выражения, мы можем строить более сложные конструкции. Приведем несколько выражений:

100
1904 +100
a*(c-d)
x=0
x=y++
x>3

Выражениями называются компоненты программы, составленные с использованием операций, литералов, констант, переменных (включая массивы, структуры и объединения) и вызовов функций. Порядок вычисления выражений определен лишь требованиями соответствия семантике операторов и соблюдения правил приоритета и порядка выполнения операций. При выполнении этих требований компилятор свободен в выборе порядка вычисления выражения, даже если вычисление подвыражений может привести к побочным эффектам.

В отличие от большинства других языков, в языке Си для задания определенного порядка вычисления выражения недостаточно только соответствующей расстановки скобок, так как компилятор может произвольно переупорядочивать выражения, включающие ассоциативные и коммутативные операторы ( *, +, |, ^ ) даже при наличии скобок. Для задания желаемого порядка выполнения выражения нужно использовать дополнительные присваивания, если требуется, с использованием временных переменных.

Необходимо с осторожностью использовать выражения, при вычислении которых возможны побочные результаты, так как результаты вычисления таких выражений часто проявляются не сразу и, кроме того, зависят от используемого компилятора. Например, в результате вычисления операторов присваивания

j=3;
i=(k=j+1)+(j=5);

значение переменной i будет равно 9 или 11 в зависимости от того, какое подвыражение второй операции будет вычислено первым. Таким образом, с использованием разных компиляторов можно получить различные результаты.

Простейшие выражения

Простейшими выражениями называются выражения, сформированные с использованием констант типов int, char и enum, операции sizeof, унарных операторов - и ~, бинарных операторов + * / % & | ^ << >> = = != < > <= >= и тернарной операции ?:.

Простейшие выражения используются в операторе switch, в инициализаторах границ массивов и в операторе препроцессора #if.

Логические операции ||, && являются условными логическими операциями, т. к. второй операнд вычисляется только при необходимости. В других языках программирования, например, в языке Паскаль, в логических операторах всегда вычисляются значения обоих операндов, даже если результат может быть определен вычислением одного операнда.

Важным свойством языка Си является то, что каждое выражение в Си имеет значение. Приведем несколько выражений и их значения:

Выражение Значение
-14+16 2
a=3+8 11
5>3 1
14<3 0
6+(c=3+8) 17

Операторы

Любое выражение может быть преобразовано в оператор добавлением к нему точки с запятой. Запись вида

выражение;

является оператором. Значение выражения игнорируется. Действие такого оператора состоит в создании побочного эффекта вычислением значения выражения.

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

line = 5

- это всего лишь выражение, которое может быть частью большого выражения, но

line = 5;

является оператором.

Выражение

5+5

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

dog=5+5;

служит указанием компилятору, а затем компьютеру, поместить результат 10 в ячейку памяти, помеченную именем dog. После занесения в память числа 10 компьютер может приступить к выполнению следующих действий.

Составные операторы

Составной оператор представляет собой два или более операторов, объединенных с помощью фигурных скобок; он называется также блоком. Чтобы быть свободными в обсуждении составных операторов, рассмотрим один из операторов цикла языка Си и использования в Си функций printf( ) и scanf( ).

Оператор цикла while

Пусть нам нужно каким-то образом заставить компьютер выполнять повторяющиеся вычисления. Язык Си предлагает несколько способов реализации повторяющихся вычислений. Сейчас мы коротко обсудим один из них. Данный способ называется "циклом с предусловием while ". Цикл while работает следующим образом. Когда программа в процессе выполнения впервые достигает оператора while, осуществляется проверка истинности условия, заключенного в круглые скобки. Затем идет тело цикла, заключенное в фигурные скобки. В теле цикла перевычисляется переменная, которая анализируется в условии, там где встречается закрывающая фигурная скобка (конец тела цикла while ), управление передается на оператор while. Если условие не выполняется, то управление передается за тело цикла, т.е. за закрывающую фигурную скобку.

Все операторы цикла языка Си рассматриваются в 8-ой лекции.

Пример 1:

/* От города А до города В расстояние равно 20 км. 
Велосипедист выехал из А и в первый день проехал 
10 км. В последующие дни он проезжал со скоростью, 
в 1,5 раз большей, чем в предыдущий день. За сколько 
дней велосипедист доберется до города В.*/
#include<stdio.h>
#include<conio.h>
float km=10;
int main()
{
	clrscr(); /* чистка экрана, функция берется 
			 из головного файла conio.h*/
	int d;
	d=1; 	   /* первый день, за который велосипедист
			 проехал 10 км.*/
	while(km<20) /* пока выполнено условие цикла,
			    подсчитываются километры и дни*/
	{
		km+=(km*0.5);
		d++;
	}
	printf("велосипедист был в пути %d дней",d);
	getch();
}
< Лекция 3 || Лекция 4: 1234 || Лекция 5 >
Вадим Ратьков
Вадим Ратьков

Объясните, пожалуйста, чем отличаются два этих кода?

printf("смешанное деление: 7./4 это %2.2f \n", 7./4);

и

printf("смешанное деление: 7./4 это %f \n", 7./4);

%f  это, понятное дело, float. А что такое %2.2f ?

Вопрос возник при прочтении лекции 3 часть вторая курса Основы программирования на языке C.

http://www.intuit.ru/studies/courses/43/43/lecture/1281?page=2

Анна Алексанина
Анна Алексанина

Я хочу выполнить одну из программ, которые есть в лекции. Но для этого мне надо компилировать текст, а я не знаю, как это сделать. ОС Windows.

Андрей Дубинин
Андрей Дубинин
Россия, Калининград, МГУТУ, 2001
Дмитрий Мочалов
Дмитрий Мочалов
Россия