Скачиваний:
22
Добавлен:
02.05.2014
Размер:
32.72 Кб
Скачать

  10.1. Алгоритмы, позволяющие поменять местами значения переменных (новое значение a равно старому значению b и наоборот).

  1. t := a; a := b; b := t;

  2. a:=b; b:=a;

  3. a:=a+b; b:= a -b; a:=a-b;

  1) 1,2,3    2) 1,2    3) 2,3    4) 1,3    5) 2

  Решение: Пусть a:=24; b:=13; В первом алгоритме введена дополнительная переменная t. Она выполняет роль посредника, через которого происходит обмен. В результате выполнения первого алгоритма t := a; (t=24); a := b; (a=13); b := t; (b = 24) обмен произошел.

Второй алгоритм задачу не решает: a := b; (a=13); b := a; (b=13).

Третий алгоритм ее решает: a := a+b; (a=24+13=37); b := a-b; (b=37-13=24); a := a-b; (a=37-24=13).

Поменялись местами значения переменных a и b. Верный ответ №4.

  10.2. Что будет напечатано на экране в результате выполнения фрагмента программы:

a:=17; b:=25; b:=b*mod(a,3); вывод ((a>b)>(b>b-a)); 1) нет>да 2) нет 3) (a>b)>(b>b-a) 4) (17>50)>(50-33) 5) ни один из ответов 1-4 не верен.   Решение: В результате присваивания b:=b*mod(a,3) переменная b примет значение 50; (a>b) - результат нет, b>b-a - результат да, нет>да - результат нет. Верный ответ №2.

  10.3. Вычисляемое в программе X:= 2; Y:= 10 если X * Y > 4 | то X:= int( X * 7 / Y) | иначе Y:= Y + 5 все S := X+Y; вывод S значение переменной S равно

  1) 11    2) 15    3) 17    4) 12    5) 10

  Решение: Это пример использования конструкции ветвления. Если истинным будет выражение X * Y > 4 (при X= 2; Y= 10 это так: 2*10>4 - истинно), то X:= int(X * 7 / Y) = int(2 * 7 / 10) = int(14/10) = 1, где int(a) - целая часть числа а. Далее независимо от того по какой ветке проводилось вычисление, выполняются операторы S := X+Y; вывод S . В результате S := X+Y = 1+10 = 11. Верный ответ №1.

  10.4. Приведенный график описывается условным оператором

1) если abs(x) > 1 | то y := abs(x - 1) + 1; | иначе y := - 1 + sqrt(4 - sqr(x+1)); все 2) если abs(x) > 1 | то y := abs(x - 1) - 1; | иначе y := - 1 + sqrt(4 - sqr(x+1)); все 3) если abs(x) < 1 | то y := abs(x - 1) - 1; | иначе y := - 1 - sqrt(4 - sqr(x+1)); все 4) если abs(x) > 1 | то y := abs(x - 1) + 1; | иначе y := - 1 - sqrt(4 - sqr(x+1)); все 5) если abs(x) < 1 | то y := abs(x - 1) - 1; | иначе y := - 1 + sqrt(4 - sqr(x+1)); все   Решение: Попробуем отсечь варианты ответов, которые заведомо неверны. На рисунке изображен график функции y = | x - 1| - 1, часть которого (на интервале [-1,1]) заменена дугой окружности радиуса 2 с центром в точке ( 1, 1).

Ответы 3) и 5) предполагают вычисление значения y по формуле, содержащей модуль, на интервале [-1,1], что не соответствует рисунку.

Ответы 1) и 4) предлагают правильные интервалы (график модуля - вне отрезка [-1,1]), но содержат неверный свободный член +1, тогда как график | x | должен быть опущен на 1 вниз.

Итак, только ответ 2) может претендовать на правильность. Описание модификации графика y = | x | при | x | > 1 дано верно: сдвиг на 1 вправо и на 1 вниз. После несложных преобразований получим, что выражение для y на ветви иначе имеет вид: (y +1)2 + (x + 1)2 = 4, что представляет собой уравнение окружности радиуса 2 с центром в точке (-1,-1). Для полной уверенности можно проверить, попадают ли концы дуги окружности в точки (-1,1) и (1,-1).

