Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПЯВУ - методичка1.doc
Скачиваний:
10
Добавлен:
08.11.2019
Размер:
684 Кб
Скачать

Введите 2 числа х, y : 3 8

Введите знак операции (+, –, *, / или иной): +

x + y = 11.0

Работа с циклическими вычислительными процессами

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

В языке Си для реализации циклических процессов используется три вида операторов организации цикла: while, do…while, for, которые рассмотрены ниже.

Циклы с фиксированным числом повторений Оператор цикла с предусловием (while)

Этот оператор, который используется, когда требуется проверить необходимость выполнения цикла, имеет вид

while (выражение) оператор , где

while (пока) – ключевое слово;

выражение – условие продолжения цикла в виде логического или арифметического выражения сравнимого с нулем. Если выражение не равно нулю (истинно), то выполняется оператор, в противном случае оператор цикла либо не выполняется вообще, либо заканчивается и управление передается следующему за ним оператору;

оператор (тело цикла) – это либо одиночный или пустой оператор, за которыми ставится точка с запятой (;), либо составной оператор, заключенный в операторные скобки { }, за которым точка с запятой не ставится.

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

в схеме алгоритма: в программе:

Р = начальное значение;

while (условие (Р))

Условие (Р)

{операторы тела цикла;

Тело цикла Р = изменение;

Р= изменение }

Конец цикла Р

Пример. Организация цикла в программе. Вычислить сумму (sum) чисел от 0 до 5 (i – параметр цикла).

a) sum = i = 0; б) sum = i = 0; в) sum = i = 0;

while (i<=5) while (i<=5) while (++i <= 5)

{ sum = sum + i; sum += i++; sum += i;

i++;

}

printf(“sum=%d”, sum);

В последнем случае параметр цикла i изменяется в выражении условия.

Особенность оператора while в том, что тело цикла может ни разу не выполниться, например,

i=15;

while (i<0) i++;

В данном случае i не изменится, так как условие цикла с самого начала ложно.

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

i=15;

while (i>0) i++;

Отслеживание и исправление таких ситуаций лежит на программисте.

Прерывание цикла

Бесконечный цикл можно создать преднамеренно, но тогда необходимо организовать в теле цикла прерывание цикла по условию выхода из цикла, используя операторы передачи управления break , goto, continue.

Оператор break (прерывать) вызывает завершение самого внутреннего включающего его оператора цикла по схеме:

while(1) /* бесконечный цикл */

{...; if (условие выхода)

break ; /* прерывание цикла */

}

следующий оператор;

Оператор goto позволяет выйти за пределы операторов циклов любой глубины вложения в любое место программы.

Оператор continue (продолжить) позволяет пропустить оставшуюся часть тела цикла до закрывающей скобки ( } ) и начать новый цикл, то есть он не передает управление за пределы оператора цикла, в котором он находится, согласно схеме:

while (выражение)

{...; if (условие прерывания )

continue; /*прерывание текущего цикла */

операторы;

}

Во многих задачах количество повторений цикла задано или может быть вычислено до выполнения программы.

Пример. Организовать вывод четных чисел не больше 100.

Программа:

void main ( )

{ int num = -1; /* начальное значение */

while (num < 100) /* условие цикла */

{ num ++; /* очередное число */

if (num % 2) /* нечетное число , если num%2 != 0 */

continue ; /* переход к новому циклу */

printf( “%d ” , num) ; /* вывод четного числа */

}

}

Пример. Ввести натуральное число (N) и определить количество (K) и сумму его цифр (sum), например, для N = 215 , K = 3 , sum = 2+1+5=8. Идея алгоритма: в цикле, пока N не уменьшится до N = 0, для получения цифры младшего разряда используется операция деления по модулю 10 (M = N %10) , а для уменьшения используется операция деления числа на 10 нацело (N = N / 10).

Программа:

# include<stdio.h>

# include<conio.h>

void main ( )

{ long N ; int K, sum, m ; /* описание переменных */

clrscr ( ) ; /* очистка экрана */

printf (“Введите натуральное число: “);

scanf (‘‘%Ld’’, &N); /* ввод числа */

K = sum = 0; /* обнуление K и sum */

while (N) /* цикл, пока N != 0 */

{ K++; /* подсчет количества цифр */

m = N % 10; /* получение цифры младшего разряда */

sum += m; /* подсчет суммы цифр */

N /= 10; /* деление N на 10 */

}

printf (“ Количество цифр = %d Сумма цифр = %d/n’’, K, sum);

puts (“ Нажмите любую клавишу.”);

getch ( ); /* задержка экрана результатов */

}

Результаты программы:

Введите натуральное число: 215

Количество цифр = 3 Cумма цифр = 8

Нажмите любую клавишу.