Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab3.doc
Скачиваний:
38
Добавлен:
05.06.2015
Размер:
250.37 Кб
Скачать

Операторы break и continue.

Оператор break используется для прерывания текущей итерации и выхода из цикла, breakпередает управление оператору, следующему за последним оператором тела цикла. Если циклы вложенные, то он обеспечивает прекращение выполнения самого внутреннего из них. Подчеркнем, что break нельзя использовать для выхода из нескольких вложенных циклов, а составной оператор, состоящий из двух операторов break, эквивалентен одному break. Для выхода из вложенных циклов используйте оператор goto.

Оператор break также может быть использован для прерывания оператора switch.

Оператор continue прерывает текущую и передает управление на следующую итерацию цикла, отсекая операторы, следующими за ним. Также как и оператор break, он прерывает самый внутренний из вложенных циклов.

Пример: В примере проводится подсчет суммы нечетных значений, начиная от 1 до k. Оператор % (деление по модулю) дает остаток от деления двух операндов, таким образом, результат равный 0 всегда получается, если первый операнд кратен второму. В примере оператор проверяет число a на четность, если число четное, то оно без остатка делится на 2, управление передается на очередной проход цикла, в противном случае подсчитывается сумма.

#include <iostream.h>

#define k 5

int main()

{ int a,sum=0;

for (a=1; a<=k; a++)

{ if (a%2==0) continue;

sum=sum+a; // или sum += a;

}

cout<<"sum="<<sum<<endl;

return 0;

}

Оператор безусловного перехода goto

Использование оператора goto всегда вызывало много споров, многие опытные практики программирования не рекомендуют его использовать, так как он затрудняет понимание программ, а также их модификацию.

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

Оператор безусловного перехода имеет вид :

goto метка;

Примеры программирования.

Пример1.: Просуммировать целые числа (через одно число) пока сумма <100 начальное число ввести с клавиатуры.

#include <windows.h>

#include <stdio.h>

void main()