Подставляя x=-1 в выражение на ветви иначе, получаем: y = -1 + ?(4 - 02) = 1. При x = 1 имеем: y = -1 + ?(4 - 22) = -1. Верный ответ №2.

  10.5. Значения переменных p и d после выполнения фрагмента алгоритма k := 66 выбор | при div( k, 12 ) = 7: d := k; p := да | при div( k, 12 ) <=5: d := 2; p := нет | при div( k, 12 ) > 9: d := 3; p := нет | иначе d := 1; p := да все равны

  1) p = да, d = 1     2) p = нет, d = 2    3) p = нет, d = 3

  4) p = да, d = 66   5) p = да, d = 2.

  Решение: Оператор выбор выполняется следующим образом. Проверяются перечисленные условия до нахождения первого справедливого. После этого исполняются те операторы, которые описаны после этого условия. Разделив 66 на 12 с остатком, видим, что неполное частное div(66,12)=5. Тем самым, исполняются операторы d := 2; p:=нет. Правильный ответ №2.

  10.6. Вычисляемое в программе S : = 0; T := 1 нц для I от 1 до 3 | S:= S+T+I | T : = mod(S,3) кц вывод S I S mod(S,3) T   0   1 1 0+1+1=2 mod(2,3) 2 2 2+2+2=6 mod(6,3) 0 3 6+0+3=9 mod(9,3) 0 значение переменной S равно

  1) 13    2) 26    3) 25     4) 9    5) 15

  Решение: Исполним алгоритм. Для этого составим таблицу: значение переменной S равно 9. Верный ответ №4.

  10.7. Во фрагмент программы m:=0; нц для k от 1 до n | если _______ | | то m := k | все кц определяющий индекс последнего элемента массива P[1..n], не равного x, нужно вписать логическое выражение    1) P[k] = x 2) P[k] > x 3) P[k] x    4) i <= n 5) P[k] m   Решение: Условие должно заключаться в проверке того, что элемент массива отличен от х. При этом если таких элементов в массиве нет, то переменная m на выходе имеет значение 0. Верный ответ №3.

  10.8. Вычисляемое в программе K := 0 нц для M от 1 до 12 | если mod(M,3)> mod(M,5) | | то K:= K + 1 | все кц вывод K значение переменной K равно

  1) 5    2) 7    3) 8     4) 6    5) 3

  Решение: Исполним алгоритм. Для этого составим таблицу: Разумно заполнять некоторые столбцы таблицы не по горизонтали (отрабатывая каждый шаг цикла), а по вертикали. В первый столбец заносим по порядку все значения параметра цикла M. Следующие два столбца - остатки от деления на 3 и на 5 тоже удобно заполнять, т.к. очевидна периодичность. Результат сравнения: истина - 1, ложь -0. К равно количеству единиц в предпоследнем столбце (т.к. до цикла К=0). M mod(M,3) mod(M,5) mod(M,3)>mod(M,5) K 1 1 1 0   2 2 2 0   3 0 3 0   4 1 4 0   5 2 0 1 1 6 0 1 0   7 1 2 0   8 2 3 0   9 0 4 0   10 1 0 1 2 11 2 1 1 3 12 0 2 0   Верный ответ №5.

  10.9. Для построения алгоритма поиска максимального значения в таблице a[1..N] нужно записать блоки A s := 1; нц для k   B s := 1; нц для i C от 1 до N   D от N до 1 E если ( s < a[k] )   F если (s < a[i] ) G то s := a[k]   H все кц I то s := a[i]   J или ( k = 1 ) в следующем порядке:

  1) ACEJGH    2) BCFIH    3) BDFIH    4) ADEGH    5) ADEJGH

  Решение: Алгоритм поиска максимального элемента таблицы состоит в следующем. Таблица просматривается с начального или конечного элемента. На каждом шаге известен максимальный из уже просмотренных элементов, он сравнивается со следующим элементом. В алгоритме, который можно составить из предложенных блоков, в качестве вспомогательной переменной (указателя номера следующего элемента) может использоваться k или i. При начале просмотра таблицы (массива) переменной s должно быть присвоено значение a[1], если таблица просматривается с начала, или a[N], если таблица просматривается с конца. В противном случае если, например, все числа в таблице равны 0, а s=1 (блок А), то переменная s в конце примет значение 1, то есть алгоритм даст неверный результат. Из представленных блоков только блок J предоставляет такую возможность. Следовательно, вспомогательной переменной должна являться k, и таблица должна читаться с первого элемента. Тем самым исключается использование блоков B,D,F,I. Поэтому отпадают все ответы кроме 1 и 4. В 4 ответе отсутствует блок J, который должен присутствовать в алгоритме. Тем самым, верным ответом может быть только №1. Выписывая подряд соответствующие блоки, убеждаемся в правильности этого ответа.

  10.10. При построении алгоритма вычисления произведения ненулевых элементов таблицы a[1..N] из набора блоков A p := 1; нц для k   B p := 1; нц для i C все кц   D от 1 до N E если ( 0 = a[i] )   F если (0 a[k] ) G то p := a[k] * p   H то p := p * a[i] не используются блоки:

  1) A, F, G    2) A, E, G    3) B, E, G    4) B, F, G    5) B, E, H

  Решение: p := 1; нц для k от 1 до N | если ( 0 a[k] ) | | то p := a[k] * p | все кц При выполнении этого задания необходимо определить ключевой блок, входящий в алгоритм. В данном примере - это проверка неравенства нулю очередного элемента массива (блок F). Такой выбор сразу позволяет определить лишние блоки по признаку "неиспользование переменной k": B, E и H. Из остальных блоков можно сконструировать правильный алгоритм по схеме ADFGC. Верный ответ №5.

  10.11. Значение переменной n после выполнения фрагмента алгоритма n:=0; нц для k от 1 до 1000 | если div( k, 300 ) = 1 и mod( k, 5 ) = 2 | | то n:=n+1 | все кц равно _____

  Решение: Условию div(k, 300) = 1 удовлетворяет 300 чисел: 300, …,599. Из них условию mod( k, 5 ) = 2 удовлетворяют каждое пятое: 302, 307,…,597 - всего их 60. Верный ответ: 60.

  10.12. Значение переменной k после выполнения фрагмента алгоритма k:=1; нц для i:=1 до 1000 | если mod(i, 3) =1 или mod(i,4) =3 | | то k:=k+1 | все кц равно _______________

  Решение: Значение переменной k возрастает на 1 при выполнении условия (mod(i, 3) =1 или mod(i, 4) =3). Среди чисел 1-12 данному условию удовлетворяют числа 1, 3, 4, 7, 10, 11. Поскольку условие выполняется с периодом 12, то при росте i от 1 до 83*12=996 переменная k возрастет на 83*6=498. Кроме того условие выполняется при i=996+1=997, i=996+3=997, i=996+4=1000. Это следует из отмеченной периодичности. Поэтому k возрастает в общей сложности 501 раз. Поскольку в начале выполнения алгоритма k=1, то в конце k=502. Верный ответ: 502.

  10.13. Вычисляемое в программе K := 0; нц для j от 1 до 10 | A[ j ]:= j кц нц для j от 1 до 10 | если int(A[j] /4) >= 2 | | то K: = K+j | все кц вывод K значение переменной К равно

  1) 14    2) 13    3) 11     4) 27    5) 16

  Решение: Исполним алгоритм. Для этого составим таблицу. Ее удобно заполнять по столбцам. J A[ j ] int (A[j]/4) int (A[j]/4)>= 2 K 1 1 0 нет 0 2 2 0 нет 0 3 3 0 нет 0 4 4 1 нет 0 5 5 1 нет 0 6 6 1 нет 0 7 7 1 нет 0 8 8 2 да 8 9 9 2 да 17 10 10 2 да 27 Верный ответ №4.

  10.14. Тело цикла во фрагменте алгоритма B := да; x := 44; нц пока B | B := ( x > 3 ); x := div( x, 4 ) + 1 кц выполнится

  1) 5 раз    2) 4 раза    3) 3 раза 4) 2 раза    5) 1 раз.

