операторы if и switch в С++

Помечено: ,

В этой теме 0 ответов, 1 участник, последнее обновление  Васильев Владимир Сергеевич 7 мес. назад.

  • Автор
    Сообщения
  • #3666

    Условный оператор if

    Оператор if используется в любом императивном языке программирования для организации ветвления. Он имеет примерно следующую структуру:

    Тоже самое, но в словах:
    Если заданное условие верно, то выполнить функцию1, в остальных случаях выполнить функцию2.
    Теперь примерный код (это пока что не совсем С++, а скорее псевдокод):

    if (условие == true) // если условие верно
    {
        функция1; // выполнить функцию1
    }
    else // в остальных случаях
    {
        функция2; // выполнить функцию2
    }

    Как вы видите условие пишется после if-а в круглых скобках. Для else мы только задаем функции, которые нужно выполнить. Все функции находящиеся между двумя фигурными скобками будут выполнены, если условие сработало (если скобок нет, то будет выполнена лишь следующая функция). ВНИМАНИЕ! else писать необязательно:

    if (условие == true) // если условие верно
    {
        функция1; // выполнить функцию1
    }

    Пример кода:

    #include <iostream>
    using namespace std;
    
    int main () {
        int n;
        // создаем переменную
    
        cin >> n;
        // вводим ее
    
        if (n % 2 == 0) // если число без остатка делится на 2
          cout << "The number is even \n"; // говорим, что число четное
    
        else // в остальных случаях
        cout << "The number is odd \n"; // говорим, что число нечетное
    
        system ("pause");
        return 0;
    }

    ЗАПОМНИТЕ! Два знака равно «==» обозначают сравнение двух переменных, а одно равно «=» — операцию приравнивания.

    Логические операции (и, или, не)

    Помимо сравнения двух переменных (==) существуют другие условные операторы:

    1) «==, !=, >, <, >=, <=», что значит «равно, неравно, больше, меньше, больше или равно, меньше или равно» соответственно. Пример:

        if (a == b) cout << "a is equal to b \n";
        if (a != b) cout << "a is not equal to b \n";
        if (a > b) cout << "a is bigger than b \n";
        if (a < b) cout << "a is less than b \n";
        if (a >= b) cout << "a is bigger or equal to b \n";
        if (a <= b) cout << "a is less or equal to b \n";
        // думаю комментарии излишни

    2) &&, что означает «и». Пример:

      if ( int(symbol) >= int('a') && int(symbol) <= int('z'))
        cout << "Your character is letter \n";
        /* если ASCII код символа находится между кодами символов 'a' и 'z', то сообщить о том, что символ является буквой */
      else
        cout << "Your character isn't letter \n";
        // в остальных случаях сообщить об обратном

    3) ||, что означает «или». Пример:

        if (url == "google.ru" || url == "ya.ru")
          cout << Your url is url of the search engine \n";
        /* если url принадлежит google или yandex, то сообщаем, что это - поисковик */
        else 
          cout << "There's no search engine with this url \n";
        // в остальных случаях выдаем ошибку

    4) побитовые операции, подробнее о них здесь.

    На длину условия и количество операций ограничений нет (ну, практически нет). Также условия можно комбинировать и разбивать с помощь круглых скобок «()».

    Ну и напоследок, программа для определения високосности года:

    #include <iostream>
    using namespace std;
    
    int main() {
        int year;
        cin >> year;
    
        if (year % 400 == 0 || (year % 100 != 0 && year % 4 == 0))
            cout << "Leap year! \n";
        else 
            cout << "Not leap year! \n";
    
        system("pause");
        return 0;
    }

    Год является високосным, если он делится без остатка на 400, или же делится без остатка на 4, но не делится на 100. Что наша программа и делает.

    Оператор варианта switch

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

    switch (выражение) {
      case значение_1: операторы_1; break;
      case значение_2: операторы_2; break;
      case значение_3: операторы_3; break;
      // …
      case значение_n: операторы_n; break;
      default: операторы; break;
    }

    Оператор работает следующем образом. Вычисляется значение выражения. Затем выполняются операторы, помеченные значением, совпадающим со значением выражения. То есть если, выражение принимает значение_1, то выполняются операторы_1 и т.д.. Если выражение не принимает ни одного из значений, то выполняются операторы, расположенные после слова default.

    Ветвь default может отсутствовать, тогда оператор имеет вид:

    switch (выражение) {
      case значение_1: операторы_1; break;
      case значение_2: операторы_2; break;
      case значение_3: операторы_3; break;
      //…
      case значение_n: операторы_n; break;
    }

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

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

    Задача: Необходимо вывести на название дня недели, соответствующее заданному числу D, при условии, что в месяце 31 день и 1-е число — понедельник.

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

    #include "stdafx.h"
    #include <iostream>
    using namespace std;
    int main () {
      unsigned int D, R; //описанны целые положительные числа
      cout<<"D=";
      cin>>D;
      R=D%7;
      switch (R) {
        case 1: cout<<"Monday \n"; break;
        case 2: cout<<"Theusday \n"; break;
        case 3: cout<<"Wednesday \n"; break;
        case 4: cout<<"Thursday \n"; break;
        case 5: cout<<"Friday \n"; break;
        case 6: cout<<"Saturday \n"; break;
        case 0: cout<<"Sunday \n"; break;
      }
      system ("pause");
      return 0;
    }

Для ответа в этой теме необходимо авторизоваться.