Материал: Информатика Лекции 27.03.02

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

являются только обе точки с запятой. Тем не менее, компилятор воспринимает второе выражение как условие. Если оно на самом деле условием не является, то вычисляется его числовое значение. Условие считается ложным, если это значение равно 0, и истинным во всех остальных случаях. Это правило распространяется на любые места в программах на С, где ожидается условие.

В заголовке цикла for часто используется оператор “,”. Выражения, разделенные запятой выполняются слева направо.

for (i=0, j=3; i<j;)

{i=i+1;

j=j+0.5;

}

Структуры безусловного перехода.

В языке С существуют три оператора реализующие безусловный переход – break, continue, goto. Несмотря на термин “безусловный”, управление обычно передается на эти операторы при выполнении некоторого условия.

Инструкция break используется в ситуации, когда необходимо прервать выполнение переключателя switch или цикла, организованного при помощи операторов цикла. После выполнения инструкции break управление будет передано на оператор, стоящий после цикла или после переключателя. При этом выход будет осуществлен только из одного цикла или переключателя.

Использование оператора break вне циклов или переключателей приводит к синтаксической ошибке.

for(..;..;..)

{. . .;

. . .; for(..;..;..)

{. . .; if(..)

break;

. . .; }

. . .;

}

. . .;

Оператор continue вынуждает ближайший цикл, в котором находится этот оператор, начать работу со следующего шага. В циклах while и do while переход осуществляется на проверку условия, а в цикле for – на выполнение действия, стоящего в заголовке за второй точкой с запятой.

Информатика 27.03.02

46

При использовании инструкции continue в циклах while и do while существует опасность зацикливания в случае, когда изменение счетчика цикла находится ниже conyinue.

i=5;

while (i<=10)

{. . .; if(i==7)

continue;

. . .;

. . .;}

Инструкция goto используется для передачи управления в помеченную строку программы. Имена меткам даются по тем же правилам, что и имена переменных, но метки не нужно описывать. Метка ставится в начале строки, на которую осуществляется переход, а после метки ставится двоеточие. Переход при помощи оператора goto принято использовать для передачи управления вниз по программе.

for (..;..;..) {. . .;

for (..;..;..) {. . .;

if(условие) goto t;

. . .;

}

. . .;

}

t:. . .;

Тема 37. Основные операции языка программирования С/С++.

Арифметические операторы.

К бинарным арифметическим операторам относятся +,-,*,/, и %. Оператор % вычисляет остаток от деления своего левого

операнда на правый. Он применим только к целым типам. int a=4,b=7,c,d;

c=b%a;

d=b/a;

Деление целых чисел сопровождается отбрасыванием дробной части. Бинарные операторы + и – имеют одинаковый приоритет, который ниже приоритета операторов *,/,%. Еще выше приоритет унарных операторов + и -. Арифметические операции одного приоритетного уровня выполняются слева направо.

Информатика 27.03.02

47

Операторы отношения и логические операторы.

К операторам отношения относятся <,<=,>,>=, которые имеют одинаковый приоритет. Ровно на одну ступень ниже приоритет операторов сравнения на равенство == и !=.

Все операторы отношения имеют приоритет ниже арифметических операторов.

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

while (i<n && a[i]<a[i+1])

Приоритет оператора && выше, чем оператора ||, но ниже, чем приоритет операторов отношения и проверки на равенство.

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

while (i<a+3 && (c=t[i])!=a)

Численным результатом вычисления выражения отношения или логического выражения является 1 в случае, если оно оказалось истинным, и 0 в случае, если оно ложно.

В С также существует унарный оператор отрицания !, который преобразует истину в ложь, а ложь в истину.

Например, if(!a) аналогично if (a==0).

Инкрементные и декрементные операторы.

Инкрементный оператор ++ добавляет 1 к своему операнду, а декрементный оператор -– вычитает 1 от своего операнда.

Операторы ++ и – можно использовать в двух формах: префиксной, помещая их перед переменной (++i), и постфиксной, помещая их после переменной (i++). Значение переменной i будет увеличено на единицу при любой из этих форм записи, но в префиксной форме это изменение происходит до использования значения переменной, а в постфиксной форме уже после использования. Таким образом, разница в этих формах видна при использовании инкрементных и декрементных операторов в составе выражений, а не в качестве отдельных операторов.

i=3;

i=3;

a=i++;

a=++i;

d=++i;

d=i++;

Инкрементные

и декрементные операторы можно применять

только к переменным. Запись (a+b)++ не допускается.

 

Побитовые операторы.

Информатика 27.03.02

48

Использование этой группы операторов дает возможность обращения к отдельным битам двоичного представления целочисленных операндов. В С существует 5 бинарных и один унарный побитовый оператор.

& - побитовое И; | - побитовое ИЛИ;

^ - побитовое исключающее ИЛИ; <<, >> - побитовые сдвиги; ~ - побитовое отрицание.

Оператор & выполняет побитовую конъюнкцию своих операндов. a=2;

b=6;

c=a&b;

Оператор | выполнят побитовую дизъюнкцию своих операндов. Его можно, в частности, использовать для проверки числа на четность:

if((a|1)==a)

Оператор ^ устанавливает 1 в том разряде результата, в котором соответствующие разряды операндов имеют различное значение, и О, если в этих разрядах значения совпадают.

a=2;

b=6;

c=a^b;

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

a=2; d=a--; d=d<<a;

Унарный оператор ~ превращает единичные биты в нулевые и наоборот.

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

В выражениях типа a=a+t;, в которых стоящая в левой части присваивания переменная, повторяется и справа, может использоваться видоизмененная форма оператора присваивания: a+=t;.

Таким образом, в С имеется одиннадцать операторов присваивания: =,+=,-=,*=,/=,%=,&=,|=,^=,<<=,>>=.

Информатика 27.03.02

49

Ввыражениях с использованием видоизмененной формы

оператора

присваивания

вторым

операндом

является

все,

находящееся справа от оператора

присваивания:

 

 

a*=b+1; равносильно a=a*(b+1);

 

 

 

 

Условное

выражение.

 

 

Если

в программе возникает необходимость

реализовать

выбор

в пределах выражения, и в пределах этого же выражения воспользоваться результатом этого выбора, то можно воспользоваться тернарным оператором ?:. Его синтаксис:

операнд 1 ? операнд 2 : операнд 3 Первым вычисляется операнд 1, который расценивается как

условие. Если результатом вычисления операнда 1 оказалась истина, то вычисляется выражение, являющееся операндом 2, и результат вычисления этого выражения оказывается результатом всего тернарного оператора. В противном случае вычисляется выражение, являющееся операндом 3, и снова его значение является значением всего условного выражения.

a=4;

b=3; c=(a==b?b++:--a);

Условное выражение обычно берется в скобки, так как этот оператор имеет достаточно низкий приоритет (хотя он выше приоритета оператора присваивания)

for(i=1;i<=n;i++)

for(j=1;j<=m;j++) printf(“%d%c”,a[i][j],j!=m?’ ‘:’\n’);

Преобразование типов.

Вслучае, если в одной бинарной операции участвуют операнды разных типов, еще до выполнения операции тип операнда, занимающего меньше места в памяти, приводится к типу другого операнда. Такое неявное приведение типа является временным, только в пределах проводимой операции. Результат будет иметь “старший” тип.

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

Кроме неявного преобразования типов существует и унарный оператор явного преобразования, который называется оператором приведения типа. Его синтаксис:

(тип)выражение; a=(float)sum/n;

Информатика 27.03.02

50