Пример задачи для условных операторов в С++

С++Общее задание:

Используя операторы ветвления (if и if … else), составить программу для вычисления составной (сложной) функции, имеющей различный вид на разных участках аргумента. С помощью переключателя (switch) указать на каком отрезке находится введенное с клавиатуры значение аргумента, и вывести значение функции в данной точке.
Все исходные данные, необходимые для проведения вычислений, вводить
с клавиатуры.
Функция и отрезки:

y=pow(x,2);           -2.0<=x<1.0
y=sqrt(x);             1.0<=x<2.0
y=sqrt(x-2)+sqrt(2);   2.0<=x<3.0
y=1+sqrt(x-1);         3.0<=x<=4.0

Пример решения задачи (листинг)

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <conio.h>
void main()
{
/* номер отрезка, def – выбор по умолчанию */
 enum {def,o1,o2,o3,o4} otr;
 float x,y; 

  clrscr();
  printf("Тема: Ветвление программы \n");
  printf(" Задание: Используя оператор if, составить программу \n");
  printf("для вычисления составной функции вида: \n");
  printf("1> sqr(x)              при x от -2.0 до 1.0\n");
  printf("2> sqrt(x)             при x от  1.0 до 2.0\n");
  printf("3> y=sqrt(x-2)+sqrt(2) при x от  2.0 до 3.0\n");
  printf("4> y=1+sqrt(x-1)       при x от  3.0 до 4.0\n");
  printf("указать отрезок, где находится введенный с клавиатуры \n");
  printf("аргумент и вывести значение функции в данной точке. \n"); 

  printf("Введите x=");
  scanf("%f",&x);   printf("\n"); 

  /* Выбор отрезка */
   otr=def;
  if ((x>=-2.0) && (x<1.0))         otr=o1;
    else if ((x>=1.0) && (x<2.0))   otr=o2;
  if ((x>=2.0) && (x<3.0))          otr=o3;
  if ((x>=3.0) && (x<=4.0))         otr=o4; 

  /* Вычисление значения функции */
  switch (otr)
  {
    case o1: y=pow(x,2);           break;
    case o2: y=sqrt(x);            break;
    case o3: y=sqrt(x-2)+sqrt(2);  break;
    case o4: y=1+sqrt(x-1);        break;
    default:  printf("Число вне диапазона."); getch(); exit(1);
  }
  printf ("Промежуток %d: y= %3.2f; ",otr,y);
  getch();
}