K B x   да 44 1 да 12 2 да 4 3 да 2 4 нет 1   Решение: Для решения этой задачи необходимо исполнить алгоритм. Это удобно сделать в виде таблицы. Логическая переменная В стоит в условии. Цикл выполняется до тех пор пока B принимает значение да. На четвертом шаге B принимает значение нет, следовательно это последний шаг цикла. Верный ответ №2.

  10.15. После выполнения фрагмента алгоритма c := 11; a := 24; b:= 14; d := 2*a - 3 нц пока d >= b | c := c - 1; d := d - b кц значения переменных c и d равны

1) c = 8, d = 3 2) c = 6, d = 7 3) c = 6, d = 6 4) c = 7, d = 7 5) c = 8, d = 13 С а b d d >= b 11 24 14 45 да 10     31 да 9     17 да 8     3 нет   Решение: Для решения этой задачи необходимо исполнить алгоритм. Воспользуемся таблицей значений переменных. Верный ответ №1.

  10.16. На печать в результате выполнения фрагмента алгоритма: нц пока n 0 | вывод ( 8+ mod (n,10 ) ); | n := div (n,10) кц было выведено число 15161713. Значение переменной n перед выполнением, этого фрагмента алгоритма было равно

  1) 3543    2) 3763    3) 5987    4) 5957    5) 5983

  Решение: На первом шаге цикла последовательность операторов выводит на печать значение выражения (8+ mod(n,10 )). Остаток целочисленного деления n на10 или mod(n,10 ) - это последняя цифра в записи числа n. Остаток может принимать значение от 0 до 9 и в сумме с 8 дает 15. Значит, число n заканчивается цифрой 7. Оператор n := div(n,10) изменяет n, а именно - отбрасывает последнюю цифру. Итак, на каждом шаге печатается сумма 8 и очередной цифры в записи числа n (если читать число n справа налево). Верный ответ №3.

  10.17. Тело цикла во фрагменте алгоритма m := 36; n := 56 нц пока m n | если m > n | | то m := m - n | | иначе n := n - m; | все кц выполнится

