Освой самостоятельно С++ за 21 день.
Шрифт:
Особое внимание следует уделить оператору continue в строке 30. Внимательно проанализировав структуру программы, вы заметите, что этот оператор можно опустить, причем работа программы не изменится. Если бы строки с этим оператором не было, выполнялся бы оператор break, затем оператор if и, так как переменная exit содержала бы значение false, запускалась следующая итерация цикла. Использование оператора continue просто позволяет перейти на новую итерацию без проверки значения exit.
Резюме
В
Оператора goto следует по возможности избегать, поскольку он позволяет осуществить переход в любую точку программы, что значительно усложняет ее восприятие и анализ. С помощью оператора continue можно осуществить переход на следующую итерацию цикла while, do...while или for, а break позволяет мгновенно завершить работу цикла.
Вопросы и ответы
Как определить, какой из операторов, if/else или switch, лучше использовать в конкретной ситуации?
Если приходится использовать более двух вложений операторов if, то лучше воспользоваться конструкцией с оператором switch.
Как выбрать между операторами while и do...while?
Если тело цикла должно выполняться хотя бы один раз, используйте цикл do...while. Во всех остальных случаях используйте оператор while.
Как выбрать между операторами while и for?
В тех случаях, когда переменная счетчика еще не инициализирована и ее значение изменяется после каждой итерации цикла на постоянную величину, используйте оператор for. В остальных случаях предпочтительнее while.
В каких случаях лучше использовать рекурсию, а в каких итерацию?
Несомненно, в большинстве случаев итеративный метод предпочтительнее, однако, если один и тот же цикл приходится повторять в разных частях программы, удобнее использовать рекурсию.
Какой из операторов, for(;;) или while(true) работает эффективнее?
Существенного различия между ними нет.
Коллоквиум
В этом разделе предлагаются вопросы для самоконтроля и укрепления полученных знаний и приводится несколько упражнений, которые помогут закрепить ваши практические навыки. Попытайтесь самостоятельно ответить на вопросы теста и выполнить задания, а потом сверьте полученные результаты с ответами в приложении Г. Не приступайте к изучению материала следующей главы, если для вас остались неясными хотя бы некоторые из предложенных ниже вопросов.
Контрольные вопросы
1. Можно ли в цикле for
инициализировать сразу несколько переменных-счетчиков?2. Почему следует избегать использование оператора goto?
3. Можно ли с помощью оператора for организовать цикл, тело которого не будет выполняться?
4. Можно ли организовать цикл while внутри цикла for?
5. Можно ли организовать цикл, который никогда не завершится? Приведите пример.
6. Что происходит при запуске бесконечного цикла?
Упражнения
1. Каким будет значение переменной x после завершения цикла for (int x = 0; x < 100; x++)?
2. Создайте вложенный цикл for, заполняющий нулями массив размером 10x10.
3. Организуйте цикл for, счетчик которого изменяется от 100 до 200 с шагом 2.
4. Организуйте цикл while, счетчик которого изменяется от 100 до 200 с шагом 2.
5. Организуйте цикл do...while, счетчик которого изменяется от 100 до 200 с шагом 2.
6. Жучки: найдите ошибку в приведенном фрагменте программы.
int counter = 0;
while (counter < 10)
{
cout << "counter: " << counter;
}
7. Жучки: найдите ошибку в приведенном фрагменте программы.
for(int counter = 0; counter < 10; counter++);
cout << counter << " ";
8. Жучки: найдите ошибку в приведенном фрагменте программы.
int counter = 100;
while (counter < 10)
{
cout << "counter: " << counter;
counter--;
}
9. Жучки: найдите ошибку в приведенном фрагменте программы.
cout << "Enter а number between 0 and 5: ";
cin >> theNumber;
switch (theNumber)
{
case 0:
doZero;
case 1: // идем дальше
case 2: // идем дальше
case 3: // идем дальше
case 4: // идем дальше
case 5:
doOneToFive;
break;
default:
doDefault;
break;
}
Подведение итогов
Листинг. Итоги первой недели
1: #include <iostream.h>
2: intintboolfalsetrue
3: enum CHOICE { DrawRect = 1, GetArea,
4: GetPerim, ChangeDimensions, Quit} ;
5: // Объявление класса Rectangle
6: class Rectangle
7: {
8: public:
9: // constructors
10: Rectangle(int width, int height);
11: ~Rectangle;
12:
13: // Методы доступа
14: int GetHeight const { return itsHeight; }
15: int GetWidth const { return itsWidth; }
16: int GetArea const { return itsHeight * itsWidth; }
17: int GetPerim const { return 2*itsHeight + 2*itsWidth; }
18: void SetSize(int newWidth, int newHeight);
19:
20: // Прочие методы
21:
22:
23: private:
24: int itsWidth;
25: int itsHeight;