В приведенных типовых алгоритмах циклы организуются при помощи управляющей переменной цикла for. Для таких циклов может быть предложена более детальная структура (рис. 1), в которой выделены блоки, организующие цикл; задание начального значения (Iнач) управляющей переменной цикла (I), изменение управляющей переменной цикла на шаг (Н) и проверка достижения конечного значения (IКОн) управляющей переменной цикла. Управляющую переменную цикла называют счетчиком, а организуемый при помощи нее цикл — циклом по счетчику. В блоке «Начальные присваивания» должны задаваться значения переменных, используемых в теле цикла (или в блоке проверки условия), из тех соображений, чтобы при первом прохождении цикла получался правильный результат. Например, при вычислении суммы n слагаемых после первого прохождения цикла сумма S
Рис. 1 Рис. 2
нет нет
да да
должна быть равна первому слагаемому, т. е. после первого выполнения оператора S=S+xi (при i=1) должно быть S=x1а для этого в блоке «Начальные присваивания» нужно задать S=0 (см. рис. 2). Аналогично, при вычислении произведения п сомножителей (п. 2) после первого выполнения оператора Р=Р* хi (при i=l) должно быть P= х1 , а для этого в блоке «Начальные присваивания» нужно задать Р=1 (см. рис. 3) и т. д.
n
1. Вычисление суммы п слагаемых. Требуется вычислить S= Sxi , где xi– i-й член суммы, зависящий от i.
i=1
Например, при xi=iSравно сумме первых п натуральных чисел. Задача сводится к организации цикла по i. При каждом прохождении цикла значение S увеличивается на очередной член суммы. До входа в цикл нужно задать S=0 (рис. 2).
Программа 2.1 реализует приведенный алгоритм для вычисления суммы первых 15 натуральных чисел (xi=i,S =15).
Программа 2.1
void main()
{
int S=0, i;
for (i=1; i<=15; i=i +1 )
S=S+i;
printf( “Сумма первых 15 натуральных чисел равна: %i ”, S);
}
В некоторых случаях для уменьшения общего количества выполняемых арифметических операций целесообразно последующий член суммы вычислять, используя предыдущий. При этом для обозначения члена суммы нужно использовать вспомогательную переменную. Например, при вычислении
n
S= Sxiцелесообразно обозначить с=хiи
i=1
для вычисления следующего члена домножить предыдущий на х (с=с*х).
В некоторых случаях, например, при xi =(—1)i * i2 такой прием целесообразно применять к одному из сомножителей члена суммы, а именно вычислять с=(-1)iдля следующего члена суммы как с=—с. До входа в цикл (для первого члена) нужно положить с= 1.
В качестве примера, иллюстрирующего рассмотренный прием, составим программу для вычисления следующей суммы
10
S= S(—1)i(1+p)2i/i.
i=1
при заданном значении р=3,5.
Член суммы представим как с/i, где с= =(—1)i(1+р)2i. Для каждого следующего члена суммы с будем вычислять по рекуррентной формуле с= - с(1+p)2, где в правой части используется значение с для предыдущего члена. До входа в цикл положим с=1 и с для первого члена суммы будем вычислять по общей формуле (программа 2.2).
Программа 2.2
void main()
{
float p=3.5, c=1, s=0;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.