Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
програмирование..doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
613 Кб
Скачать
☆

5.Оператор цикла с предусловием.

1) Синтаксис:

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

<тело цикла>;

Здесь <выражение> - это арифметическое или логическое выражение,

<тело цикла> - это либо один оператор ( в том числе и пустой), который заканчивается “;”, либо составной оператор, либо блок.

2) Семантика: сначала вычисляется значение выражения. Если оно #0 или истина, то выполняется тело цикла. Затем повторяется вычисление значения выражения и выполнение тела цикла, пока значение выражения не станет = 0 или false. Как только выражение становится ложным, управление передается оператору, следующему за этим циклом.

Пример. Вычислить сумму первых к натуральных чисел.

s = 1+2+…+к

#include <iostream.h>

#include <conio.h>

void main()

{

int S = 0, k;

cin >> k;

int i = 0;

while ( i < k )

S +=++i;

cout << “\n S = “ << S;

getch();

}

Пример. Решить уравнение

0,25 x3 + x – 1,25 = 0; x € [0,2]

методом итераций.

#include <iostream.h>

#include <conio.h>

#include <math.h>

void main()

{

float x, y, x0, eps;

int n = 1; // счетчик итераций

cout << “\n Введите х0 и eps ”;

cin >> x0 >> eps;

y = x0;

x = 1.25 – 0.25*y*y*y;

while ( fabs(y-x)>eps)

{

y = x;

x = 1.25 – 0.25*y*y*y;

n++;

}

cout << “\n x = “ << x << “n= “ << n;

getch();

}

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

1) Синтаксис:

do

<тело цикла>

while (<выражение>);

2) Семантика: Сначала выполняется тело цикла. Затем вычисляется значение выражения. Если оно #0 или истина, то вновь выполняется тело цикла. Если выражение ложно, то осуществляется переход к следующему за циклом оператору.

Решим предыдущие примеры с помощью оператора цикла с постусловием.

. . . . . .

{ int S = 0, k; { float x, y, x0, eps;

cin >> k; int n = 0;

int i = 1; cin >> x0 >> eps;

do y = x0;

{ S += i; do

i++; { x = y;

} y = 1.25 – 0.25*x*x*x;

while ( i<= k); n++;

. . . }

} while ( fabs(y-x) > eps);

cout << “\n y= “ << y << “n= “ << n;

}

7.Оператор итерационного цикла

1).Синтаксис:

for (<инициализация цикла>; <выражение-условие>;

<список выражений>)

<тело цикла>;

Здесь <инициализация цикла> - последовательность определений и выражений, разделенных запятыми; <выражение-условие> - это либо арифметическое выражение, либо отношение, либо пусто ( но “;” сохраняется); <список выражений> - последовательность выражений, разделенных запятыми.

2) Семантика: Вначале выполняется инициализация цикла. Затем вычисляется значение выражения-условия. Если оно #0 или истина, то выполняется тело цикла. Затем вычисляются значения выражений из списка. Далее снова вычисляется значение выражения-условия, и цикл повторяется до тех пор, пока это значение не будет равным нулю или false.

Пример. Найти сумму квадратов первых К членов натурального ряда:

I вариант

II вариант

В языке С++ разрешается опустить любой элемент заголовка. Например:

for ( int i = 0, s = 0; i < k;) s +=++i*i;

Здесь отсутствует список выражений.

Условным выражением, которое управляет циклом, может быть любое выражение, при этом оно может не включать параметр цикла.

Например, реализуем метод итераций с использованием цикла for.

{ . . .

cin >> xo >> eps;

y = xo;

x = 1.25 – 0.25*y*y*y; int n;

for ( n = 0; fabs(y-x) > eps; n++)

{ y = x;

x = 1.25 – 0.25*y*y*y;}

cout << x << n;

}

При объявлении переменной в заголовке цикла важно помнить: эта переменная видима только в теле цикла.

В языке С++ разрешена любая глубина вложений циклов.

Пример: Найти множители целых чисел в диапазоне от2 до 10.

#include <iostream.h>

void main()

{

for ( int i = 2; i <=10; i++)

{ cout << “\nмножители числа “ << i << “:”;

for ( int j = 2; j < i; j++)

if ( ( i%j) == 0 ) cout << j << “ “;

cout << “\n”;

}

}

Результат:

Множители числа 2:

Множители числа 3:

Множители числа 4: 2

Множители числа 5:

Множители числа 6: 2 3

Множители числа 7:

Множители числа 8: 2 4

Множители числа 9: 3

Множители числа 10: 2 5

Вопросы

1 Тело цикла фрагмента программы

…

int a = 1, b = 1;

while (a + b < 8)

{

a ++;

b = b + 2;

}

…

выполнится

1. 1 раз;

2. 2 раза;

3. 3 раза;

5. бесконечное число раз.

2. Цикл в блоке

{float p=4.0;

do

p=p * 0.1;

while(p >=0.0001);

}

будет исполнен

1. 0 раз;

2. 1 раз;

3. 4 раза;

4. 5 раз;

5. бесконечное число раз.

3. Определите последовательность выполнения шагов алгоритма, реализующего цикл с предусловием

1. выполняется тело цикла, изменяется параметр цикла, проверяется условие продолжения выполнения цикла;

2. изменяется параметр цикла, проверяется условие продолжения выполнения цикла, выполняется тело цикла;

3. проверяется условие продолжения выполнения цикла, выполняется тело цикла;

4. определяется, сколько раз должен быть выполнен цикл, и далее цикл с предусловием сводится к циклу с параметром.

4. Укажите операторы итерационного цикла, которые правильно вычисляют значение s=1+2+3+…+k:

1. for(int i=1,s=0;i<=k;i++) s+=i;

2. for(int i=1,s=0;i<k;s+=++i);

3. for(int i=0,s=0;i<k)s+=++i;

4. int i=1,s=0;for( ;i<=k;i++)s+=i;

Лекция 8

Операторы передачи управления. Массивы.

8. Операторы передачи управления.

goto - безусловная передача управления

return - возврат из функции

break - выход из цикла или переключателя

continue - переход к следующей итерации.