- •Часть 1
- •Лекция 1
- •Лекция 3
- •Алфавит
- •Идентификаторы
- •Константы
- •Бинарные операции
- •Знаки операций и разделители
- •4. Знаки операций.
- •Унарные операции.
- •5. Разделители.
- •Выражения.
- •4.1 Условный оператор
- •4.2. Переключатели
- •5.Оператор цикла с предусловием.
- •6.Оператор цикла с постусловием.
- •7.Оператор итерационного цикла
- •8.1.Оператор goto
- •8.2.Оператор return
- •8.3.Оператор break
- •8.4.Оператор continue
- •Функция strcpy()
- •2. Функция strcat().
- •3. Функция strcmp()
- •12. Функция strlen().
- •Лекция 11
- •Лекция 12
- •Лекция 14
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 - переход к следующей итерации.
