Раздел «Язык Си».CoffeeIf:

Предупреждение:

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

Задача: Через реку можно переплыть на лодке, которая вмещает K пассажиров.
На берегу стоит N человек и хочет переправиться на другой берег.
Сколько нужно сделать рейсов, чтобы переправить на другой берег всех людей?
1 рейс - это когда лодка плавает туда и обратно.

Чтобы решить задачу, можно придумать математическую формулу.

Придумайте формулу. Проверьте для разных значений N и К.

Проще писать программу так, как думает обычный человек (не математик) :

#include <stdio.h>

int main()
{
    int n,                 // пассажиров на берегу
        k,                 // пассажиров за один рейс может перевезти лодка
        reisov,            // количество рейсов
        ostalos;           // в неполной лодке

    scanf("%d%d", &n, &k); // читаем n и k

    reisov = n/k;          // количество рейсов, когда лодка полная
    ostalos = n%k;         // сколько человек осталось после этого на берегу

    if (ostalos > 0) {     // если на берегу остались люди
        reisov += 1;       // добавить еще 1 рейс с неполной лодкой
    }

    printf ("%d\n", reisov); // напечатать количество рейсов 
    return 0;
}

Как писать условный оператор if:

if (условие) 
    команды_ДА

Условие

Условие может быть либо истина (ДА), либо ложь (НЕТ).

IDEA! 0 - это ложь, все остальное - истина.

В условии используются операторы сравнения.

Python Математика Русский
a == b a = b a равно b
a != b a ≠ b a не равно b
a < b a < b a меньше b
a <= b a ≤ b a меньше или равно b (a не больше b)
a > b a > b a больше b
a >= b a ≥ b a больше или равно b (a не меньше b)

ALERT! Нельзя внутри операторов сравнения ставить пробел

ALERT! Правильно <= (меньше или равно), а не =< Как говорим, так и пишем.

Почему равно ==, а присвоить =

ALERT! а=2 - присвоить, a==2 - сравнить

a = 2 или а == 2

а = 2 - это "а присвоить 2".
Операторы для "сравнить" и "присвоить" должны быть разными.
В программе чаще используют "присвоить", поэтому "присвоить" - это один знак =
"равно?" - это два знака == подряд.

if - вычислим модуль числа

Надо: x = |x|.

Решение: Если число отрицательное, возьмем -x.

(Никаких "иначе", "если число положительное" и т.п.)

if (x < 0)
    x = -x;

if else - чет/нечет

Надо: Написать четное число (even) или нечетное (odd)

Решение: Проверим, равен ли 0 остаток от деления числа на 2.
Если равен,
то напечатаем EVEN
иначе
напечатаем ODD

if (x % 2 == 0)      // если остаток от деления на 2 равен 0
    printf ("EVEN"); 
else                 // иначе
    printf ("ODD"); 

else if - положительное, отрицательное, ноль

Надо: Написать положительное число, отрицательное или ноль.

Решение: Если число > 0
    напечатать 'положительное'
иначе если число < 0
    напечатать 'отрицательное'
иначе (остался ноль)
    напечатать 'ноль'

Можно написать, отступая внутри каждого if и else еще на одну табуляцию:

if (x > 0)                       // если больше 0
    printf ("положительное");
else                             // иначе меньше или равно 0
    if (x < 0)                   // меньше 0
        printf ("отрицательное");
    else                         // равно 0
        printf ("ноль"); 

Можно расставить отступы по-другому, чтобы подчеркнуть, что это три разных варианта одной и той же характеристики. Для компилятора это будет точно такой же код:

if (x > 0)                    // больше 0
    printf ("положительное");
else if (x < 0)               // меньше 0
    printf ("отрицательное");
else                          // равно 0
    printf ("ноль"); 

Когда что использовать?

Например, напечатаем все характеристики числа:
- большое (если оно больше 10000000)
- четное или нечетное
- положительное, отрицательное или ноль

                             // характеристика: большой
if (x > 1000000) {
    printf ("большое ");
}
                             // характеристика: четное / нечетное 
if (x % 2 == 0) {              
    printf ("четное ");
}
else {
    printf ("нечетное ");
}
                             // характеристика: положительное / отрицательное / ноль 
if (x > 0) {
    printf ("положительное ");
}
else if (x < 0) {
    printf ("отрицательное ");
}
else {
    printf ("ноль ");
}

Краткое содержание

Блоки else и else if не обязательны

if (условие) {                     
    командыДА;
}

if (условие) {                     
    командыДА;
}
else {
    командыНЕТ;
}

if (условие_1) {                     
    командыДА_1;
}
else if (условие_2) {
    командыДа_2;
}
...
else if (условие_N) {
    командыДа_N;
}
else {
    команды_НЕТ;
}

-- TatyanaDerbysheva - 01 Apr 2016