русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Оператор for


Дата добавления: 2015-06-12; просмотров: 1387; Нарушение авторских прав


Оператор цикла for имеет следующий формат записи:

for (init_expression; loop_condition; loop_expression)program statement;

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

Первый параметр init_expression используется для задания начального значения цикла (для задания начальных условий выполнения цикла)

Второй компонент loop_condition определяет условие или условия, в соответствии с которыми будет происходить выход из цикла. Повторение будет происходить до тех пор, пока это условие (или условия) выполняются. Если условие не выполняется, то цикл немедленно заканчивается.

Третий параметр loop_expression выполняется каждый раз, когда заканчивается обработка тела цикла, т.е. program statement (выражение loop_expression модифицирует условия, заданные выражением init_expression).

Чаще всего выражения init_expression и loop_expression являются операторами присваивания или вызовами функций, а второе выражение loop_condition – выражением отношения или логическим выражением.

Любую из трех частей можно опустить, но точки с запятыми должны остаться на своих местах. Если опустить init_expression или loop_expression, то соответствующие операции не будут выполняться. Если же опустить проверку условия loop_condition, то по умолчанию считается, что условие продолжения цикла всегда истинно, и тогда цикл станет бесконечным (произойдет зацикливание)?, т.е. если опущено loop_condition, то по умолчанию вместо него подставляется значение TRUE.

Когда требуется выполнения нескольких утверждений, то они должны заключаться в фигурные скобки, т.е. в блок:

for (init_expression; loop_condition; loop_expression){program1 statement1;program2 statement2;program3 statement3;...}

В представленном случае тело цикла находится в фигурных скобках.



Конструкция цикла, реализованная оператором for, может быть выполнена также и оператором while следующим образом:

init_expression;while (loop_condition){program statement;loop_expression;}

Исключением является применение операции continue.

Циклfor(;loop_condition;) program statement;

с опущенными init_expression, loop_expression эквивалентен циклу

while(loop_condition) program statement;

Цикл

for(;;)program statement;

со всеми опущенными выражениями эквивалентен циклу

while(TRUE) program statement;

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

Операторы отношения перечислены в табл. 6.1.

Таблица 6.1.
Операторы отношения языка программирования С
№ п/п Оператор Значение
1) == Равно
2) != Не равно
3) < Меньше
4) <= Меньше или равно
5) > Больше
6) >= больше или равно

В программах языка С возможно применять вложенные циклы, каждый из которых контролируется своей переменной цикла и своим отношением (второе выражение в круглых скобках оператора for). Вложенные циклы могут идти непосредственно друг за другом или составлять тело цикла с помощью фигурных скобок. Возможно также использование двух индексных переменных для инициализации начала цикла с последующим их инкрементированием (увеличением) или декрементированием (уменьшением).

Несмотря на внешнее сходство с итеративными циклами for языков Паскаль и Ада или итеративными циклами do языков Фортран или ПЛ/1, цикл for языка Си не является их семантической копией. Цикл for языка Си обладает большей общностью, чем циклы for и do других языков. В отличии от этих циклов, в общем случае число итераций в цикле for языка Си не может быть определено до выполнения этого цикла.

Цикл for и его альтернатива цикл while семантически почти эквивалентны, но, как указывается в работе (Ritchie, D.M. 1980. The Programming Language - Reference Manual/. AT&T Bell Laboratories, Murray Hill, N.J. 07974), не идентичны. Например, рассмотрим случай, когда оператор program statement является оператором continue или составным оператором, содержащим оператор continue. Действие оператора continue состоит в переходе к концу цикла, что имеет различные последствия для цикла for и его эквивалента в форме цикла while. В случае с циклом for выражение loop_expression выполняется до вычисления значения выражения loop_condition, в то время как в эквивалентном цикле while выражение loop_expression пропускается.

Гибкость конструкции for - следствие способа использования выражений в спецификации цикла. Существует много возможностей применения цикла for, некоторые из которых мы приведем ниже.

  1. Можно применять операцию увеличения для счета в порядке возрастания:
Нахождение произведения чисел от 1 до 10 или 10!float pr=1;for(n=1; n<11; n++)pr*=n;printf("10!=%f0.0",pr);
  1. Можно применять операцию уменьшения для счета в порядке убывания вместо счета в порядке возрастания:
