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

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

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

x + y = 11.0

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

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

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

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

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

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

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

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

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

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

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

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

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

Условие (Р)

{

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

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

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

Конец цикла Р

Пример 17.

Организация цикла в программе. Вычислить сумму (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; // прерывание текущего цикла

операторы;

}

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

Пример 18.

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

Программа:

void main ( )

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

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

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

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

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

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

}

}

Пример 19.

Ввести натуральное число (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 Сумма цифр = 8

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