Категории: ДомЗдоровьеЗоологияИнформатикаИскусствоИскусствоКомпьютерыКулинарияМаркетингМатематикаМедицинаМенеджментОбразованиеПедагогикаПитомцыПрограммированиеПроизводствоПромышленностьПсихологияРазноеРелигияСоциологияСпортСтатистикаТранспортФизикаФилософияФинансыХимияХоббиЭкологияЭкономикаЭлектроника |
Switch (целочисленное выражение){ case метка1 : оператор(ы); case метка2 : оператор(ы); … default : оператор(ы); } Встретив ключевое слово switch, программа по значению целочисленного выражения переходит к строке с соответствующей меткой. Так, если целочисленное значение равно 4, то следующим выполняется оператор в строке с меткой case 4. Если целочисленное значение не соответствует ни одной из меток, то программа переходит к строке default. Эта строка не обязательна, если ее опустить, и при этом совпадения с метками не обнаружена, то программа переходит к оператору, следующему за switch. int dvalue; cin>>dvalue; Switch(dvalue) { Case 0: // если dvalue равно нулю, то // ...выполним эту часть программы... Break; // выход из оператора switch Case 1: // если dvalue равно 1, то // ...выполним эту часть программы... break; Case 3: // если dvalue равно 3, то // ...выполним эту часть программы... break; default: // во всех других случаях выполнить: // ... эту часть программы... } В этом примере ввод значения переменной dvalue приводит к выбору соответствующего варианта из списка switch. Оператор break прекращает выполнение switch и передаёт управление следующему за ним оператору. Заметим, что отсутствие оператора break не вызовет возражений компилятора, однако в этом случае будут по порядку выполнены все операторы, следующие за этой строкой, если только явно не указано иное. В С++ такое поведение программы определено умышленно, поскольку это упрощает использование нескольких меток. В следующем примере не делаются различия между строчными и прописными буквами, вводимыми с клавиатуры. char choise; cin>>choise; Switch(choise) { case ’a’: case ’A’: cout<< ” abort”; break; case ’r’: case ’R’: cout<< ” report”; break; default: cout<< ” That’s not a choise”; } Поскольку за меткой case ’a’: отсутствует оператор break, выполнение программы продолжается со следующей строки, с оператора, который расположен сразу после case ‘A’:. Последний оператор default указывает на отрезок кода, который исполняется во всех остальных случаях, когда значение не соответствует ни одному из значений метки. Оператор default не является обязательным. Как видим, и оператор switch, и оператор if else позволяют осуществить выбор из списка альтернативных вариантов. Оператор if else более гибок, в частности он позволяет обрабатывать диапазоны значений. if (age>17 && age<20) code=0; else if (age>=20 && age<35) code=1; else if (age>=35) code=2; Else code=3; Оператор switch не предназначен для обработки диапазонов. Кроме того, значение метки должно быть константой, а вариант метки – целым (включая тип char), поэтому switch не будет обрабатывать вещественные числа. Однако, если возможно, используйте оператор switch, так как это более эффективно с точки зрения скорости выполнения и размера программы. Операторы цикла. Нередко программа вынуждена выполнять повторяющиеся операции, например, вычисление сумм, произведений или многократный вывод текста на экран. Для этих целей в языке C++ используются операторы цикла. Оператор for Следующий листинг показывает, что можно делать с помощью оператора цикла for: #include <iostream.h> Void main() { Int i; // создаем переменную цикла for(i=0; i<5; i++) cout << ”C++ loops\n”; // выполняем до тех пор, пока // i меньше 5 (i<5), после каждой // итерации цикла значение переменной i // увеличивается на единицу (i++) cout << ” Loops stop\n”; return; } Результат работы программы приведен ниже: C++ loops C++ loops C++ loops C++ loops C++ loops Loops stop Как видно, оператор for поэтапно выполняет следующие действия. - Задает начальное значение переменной цикла ( i = 0). - Проверяет условие выполнения цикла (i<5). - Выполняет действия внутри тела цикла, если условие истинно. Как только условие становится ложным – цикл прекращается. - Выполняет операцию над переменной цикла в каждой итерации, в данном случае – это операция инкремента, т.е. увеличения значения переменной на единицу. Тело цикла может содержать несколько операторов, в этом случае они группируются в блок при помощи фигурных скобок. Так, например, может выглядеть программа, которая суммирует вводимые с клавиатуры числа.
#include <iostream.h> Void main() { int aval, sum=0; for(int i=0; i<5; i++) // можно определить переменную цикла здесь { cout << ” input number\n”; cin<<aval; sum = sum + aval; } cout << ” Sum equal ”<<sum; }
Интересно, что условие выполнения цикла не обязательно должно принимать значение истина/ложь, так как в С целочисленное значение равное 0 эквивалентно логическому ложь, а не равное нулю - истина. Таким образом, если значение выражения станет равным нулю, то выполнение цикла прекратится. int limit=4; Int i; // переменную цикла можно определить и вне цикла for (i=limit; i; i--) // закончить цикл когда i=0 cout<<” i= ” <<i;<<”\n”;
В этом примере для изменения переменной цикла используется операция декремента i - -(эквивалентно i = i -1). Изменение шага цикла В приведенных примерах переменная цикла уменьшалась или увеличивалась на единицу. Разумеется, для изменения величины переменной цикла можно использовать любые другие значения шага. // пример: шаг цикла by вводится пользователем #include <iostream.h> Void main() { cout<<” Enter an integer\n ” int by; cin>>by; cout<<” Step is: ”<<by<<”\n”; for(int i=0; i<100; i=i+by) cout << i<<”\n”; } Результат действия этой программы: Enter an integer Step is: 33 Когда значение iстановится равным 132, выполнение цикла прекращается. В качестве обновления переменной можно использовать любое действительное (с синтаксической точки зрения) выражение: i=2*i; i=i*i+1; и т.д. Рассмотренный цикл for является циклом с предусловием, т.е. условие выполнения цикла проверяется перед циклом, и если условие с самого начала является ложным, то программа вообще не выполнит цикла. К такому же типу можно отнести и цикл while. Цикл while. Цикл whileнапоминает собой цикл for без частей инициализации и обновления цикла. while( условие выполнения цикла) Тело цикла; Программа проверяет условие, и если оно истинно (или не равно нулю), выполняется оператор(ы), составляющие тело цикла. После этого программа снова возвращается к проверке условия выполнения цикла и так до бесконечности, если программист не позаботится о некоторых действиях, которые смогут оказать влияние на значение условия продолжения цикла. // этот цикл будет выполняться бесконечно // пока не будет прерван нажатием Ctrl+C int i=10; while(i>0) { cout << ” i= ”<<i<<”\n”; } // а этот цикл выведет на экран 10 значений переменной i int i=10; while(i>0) { cout << ” i= ”<<i<<”\n”; i--; } Условие while(i>0) можно заменить на более лаконичное, но менее наглядное: while(i) .
А вот как с помощью оператора while можно распечатать строку символов: int i=0; char car[20]="abrakadabra"; while(car[i]) { cout<<car[i]; i++; } Выполнение цикла прекратится, как только будет достигнут признак конца строки \0.При этом символы интерпретируются как целые в соответствии со значением их ASCII кода. Цикл do while Третьим типом цикла в С++ является цикл do while. Синтаксис цикла выглядит так: do Тело цикла while (условие продолжение цикла); // обратите внимание // на точку с запятой! От двух предыдущих он отличается тем, что это цикл с постусловием, т.е. сначала выполняется тело цикла, а затем проверяется условие его выполнения. Таким образом, цикл выполняется хотя бы один раз. Цикл с постусловием используется гораздо реже, чем циклы с предусловием, но иногда цикл do whileимеет смысл. // в этом примере программа должна получить число до его проверки #include <iostream.h> Void main() { int n; cout<<”Enter number in the range 1-10”; do { cin>>n; } while(n!=7); cout<<” 7 is my favorite number.\n”; } Операторы break и continue Операторы break и continue позволяют программе пропустить фрагмент кода. В разделе 2.1.4 приводился пример использования break в операторе switch. Использование его в операторах цикла приводит к такому же эффекту – переходу к оператору, следующему за оператором цикла. Оператор continue используется в циклах и вызывает новую итерацию цикла. В приведенных ниже листингах показан вариант использования обоих операторов. // в этом примере программа суммирует только четные числа. // ноль – признак окончания ввода #include <iostream.h> Void main() { int n, sum=0; cout<<" Enter integer number. To stop enter 0\n"; do { cin>>n; if (n%2!=0) |
|
Последнее изменение этой страницы: 2016-07-22 lectmania.ru. Все права принадлежат авторам данных материалов. В случае нарушения авторского права напишите нам сюда... |