Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

оператор выбора while

Работа добавлена на сайт samzan.net: 2016-03-13

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 20.5.2024

switch

Это еще один вид оператора условия ( выбора ). Его лучше использовать если, допустим, нам надо вывести дни недели, т.е. когда у нас не одно, а множество условий выбора. Поэтому буду называть эту структуру - оператор выбора while. Вот его синтаксис:

switch( определенное значение) {
   case значение1: //тело
      break;
   ...
   ...
   case значениеN: //тело
      break;
   default: // тело
}

  1.  определенное значение

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

  1.  case

Таких операторов выбора case может быть очень много, так как это просто различные варианты значений. Но работать будет именно тот оператор case, который будет равен нашему "определенному значению"

  1.  default

Оператор выбора default будет выполняться, если ни один из операторов выбора case не содержит нужного числа. Т.е. если ничего не совпало с "определенным значением", то будет выполняться оператор по умолчанию - default. Да, и двоеточие в конце операторов case значение: и default: являются обязательными

  1.  break

Оператор break является своего рода остановкой выполнения условия, т.е. с помощью него мы сразу же завершаем выполнение нашего оператора выбора и дальше продолжаем выполнение программы.

Но вы можете не доумевать; зачем пользоваться оператор break, когда оператор выбора и без него сам завершит свою работу. Это ж даже не цикл, здесь необязательно, как бы принудительно, завершать процесс, но есть одно но. И это Но давайте рассмотрим на примере:

int znachenie = 1;
switch( znachenie ) {
   case 1:
      printf("Значение 1");
   case 2:
      printf("Значение 2");
   default:
      printf("Другое значение!");
}

По логике, да и по выше описанному материалу, на экране должно появиться сообщение: Значение 1. Но так как мы взяли и опустили оператор break, то на экране появится: Значение 1 Значение 2 Другое значение.

Т.е. из-за того, что нет оператора прерывания,
оператор ( функция ) выбора switch, найдя нужное значение в операторах case, далее будет выполняться все подряд. Поэтому не забывайте вставлять в противовес каждому оператору case оператор break

Так же надо отметить, что в качестве определенно значения могут использоваться и символы, это не запрещено, только надо их брать в одинарные кавычки. Например: 'd'

Теоретическая часть

Часто в программах необходимо произвести выбор одного из нескольких вариантов дальнейших действий. Это можно сделать, используя конструкцию if - else - if - ... - else, но во многих случаях оказывается более удобным применять оператор switch.

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

    {

     case константа1:

                                     операторы 

     case константа2:

                                     операторы

      . . .

     default:

                                     операторы

     }

Выражение в скобках должно быть целого типа (можно использовать символьные константы, так как их тип целый). Выражение вычисляется и сравнивается с различными константами, записанными после меток case. Допускается использование констант целого или символьного типа или константных выражений указанных типов (например, 5, 'a', 2048/512). Переменные или вызовы функций использовать нельзя. Если подходящая константа найдена, вычисления продолжаются с оператора, следующего за меткой case, соответствующей этой константе. Затем выполняются все последующие операторы вплоть до появления оператора break или завершающей оператор switch фигурной скобки }. Метки case могут располагаться в любом порядке, но значения соответствующих констант должны быть различными.

Сравним использование операторов switch и if:

switch (num)     

    {            

     case 1:    оператор1;   

                    break;             

     case 10:  оператор2;   

                    оператор3;      

                    break;          

     case 100: оператор4;   

                     break;          

    default:      printf ("Error\n");  

                     break;

     }

     

   if (num == 1)

       оператор1;

   else

       if (num == 10) {

            оператор2;

     оператор3;

            }

        else

     if (num == 100)

                 оператор4;   

            else

                 printf ("Error\n");

  

При использование оператора switch константы четко выделены, в противоположность операторам if - else, где они разбросаны по тексту. Разница в удобочитаемости возрастает с увеличением числа анализируемых случаев.

Switch, case, default и break - ключевые слова. Оператор break вызывает немедленный выход из оператора switch. Распространенная ошибка состоит в пропуске оператора break, когда необходим выход из оператора switch.

Метка default может отсутствовать. Если же она есть и среди указанных констант не найдено подходящей, управление передается операторам, следующим за меткой default. Если метка default отсутствует и среди указанных констант не найдено подходящей, оператор switch пропускается.

Если значение в операторе switch совпадает с одной из констант, вычисления продолжаются после соответствующей метки. Последующие операторы выполняются до тех пор, пока не встретится оператор break, не зависимо от того, предшествуют этим операторам какие-либо метки case. Говорят, что выполнение "проваливается", если не встретился оператор break.

Пример демонстрирует особенность оператора switch:

input = getchar ();

switch (input) {

  case 'a':

  case 'A': add_record ();

                 break;

  case 'd':

  case 'D': find_record ();

                 delete_record ();

                 break;

  case 'u':

  case 'U': find_record ();

                 query_ change ();

                 change _record ();

                 break;

default:      printf ("Illegal choice\n");

                 break;

}

Когда требуется использовать оператор switch, а когда конструкцию else-if? Нельзя применять оператор switch, когда выбор вариантов основан на вычислении значения переменной или выражения типа float. Удобного способа применить оператор switch в случае, когда возможные значения переменной попадают в некоторый диапазон, также не существует. Проще написать, например, так:

if (integer < 1000 && integer > 2)

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

