Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЭВМ 1-3 лабы.rtf
Скачиваний:
53
Добавлен:
01.04.2015
Размер:
2.67 Mб
Скачать

5.2. Оператор цикла с постусловием do .. While

Для программной реализации циклических процессов с неизвестным числом повторений существует еще один оператор – оператор цикла с постусловием, который имеет вид:

do

<оператор>

while (<логическое выражение>);

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

Примеры

1) k=0;

do

{n=n/10; k=k+1;}

while (n>0);

2) i=0; s=0;

do

i++; s=s+pow(i,2);

while (i<100);

3) i=0; a=1; s=a;

do

{

i=i+1;

a=-a*x/i; s=s+a;

}

while (fabs(a)>0.0001);

Пример программы

Вычислить квадратный корень вещественного числа x с заданной точностью ε=0.0001 по итерационной схеме:

,

где yn-1 – предыдущее приближение к корню, yn – последующее приближение.

Осуждение. Начальное приближение y0 выбирается произвольно. Процесс вычислений прекращается, когда два последовательных приближения станут отличаться друг от друга по абсолютной величине менее, чем на величину заданной точности.

#include <stdio.h>;

#include <math.h>;

void main()

{ const eps=0.0001;

float x,y0,y1;

printf("Введите x>0: "); scanf("%f",&x);

y1=1;

do

{

y0=y1;

y1=0.5*(y0+x/y0);

}

while (fabs(y1-y0)>eps);

printf("sqrt(%.2f)=%f",x,y1);

}

5.3. Оператор цикла с параметром for

Оператор цикла с параметром имеет следующий формат:

for(<инициализация>;<выражение>;<модификации>)<оператор>

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

Инициализация выполняется один раз в начале исполнения цикла.

Выражение определяет условие выполнения цикла. Если его результат, равен true, цикл выполняется. Цикл с параметром реализован как цикл с предусловием.

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

Любая из частей оператора for может быть опущена, но точки с запятой надо оставить на своих местах.

Примеры

1) for (k=1;k<n;k++) if (n%k==0) printf(”%i”,k);

2) for (int i=1,s=0;i<=100;i++) s+=i*i;

3) s=0; f=1;

for (i=1;i<=n;i++)

{ f=f*i; s=s+f; }

3) for (i=n;i>=1;i--) printf(”%i ”,i*i);

4) Ok=1;

for (n=2;n<=sqrt(a);i++)

if (a%n!=0) { Ok=0; break; }

Примеры решения задач

1) Каждое число Фибоначчи вычисляется как f1=1, f2=1, а начиная с третьего, по формуле fn=fn-1+fn-2. Составить программу, которая вычисляет последовательность n (n≥3) чисел Фибоначчи.

Обсуждение. Формула, по которой вычисляются числа Фибоначчи относится к рекуррентным формулам и для реализации данной формулы достаточно иметь три переменные: f=fn, f1=fn-1 и f2=fn-2. Подготовка к вычислению следующего элемента последовательности осуществляется присвоением f1=f2 и f2=f.

#include <stdio.h>;

void main()

{

int n, i;

unsigned long f,f1,f2;

printf("n="); scanf("%i",&n);

f1=1; f2=1; printf("%li %li ",f1,f2);

for (i=3;i<=n;i++)

{

f=f1+f2; printf("%li ",f);

f1=f2; f2=f;

}

printf("\n");

}

2) Определить, является ли заданное число n простым.

Обсуждение. Простое число – натуральное число, большее единицы, но не имеющее других делителей, кроме самого себя и единицы. Из определения следует, что, если заданное число делится хотя бы один раз на одно из чисел 2,3,…,n-1, то оно составное. В действительности, достаточно проверить делимость заданного числа на 2,3,…,n/2, или даже на 2,3,…,(почему?).

#include <stdio.h>;

#include <math.h>;

void main()

{

int n, i, Ok;

printf("Введите n>1: "); scanf("%i",&n);

Ok=1;

for (i=2;i<=int(sqrt(n));i++)

if (n%i==0) { Ok=0; break; }

if (Ok) printf("Простое\n");

else printf("Составное\n");

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]