1) 0 раз 2) 4 раза 3) 6 раз 4) 8 раз 5) бесконечно много раз.   Решение: Исполним алгоритм. Для этого составим таблицу: M n mn Вхождение в цикл m>n 36 56 да + нет 36 20 да + да 16 20 да + нет 16 4 да + да 12 4 да + да 8 4 да + да 4 4 нет -  

Подсчитав число знаков + в предпоследнем столбце, устанавливаем, что цикл выполнился 6 раз. Правильный ответ №3.

  10.18. Даны пары чисел: (x=24; y=8); (x=9; y=8); (x=16; y=40); (x=60; y=12); (x=72; y=24). В результате выполнения фрагмента алгоритма m := abs(x); n := abs(y); нц пока ( m > 0 ) и ( n > 0 ) | если( m > n ) | | то m := mod(m, n) | | иначе n := mod(n, m); | все кц f := m + n; значение переменной f стало равным 8. Количество пар, для которых это истинно

  1) 5    2) 4    3) 3     4) 2    5) 1

  Решение: Исполним алгоритм для первой пары. Для этого составим таблицу: m n ( m > 0 ) и ( n > 0 ) m>n 24 8 да да 0   нет   Подсчитав f := m + n, получим 8. Аналогично исполняем этот алгоритм для каждой пары. Есть еще одна пара, удовлетворяющая условию - (x=16; y=40). Верный ответ №4.

