Цикл с постусловием.
Занятие №5 Программирование циклов В Си существуют все три типа операторов цикла: цикл с предусловием, цикл с постусловием и цикл с параметром. Цикл с предусловием.
Формат оператора цикла с предусловием: while (выражение) оператор; Пример записи программы: Пример №1 int a=0; while (a<10) { a=(a+1)*2; }
int x;
x = 50;
while (x > 0) { x = x - 1; }
В даном примере тело цикла будет повторяться 50 раз, до тех пор пока переменная x будет больше нуля. На каждом шаге цикла x будет уменьшаться на 1. Когда x станет равным нулю, цикл прекратится. Цикл повторяет свое выполнение, пока значение выражения отлично от нуля, т. е. заключенное в нем условие цикла истинно. В качестве примера использования оператора цикла рассмотрим программу вычисления факториала целого положительного числа N!. Сопоставим программу решения этой задачи написанную на Паскале, с программой на Си. Пример 2. Программа на Паскале Program Faktorial; Var F: Longint; i,N:Integer; Begin write (‘N’); ReadLn(N); F:=l; i:=l; While i≤N Do Begin F:=F*i;i:=i+1 end; WriteLn(N,’!=’,F) End.
Программа на Си++ // Программа вычисления факториала #include <iostream.h> void main () { long int F; int i,N; cout<<"N="; cin>>N; F=i=l; while(i<=N) F=F*i++; cout<<”\n"<<N<<"!="<<F; } Обратите внимание на операторы в теле цикла. Конечно, и в Си-программе можно было написать два оператора присваивания, объединив их фигурными скобками. Однако использованный способ записи более лаконичен и более характерен для Си. Этот же самый оператор можно было записать еще короче: F*=i++ При практическом использовании этой программы не следует забывать, что факториал — очень быстро растущая функция, и поэтому при определенных значениях N выйдет из диапазона, соответствующего типу long int. Задав для переменной F тип unsigned long, можно сдвинуть эту границу, но этого может оказаться недостаточно. Предлагаем в качестве самостоятельного задания исследовать предельные значения N для двух указанных типов переменной F. Интересно свойство следующего оператора: while(1); Это бесконечный пустой цикл. Использование в качестве выражения константы 1 приводит к тому, что условие повторения цикла все время остается истинным и работа цикла никогда не заканчивается. Тело в этом цикле представляет собой пустой оператор. При исполнении такого оператора программа будет «топтаться на месте». Рассмотрим еще один пример использования оператора цикла while. Вернемся к задаче итерационного вычисления суммы гармонического ряда: 1 + 1/2+1/3+... с заданной точностью е. Пример №3 Программа на Си++ / / Сумма //гармонического ряда #include <iostream.h> #include <limits.h> void main () {int n=l; double S=0, eps; cout<<” Точность: “; cin>>eps; while (1. 0/n>eps && n<INT_MAX) S+=1/n++; cout<<”\n Сумма=”<<S; } Файл limits. h, подключаемый препроцессором, содержит определения предельных констант для целых типов данных. В частности, константа с именем int_max равна максимальному значению типа int в данной реализации компилятора. Если для типа int используется двухбайтовое представление, то INT_MAX=32767. В этом же заголовочном файле определены и другие константы: INT_MIN=-32768; LONG_MAX=2147483647 И Т.Д. Пример № 4 #include <stdio.h> int main() { int i=0; // объявим целочисленный идентификатор и присваиваем ему значение ноль while(i<5) // выполняем цикл while до тех пор пока i<5 { printf("Hello, World!\n"); i++; //увеличиваем значение идентификатора i на единицу. } } Цикл с постусловием. Формат оператора цикла с постусловием:
|