Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЯП - ПОИТ (Бахтизин) часть 1 редакт.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
1.76 Mб
Скачать

3.4. Операция запятая

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

Несколько выражений, разделенных запятыми, вычисляются слева направо. Например, выражение (x=3, 3*x) будет иметь результат 9, однако переменная х примет значение 3.

Операция , (запятая) позволяет вводить составные выражения и в операторах цикла for, при этом первым будет выполняться выражение, стоящее слева, затем следующее.

for (i=0, sum=0; i<=100; i++)

Рассмотрим использование запятой в качестве разделителя.

  • разделение начальных значений элементов массивов и компонентов структур при их инициализации.

int Massiv[5] = {1, 2, 3, 4, 5};

  • использование в списках формальных и фактических параметров при работе с функциями.

void print(char value, int x);

  • использование для описания определенных объектов (например, переменных) одного типа

int x, y;

float a, b, c, f1, f2;

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

int i = 1;

int m[3] = {i, (i = 2, i * i), i};

В данном примере запятая в круглых скобках выступает в роли знака операции. Операция «=» имеет более высокий приоритет, чем операция «запятая». Поэтому вначале i получает значение 2, затем вычисляется произведение i * i, и этот результат служит значением выражения в скобках. Однако значением переменной i остается 2. Значения m[0], m[1], m[2] будут соответственно 1, 4, 2.

В приведённом примере видна ещё одна особенность операции запятая: выражения, являющиеся «аргументами» этой операции, вычисляются в порядке их записи независимо от приоритетов операций. Так, в приведённом примере наивысший приоритет – у операции умножения, но оно выполняется только после операции присваивания, имеющей более низкий приоритет.

3.5. Операция условия ?:

Существует более короткий путь записи оператора if...else – эту альтернативу представляют в виде ?:. Данный оператор позволяет создавать простые условные однострочные выражения, в которых выполняется одно из двух действий в зависимости от заданного условия.

выражение ? оператор 1: оператор 2;

(a>=b) ? printf(“Число a не меньше числа b.\n ”) :

printf(“Число a меньше числа b.\n ”);

В данном примере, если число a >= числа b, условие «истина», то на экране появится – «Число a не меньше числа b.», иначе «Число a меньше числа b.».

3.6. Оператор безусловного перехода goto

Результатом применения оператора goto является передача управления первому оператору программы после метки.

goto метка;

Метка представляет собой некоторый идентификатор, после которого следует двоеточие. Метка не должна выходить за пределы той функции, где находится оператор goto, который на нее ссылается.

void main()

{

int i=1;

start:

if (i>5)

goto finish;

printf(" %d ", i++);

goto start;

finish:

putchar('\n');

return 0;

}

Результат работы программы: 1 2 3 4 5

Приведенный программный код показывает работу оператора goto. Цикл, основанный на операторе goto, выполняется пять раз, и при этом каждый раз выводится значение счетчика. После инициализации переменной i значением 1 программа проверяет ее, определяя, не больше ли она 5 (метка start пропускается, так как она не выполняет никаких действий). Если значение переменной больше 5, то управление передается первому оператору, расположенному за меткой finish. Если же значение меньше или равно 5, то выполняется тело цикла (состоящее из вызова функции printf), после чего управление передается первому оператору после метки start, т.е. в данном случае – оператору if.

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