Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык C

Управляющие конструкции C: if, else, switch, тернарный оператор — принятие решений

Логические значения в C

В C нет встроенного типа bool до C99 (<stdbool.h>). Любое не-нулевое значение — истина (true), ноль или NULL — ложь (false). Результаты операций сравнения и логических — int (1 или 0).

Оператор if

Простая форма

if (условие)
    оператор;           // один оператор
// или блок:
if (условие) {
    оператор1;
    оператор2;
    ...
}

Условие — любое скалярное выражение (число, указатель).

Форма if-else

if (условие)
    оператор_если_истина;
else
    оператор_если_ложь;

Цепочка if-else if-else

if (score >= 90)
    grade = 'A';
else if (score >= 80)
    grade = 'B';
else if (score >= 70)
    grade = 'C';
else
    grade = 'F';

Вложенные if

if (x > 0) {
    if (y > 0)
        printf("Quadrant I\n");
    else
        printf("Quadrant IV\n");
} else {
    if (y > 0)
        printf("Quadrant II\n");
    else
        printf("Quadrant III\n");
}

Проблема «висячего else»: else относится к ближайшему if без else. Используйте фигурные скобки для ясности.

Оператор switch

Позволяет проверить значение целочисленного выражения против списка констант.

switch (выражение) {
    case константа1:
        операторы;
        break; // важно! иначе «проваливание» (fall-through)
    case константа2:
    case константа3: // группировка случаев
        операторы;
        break;
    default: // необязательно, если ни один case не совпал
        операторы;
}

Правила switch

Пример: калькулятор

int a = 10, b = 5;
char op = '*';
int result;

switch (op) {
    case '+': result = a + b; break;
    case '-': result = a - b; break;
    case '*': result = a * b; break;
    case '/': 
        if (b != 0) result = a / b;
        else { printf("Деление на 0!\n"); result = 0; }
        break;
    default: printf("Неизвестная операция\n"); result = 0;
}
printf("Результат: %d\n", result);

Намеренный fall-through (C17: атрибут [[fallthrough]])

switch (month) {
    case 1: case 3: case 5: case 7: case 8: case 10: case 12:
        days = 31;
        break;
    case 4: case 6: case 9: case 11:
        days = 30;
        break;
    case 2:
        days = is_leap(year) ? 29 : 28;
        break;
    default:
        days = -1; // ошибка
}

Тернарный оператор ?:

Единственный тернарный оператор. Синтаксис:

условие ? выражение_если_истина : выражение_если_ложь

Возвращает значение — можно использовать в присваивании, аргументе функции и т.д.

Примеры

int max = (a > b) ? a : b;
int abs = (x >= 0) ? x : -x;
printf("Статус: %s\n", (ready) ? "Готово" : "Не готово");
return (error) ? -1 : 0;

Вложенные тернарные (читать трудно — избегайте)

int sign = (x > 0) ? 1 : (x < 0) ? -1 : 0;

Сравнение if-else и switch

Критерийif-elseswitch
Тип условияЛюбое скалярное, сложные выраженияТолько целочисленные константы
ДиапазоныДа (x > 0 && x < 10)Нет (только дискретные значения)
СтрокиЧерез strcmpНет
ПроизводительностьO(n) проверокO(1) — jump table (оптимизация компилятора)
ЧитаемостьГибкоЧище для множества констант

Частые ошибки

Современные альтернативы (C23)

C23 добавляет bool, true, false как ключевые слова (раньше через <stdbool.h>). Также typeof для выражений.

Язык C

  1. Освоение оператора switch в C#: синтаксис, примеры и лучшие практики
  2. Оператор break в C#: как и когда использовать
  3. Оператор continue в C#: как эффективно пропускать итерации циклов
  4. Освоение оператора break в C++
  5. Освоение оператора continue в C++: практические примеры и управление циклами
  6. Условные операторы в C: if, else и не только — подробное руководство
  7. Оператор pass в Python: практическое руководство
  8. Базовый синтаксис C: токены, идентификаторы, ключевые слова и пробелы
  9. Усиление принятия решений в передовитом производстве через мощную аналитику
  10. Оптимизация приёма данных для более умного принятия решений