Рубрики

ВОРОТА | GATE-CS-2006 | Вопрос 55

Рассмотрим эти две функции и два утверждения S1 и S2 о них.

int work1(int *a, int i, int j)

{

    int x = a[i+2];

    a[j] = x+1;

    return a[i+2] – 3;

}

  

int work2(int *a, int i, int j)

{

    int t1 = i+2;

    int t2 = a[t1];

    a[j] = t2+1;

    return t2 – 3;

}

S1: Форма преобразования work1 в work2 действительна, т. Е. Для любого состояния программы и входных аргументов work2 будет вычислять тот же вывод и оказывать такое же влияние на состояние программы, что и work1
S2: Все преобразования, применяемые к work1 для получения work2, всегда улучшают производительность (т. Е. Сокращают время процессора) работы2 по сравнению с работой1
(A) S1 ложно и S2 ложно

(B) S1 ложно и S2 верно
(C) S1 верно и S2 ложно
(D) S1 верно, а S2 верно

Ответ: (А)
Объяснение: (S1): возьмем контрпример, Array = [1, 2, 3, 4, 5] и i = 0. Пусть j = (i + 2), поэтому j = (0 + 2) = 2.
Для этого примера work1 и work2 вернут 1 и 0 соответственно. Итак, утверждение неверно.

Рекомендуемые посты:

ВОРОТА | GATE-CS-2006 | Вопрос 55

0.00 (0%) 0 votes