Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Оператор цикла с параметром (for) или пошаговый.



Оператор for имеет вид (синтаксис):

for( выражение1; условие; выражение2) оператор
Смысл      
for( начальное значение счетчика условие про­должения цикла изменение счетчика повторяемый оператор (тело цикла)

Любое из выражений в скобках может отсутствовать, однако их разделители “; ” обязательны.

Семантика: оператор for выполняется следующим образом:

1. Вычисляется выражение1 (начальное значение счетчика), если оно есть;

2. Вычисляется условие (условие продолжения цикла);

3. Если оно истинно (¹ 0) или его вообще нет, то

a) Выполняется оператор;

b) Вычисляется выражение2 (новое значение счетчика);

c) Переход к пункту 2.

Иначе - выход из цикла (переход к следующему после for оператору.

Изменение счетчика
Пример 13. Вычислим сумму и произведение чисел от 1 до 8.

p=1; s=0;

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

{ s=s+i;

p=p*i;

}

То же можно написать короче в ущерб читабельности, воспользовавшись операциями “, ”, присваивания и постдекремента:

for(p=1, s=0, i=1; i< =8; s+=i, p*=i++);

В этом примере тело цикла отсутствует, поскольку при вычислении выражения2 изменяются и s, и p, а затем и i.

Пример 14. Напишем оператор задержки продолжения программы до нажатия клавиши “g”.

for(ch=‘A’; ch! = ‘g’; ) ch=getch();

В данном примере отсутствует выражение2, поскольку значение переменной ch изменяется в теле цикла.

Вложенные циклы.

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

Пример 15. Напишем программу печати таблицы умножения.

for(i=1; i< 10; i++) // Для каждой строки i таблицы

{ for(j=1; j< 10; j++) // Для каждого столбца j таблицы

// выводим j*i=произведение j на i

printf(“%d*%d=%2d “, j, i, j*i);

// В конце строки (после цикла по j )

cout < < '\n'; // переход на новую строку

}

Попытайтесь исправить эту программу так, чтобы обойтись тремя операторами (без cout ). Подсказка: использовать условную операцию (? : ).

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

Иногда требуется прекратить выполнение цикла не по результату проверки условия, а другим способом. Это можно сделать оператором break, который вызывает немедленный выход из самого внутреннего из объемлющих его циклов for, while или do, а также оператора switch.

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

summ=0;

While (1)

{ cin > > a;

if (a > = 0)

summ += a;

Else

break;

}

Оператор continue тоже прерывает выполнение операторов тела цикла, однако не заканчивает цикл, а вызывает следующий шаг итерации. Для for это изменение счетчика, а для while или do - проверка условия.

Пример 17. Программа вычисляет сумму только тех чисел, вводимых с клавиатуры, которые положительны. Признаком окончания расчета является ввод числа 0.

summ=0;

While (1)

{ cin > > a;

if (a > 0) // положительное

summ += a;

else if (a < 0) // отрицательное

continue;

else // введено число 0

break;

}

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

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

goto метка;

Он передает управление на оператор, помеченный указанной меткой. Метка - это любой идентификатор, после которого стоит символ ': '. На метку можно перейти из любого места функции, где метка указана. Помечено может быть любое место внутри блока, тела цикла, операторов if (кроме слова else) и switch.

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

Пример 18. Напишем фрагмент подобной конструкции.

for(···) // Внешний цикл

{ for(···) // Внутренний цикл

{ ········· // тело внутреннего цикла

if (···) // если нужно выйти из всех циклов

goto label; // выход на верхний уровень

}

}

·········

label: ········· // обработка досрочного выхода

Использование массивов. Указатели.

Массивы.


Поделиться:



Популярное:

Последнее изменение этой страницы: 2016-07-14; Просмотров: 500; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.016 с.)
Главная | Случайная страница | Обратная связь