Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Тернарный оператор и оператор запятая
Название «тернарный» произошло от латинского ternarius – тройной. Оператор принимает три аргумента. Если первый аргумент истина, то возвращается второй аргумент, если ложь, то возвращается третий. Синтаксис оператора
<условие>? <аргумент 2>: <аргумент 3>
Например, пользователь вводит два числа. Присвоить переменной значение наименьшего.
#include <conio.h> #include <stdio.h>
void main() { int a, b, c;
scanf("%d %d", &a, &b);
c = (a > b)? b: a;
printf("%d", c); _getch(); }
Другой пример: вывести модуль числа
#include <conio.h> #include <stdio.h>
void main() { int a;
scanf("%d", &a);
printf("%d", a > 0? a: -a); _getch(); }
Здесь тернарный оператор используется вместо аргумента функции printf. Оператор «?» может быть вложенным. Например, найдём среднее из трёх чисел:
#include <conio.h> #include <stdio.h>
void main() { int a = 1; int b = 2; int c = 3; int mid;
mid = (a > b)? (a > c)? (c > b)? c: b: a: (b > c)? (c > a)? c: a: b;
printf("%d", mid); _getch(); }
Видно, что в этом примере тернарный оператор становится нечитаемым. Поэтому не используйте вложенные тернарные операторы и заменяйте их на обычные ветвления
#include <conio.h> #include <stdio.h>
void main() { int a = 1; int b = 2; int c = 3; int mid;
if (a > b) { if (a > c) { if (c > b) { mid = c; } else { mid = b; } } else { mid = a; } } else { if (b > c) { if (c > a) { mid = c; } else { mid = a; } } else { mid = b; } }
printf("%d", mid); _getch(); }
Для тернарного оператора определён порядок выполнения. Пример.
#include <conio.h> #include <stdio.h>
void main() { int x = 0;
//Выведет 200, так как ++ постфиксный printf("%d\n", x++? 100: 200); //Выведет 1, так как после проверки x был увеличен printf("%d\n", x);
x = 0; //Выведет 100, так как сначала будет увеличен x printf("%d\n", ++x? 100: 200); printf("%d\n", x);
x = 0; printf("%d\n", ++x? x++: x++); //Выведет 2, так как будет выполнено первое условие //и x будет инкрементирован повторно printf("%d\n", x);
_getch(); }
Оператор запятая. Оператор «,» принимает два аргумента, выполняет первый, после этого выполняет второй и возвращает его значение. Например:
#include <conio.h> #include <stdio.h>
void main() { int a, b, c;
c = (a = 3, b = 4); printf("%d", c);
_getch(); }
В данном примере c будет равно 4. Выражение
(a = 3, b = 4)
вернёт 4. Очевидно, что если убрать скобки, то c станет равным 3, так как запятая в этом случае будет разделять c = a = 3 и b = 4, с присвоится значение 3, а 4 будет возвращено оператором запятая, но потеряется. То есть выражение
c = a = 3, b = 4;
эквивалентно
(c = a = 3), (b = 4);
Если написать
c = (a = 3, b = 4, d = 5);
то будет возвращено значение 5.
В выражении
#include <conio.h> #include <stdio.h>
void main() { int c;
c = 1, 2, 3, 4, 5; printf("%d", c);
_getch(); }
с будет равно 1, так как этот код эквивалентен такому
((((c = 1), 2), 3), 4), 5;
Такое поведение оператора запятая часто приводит к следующей ошибке. Вместо десятичной точки
a = 1.5;
пишут
a = 1,5;
Таким образом, переменная a будет иметь значение 1.
Для оператора «,» гарантированно выполнение по порядку, слева направо. Оператор запятая поэтому используется в условиях, когда нужно выполнить несколько действий или получить значение. Например
#include <conio.h> #include <stdio.h>
int foo(int a) { return a % 5 + a*a; }
void main() { int i = 0; int mod;
while (mod = foo(i), mod < 100) { printf("%d ", i); i++; }
_getch(); }
Часто запятая используется в цикле for, так как позволяет задавать несколько значений или выполнять несколько значений за раз. Пример – переворачивание массива.
#include <conio.h> #include <stdio.h>
#define SIZE 10
void main() { int arr[SIZE] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int i, j, tmp;
for (i = 0, j = SIZE - 1; i < SIZE / 2; i++, j--) { tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; }
for (i = 0; i < SIZE; i++) { printf("%d ", arr[i]); }
_getch(); }
|
|||||
Последнее изменение этой страницы: 2017-01-20; просмотров: 338; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.221.129.19 (0.008 с.) |