- •1. Краткие теоретические сведения
- •1.1. Понятие циклического вычислительного процесса
- •1.2. Типовая блок-схема организация цвп
- •1.3. Классификация цвп
- •Повторений и специальной переменной - счетчиком циклов
- •1.4. Общие сведения об операторах цикла
- •1. Оператор while:
- •2. Оператор do…while:
- •3. Оператор for:
- •1.5. Оператор цикла типа "прогрессия" for
- •1.6. Основные правила и порядок выполнения оператора цикла for:
- •Оператор цикла со спецификацией, заданной скалярным выражением
- •1.7. Оператор цикла while
- •1.5.4.1. Оператор цикла while
- •1.5.4.3. Оператор цикла while
- •1.5.5.4. Оператор цикла while
- •1. Цикл с предусловием:
- •1.5.5.5. Основные правила использования и порядок выполнения оператора цикла while:
- •1.5.5.6. Пример № 1
- •1.8. Оператор цикла do...While
- •1.5.5.1. Оператор цикла do while
- •1.5.5.2. Оператор цикла с постусловием do
- •1.5.5.3. Оператор цикла do while
- •1.5.5.4. Оператор цикла do-while
- •2. Цикл с постусловием:
- •1.9. Табулирование функций
- •1.10. Вычисление конечных сумм и произведений
- •1.11. Правила организации циклических алгоритмов
- •1.12. Операторы перехода и их использование в циклах
- •1.12.1. Оператор прерывания циклов break
- •1.Break – оператор прерывания цикла.
- •1.12.2. Оператор перехода к следующей итерации цикла continue
- •Оператор продолжения continue для циклов do, while, for
- •1.12.3. Оператор перехода goto
- •1.12.4. Оператор возврата из функции return
- •Замечание:
- •2. Задание
- •2.1. Изучить теоретические сведения
- •2.4. Задания для выполнения на занятиях
- •2.4.1. Задание 1. Табуляция неразветвляющейся функции
- •2.4.1.1. Условие задания
- •Варианты заданий
- •2.4.2. Задание 2. Табулирование разветвляющейся функции
- •2.4.2.1. Условие задания
- •2.4.3. Задание 3. Табулирование разветвляющейся функции
- •2.4.3.1. Условие задания
- •2.5. Задания для дома
- •2.5.1. Задание 1. Табулирование неразветвляющейся функции в равноотстоящих точках
- •2.5.1.1. Условие задания
- •2.5.2. Задание 2. Табулирование разветвляющейся функции в равноотстоящих точках
- •2.5.2.1. Условие задания
- •2.5.2.2.Пример программы табулирования функции
- •3. Выводы
- •4. Требование к отчету
- •4. Краткие теоретические сведения.
- •5. Вопросы для самоконтроля
- •Литература
- •1. Краткие теоретические сведения 2
- •1.1. Понятие циклического вычислительного процесса 2
2. Цикл с постусловием:
do
<тело_цикла>;
while (<выражение-условие>);
Тело цикла выполняется до тех пор, пока <выражение-условие> истинно.
do
{
cin>>a;
s+=a;
}
while(a!=0);
Пример 7.40
Итерационный цикл. Если в формулировке задачи явно или неявно присутствуют условия «пока не будет выполнено» или «до тех пор, пока не выполнено», то число повторений заранее неизвестно, и это итерационный процесс. Содержание тела цикла может быть произвольным. Для организации таких алгоритмов используются, как правило, циклы while … или do … while.
Пример использования цикла, управляемого событием, уже был ранее показан в примерах № 6.18 и 6.27 лабораторной работы № . Еще раз покажем, как использовать цикл do … while для проверки корректности ввода. Если программа дружественна пользователю, то при вводе данных она сначала подскажет, что и как следует вводить, затем выполнит проверку введенных значений, и в случае ошибки будет возвращать пользователя к этапу ввода данных.
Требуется найти площадь треугольника, построенного по значениям длин трех заданных отрезков. Известно, что треугольник существует только тогда, когда длина каждой его стороны меньше, чем сумма длин двух других сторон. Если введенные данные не удовлетворяют этому условию, ввод повторяется.
// Код программы примера № 7.403.
#include <stdio.h>
#include <conio.h>
#include <math.h>
void main (void)
{
float a, b, c; // Длины сторон треугольника.
float S; // Площадь треугольника.
// Цикл проверки корректности введенных данных.
do // Не перейдет к вычислениям, пока не получит корректных данных.
{
printf ("Введите длины сторон треугольника\n");
scanf ("%f%f%f", &a, &b, &c); // Тут может появиться ошибка данных.
}
while (! (a < b + c && b < a + c && c < a + b));
// Данные введены корректно.
float pp;
pp = (a + b + c) / 2.;
S = sqrt (pp*(pp – a)*(pp – b)*(pp – c));
printf ("Площадь треугольника равна: %6.2f\n",S);
} // End of main
Пример 7.41.
Программист, организуя управление итерационным циклом, должен позаботиться и об инициализации управляющей переменной, и об ее приращении, и об условии завершения цикла.
Сформулируем условие задачи. Мяч брошен вертикально вверх со скоростью V. Требуется построить таблицу зависимости высоты Y от времени t, начиная с момента броска до момента падения мяча на землю, если
где g – константа тяготения, равная 9,8.
При движении мяч сначала взлетает вверх, затем падает. Высота подъема и время полета мяча зависят от начальной скорости броска. Очевидно, что циклом вычисления должна управлять переменная t. Для нее известно начальное значение (t = 0). Шаг изменения можно оценить из физического смысла задачи и выбрать произвольно, например, t = 0.1 сек. Момент завершения вычислений неизвестен в числовом выражении, но известно, что значение высоты сначала будет возрастать, затем убывать, и при падении мяча на землю станет равно нулю: Y <= 0. Величина Y – прямая функция t, значит, в этом условии переменная t присутствует, но неявно. Поскольку в постановке задачи условие завершения звучит «до момента падения», кажется естественным выбрать цикл do.
// Код программы примера 7.41
#include <stdio.h>
#include <conio.h>
#define G 9.8
void main (void)
{
float V, y, t; // Имена переменных имеют физический смысл.
printf ("Введите значение скорости броска\n";
scanf ("%f", &V);
printf ("Таблица зависимости высоты от времени Y(t)\n");
printf ("------------------------------------\n");
printf (" t y(t) \n");
printf ("------------------------------------\n");
// Подготовка цикла. Момент времени t = 0.1
t = 0.1;
do // Выбран цикл do.
{
y = V * t – 0.5*G*t*t;
printf ("\t %6.2f \t %6.2f \n", t, y);
t += 0.1; // Переход на новую итерацию.
} while (y >= 0); // В условии t присутствует неявно.
getch (); // Для того, чтобы держать таблицу на экране.
} // End of main
Замечание. Этот вариант имеет недостаток. Последнее значение таблицы будет отрицательным, потому что точного совпадения координаты y с нулем не будет никогда, а цикл do проверяет условие завершения после печати строки таблицы. Чтобы избежать этой некорректности, следует выбрать цикл while, в котором отчетливо прописать условие завершения цикла: while (V * t – 0.5*G*t* t>= 0).