Конструкция switch заменяет собой сразу несколько if.

Это — более наглядный способ сравнить выражение сразу с несколькими вариантами.

Синтаксис

Выглядит она так:

switch(x) {

  case 'value1':  // if (x === 'value1')

    ...

    [break]

 

  case 'value2':  // if (x === 'value2')

    ...

    [break]

 

  default:

    ...

    [break]

}

  1.  Переменная x проверяется на строгое равенство первому значению value1, затем второму value2 и так далее.
  2.  Если соответствие установлено — switch начинает выполняться от соответствующей директивы case и далее, до ближайшего break (или до конца switch).

При этом case называют вариантами switch.

  1.  Если ни один case не совпал — выполняетcя (если есть) вариант default.

Пример работы

Пример использования switch (сработавший код выделен):

   

var a = 2+2;

 

switch (a) {

  case 3:

    alert('Маловато');

    break;

  case 4:

    alert('В точку!');

    break;

  case 5:

    alert('Перебор');

    break;

  default:

    alert('Я таких значений не знаю');

}

Будет выведено только одно значение, соответствующее 4. После чего break прервёт выполнение.

Если его не прервать — оно пойдёт далее, при этом остальные проверки игнорируются.

Например:

   

var a = 2+2;

 

switch (a) {

  case 3:

    alert('Маловато');

  case 4:

    alert('В точку!');

  case 5:

    alert('Перебор');

  default:

    alert('Я таких значений не знаю');

}

В примере выше последовательно выполнятся три alert.

alert('В точку!');

alert('Перебор');

alert('Я таких значений не знаю');

В case могут быть любые выражения, в том числе включающие в себя переменные и функции.

Например:

   

var a = 1;

var b = 0;

 

switch(a) {

  case b+1:

    alert(1);

    break;

 

  default:

    alert('нет-нет, выполнится вариант выше')

}

Группировка case

Несколько значений case можно группировать.

В примере ниже case 3 и case 5 выполняют один и тот же код:

   

var a = 2+2;

 

switch (a) {

  case 4:

    alert('Верно!');

    break;

 

  case 3:                    // (*)

  case 5:                    // (**)

    alert('Неверно!');

    break;

 

  default:

    alert('Я таких значений не знаю');

}

При case 3 выполнение идёт со строки (3) и идёт вниз до ближайшего break, таким образом проходя и то, что предназначено для case 5.

Важность: 5

Напишите if..else, соответствующий следующему switch:

switch (browser) {

  case 'IE':

    alert('О, да у вас IE!');

    break;

 

  case 'Chrome':

  case 'Firefox':

  case 'Safari':

  case 'Opera':

    alert('Да, и эти браузеры мы поддерживаем');

    break;

 

  default:

    alert('Мы надеемся, что и в вашем браузере все ок!');

}

Решение

[Открыть задачу в новом окне]

Тип имеет значение

Следующий пример принимает значение от посетителя.

   

var arg = prompt("Введите arg?")

switch(arg) {

  case '0':

  case '1':

    alert('Один или ноль');

 

  case '2':

    alert('Два');

    break;

 

  case 3:

    alert('Никогда не выполнится');

 

  case null:

    alert('Отмена');

    break;

 

  default:

    alert('Неизвестное значение: ' + arg)

}

Что оно выведет при вводе чисел 0, 1, 2, 3? Подумайте и потом читайте дальше…

  1.  При вводе 0 или 1 выполнится первый alert, далее выполнение продолжится вниз до первого break и выведет второй alert('Два').
  2.  При вводе 2, switch перейдет к case '2' и выведет Два.
  3.  При вводе 3, switch перейдет на default. Это потому, что prompt возвращает строку '3', а не число. Типы разные. Switch использует строгое равенство ===, так что совпадения не будет.
  4.  При отмене сработает case null.

Важность: 4

Перепишите код с использованием одной конструкции switch:

   

var a = +prompt('a?', '');

 

if (a == 0) {

  alert(0);

}

if (a == 1) {

  alert(1);

}

 

if (a == 2 ||  a == 3) {

  alert('2,3');

}

Решение




1. греческим проектом Екатерины II
2. История развития олимпийских игр
3. Книге Ветра.Без знания Путей других школ трудно понять сущность моей школы Ити
4. Экологическое Содружество www
5. Художественное конструирование из бумаги
6. слияние присоединение разделение выделение преобразование
7. давність своєчасно
8. Лабораторная работа 3 Применение нейронных сетей Хопфилда Выполнил ст
9. правовой ответственности государств
10. тема геологических процессов в круговороте энергии и вещества в литосфере Методы-прямые и косвенные-геох
11. генетичного інституту ~Національного центру насіннєзнавства та сортовивчення УААН і в лабораторії селекці.html
12. реферат фільм календар журнал проспект сценарій; підготувати цикл занять з тем які зацікавили б учнів с
13. Вариант 5 Проверил-
14. Общая характеристика процесса научения
15. Сифонокладальный и сарциноидный тип таллома отсутствуют
16. Тема- Язык С - наследие C
17. lovesurfingru-mtue Выпуск 99 Валерия Лукьянова о сыроедении Просмотров- 9341 Интервью с mtue Здравствуйт
18. Разработка демонстрационных программ для применения в процессе преподавания физики.html
19. Утро такое как вечер
20. экономические отношения связанные с формированием распределением и использованием материальных ресурсов