- •1. Знакомство со средой программирования
- •2. Создание проекта
- •3. Простейшая программа на c, функция main()
- •3. Подключение дополнительных библиотек, функция printf
- •4. Переменные, типы переменных, литералы
- •5. Форматированный вывод
- •6. Считывание данных с консоли
- •7. Условный оператор if, условные операции.
- •7.1 Оператор else
- •8. Операторы цикла while, do … while, for
- •8.1 Цикл while
- •8.2 Цикл do … while
- •8.3 Цикл for
- •9. Массивы
- •9.1 Объявление массивов
- •9.2 Инициализация массивов
- •9.3 Многомерные массивы
7.1 Оператор else
Кроме простой формы оператора if, которая позволяет в зависимости от истинности условия или выполнить оператор или пропустить его, существует так же форма if-else:
if (условие) оператор_выполняющийся_при_истинном_условии;
else оператор_выполняющийся_при_ложном_условии;
Например, поведение следующих 2 записей будет одинаково:
int var;
if (var > 1) printf("var is greater than 1");
if (var <= 1) printf("var is not greater than 1");
и
int var;
if (var > 1) printf("var is greater than 1");
else printf("var is not greater than 1");
Разница лишь в том, что во втором варианте происходит на одно сравнение меньше. Однако в более сложных случаях (с использованием составных операторов и вложенных условий) использование оператора else становится гораздо более обоснованным.
Рассмотрим программу, которая получает с клавиатуры длины сторон треугольника, и выводит информацию о треугольнике: существует ли он, если да — то какого вида этот треугольник, каковы его площадь и его периметр.
import <math.h>
import <stdio.h>
int main() {
// С клавиатуры вводится длины сторон треугольника.
// Если треугольник существует, на экран выводится площадь
// треугольника. Если треугольник не существует, на экран
// выводится надпись «треугольник со сторонами … не
// существует» и сумма длин двух больших отрезков.
printf("Input 3 triangles legs (floats): ");
double a, b, c;
scanf("%f%f%f", &a, &b, &c);
if (a > 0 && b > 0 && c > 0) {
// В переменную a заносится самая длинная сторона
// треугольника что бы сократить условия
if (b > a) {
double t = a;
a = b;
b = t;
} else
if (c > a) {
double t = a;
a = c;
c = t;
}
// Проверка на существование треугольника с такими сторонами
if (a > b + c) { // Проверка сторон b и c не нужна, тк a — наибольшая
float half_perimeter = (a + b + c) / 2.;
printf("Triangle exists. It's content is %f", sqrt( half_perimeter * ( half_perimeter — a) * ( half_perimeter — b) * ( half_perimeter - c)));
} else {
printf("Triangle {%f %f %f} doesn't exist", a, b, c);
if (c > b)
printf("Bigger legs summ is %f", a + c);
else
printf("Bigger legs summ is %f", a + b);
}
} else {
printf("One of legs is not correct (shoud be greater than zero). You have entered: %f, %f, %f", a, b, c);
}
}
sqrt — это функция нахождения квадратного корня. Эта функция содержится в библиотеке math.h.
Заметьте, что площадь треугольника будет считаться только в том случае, если треугольник с введенными сторонами возможен. Если же он не будет существовать — ветка подсчета и вывода площади не будет выполнена. Более того, если с клавиатуры будет введено неправильное значение (отрицательное или равное нулю), программа не будет даже проверять треугольник на существование, а выполнит ветку else и выведет сообщение об ошибке.
Заметьте также, что в формуле подсчета площади подсчет полупериметра выделен в отдельную переменную. Дело в том, что он вычисляется 4 раза, а деление вещественных чисел — достаточно ресурсоемкая задача. Так что выделение лишней переменной является обоснованной мерой.