Условные операторы. Операторы if и if-else. Условный оператор ?. Оператор switch

Страницы работы

Фрагмент текста работы

CharToOem("\t\tПрограмма находит решение квадратного уравнениия \n\t\tсо значениями
                                      коэффициентов, введённых пользователем\n\n",S);

cout<<S;

                                   //вывод на экран сообщения об авторе программы

CharToOem("\t\tПрограмму разработал Незнайка\n\n",S);

cout<<S;

double a , b , c ;           //коэффициенты квадратного уравнения

double x1 , x2 ;            //решения квадратного уравнения

double D;                     //дискриминант квадратного уравнения

                                   //ввод значений коэффициентов

cout<<"\t\t\ta = ";cin>>a;

cout<<"\t\t\tb = ";cin>>b;

cout<<"\t\t\tc = ";cin>>c;

if ( a==0 )                      //решение линейного уравнения

{

if( b==0 )

{

if ( c==0 ) { CharToOem("Любое значение\n" , S ) ;      cout<<S ;}

else       { CharToOem("Нет решений\n" , S ) ;           cout<<S ;}

}

else { x1=-b/c ; cout<<"X = "<<x1<<'\n' ; }

}

else                         //решение квадратного уравнения

{

D=a*a-2*a*c;

cout<<"\t\tD = "<<D<<'\n';

if ( D<0 ) { CharToOem ("Нет решений \n" , S ) ; cout<<S ;}

else

{

x1=(-b+sqrt(D))/(2*a);      cout<<"\t\t\tX1 = "<<x1<<'\n' ;

x2=(-b-sqrt(D))/(2*a);       cout<<"\t\t\tX2 = "<<x2<<'\n' ;

}

}

return 0 ;

}

Типичной ошибкой программистов, переходящих на С и C++ является использование в условных конструкциях оператора присваивания вместо оператора сравнения (= вместо ==). Хотя язык С и позволяет производить присвоения в условных операторах, здесь следует быть особенно внимательным - в больших проектах подобные ошибки локализуются с трудом.

Еще одно замечание: часто проверяемое условие представляет собой проверку значения некоторой целочисленной переменной. Если эта переменная принимает ненулевое значение, то результатом вычисления условного выражения будет true, и будет выполнен Оператор1. Если переменная принимает нулевое значение, то результатом вычисления условного выражения будет false, и будет выполнен Оператор2. Поэтому на практике часто встречаются записи вида:

if ( x )  cout<<”X<>0”;          //если x<>0 выводит на экран текст ”X<>0”

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

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

условие ? выражение1 : выражение2;

По аналогии с оператором if, данный условный оператор работает так: если условие приняло истинное значение, выполняется выражение1, а если ложное - выражение2. Обычно возвращаемое значение присваивается какой-либо переменной.

Например, решим задачу нахождения максимума из двух целочисленных переменных:

#include <iostream.h>

void main ()

{

int a = 10 , b = 20 , max ;

max = (a > b) ? a : b ;

cout << max ;

}

Оператор  switch

Еще одной альтернативой управляющей конструкции if-else может служить оператор ветвления switch. Он имеет следующий синтаксис:

switch(выражение)

{

case     Константа1 : группа операторов; [ break ; ]

case     Константа2 : группа операторов; [ break ; ]

[ default  Константа3 : группа операторов; ]

}

Конструкция switch-case представляет собой своеобразный "переключатель". Работает он следующим образом.

На первом этапе анализируется выражение и осуществляется переход к той ветви программы, для которой его значение совпадает с указанным константным выражением. Далее следует выполнение оператора или группы операторов до тех пор, пока не встретится ключевое слово break (происходит выход из тела оператора switch-case) или не будет достигнут конец блока конструкции (соответствующая закрывающаяся фигурная скобка } ). Если значения выражения и константных_выражений, указанных в case, не совпадут ни в одном из случаев, выполнится ветвь программы, определенная с помощью ключевого слова default. Ключевые слова default и break не являются обязательными и зачастую программисты умышленно их опускают.

Подобный прием может в некоторых случаях упростить код программы, однако его следует применять очень аккуратно. Приведенный ниже фрагмент иллюстрирует работу конструкции switch-case. Объявленная символьная переменная Answer служит для приема из входного потока ответа пользователя на вопрос, продолжить ли работу с программой.

#include <iostream.h>

void main ()

{

char Answer ;

cout << "Продолжить работу? " ;

cin >> Answer ;

switch ( Answer )

{

case 'y' :

case 'У :

case 'д' :

case 'Д' : cout << "Продолжим...\n" ; break ;

default : cout << "Завершение...\n" ;

}                                                                         // продолжение работы

}

Как видно из примера, пользователю достаточно выбрать любую из букв у, Y, д, Д, чтобы продолжить выполнение программы, либо нажать любую другую клавишу для завершения.

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

Продолжим... Завершение...

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

Похожие материалы

Информация о работе