Программирование итерационных процессов. Использование конструкций циклов языка Си.
Конструкции циклов в языке Си
Цикл с фиксированным числом операций for
Цикл, это конструкция структурного программирования, повторяющая определенные действия (итерации) несколько раз. При заданном количестве итераций в Си используется конструкция for. Синтаксис:
for(секция инициализации значения; секция проверки условия; секция коррекции)
Значение, инициализируемое в первой секции, называется счетчиком цикла. Повторяемые действия называются телом цикла. Если тело цикла состоит из двух и действий, тело цикла заключается в фигурные скобки.
Секция инициализации выполняется один раз, поэтому может содержать описание переменной. На каждом шаге значение счетчика подставляется в условное выражение второй секции, если выражение истинно, то управление передается в тело цикла, в противном случае, управление передается за цикл. После каждого выполнения тела цикла выполняется операция из секции коррекции.
Например, цикл
for(int i=0;i
printf(“%d \n”,i);
будет работать следующим образом – счетчик i примет значение 0. Условное выражение второй секции при таком значении счетчика истинно, на экран выведется значение переменной i, равное 0. Управление передается в секцию коррекции и переменная i увеличивается на единицу. При этом условие все еще истинно, на экран выводится значение 1. В ходе следующей итерации переменная-счетчик принимает значение 2. Условное выражение остается истинным. На экран выводится значение счетчика. После этой итерации переменная i становится равной 3. Условие при таком значении становится ложным, цикл заканчивает свою работу, управление передается следующей части программы.
Циклы while и do while
Существует множество задач, при выполнении которых циклические действия необходимо проводить до тех пор, пока истинно какое-либо условие. Для реализации таких алгоритмов возможно использовать циклы по условию while и do while.
Синтаксис: while (условное выражение)
{ тело цикла
}
Тело цикла while выполняется до тех пор, пока истинно условное выражение. Этот цикл называется циклом с предусловием. Цикл while может ни разу не выполниться (то есть, на входе в цикл условие ложно).
Синтаксис do {
тело цикла
} while (условное выражение)
Тело цикла do while выполняется пока условие истинно. Этот цикл называют циклом с постусловием. Такой цикл выполниться хотя бы один раз.
Операторы безусловной передачи управления continue и break
Оператор break досрочно завершает выполнение цикла. Управление передается оператору, следующему за циклом.
int n =15;
for(int i=0;i
{ int z = rand()%200;
if (z100) break;}
Цикл должен выполняться 15 раз. В переменную z записывается случайное значение в интервале от 0 до 199 (функция rand(), случайные числа от 0 до RAND_MAX (32767)). Если получено случайное значение, большее 100, цикл заканчивает свою работу.
Оператор continue пропускает все последующие операторы тела цикла и передает управление на начало цикла.
int f = 1;
do
{
int z = rand()%100;
if (z30) continue;
if (z
printf(“%d”,z);
} while(f);
Описанный выше цикл работает следующим образом – цикл будет работать, пока переменная f равна единице. Если полученное случайное значение будет больше 30, то вторая проверка условия и функция печати полученного значения будут пропущены. Если полученное значение будет меньше 10, то переменной f будет присвоено значение 0. Значение выведется на экран и цикл закончит свою работу.
В итоге, на экран будут выводиться числа, не больше тридцати и как только будет получено число, меньшее десяти, цикл закончит свою работу.
Вычисление суммы бесконечного ряда
Задание. Найти сумму ряда с заданной точностью. Точность и значение переменной х вводить с клавиатуры. Осуществить проверку ошибок ввода. Считать ошибочными значения х, которые приводят к расхождению ряда.
Найти сумму бесконечного ряда сзаданной точностью e.
Решение. Определим, что значит, найти сумму с заданной точностью. По виду общего элемента ряда (обозначим ) видно, что элементы ряда при определенных значениях x убывают при увеличении n. Таким образом, начиная с какого-то n, элементы ряда будут меньше заданной точности. А это, в свою очередь, говорит о том, что, начиная с этого элемента, приращение суммы никогда не станет больше заданной точности.
Таким образом, найти сумму бесконечного ряда с заданной точностью , значит просуммировать все значения , , пока не найдется такое n, при котором станет меньше заданного . Для того, чтобы составленный алгоритм был наиболее эффективным принято выражать (следующий) член ряда через (предыдущий). Для вывода итерационной формулы разделим на :
.
Из полученного отношения выразим
При программировании воспользуемся свойством сложения: если элемент ряда положительный, то прибавим его к общей сумме, иначе отнимем его от общей суммы.
Тогда алгоритм вычисления суммы бесконечного ряда можно записать следующим образом:
1. Задать точность , задать ;
2. ;
3. Задать значение x
4. Задать значение overflow = 0
5. Вычислить значение при ,
6. Вычислить значение .
7. ПОКА ( )
7.1.ЕСЛИ -четное ТО
ИНАЧЕ
КОНЕЦ ЕСЛИ
7.2. ;
7.3. ЕСЛИв переменной q возникает переполнение ТОoverflow = 1,
перейти на 8.
7.3.
7.4.
КОНЕЦ ЦИКЛА
8. ЕСЛИoverflow ТОПечать «Ряд расходящийся»
ИНАЧЕПечать количества итераций , значение суммы .
9. Конец