- •Программирование на языке высокого уровня
- •Составитель: л.А. Прокушев
- •Подписано к печати Формат 60х84 1/16. Бумага тип. №3
- •Редакционно-издательский отдел
- •190000, Санкт-Петербург, ул. Б. Морская, 67
- •Алгоритмизация вычислительных процессов
- •Средства программирования вычислительных процессов
- •Данные и их типы
- •Константы
- •Переменные
- •Ввод-вывод данных
- •Ввод-вывод данных в стиле с
- •Форматированный ввод
- •Форматированный вывод
- •Консольный ввод-вывод
- •Функция ввода символа (без отображения):
- •Функция очистки экрана результатов:
- •Выражения и операции
- •Логические выражения и операции.
- •Работа с ветвящимися процессами Операторы
- •Оператор присваивания
- •Условный оператор (if)
- •Операторы передачи управления
- •Оператор break (прервать) используется для прерывания работы текущего сложного оператора, в теле которого находится оператор break, и передачи управления на следующий по порядку оператор.
- •Оператор выбора (switch)
- •Действие оператора выбора состоит в следующем:
- •Введите 2 числа х, y : 3 8
- •Работа с циклическими вычислительными процессами
- •Циклы с фиксированным числом повторений Оператор цикла с предусловием (while)
- •Прерывание цикла
- •Циклы с неизвестным числом повторений Вычисление рекуррентных последовательностей
- •Оператор цикла с постусловием (do)
- •Вложенные циклы и организация диалога в программе
- •Оператор цикла с параметром (for)
- •Программа:
- •Работа с массивами
- •Описание массива
- •Доступ к элементам массива
- •Указатель.
- •Занесение данных в массив
- •Многомерные массивы
- •Работа с функциями
- •Определение функции
- •Вызов функции
- •Передача параметров функции
- •Передача данных по значению
- •Передача данных по адресу
- •Прототип (шаблон) функции
- •Блочная структура программы
- •Внешние описания переменных
- •Многомодульные программы Проект программы
- •Внешние ссылки
- •Создание проекта программы
- •Работа с указателями Объявления объектов со сложными описателями
- •Массивы указателей
- •Указатель на указатель
- •Указатель на функцию
- •Использование указателя на функцию как аргумента
- •Массивы указателей на функции
Циклы с неизвестным числом повторений Вычисление рекуррентных последовательностей
Существуют задачи, в которых количество повторений циклов (итераций) заранее неизвестно, поскольку момент окончания цикла определяется заданной точностью вычислений, которая сама может изменяться по желанию пользователя. Такие циклы называют итерационными. Рассмотрим решение подобных задач на примере обработки ряда числовой последовательности, когда работа цикла строится на использовании рекуррентных формул.
Пример20.
Вычислить сумму членов ряда последовательности .
Пусть - это k-й член ряда. Вычисление суммы S продолжается, пока |Uk|>eps , где eps – заданная точность вычислений, например .
Для вычисления суммы членов ряда, необходимо вывести рекуррентные формулы для члена ряда и для суммы ряда, которые позволяют вычислять текущие значения величины как функцию от предыдущих значений, например, .
Вывод рекуррентной формулы члена ряда:
;
отсюда .
Для рекуррентных формул необходимо задавать начальное значение для неизвестной величины в правой части формулы (Uk): если k=0, то
, 0! =1 и значит U0=1.
Рекуррентная формула суммы ряда:
,
где начальное значение S0=U0=1.
При составлении алгоритма и программы нижние индексы величин U, S опускаются, а сами эти величины используются как обозначения переменных.
Программа:
# include<stdio.h>
# include<conio.h>
# include<math.h> // для fabs (U)
void main()
{ int k=0; float a, U, eps; double S; // описание переменных
clrscr (); // очистка экрана
printf (“Введите значения a, eps : ”);
scanf (“%f%f ”, &a, &eps); // ввод чисел
S=U=1; // начальные значения
while (fabs (U)>eps) // условие продолжения цикла
{ U += a / (k+1); // новый член ряда
S += U; // новая сумма ряда
k++; // новый номер члена ряда
}
printf (“Сумма S = %lf “, S); // вывод результата
}
Оператор цикла с постусловием (do)
Этот оператор используется в тех случаях, когда тело цикла должно выполнятся хотя бы один раз. Он имеет следующий вид:
do оператор // тело цикла
while выражение; // точка с запятой обязательна, где
do (выполнить), while (пока) – ключевые слова;
оператор (тело цикла) – одиночный, либо составной оператор, заключенный в { };
выражение (условие цикла) – допустимое в С выражение, сравнимое с нулем: если оно равно 0, то цикл продолжается, а если не равно 0, то цикл завершается с передачей управления следующему оператору.
Выполнение тела цикла может быть прервано операторами goto, break , continue, так же, как и при использовании оператора цикла while.
Применение оператора do необходимо в тех случаях, когда на основе выполненных действий или вычислений принимается решение о продолжении или прекращении цикла, например, для анализа введенных данных. Оператор do удобно использовать для организации диалога с пользователем в конце проделанных действий, предложив либо повторить действия с новыми данными, либо закончить их.