Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
C++ лекции.doc
Скачиваний:
22
Добавлен:
21.04.2019
Размер:
536.06 Кб
Скачать

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 раза, а деление вещественных чисел — достаточно ресурсоемкая задача. Так что выделение лишней переменной является обоснованной мерой.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]