Приведенный алгоритм есть алгоритм Евклида поиска наибольшего общего делителя двух целых чисел. Зная это, можно просто оценить имеющиеся пары чисел.

  10.19. Алгоритм закончит работу при начальных значениях 1) A = 0; C = -1 2) A = 1; C = -2 3) A = 3; C = -1 4) A = 2; C = -4 5) A = 1; C = -4   Решение: Отметим, что выход из первого цикла происходит только тогда, когда A<0, т.е. при начальном значении A=A0≥0 должно выполниться A0+1 операций вычитания. К начальному значению C=C0 за это время прибавится столько же единиц. Значит, при подходе ко второму условию (С>=0) переменная С примет значение С=C0+A0+1+1. Тем самым, условием выхода из второго цикла является неравенство C0+A0+1+1<0. Этому условию удовлетворяет только последний вариант ответа. Верный ответ №5.

  10.20. Дан массив a[0..4] : -2,1,-6,0,2. В представленном алгоритме подсчитывается значение переменной y = y(x). n:=4; k := 0; y := a[n]; нц | k := k + 1; | y := y * x + a [n - k]; пока не kn кц Истинным является неравенство 1) y(0)<y(1)<y(-2) 2) y(-2)<y(0)<y(1) 3) y(-2)<y(1)<y(0) 4) y(1)<y(0)<y(-2) 5) y(1)<y(0)=y(-2)   Решение: Значение переменной y при заданном x - этого значение многочлена в точке x y(x) = a[4]*x4 + a[3]*x3 + a[2]*x2 + a[1]*x1 + a[0] , который в данном случае вычисляется по схеме Горнера. Значения y(0) = -2 (это свободный член), y(1) = -5, y(-2) = 4. Верный ответ №4.

  10.21. Задан двумерный массив (таблица) A[1..n, 1..n]. Фрагмент алгоритма нц для i от 1 до div(n,2) | нц для j от 1 до n | | c:=a[i,j]; a[i,j]:=a[n-i+1,j]; a[n-i+1,j]:=c; | кц кц 1) меняет порядок строк таблицы A, 2) меняет порядок столбцов таблицы A, 3) меняет местами элементы главной и побочной диагонали в таблице A, 4) меняет местами элементы i-ой строки и i-го столбца таблицы A , 5) ничего не меняет.   Решение: Последовательность операторов c:=a[i,j]; a[i,j]:=a[n-i+1,j]; a[n-i+1,j]:=c; меняет местами значения переменных a[i,j] и a[n-i+1,j] , которые являются элементами таблицы, расположенными в одном столбце. Поскольку во внутреннем цикле переменная j изменяется от 1 до n, то при каждом значении i меняются местами строки с номерами i и n-i+1. Во внешнем цикле переменная i изменяется от 1 до середины каждого столбца. Отсюда видим, что фрагмент алгоритма переставляет местами строки матрицы. Верный ответ №1.

  10.22. Дан фрагмент программы нц для I от 1 до 3 | нц для J от 1 до 3 | | A[ I , J ]:= abs(2*I - J) | кц кц; S:= 0 нц для I от 1 до 3 | X := A [ I , I ] | нц для J от I до 3 | | если A [ I , J ] =X | | | то S := S+ A [ I , J ] | | все | кц кц; вывод S После его завершения значение переменной S равно _______.

  J=1 J=2 J=3 I=1 1 0 1 I=2 3 2 1 I=3 5 4 3   Решение: Исполним алгоритм. Для этого на первом этапе составим таблицу A по формуле A[ I , J ]:= abs(2*I - J). На следующем этапе накапливаем сумму, сравнивая элементы верхнего треугольника матрицы (вместе с диагональю) с соответствующими диагональными элементами. Значение переменной S равно 7.

  10.23. На интервале [2;n] найти натуральное число с максимальной суммой делителей. S_max:=0 нц для i от 2 до n | S:= 0; | нц для k от 1 до int(sqrt(i)) | | если mod(i,k) = 0 | | | то S := S +k; | | все | кц | S:= S +i; | если S>S_max | | то S_max := S; | все кц если n=10, S_max равно

  1) 11    2) 14    3) 15     4) 16    5) 17

  Решение: Внешний цикл - перебор чисел. Внутренний - поиск делителей. Оператор S:= S +i; включает в сумму делителей само число. Затем происходит выбор максимальной суммы делителей. Верный ответ №5.

  10.24. Вычисляемое в программе T:= 1/3; S:=T нц для I от 1 до 99 | T:=T*(2*I+1)/(2*I+3) | S:=S+T кц вывод S значение суммы S соответствует формуле с номером

