Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Тема 3.4 Программирование циклов. Операторы управления.

Поиск

       В Си, как и в Паскале, существуют все три типа операторов цикла: цикл с предусловием, цикл с постусловием и цикл с параметром. Цикл с предусловием. Формат оператора цикла с предусловием: 

while (выражение) оператор;

    Цикл повторяет свое выполнение, пока значение выражения отлично от нуля, т. е. заключенное в нем условие цикла истинно. В качестве примера использования оператора цикла рассмотрим программу вычисления факториала целого положительного числа NL Сопоставим программу решения этой задачи, написанную на Паскале, с программой на Си.

 

 

 

  Обратите внимание на операторы в теле цикла. Конечно, и в Си-программе можно было написать два оператора присваивания, объединив их фигурными скобками. Однако использованный способ записи более лаконичен и более характерен для Си. Этот же самый оператор можно было записать еще короче: F*=i++ 

При практическом использовании этой программы не следует забывать, что факториал — очень быстро растущая функция, и поэтому при определенных значениях N выйдет из диапазона, соответствующего типу long int. Задав для переменной F тип unsigned long, можно сдвинуть эту границу, но этого может оказаться недостаточно. Предлагаем в качестве самостоятельного задания исследовать предельные значения N для двух указанных типов переменной F. Интересно свойство следующего оператора: while (1);

 

      Это бесконечный пустой цикл. Использование в качестве выражения константы 1 приводит к тому, что условие повторения цикла все время остается истинным и работа цикла никогда не заканчивается. Тело в этом цикле представляет собой пустой оператор. При исполнении такого оператора программа будет «топтаться на месте». Рассмотрим еще один пример использования оператора цикла while. Вернемся к задаче итерационного вычисления суммы гармонического ряда: 1 +1/2+1/3+... с заданной точностью. Снова сопоставим программу на Си с программой на Паскале.

 

 

     Файл limits. h, подключаемый препроцессором, содержит определения предельных констант для целых типов данных. В частности, константа с именем INT_MAX равна максимальному значению типа int в данной реализации компилятора. Если для типа int используется двухбайтовое представление, то INT_MAX=327 67. В этом же заголовочном файле определены и другие константы: INT_MIN=-327 68; LONG_MAX=2147483647 И Т.Д. 

   Цикл с постусловием. Формат оператора цикла с постусловием: 

do оператор while (выражение);

 Цикл выполняется до тех пор, пока выражение отлично от Нуля, т.е. заключенное в нем условие цикла истинно. Выход из Цикла происходит после того, как значение выражения станет ложным, иными словами равным нулю. Таким образом, в отличие от оператора repeat... until, используемого в Паскале, где в конце пишется условие выхода из цикла, в операторе do... while в Си в конце пишется условие повторения цикла. В качестве при­ мера рассмотрим программу вычисления N1, в которой используется цикл с постусловием, и сопоставим ее с аналогичной программой на Паскале.

 

 

  Выражение 1 выполняется только один раз в начале цикла. Обычно оно определяет начальное значение параметра цикла (инициализирует параметр цикла). Выражение 2 — это условие выполнения цикла. Выражение 3 обычно определяет изменение параметра цикла, оператор — тело цикла, которое может быть простым или составным. В последнем случае используются фигурные скобки. 

   Алгоритм выполнения цикла for представлен на блок-схеме на рис. 32.

 

 

 В следующем примере инициализирующая часть вынесена из оператора for:   

                                                                                                          

 

  Ниже показан еще один вариант вычисления N1. В нем на месте тела цикла находится пустой оператор, а вычислительная часть внесена в выражение 3. for(F=l,i=l;i<=N;F=F*i,i++); Этот же оператор можно записать в следующей форме: for(F=l,i=l;i<=N;F*=i++); 

    В языке Си оператор for является достаточно универсальным средством для организации циклов. С его помощью можно программировать даже итерационные циклы, что невозможно в Пас­ кале. Вот пример вычисления суммы элементов гармонического ряда, превышающих заданную величину е: for(n=l,S=0;1.0/n>eps && n<INT_MAX;n++) S+=1.0/n; И наконец, эта же самая задача с пустым телом цикла: for(n=l,S=0;1.0/n>eps && n<INT_MAX;S+=l.0/n++); Следующий фрагмент программы на Си++ содержит два вложенных цикла for.

В нем запрограммировано получение на экране таблицы умножения. for(х=2;х<=9;х++) for(y=2;y<=9;y++) cout<<"\n"«x«"*"«y«" = "<<x*y; На экране будет получен следующий результат: 

                                                                 

 

 

     Оператор continue. Если выполнение очередного шага цикла требуется завершить до того, как будет достигнут конец тела цикла, используется оператор continue. Следующий фрагмент про­ граммы обеспечивает вывод на экран всех четных чисел в диапазоне от 1 до 100.

 

 

       Для нечетных значений переменной / остаток от деления на 2 будет равен единице, этот результат воспринимается как значение «истина» в условии ветвления, и выполняется оператор continue. Он завершит очередной шаг цикла, выполнение цикла перейдет к следующему шагу. 

Оператор goto.

       Оператор безусловного перехода goto существует в языке Си, как и во всех других языках программирования высокого уровня. Однако с точки зрения структурного подхода к программированию его использование рекомендуется ограничить. Формат оператора: goto метка; 

        Метка представляет собой идентификатор с последующим двоеточием, ставится перед помечаемым оператором. Одна из ситуаций, в которых использование goto является оправданным — это необходимость «досрочного» выхода из вложенного цикла. Вот пример такой ситуации:

 

 

При использовании оператора безусловного перехода необходимо учитывать следующие ограничения:

• нельзя входить внутрь блока извне; 

• нельзя входить внутрь условного оператора (if...else...);

• нельзя входить внутрь переключателя;

• нельзя входить внутрь цикла.

 



Поделиться:


Последнее изменение этой страницы: 2021-04-05; просмотров: 113; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.219.255.63 (0.006 с.)