Урок 2. Часть 1: Условные конструкции языка Си if, switch

На занятии рассматривается условные конструкции языка Си if и switch. Разбираются примеры работы с конструкциями и даются задания

Оператор ветвления языка Си If

Оператор ветвления if (англ. «если») необходим в тех случаях, когда надо решить, должна ли быть выполнена конкретная инструкция программы .
Рассмотрим синтаксис условного оператора:

Самый простой вариант оператора:

If (условие)
 оператор1;

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

  • непосредственно условие заключается в круглые скобки;
  • точка с запятой ставится не после условия, а только в конце всей конструкции;
  • Си — язык программирования свободного формата, поэтому условие и инструкцию можно помещать в одной строке. Разделяя их, программа выглядит более удобной для чтения.
  • Операторы отношения, используемые в условии:

    Оператор Значение Пример
    == равно if (x == 0.06)
    > больше if (s > 40)
    < меньше if (s < 40)
    >= больше или равно if (y >= 10000)
    <= меньше или равно if (t <= l)
    != не равно if (count != 1)
    С помощью условия if можно проверять значения числовых и символьных переменных, значения строк проверять нельзя.

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

    gets(name);
    if (name == "Петя")
    	puts("Приходи в гости");

    Строковые переменные подробно обсуждаются в одном из последующих уроках.

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

    Составной оператор:

    If (условие) 
    {
     оператор1;
     оператор2;
    }

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

    If (условие)
     оператор1;
    else 
     оператор2;
    Пример:
    Запрашивать в программе время. Если уже более 11 часов выводить сообщение «Пора домой», в противном случае — «еще рано!»
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    main()
    {
    int   time;
    scanf("%d", &time);
    if   (time>11)   
    	puts ("Пора домой");
    else   
    	puts ("еще рано!");
    }
    Задача с 2_1: Дракон каждый год отращивает по три головы, но после того, как ему исполнится 100 лет — только по две. Сколько голов и глаз у дракона, которому N лет?
    Важно: Для сложных условий, когда необходимо проверить одновременно несколько условий, используются три логических оператора:

  • ИЛИ (||),
  • И (&&)
  • и отрицания (!).
  • Оператор ИЛИ означает, что для выполнения оператора if достаточно истинности одного из двух или одновременно обоих условий.

    Оператор И означает, что должны быть истинными оба условия одновременно.

    Оператор отрицания означает, что оператор if выполняется, если некое условие оказалось ложным.

    Пример: Принцесса выбирает претендентов-женихов, которые соответствуют следующим параметрам: рост менее 180 см, цвет глаз — голубой.
    Задача сложна тем, что в ней присутствует строковая переменная. Для правильной работы необходимо «разложить» строковую переменную на символы:

    color="blue"; 
    color[0]='b'; color[1]='l'; color[2]='u'; color[3]='e';
    Показать решение:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    #include<stdio.h>
    main()
    {
    char color[9];
    int rost;
    puts("what color?");
    scanf("%s",&color);
    puts("what rost?");
    scanf("%d",&rost);
    if(color[0]=='b' && color[1]=='l' && color[2]=='u' && color[3]=='e' && rost<180)
    	puts("podhodite!!!");
    else 
    	puts("good bye!");
    }
    Показать аналог в Паскаль:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    var color:string;
    rost:integer;
    begin
    writeln ('kakov zvet glaz?');
    readln(color);
    writeln('kakov rost?');
    readln(rost);
    if (color='blue') and (rost<180) then
       writeln('podhodite')
       else
       writeln('good bye!')
    end.

    Оператор выбора языка Си switch

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

    В таких случаях используется оператор выбора (или переключатель) языка Си switch. Переключатель switch работает по принципу меню и содержит все возможные варианты условий и инструкции, которые следует выполнить в каждом конкретном случае.

    Рассмотрим синтаксис:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    switch (идентификатор переменной)
    {
    case значение1:
    	оператор1;
    	break;
    case значение2:
    	оператор2;
    	break;default:
    	оператор n;
    }

    В круглых скобках после оператора выбора языка Си switch находится переменная типа int или char (не строковая), следом расположен блок, заключенный в фигурные скобки; в блоке содержатся ветви условий case. Каждая ветвь case выполняет конкретные инструкции, если значение переменной совпадает с указанным. Если это значение является символом, то символ заключается в одинарные кавычки.

    Пример: Программа, спрашивающая у ученика его отметку по информатике и реагирующая на нее подходящим текстом
    Показать решение:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    
    #include<stdio.h>
    main()
    {
    int otmetka;
     
    puts("what otmetka?");
    scanf("%d",&otmetka);
    switch (otmetka)
    {
    case 1,2:
    	puts("koshmar!");
    	break;
    case 3:
    	puts("ploho");
    	break;
    case 4:
    	puts("neploho");
    	break;
    case 5:
    	puts("otlichno!");
    	break;
    default:
    	puts("takih otmetok ne bivaet");
    }
    }
    Показать аналог в Паскаль:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    var otmetka:integer;
    begin
    writeln('otmetka?');
    readln(otmetka);
    case otmetka of
     1,2 : writeln ('koshmar!');
     3: writeln('ploho');
     4: writeln('neploho');
     5: writeln('otlichno!');
     else writeln('takih otmetok ne bivaet');
    end
    end.
    Задача c 2_2. Ученик вводит с клавиатуры число, символ арифметического действия (+, -, *, /) и еще одно число. Компьютер должен напечатать результат. Указание: Для чисел и арифметического действия используйте оператор ввода Си scanf
    Вопросы для самоконтроля:

  • Какая разница существует между символами = и ==?
  • Как правильно выполнить несколько операторов при соблюдении одного определенного условия?
  • Каково назначение служебного слова else в конструкции Си if?
  • Как правильно записать в условии if, находится ли число в границах допустимых значений?
  • Чем отличается оператор выбора switch от оператора Си if?