for(n=10; n>0; n--)printf("%d секунд!\n",n);printf("Пуск! \n");
  1. При желании можно вести счет двойками, десятками и т.д.:
for (n=2; n<60;n+=13);printf("%d\n",n);
  1. Можно вести подсчет с помощью символов, а не только чисел:
for(ch = 'a';ch<='z';ch++)printf("Величина кода ASCII для %с равна %d.\n",ch,ch);

При выполнении этого оператора будут выведены на печать все буквы от а до z вместе с их кодами ASCII. Этот оператор работает, поскольку символы в памяти машины размещаются в виде чисел, и потому в данном фрагменте ведется счет с использованием целых чисел.

  1. Можно проверить выполнение некоторого произвольного условия, отличного от условия, налагаемого на число итераций. Рассмотрим пример в программе печатающей таблицу кубов целых чисел:
/* таблица кубов */main( ){ int num; for(num=1; num<=6; num++) printf("%5d %5d\n", num,num*num*num);}

А теперь заменим спецификацию

for(num=1; num<=6; num++)

на

for(num=1; num<6; num++)

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

  1. Можно сделать так, чтобы значение некоторой величины возрастало в геометрической, а не в арифметической прогрессии, т.е. вместо прибавления фиксированного значения на каждом шаге цикла выполнялось бы умножение:
for(x=100.0; x<150.0; x*=1.1)printf("Ваш долг теперь %3.2f.\n",x);

В этом фрагменте программы значение переменной x умножается на 1.1 на каждом шаге цикла, что увеличивает ее на 10%. Результат выглядит следующим образом:

Ваш долг теперь 100.00.Ваш долг теперь 110.00.Ваш долг теперь 121.00.Ваш долг теперь 133.10.Ваш долг теперь 146.41.
  1. В качестве третьего выражения можно использовать любое правильно составленное выражение. Какое бы выражение мы ни указали, его значение будет меняться при каждой итерации:
for (x=y=1; y<=75; y=5*x++)printf("%10d %10d\n",x,y);

Обратите внимание, что в спецификации цикла проверяется значение y, а не x. В каждом из трех выражений, управляющих работой цикла for, могут использоваться любые переменные.

! Хотя этот пример и правильный, он не может служить иллюстрацией хорошего стиля программирования. Программа выглядела бы гораздо понятнее, если бы мы не смешали процесс изменения переменной цикла с алгебраическими вычислениями.
  1. Можно даже опустить одно или более выражений, но при этом нельзя опустить символы "точка с запятой". Тело цикла
for(;;) { ...}

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

  1. Первое выражение не обязательно должно инициализировать переменную. Вместо этого, например, там мог бы стоять оператор printf( ). Необходимо помнить только, что первое выражение вычисляется только один раз перед тем, как остальные части цикла начнут выполняться.
for(printf("Запоминайте числа! \n"); num != 6;)scanf("%d",&num);printf("Это как раз то, что я хочу!\n");

В этом фрагменте первое сообщение оказывается выведенным на печать один раз, а затем осуществляется прием вводимых чисел до тех пор, пока не поступит число 6.

  1. Параметры, входящие в выражения, находящиеся в спецификации цикла, можно изменить при выполнении операций в теле цикла. Предположим, например, что у вас есть цикл со спецификацией следующего вида:
for(n=1; n<1000; n+t)

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

Подведем итоги. В операторе for используются три выражения, управляющие работой цикла. Они разделены символом "точка с запятой". Инициализирующее выражение вычисляется только один раз до начала выполнения какого-нибудь из операторов цикла. Если проверяемое выражение оказывается истинным, или не равным нулю, тело цикла выполняется один раз. Затем вычисляется величина корректируемого выражения, и значение проверяемого выражения определяется вновь. Оператор for - это цикл с предусловием. Решение о том, выполнить ли в очередной раз тело цикла или нет, принимается до начала его прохождения. Поэтому может случиться так, что тело цикла не будет выполнено ни разу. Оператор, образующий тело цикла, может быть как простым, так и составным.

Операция "запятая" увеличивает гибкость использования цикла for, позволяя включить в его спецификацию несколько инициализирующих или корректирующих выражений.



<== предыдущая лекция | следующая лекция ==>
Оператор while | Оператор do–while


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.367 сек.