Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
книги / 277.pdf
Скачиваний:
9
Добавлен:
07.06.2023
Размер:
1.06 Mб
Скачать

#include <stdio.h> #include <conio.h> void main ()

{

int i;

float e, //Точность вычисления ряда k,//Очеpедной член pяда

sum = 0; //Сумма pяда i= 1;

printf ( «Введите точность:» ); scanf ( «%f», &e );

k = 1.0/i; while ( k > e )

{

sum = sum+k; i = i+1;

k = 1.0/i;

}

printf ( «Сумма pяда = %f», sum ); getch ();

}

Оператор цикла со счетчиком

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

for ( <п.ц.> = <н.з>; <условие>; <коррекция п.ц.> ) <оператор>;

Здесь for - ключевое слово (перев. с англ. для);

<п.ц.> - переменная цикла, которая может быть только простого

типа;

<н.ц.> - начальное значение - выражение такого же простого типа, как и переменная цикла;

<условие> - выражение типа сравнения, используемое для выхода из цикла;

<коррекция п.ц.> - оператор присваивания, задающий изменение переменной цикла;

78

<оператор> - любой оператор языка C++, в том числе и составной, являющийся телом цикла.

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

for ( i=1; i<0; i++) printf ("i=%d \n», i);

Приведенный ниже оператор распечатает целые числа от 1 до 10: for( i=1; i<10; i++) printf ("i=%d \n», i);

Если нужно выполнить несколько операторов в теле цикла, то пользуются составным оператором:

for (i=5; i<= 10; i++) { k=i*i; printf("k=%d\n»,k);

}

Оператор цикла со счетчиком позволяет [6]:

-Применять операцию уменьшения для счета в порядке убывания for( i=10; i>0; i--)

printf("%d секунд!\n»,i); printf("Пуск!\n");

-Вести счет двойками, десятками и т. д.

for( i=5; i<100; i+=15) printf("i=%d\n»,i);

В этом примере будут напечатаны 5, 20, 35, 50, 65, 80, 95. - Использовать символов качестве переменной цикла for( ch='a'; ch<'z'; ch++)

printf("Величина кода ASCII для %с равна %d\n», ch, ch);

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

-Проверять выполнение некоторого произвольного условия, отличного от условия, налагаемого на число итераций

for(i=2; i*i*i<100; i++)printf("i*i*i=%d\n», i*i*i);

-Сделать так, чтобы значение некоторой величины возрастало в геометрической, а не в арифметической прогрессии

for( debt=100.0; debt<150; debt= debt*1.1) printf("Ваш долг теперь $ %.2f\n»,debt);

79

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

y=0;

for( x=1; y<=75; y=5*x++ + 50) printf("x=%d y=%d\n»,x,y);

Результат будет выглядеть так: x = 1 y = 0

x = 2 y = 55 x = 3 y = 60 x = 4 y = 65 x = 5 y = 70 x = 6 y = 75

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

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

y=2;

for( x=3;y<=25;) y=y*x;

При выполнении цикла x остается равной 3. Значение y сначала будет равно 2, потом увеличится до 6, 18, а затем будет получена окончательная величина 54.

Можно опустить все три выражения в круглых скобках: for( ;;)

printf("Хочу учиться!\n");

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

-Первое выражение не обязательно должно инициализировать переменную. Например, там мог бы стоять оператор printf().

for ( printf( «Введите числа!\n"); num==6; ) scanf ("%d», &num);

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

-В круглых скобках первое и третье выражение могут содержать не по одному оператору, а несколько операторов разделенных запятой (говорят: использовать операцию запятая).

for(i=1, f=1 ; i<=10; f = f*i, i++) ;

-В этом случае i = 1, f = 1 выполняется один раз, а f=f*i, i++ в каждой итерации цикла, пока i <= 10.

80

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

Пример полной программы рассмотрим на решении задачи нахождения суммы n первых членов ряда:

Схема алгоритма приведена на рис.21, а программа представлена в при-мере pr16. В файле in.txt хранится число n. Результат (сумма ряда) - в

файле out.txt.

//Пример pr16 #include <stdio.h> #include <conio.h> void main ()

{

int i, n;

float sum = 0, //сумма ряда k; //очередной член pяда printf("Введите число членов яда:");

scanf ("%d», &n); k = 1;

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

{

k = k*10.0/i; sum = sum+k;

}

printf("Сумма pяда =%f»,sum); getch();

}

Рис. 28

81

Соседние файлы в папке книги