{ char msg[80]; // буфер для русификации

int summa=0, x;

CharToOem("Суммирование чисел через два\n\

(пока сумма < 100)\n****************************\n",msg);

printf(msg);

CharToOem("Введите начальное число ->",msg);

printf(msg);

scanf("%d",&x);

CharToOem("Слагаемые :\n",msg);

printf(msg);

while (summa<100)

{ summa=summa+x; // или summa += x;

printf("%d\n",x);

x = x+2; // или x+=2;

}

CharToOem("\nСумма = %d\n",msg);

printf(msg,summa);

}

Ту же самую задачу можно решить с применением оператора for()

#include <windows.h>

#include <stdio.h>

void main()

{ char msg[80]; // буфер для русификации

int summa,x;

CharToOem("Суммирование чисел через два\n\

(пока сумма < 100)\n****************************\n",msg);

printf(msg);

CharToOem("Введите начальное число ->",msg);

printf(msg);

scanf("%d",&x);

CharToOem("Слагаемые :\n",msg);

printf(msg);

for(summa=0; summa<100; x+=2)

{ summa+=x; //summa=summa+x;

printf("%d\n",x);

}

CharToOem("\nСумма = %d\n",msg);

printf(msg,summa);

}

Пример 2: Вычислить квадраты чисел от 1 до 9.

Это так называемый цикл со счетчиком (i – счетчик цикла).

#include <windows.h>

#include <stdio.h>

void main()

{ int i,b;

char msg[80]; // буфер для русификации

CharToOem("Вычисление квадратов чисел от 1 до 9\n\

------------------------------------\n",msg);

printf(msg);

for (i=1; i<10; i++)

{ b=i*i;

printf("x=%d\tx*x=%d\n",i,b);

}

}

Пример 3: Ввести с клавиатуры x и y, суммировать ряд чисел начиная от x с шагом y пока сумма меньше К, подсчитать количество итераций суммирования. Повторять процесс ввода x, y и суммирования пока х находится в диапазоне от A до B, если число итераций больше 10, прервать вычисление суммы.

Алгоритм решения данной задачи содержит два вложенных цикла. Во внешнем цикле проверяется условие, при котором начинается процесс суммирования (х должен быть в диапазоне A…B). Во внутреннем цикле проводится суммирование. Обратите внимание на то, что из внутреннего цикла можно выйти в двух случаях :

  • естественное завершение цикла (сумма превысила K);

  • если количество итераций превысило 10 (завершение по break).

Данная задача дает пример разветвленного алгоритма, когда различие во вводимых данных приводит к различию в реакции программы. В этом случае программа должна максимально комментировать свои действия, помогая человеку корректно вводить данные и делать выводы.

#define A 10

#define B 1000

#define K 200

#include <windows.h>

#include <stdio.h>

void main()

{

char msg[80];

int x,tx,y,i,sum;

CharToOem("\nСуммирование натурального ряда чисел\n",msg);

printf(msg);

CharToOem("(суммировать пока сумма < 200)\n\

---------------------------------------------",msg);

printf(msg);

CharToOem("\n Введите начальное значение для суммирования :",msg);

printf(msg);

scanf("%d",&x); // ввод данных с клавиатуры

while (x>A && x<B )//цикл продолжается, если х находится в заданном диапазоне

{

CharToOem("\n Введите шаг суммирования :",msg);

printf(msg);

scanf("%d",&y); // ввод данных с клавиатуры

printf("\n--------------------------------------------------");

CharToOem("\nСлагаемые :\n",msg);

printf(msg);

for (i=1,sum=0,tx=x; sum<K; tx+=y, i++)

{ // вложенный цикл

printf ("%d\n",tx);

sum += tx;

if (i>10) // полная форма записи (i>10)!=0

{

CharToOem("Количество итераций cуммирования>10!!!\n",msg);

printf(msg);

break; // выход из цикла for

}

}

CharToOem("sum=%d\tКоличество итераций суммирования=%d",msg);

printf(msg,sum,i);

printf("\n--------------------------------------------------");

CharToOem("\n Введите начальное значение для суммирования :",msg);

printf(msg);

scanf("%d",&x);

}

CharToOem("\n Начальное значение для суммирования должно быть в диапазоне 10..1000\n",msg);

printf(msg);

}

Поскольку начало суммирования, вводимое с клавиатуры, используется двояко (для проверки условия выхода из внешнего цикла и для суммирования), необходимо ввести две переменные (x, tx).

При выполнении условия (i>10) завершится выполнение только внутреннего цикла for, а выполнение внешнего цикла while продолжится.

Пример: В программе осуществляется преобразование десяти значений температуры, находящихся в пределах от 1 до 100 (преобразование температуры по Фаренгейту в температуру по Цельсию). Значения вводятся с клавиатуры. Если оператор ошибся более 5 раз, происходит аварийное завершение программы (Выход сразу из нескольких вложенных циклов).

#include <windows.h>

#include <stdio.h>

int main()

{

char msg[80];

int temp, count, errc=0;

double celsius;

CharToOem("Перевод температуры по Фаренгейту в температуру по Цельсию\n\

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",msg);

printf(msg);

for (count = 1; count <= 10; count++)

{

CharToOem("Введите значение температуры от 1 до 100\n\

(значение по Фаренгейту): ",msg);

printf(msg);

scanf("%d", &temp);

while (temp < 1 || temp > 100)

{

if (errc<5)

{

CharToOem("Повторите ввод, ошибка №%d ",msg);

printf(msg,errc);

scanf("%d", &temp);

errc++;

}

else

goto ex0;

}

celsius = (5.0 / 9.0) * (temp - 32);

CharToOem("%d градусов по Фаренгейту соответствует %6.2f градусов по\

Цельсию\n",msg);

printf(msg,temp, celsius);

CharToOem("------------------------------------------------------------\n",msg);

printf(msg);

}

CharToOem("\nНормальное завершение \n",msg);

printf(msg);

return 0;

ex0: CharToOem("\nАварийное завершение : оператор ошибся более 5\ раз!!!\n",msg);

printf(msg);

return 1;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]