Рабочие листы
к вашим урокам
Скачать
1 слайд
1
МБУ ДО «Дворец детского творчества»
г. Дзержинск, Нижегородская обл., 2021 г.
Анализ программ с циклами (Си/С++)
Панченко Надежда Петровна,
педагог дополнительного образования
2 слайд
2
Содержание:
Общие сведения.
Что нужно знать.
Разбор задач.
Возможные ловушки и проблемы.
Задачи для тренировки и самопроверки.
3 слайд
3
Общие сведения
Сложность: базовая.
Тема: Анализ программы.
Подтема: Построение алгоритма управления исполнителем.
Что проверяется: Умение построить неветвящийся алгоритм для исполнителя, описанного в условии задачи по заданным входным и выходным данным.
4 слайд
4
Что нужно знать:
Как может выглядеть задание? Например, так: Дан фрагмент программы. Необходимо определить значение переменной (переменных после его исполнения).
Объем задания – до шести итераций цикла (если задание требует «ручной» прокрутки цикла, или большое число итераций с очевидным алгоритмом, две - три операции присваивания внутри цикла.
5 слайд
5
Что нужно знать:
основные конструкции языка программирования:
объявление переменных;
оператор присваивания;
оператор вывода;
циклы(for, while);
уметь:
выполнять ручную прокрутку программы;
выделять переменную цикла, от изменения которой зависит количество шагов цикла;
определять количество шагов цикла;
определять переменную, которая выводится на экран;
6 слайд
6
Что нужно знать:
формулу для вычисления n -ого элемента арифметической прогрессии:
формулу для вычисления суммы первых членов арифметической прогрессии:
где ai - i –ый элемент последовательности, d – шаг (разность последовательности.
7 слайд
7
Разбор задачи 1:
Определите, что будет напечатано в результате работы следующего фрагмента программы:
{
int k, s;
s = 0;
k = 0;
while (s < 1024) {
s = s + 10;
k = k + 1;
}
cout<<k;
}
8 слайд
8
Решение:
из программы видно, что начальные значения переменных k и s равны нулю;
цикл заканчивается, когда нарушается условие s < 1024, то есть количество шагов цикла определяется изменением переменной s
после окончания цикла выводится значение переменной k;
таким образом, задача сводится к тому, чтобы определить число шагов цикла, необходимое для того, чтобы значение s стало не меньше 1024;
с каждым шагом цикла значение s увеличивается на 10, а значение k – на единицу, так что фактически k – это счётчик шагов цикла;
поскольку s увеличивается на 10, конечное значение s должно быть кратно 10, то есть это 1030 > 1024;
для достижения этого значения переменную s нужно 103 раза увеличить на 10, поэтому цикл выполнится 103 раза;
так как k – это счётчик шагов цикла, конечное значение k будет равно 103;
Ответ: 103.
9 слайд
9
Разбор задачи 2:
Определите, что будет напечатано в результате работы следующего фрагмента программы:
{
int k, s;
k = 5;
s = 2;
while (k < 120) {
s = s + k;
k = k + 2;
}
cout<<s;
}
10 слайд
10
начальные значения переменных k и s равны соответственно 5 и 2;
цикл заканчивается, когда нарушается условие k < 120, то есть количество шагов цикла определяется изменением переменной k;
после окончания цикла выводится значение переменной s;
с каждым шагом цикла значение s увеличивается на k, а затем значение k – на 2, так что к начальному значению s добавляется сумма членов арифметической прогрессии с начальным значением и разностью d = 2;
поскольку начальное значение k равно 5 и с каждым шагом оно увеличивается на 2, переменная k принимает последовательно нечётные значения: 5, 7, 9, …;
цикл заканчивается, когда значение k становится не меньше 120; поскольку k всегда нечётное, конечное значение k равно 121;
Решение:
11 слайд
11
поскольку значение k увеличивается после того, как увеличивается значение s, значение 121 уже не входит в сумму, то есть последний элемент последовательности an = 121 – 2 = 119:
количество членов последовательности, которые входят в сумму, можно вычислить: чтобы из 5 получить 119 нужно 57 раз добавить шаг 2, поэтому общее число элементов последовательности равно n = 58 (на один больше;
теперь используем формулу для вычисления суммы членов арифметической прогрессии:
к этой сумме нужно добавить начальное значение переменной s, равное 2: s = 2 + 3596 = 3598
Ответ: 3598.
Решение:
12 слайд
12
Разбор задачи 3:
Запишите число, которое будет напечатано в результате выполнения программы.
{
int s, n;
s = 33;
n = 1;
while (s > 0) {
s = s – 7;
n = n * 3;
}
Cout<<n;
}
13 слайд
13
из программы видно, что начальные значения переменных s и n равны соответственно 33 и 1
цикл заканчивается, когда нарушается условие s > 0, то есть количество шагов цикла определяется изменением переменной s
после окончания цикла выводится значение переменной n
таким образом, задача сводится к тому, чтобы определить число шагов цикла, необходимое для того, чтобы значение s стало меньше или равно 0
с каждым шагом цикла значение s уменьшается на 7, а значение n увеличивается в 3 раза, так что n = 3k, где k – это число шагов цикла
поскольку s уменьшается на 7, конечное значение s должно быть равно 33-7 * k, причём первое значение, меньшее или равное 0, достигается при k = 5 (и s = 33–7 * 5 = -2
тогда n = 3k = 35 = 243
Ответ: 243.
Решение:
14 слайд
14
попытка делать ручную трассировку, скорее всего, приведет к вычислительной ошибке, потому что число шагов слишком велико;
легко забыть, что начальные значения переменных s и k не равны нулю;
нужно помнить, что количество членов арифметической прогрессии на 1 больше, чем количество шагов, которые необходимы для перехода от первого значения к последнему.
Возможные ловушки и проблемы:
15 слайд
15
Задачи для тренировки
Нумерация задач по К. Полякову
16 слайд
16
1. Определите, что будет напечатано в результате работы следующего фрагмента программы:
{
int k, s;
s = 0;
k = 1;
while (k < 11) {
s = s + k;
k = k + 1;
}
cout<<s;
}
Ответ: 55
Для просмотра ответа – щелкните мышью на прямоугольнике
17 слайд
17
2. Определите, что будет напечатано в результате работы следующего фрагмента программы:
{
int k, s;
s = 0;
k = 0;
while (k < 30) {
k = k + 3;
s = s + k;
}
cout<<s;
}
Ответ: 165
Для просмотра ответа – щелкните мышью на прямоугольнике
18 слайд
18
3. Определите, что будет напечатано в результате работы следующего фрагмента программы:
{
int k, s;
s = 3;
k = 1;
while (k < 25) {
s = s + k;
k = k + 2;
}
cout<<s;
}
Ответ: 147
Для просмотра ответа – щелкните мышью на прямоугольнике
19 слайд
19
4. Определите, что будет напечатано в результате работы следующего фрагмента программы:
{
int k, s;
s = 2;
k = 2;
while (s < 50) {
s = s + k;
k = k + 2;
}
cout<<k;
}
Ответ: 16
Для просмотра ответа – щелкните мышью на прямоугольнике
20 слайд
20
5. Определите, что будет напечатано в результате работы следующего фрагмента программы:
{
int k, s;
s = 0;
k = 0;
while (s < 100) {
s = s + k;
k = k + 4;
}
cout<<k;
}
Ответ: 32
Для просмотра ответа – щелкните мышью на прямоугольнике
21 слайд
21
6. Определите, что будет напечатано в результате работы следующего фрагмента программы:
{
int k, s;
s = 0;
k = 1;
while (s < 66) {
k = k + 3;
s = s + k;
}
cout<<k;
}
Ответ: 19
Для просмотра ответа – щелкните мышью на прямоугольнике
22 слайд
22
7. Определите, что будет напечатано в результате работы следующего фрагмента программы:
{
int k, s;
s = 5;
k = 0;
while (k < 15) {
k = k + 2;
s = s + k;
}
cout<<s;
}
Ответ: 77
Для просмотра ответа – щелкните мышью на прямоугольнике
23 слайд
23
8. Определите, что будет напечатано в результате работы следующего фрагмента программы:
{
int k, s;
s = 0;
k = 0;
while (k < 12) {
s = s + 2 * k;
k = k + 3;
}
cout<<s;
}
Ответ: 36
Для просмотра ответа – щелкните мышью на прямоугольнике
24 слайд
24
9. Определите, что будет напечатано в результате работы следующего фрагмента программы:
{
int k, s;
s = 0;
k = 0;
while (s < 80) {
s = s + 2 * k;
k = k + 4;
}
cout<<s;
}
Ответ: 80
Для просмотра ответа – щелкните мышью на прямоугольнике
25 слайд
25
10. Определите, что будет напечатано в результате работы следующего фрагмента программы:
{
int k, s;
s = 1;
k = 0;
while (k < 13) {
s = s + 2 * k;
k = k + 4;
}
cout<<s + k;
}
Ответ: 65
Для просмотра ответа – щелкните мышью на прямоугольнике
26 слайд
26
11. Определите, что будет напечатано в результате работы следующего фрагмента программы:
{
int n, s;
n = 3;
s = 0;
while (n < = 7) {
s = s + n;
n = n + 1;
}
cout<<s;
}
Ответ: 25
Для просмотра ответа – щелкните мышью на прямоугольнике
27 слайд
27
12. Определите, что будет напечатано в результате работы следующего фрагмента программы:
{
int n, s;
n = 4;
s = 0;
while (n < = 8) {
s = s + n;
n = n + 1;
}
cout<<s;
}
Ответ: 30
Для просмотра ответа – щелкните мышью на прямоугольнике
28 слайд
28
13. Определите, что будет напечатано в результате работы следующего фрагмента программы:
{
int n, s;
n = 4;
s = 0;
while (n < = 13) {
s = s + 15;
n = n + 1;
}
cout<<s;
}
Ответ: 150
Для просмотра ответа – щелкните мышью на прямоугольнике
29 слайд
29
14. Определите, что будет напечатано в результате работы следующего фрагмента программы:
{
int n, s;
n = 1;
s = 0;
while (n < = 20) {
s = s + 33;
n = n + 1;
}
cout<<s;
}
Ответ: 660
Для просмотра ответа – щелкните мышью на прямоугольнике
30 слайд
30
15. (http://ege.yandex.ru-1 Определите, что будет напечатано в результате работы следующего фрагмента программы:
{
int n, s;
n = 1;
s = 0;
while (n < = 101) {
s = s + 7;
n = n + 1;
}
cout<<s;
}
Ответ: 707
Решение.
При решении этой задачи не требуется непосредственно выполнять алгоритм. Обозначим ST значение переменной s после выполнения T-й итерации цикла. В начале T-й итерации значение переменной n равно T (в начале 1-й итерации выполнено: n = 1; в начале 2-й итерации выполнено: n = 2 и т.д. . В конце T-й итерации значение переменной s равно 7T (в конце 1-й итерации выполнено: s = 7; в конце 2-й итерации выполнено: s = 14 и т.д. . Цикл будет выполнен 101 раз. Значит, итоге s = 7 * 101 = 707.
Для просмотра ответа –
щелкните мышью на прямоугольнике
31 слайд
31
16. (http://ege.yandex.ru-3 Определите, что будет напечатано в результате работы следующего фрагмента программы:
{
int n, s;
n = 0;
s = 512;
while (s > = 0) {
s = s - 20;
n = n + 1;
}
cout<<n;
}
Ответ: 26
Решение.
(набросок . Значение переменной n – количество выполнений цикла. Это количество равно div(512, 20 + 1 = 26.
Для просмотра ответа –
щелкните мышью на прямоугольнике
32 слайд
32
17. (http://ege.yandex.ru-5 Определите, что будет напечатано в результате работы следующего фрагмента программы:
{
int n, s;
n = 24;
s = 0;
while (n < = 28) {
s = s + 20;
n = n + 2;
}
cout<<s;
}
Ответ: 60. Решение (набросок . Цикл выполняется с шагом 2. Поэтому он будет выполнен 3 раза (при n = 24. 26, 28 . На каждой итерации значение s увеличивается на 20.
Для просмотра ответа – щелкните мышью на прямоугольнике
33 слайд
33
18. Определите, что будет напечатано в результате работы следующего фрагмента программы:
{
int n, s;
n = 12;
s = 5;
while (n < = 25) {
s = s + 12;
n = n + 2;
}
cout<<s;
}
Ответ: 89
Для просмотра ответа – щелкните мышью на прямоугольнике
34 слайд
34
19. Определите, что будет напечатано в результате работы следующего фрагмента программы:
{
int n, s;
n = 2;
s = 35;
while (n < = 25) {
s = s + 20;
n = n + 5;
}
cout<<s;
}
Ответ: 135
Для просмотра ответа – щелкните мышью на прямоугольнике
35 слайд
35
20. Определите, что будет напечатано в результате работы следующего фрагмента программы:
{
int n, s;
n = 4;
s = 15;
while (s < = 250) {
s = s + 12;
n = n + 2;
}
cout<<n;
}
Ответ: 44
Для просмотра ответа – щелкните мышью на прямоугольнике
36 слайд
36
21. Определите, что будет напечатано в результате работы следующего фрагмента программы:
{
int n, s;
n = 0;
s = 0;
while s (< = 35) {
n = n + 1;
s = s + 4;
}
cout<<n;
}
Ответ: 9
Для просмотра ответа – щелкните мышью на прямоугольнике
37 слайд
37
22. Определите, что будет напечатано в результате работы следующего фрагмента программы:
{
int n, s;
n = 0;
s = 0;
while (s < = 256) {
s = s + 25;
n = n + 1;
}
cout<<n;
}
Ответ: 11
Для просмотра ответа – щелкните мышью на прямоугольнике
38 слайд
38
23. Определите, что будет напечатано в результате работы следующего фрагмента программы:
{
int n, s;
n = 0;
s = 0;
while (s < = 365) {
s = s + 33;
n = n + 5;
}
cout<<n;
}
Ответ: 60
Для просмотра ответа – щелкните мышью на прямоугольнике
39 слайд
39
24. Определите, что будет напечатано в результате работы следующего фрагмента программы:
{
int n, s;
n = 0;
s = 0;
while (s < = 365) {
s = s + 36;
n = n + 10;
}
cout<<n;
}
Ответ: 110
Для просмотра ответа – щелкните мышью на прямоугольнике
40 слайд
40
25. Определите, что будет напечатано в результате работы следующего фрагмента программы:
{
int n, s;
n = 1;
s = 0;
while (s < = 365) {
s = s + 36;
n = n * 2;
}
cout<<n;
}
Ответ: 2048
Для просмотра ответа – щелкните мышью на прямоугольнике
41 слайд
41
26. Определите, что будет напечатано в результате работы следующего фрагмента программы:
{
int n, s;
n = 0;
s = 1;
while (s < = 1000) {
s = s * 3;
n = n + 3;
}
cout<<n;
}
Ответ: 21
Для просмотра ответа – щелкните мышью на прямоугольнике
42 слайд
42
26_2. (http://ege.yandex.ru-2) Определите, что будет напечатано в результате работы следующего фрагмента программы:
{
int n, s;
n = 4;
s = 0;
while (n < = 8) {
s = s + 15;
n = n + 1;
}
cout<<s;
}
Ответ: 75. Решение (набросок . При решении этой задачи не требуется непосредственно выполнять алгоритм. В конце T-й итерации значение переменной s равно 15T (в конце 1-й итерации выполнено: s = 15; в конце 2-й итерации выполнено: s = 30 и т.д. . Цикл будет выполнен 8-4 + 1 = 5 раз. Значит, в итоге s = 15 * 5 = 75.
Для просмотра ответа – щелкните мышью на прямоугольнике
43 слайд
43
26_4. (http://ege.yandex.ru-4) Определите, что будет напечатано в результате работы следующего фрагмента программы:
{
int n, s;
n = 14;
s = 0;
while (n < = 18) {
s = s + 25;
n = n + 1;
}
cout<<s;
}
Ответ: 125. При каждом выполнении цикла значение переменной s увеличивается на 25. Цикл будет выполнен 18-14 + 1 = 5 раз. Итоговое значение s равно 5 * 25 = 125.
Для просмотра ответа – щелкните мышью на прямоугольнике
44 слайд
44
26_6 (http://ege.yandex.ru-6) Определите, что будет напечатано в результате работы следующего фрагмента программы:
{
int n, s;
n = 0;
s = 0;
while (s < = 365) {
s = s + 37;
n = n + 5;
}
cout<< n;
}
Ответ: 50. Наименьшее число, которое делится на 37 и больше, чем 365–0 = 365, - это число 370. Поэтому цикл будет выполнен 370/37 = 10 раз. Соответственно, после выполнения цикла n = 0 + 10⋅5 = 50. Наименьшее число, которое делится на 37 и больше, чем 365−5 = 360, - это число 370. Поэтому цикл будет выполнен 370/37 = 10 раз. Соответственно, после выполнения цикла n = 1⋅210 = 1024.
Для просмотра ответа – щелкните мышью на прямоугольнике
45 слайд
45
26_7. (http://ege.yandex.ru-7) Определите, что будет напечатано в результате работы следующего фрагмента программы:
{
int n, s;
n = 1;
s = 5;
while (s < = 365) {
s = s + 37;
n = n * 2;
}
cout<< n;
}
Ответ: 1024. Наименьшее число, которое делится на 37 и больше, чем 365−5 = 360, - это число 370. Поэтому цикл будет выполнен 370/37 = 10 раз. Соответственно, после выполнения цикла n = 1⋅210 = 1024.
Для просмотра ответа – щелкните мышью на прямоугольнике
46 слайд
46
26_8. (http://ege.yandex.ru-8 Определите, что будет напечатано в результате работы следующего фрагмента программы:
{
int n, s;
n = 1;
s = 0;
while (s < = 370) {
s = s + 37;
n = n + 10
}
cout<< n
}
Ответ: 111. Наименьшее число, большее 370−0 = 370, которое делится на 37, - это число 370 + 37. Поэтому цикл будет выполнен (370 + 37 /37 = 11 раз. Соответственно, после выполнения цикла n = 1 + 11⋅10 = 111
Для просмотра ответа – щелкните мышью на прямоугольнике
47 слайд
47
27. При каком наименьшем введенном числе d после выполнения программы будет напечатано 67?
{
int n, s, d;
cin>>d;
n = 2;
s = 0;
while (s < = 365) {
s = s + d;
n = n + 5;
}
cout<<n;
}
Ответ: 29
Для просмотра ответа – щелкните мышью на прямоугольнике
48 слайд
48
28. При каком наибольшем введенном числе d после выполнения программы будет напечатано 89?
{
int n, s, d;
cin>>d;;
n = 5;
s = 83;
while (s < = 1200) {
s = s + d;
n = n + 6;
}
cout<<n;
}
Ответ: 85
Для просмотра ответа – щелкните мышью на прямоугольнике
49 слайд
49
29. При каком наименьшем введенном числе d после выполнения программы будет напечатано 63?
{
int n, s, d;
cin>>d;
n = 3;
s = 57;
while (s < = 1200) {
s = s + d;
n = n + 4;
}
cout<<n;
}
Ответ: 77
Для просмотра ответа – щелкните мышью на прямоугольнике
50 слайд
50
30. При каком наименьшем введенном числе d после выполнения программы будет напечатано 15?
{
int n, s, d;
cin>>d;
n = 3;
s = 38;
while (s < = 1200) {
s = s + d;
n = n + 7;
}
cout<<n;
}
Ответ: 58
Для просмотра ответа – щелкните мышью на прямоугольнике
51 слайд
51
31. При каком наименьшем введенном числе d после выполнения программы будет напечатано 12?
{
int n, s, d;
cin>>d;
n = 1;
s = 46;
while (s < = 2700) {
s = s + d;
n = n + 4;
}
cout<<n;
}
Ответ: 89
Для просмотра ответа – щелкните мышью на прямоугольнике
52 слайд
52
32. При каком наименьшем введенном числе d после выполнения программы будет напечатано 46?
{
int n, s, d;
cin>>d;
n = 8;
s = 78;
while (s < = 1200) {
s = s + d;
n = n + 2;
}
cout<<n;
}
Ответ: 62
Для просмотра ответа – щелкните мышью на прямоугольнике
53 слайд
53
33. Запишите число, которое будет напечатано в результате выполнения следующей программы:
{
int n, s;
n = 1;
s = 0;
while (n < = 650) {
s = s + 20;
n = n * 5;
}
cout<<s;
}
Ответ: 100
Для просмотра ответа – щелкните мышью на прямоугольнике
54 слайд
54
34. Запишите число, которое будет напечатано в результате выполнения следующей программы:
{
int n, s;
n = 1;
s = 0;
while (n < = 300) {
s = s + 30;
n = n * 5;
}
cout<<s;
}
Ответ: 120
Для просмотра ответа – щелкните мышью на прямоугольнике
55 слайд
55
35. Запишите число, которое будет напечатано в результате выполнения следующей программы:
{
int s, n;
s = 0;
n = 0;
while (s < 111) {
s = s + 8;
n = n + 2;
}
cout<<n;
}
Ответ: 28
Для просмотра ответа – щелкните мышью на прямоугольнике
56 слайд
56
36. Запишите число, которое будет напечатано в результате выполнения следующей программы:
{
int s, n;
s = 0;
n = 0;
while (2 * s * s < 123) {
s = s + 1;
n = n + 2;
}
cout<<n;
}
Ответ: 16
Для просмотра ответа – щелкните мышью на прямоугольнике
57 слайд
57
37. Определите, что будет напечатано в результате работы следующего фрагмента программы:
{
int n, s;
n = 0;
s = 301;
while (s > 0) {
s = s - 10;
n = n + 2;
}
Cout<<n;
}
Ответ: 62
Для просмотра ответа – щелкните мышью на прямоугольнике
58 слайд
58
38. Определите, что будет напечатано в результате работы следующего фрагмента программы:
{
int n, s;
n = 0;
s = 512;
while (s > 0) {
s = s - 25;
n = n + 4;
}
cout<< n;
}
Ответ: 84
Для просмотра ответа – щелкните мышью на прямоугольнике
59 слайд
59
39. Определите, что будет напечатано в результате работы следующего фрагмента программы:
{
int n, s;
n = 0;
s = 256;
while (s > 0) {
s = s - 25;
n = n + 3;
}
cout<< n;
}
Ответ: 33
Для просмотра ответа – щелкните мышью на прямоугольнике
60 слайд
60
40. Определите, что будет напечатано в результате работы следующего фрагмента программы:
{
int n, s;
n = 0;
s = 301;
while (s > 0) {
s = s - 10;
n = n + 3;
}
cout<< n;
}
Ответ: 93
Для просмотра ответа – щелкните мышью на прямоугольнике
61 слайд
Материалы сайтов:
http://kpolyakov.spb.ru/school/ege.htm;
http://ege-go.ru/b5/;
http://ege.yandex.ru/informatics/question/B8/1/.
Рабочие листы
к вашим урокам
Скачать
6 665 097 материалов в базе
«Информатика (базовый и углублённый уровни) (в 2 частях)», Поляков К.Ю., Еремин Е.А.
§ 38. Целочисленные алгоритмы
Больше материалов по этой темеНастоящий материал опубликован пользователем Панченко Надежда Петровна. Инфоурок является информационным посредником и предоставляет пользователям возможность размещать на сайте методические материалы. Всю ответственность за опубликованные материалы, содержащиеся в них сведения, а также за соблюдение авторских прав несут пользователи, загрузившие материал на сайт
Если Вы считаете, что материал нарушает авторские права либо по каким-то другим причинам должен быть удален с сайта, Вы можете оставить жалобу на материал.
Удалить материалВаша скидка на курсы
40%Курс профессиональной переподготовки
300/600 ч.
Курс профессиональной переподготовки
600 ч.
Курс профессиональной переподготовки
300 ч. — 1200 ч.
Мини-курс
6 ч.
Мини-курс
4 ч.
Оставьте свой комментарий
Авторизуйтесь, чтобы задавать вопросы.