МБУ ДО «Дворец детского творчества»
Си/С++. Условный оператор
Панченко Надежда Петровна,
педагог дополнительного образования
г. Дзержинск, Нижегородская обл., 2019 г .
Меню:
- Условный оператор;
- Структура выбора switch .
Условный оператор if…else
Инструкция if используется для выбора одного из двух направлений дальнейшего хода программы.
Полная форма имеет вид:
if (выражение ) оператор1 ; [ else ]
- Сначала выполняется выражение . Если значение выражения истинно ( не = 0 ), то выполняется оператор1 . Если значение выражения ложно, то выполняется .
- Значение выражение должно быть заключено в скобки ( ). Это связано с приоритетом операций.
- Перед else ставиться « ;».
- Если оператор1 или оператор2 включает в себя несколько операторов, то они д.б. заключены в скобки { }.
if (a b) {a=c-b; b=2*a+b;} else {a=b-4*a; b=c+a;}
Операции отношения
Математика
СИ
+
+
-
-
=
=
=
==
!=
И
&&
ИЛИ
||
НЕ
!
Задача 1. Найти наибольшее из двух чисел. Ввод данных через клавиатуру .
#include
#include
main ()
{ int a,b;
printf(" Задай 2 числа через пробел : ");
scanf("%d %d",&a,&b);
if (ab) printf(" Большее число %d",a);
else printf("Большее число %d",b);
getch();
}
Задача 2. Найти наименьшее из 3-х чисел .
Применение конструкции if...else
#include
#include
#include
#include
main()
{
int x;
cout x;
if( x 100 ) cout , чем 100\n";
else cout
getch () ;
}
Оператор перехода goto
Метка оператора имеет смысл только для оператора goto.
Синтаксис:
goto метка
……… … …
.метка : оператор
.метка : - М1:, m1: met1:, RM: exit: и т.д.
Область действия метки ограничивается функцией, в которой она определена; из этого следует:
- каждая метка должна быть отлична от других меток в той же самой функции; нельзя передавать управление по оператору goto в другую функцию; по метке можно войти в блок, тело цикла, условный оператор, оператор-переключатель; нельзя с помощью оператора goto передавать управление на конструкцию case и default в теле переключателя.
- каждая метка должна быть отлична от других меток в той же самой функции;
- нельзя передавать управление по оператору goto в другую функцию;
- по метке можно войти в блок, тело цикла, условный оператор, оператор-переключатель;
- нельзя с помощью оператора goto передавать управление на конструкцию case и default в теле переключателя.
Задача 3 . Определить, принадлежит ли число с , заданному интервалу [ a..b ]. проверять а .
Ввод данных через клавиатуру.
#include
#include
main ()
{
int a,b,c;
M1: printf("Задай интервал и число: ");
scanf("%d %d %d",&a,&b,&c);
if (ab) goto M1;
if ((ca) && (c
else printf("Не принадлежит");
getch();
}
Задача 4 . Интервал и число задавать случайными числами.
Задача 5 . Если числа равны возвести их в квадрат, не равны – найти сумму и произведение.
#include
#include
#include
main ()
{
int a,b,s,p;
printf ("Задай 2 числа через пробел: ");
scanf ("% d % d ",& a ,& b );
if (a==b) {s=a*a;printf(" квадрат : %d",s);}
else {s=a+b;p=a*b; printf(" сумма : %d произведение : %d",s,p);}
printf("\n Задай 2 числа : "); scanf("%d %d",&a,&b);
if (a!=b) {s=a+b;p=a*b; printf(" сумма : %d произведение : %d",s,p);}
else {a*=a;printf(" Квадрат : %d",a);}
getch();
}
Тернарная операция ?
Для более компактной записи структуры выбора if / else применяется тернарная операция ? и : .
Общий вид операции следующий:
Выражение1 ? выражение2: выражение3;
Операция выполняется следующим образом:
вычисляется выражение1 , если оно истинно, то выполняется выражение2 , иначе выполняется выражение3 , например:
if (k5) m = 10; else m = x*y;
if ( xa ) f = sin( x-a ); else f = sin(x);
В тернарном варианте это имеет следующий вид:
m = k 5 ? 10 : x * y ;
f = sin( xa ? x-a : x );
Тернарные операции применяются в тех случаях, когда:
- используется только полная форма условного оператора;
- в одной и другой ветви операции (после символов ? и :) можно указать по одному выражению.
1. Короткие операторы
if( a b ) k = sin( x ); else k = x*x;
if( a b ) k = sin( x );
else k = x * x ;
2. Группы коротких операторов
if( a b ) { ... } else {... }
if( a b ) { ... }
else { ... }
или
if ( ... )
{ ..... }
else
{ ..... }
3. Длинные группы операторов
if (... )
{
.
.
.
}
else
{
.
.
.
}
4. Множественный выбор
if ( a == 6 ) { ... }
else if ( a == 8 ) { ... }
else if ( a == 15 ) { ... }
else if ( a 20 && a
else { ... }
Множественный выбор.
Оператор переключения
Структура выбора switch
Структура выбора switch
Общая структура выбора имеет вид:
с har k; // k - тип с har
switch(k)
{
Case const1: { операция 1; .. ; операция N} break;
Case const2: { операция 1; .. ; операция N} break;
……………… .
Case constN: { операция 1; .. ; операция N} break;
default: { операция 1; .. ; операция N} break;
}
Выражение, записываемое после ключевого слова switch в скобках, м.б. целого, символьного или перечисляемого типа. Можно указывать целую или символьную константу. Выполнение происходит следующим образом:
- определяется значение k;
- сравнивается с 1-й константой на строгое равенство , затем со 2-й и т.д.;
- если произошло совпадение, то выполняется последовательность операторов, заключённых в {} скобки. . {} скобки можно не ставить, если присутствует 1 оператор;
- затем команда break передаёт управление оператору, следующему за switch ;
- в случае отсутствия совпадение управление передаётся оператору default (умолчание). Если этой метки нет, то при отсутствии совпадений ничего не выполняется. Эта метка необязательна.
- Основная особенность оператора switch – обязательность break для пропуска остальных ветвей.
Пример 1
Допускается использовать несколько констант для пометки одной группы операторов, например
case 2 :
case 4 :
case 8 : f = sin(x); break;
Если группа операторов не завершается оператором break, то будут выполняться все последующие операторы независимо от наличия case с константами до ближайшего break или другого оператора, прерывающего естественную последовательность действий. Иными словами ключевое слово case с константой надо рассматривать как метку для передачи управления.
Пример 2
В следующем операторе:
switch( ch )
{
case 'A' :
case 'B' : x++;
case 'C' :
case 'D' : f = sin(x); break;
case 'E' : f = cos(x); break;
}
будет вычислено:
f=sin(x+1), при ch = 'A' или 'B' ;
f=sin(x ), при ch = 'C ' или 'D' ;
f=cos(x), при ch = 'E'.
Пример 3
Можно объединять ветви, через список значений, перечисляемые через запятую.
switch (f +k)
{
case 0 : { k ++; break;}
case 3, 8 : { f --; k --; break;}
case 9 :
case 11 : { d = ++ f; break;}
default d = --f;
}
Задача 6. Даны 3 монеты: 1, 5, 10 коп. Написать программу, которая определяет, можно ли набрать заданную сумму, используя только 2 монеты из 3-х.
#unclude
#unclude
main ( )
{
int n;
cin n; // ввод целого числа
switch (n)
{
case 1 + 5 : cout
case 1+10 : cout
case 5+10 : cout
default : cout
}
getch ( ); // задерживает экран
return 0; // завершает программу
}
Задача 7. Калькулятор. Даны 2 числа, получить результат, используя операции: -, +, *, /.
#unclude
#unclude
main ( )
{
char z; int a,b;
cin a b ; // ввод чисел а и b
cin z ; // ввод z – знака операции
switch (z)
{
case ‘-‘ : cout
case ‘+’ : cout
case ‘*’ : cout
case ‘/’ : cout
default : cout
}
getch ( ); // задерживает экран
return 0; // завершает программу
}
Обратить внимание
При использовании оператора switch необходимо внимательно следить за правильностью написания ключевого слова default и за тем, чтобы между ключевым словом case и числовой константой обязательно имелся пробел . В противном случае, эти конструкции будут приняты за правильно записанные метки для оператора goto, и компилятор не выдаст никакой диагностики.
Литература
- Васильев А.В. Программирование на С++ в примерах и задачах. – Москва: Издательство «Э», 2017.
- Динман М.И. С++. Освой на примерах. – СПб: БХВ-Петербург, 2006.
- Подбельский В.В. Язык Си # . Решение задач: учеб. пособие/ - М.: Финансы и статистика, 2014.