1) 2) 3) 4) 5)   Решение: В примерах подобного типа имеет смысл оценить количество слагаемых в сумме, а также значения первого и второго слагаемых по каждой из приведенных формул. Так как число итераций равно 99, а каждая из сумм, кроме 2-ой, содержит 100 слагаемых, то 2-ой ответ заведомо неверен. Значение 1-го слагаемого должно быть равно 1/3 (1-я строка программы). Значение 2-го слагаемого (при I=1) T2 = T1*(2*I+1)/(2*I+3) = 1/3*(2*1+1)/(2*1+3) = 1/5. Проверив ответы, легко убедиться, что только для 5-го ответа получаются нужные значения: T1 = 1/3; T2 = 1/5. Верный ответ №5.

  10.25. Вычисляемое в программе A:="dfeadefa" N:= длин(А); B:="" нц для I от 2 до N | C:=A[ I : N ] | если mod( длин(С),2)=0 | | то В:=B+C[1 : 3] | все кц Е:=длин(В); вывод Е значение переменной E равно _______.

  Решение: После выполнения оператора N:= длин(А) значение N=8. До начала цикла B- пустая строка. Далее результаты работы алгоритма рассмотрим в таблице. Если значение выражение mod(длин(С),2)=0 - истинно, то в соответствующей ячейке стоит 1, иначе - 0. I C mod(длин(С),2) mod(длин(С),2)=0 C[1 : 3] B 2 feadefa mod( 7,2) =1 0     3 eadefa mod( 6,2) =0 1 ead ead 4 adefa mod( 5,2) =1 0     5 defa mod( 4,2) =0 1 def eaddef 6 efa mod( 3,2) =1 0     7 fa mod( 2,2) =0 1 fa eaddeffa 8 a mod( 1,2) =1 0     значение переменной E равно длине строки B, т.е. E = 8.

  10.26. Из предложенных алгоритмов. a) k := 0; b := 1; нц пока k n | k := k + 1; b := b*a; кц б) k := n; b := 1; c:=a; нц пока k 0 | если mod(k, 2) = 0 | | то k:= div(k, 2); c:= c*c; | | иначе b := b * c; | все кц в) k := n; b := 1; нц пока k 0 | k := k - 1; b := b * a; кц г) k := n; b := 0; c:=a; нц пока k 0 | если mod(k, 2) = 0 | | то k:= div(k, 2); c:= sqr(c) | | иначе b := b * c; | все кц вычисляют а в степени n.

  1) а , г    2) б , г    3) в, г    4) а , б , в    5) а , б , г

  Решение: Алгоритмы а) и в) накапливают произведение одинаковых слагаемых и за n шагов приводят к результату. В алгоритме б) каждый второй раз (не реже) будет выполняться первый вариант оператора выбора (если k нечетно, то после вычитания единицы становится четным), так что за два цикла величина k уменьшается по крайней мере вдвое. Алгоритм г) не решает задачу, т.к. при инициализации b=0. Верный ответ № 4.

  10.27. Дан массив A [ 1..4 ]: 3,7,1,5. Алгоритм n:=4; нц для I от 1 до n-1 | нц для J от 1 до n-1 | | если A [ J ] >=A [ J+1 ] | | | то p:=A [J ]; A [ J ]:=A [ J+1 ]; A [ J+1 ]:=p; | | все | кц кц; упорядочивает массив по возрастанию. Количество сравнений, в результате которых происходит обмен в ячейках A [ J ] и A [ J+1 ] равно

  1) 1    2) 2    3) 3     4) 4    5) 5

  Решение: Представлен алгоритм сортировки одномерного массива A [ 1..n ] "методом пузырька". Идея состоит в последовательном перемещении путем парных перестановок наибольшего значения сначала на место N-го элемента, затем N-1-го элемента и т.д. Верный ответ №3.

[Предыдущая тема] [Теоретическая часть] [Тестирование] [Следующая тема]

Соседние файлы в папке index_files