Рубрики

Язык C | Комплект 6

На экзамене GATE CS 2006 были заданы следующие вопросы.

1. Рассмотрим следующий фрагмент C-программы, в котором i, j и n являются целочисленными переменными.

for (i = n, j = 0; i >0; i /= 2, j += i);

Пусть val (j) обозначает значение, хранящееся в переменной j после завершения цикла for. Что из следующего верно?
(A) val (j) = Θ (logn)
(B) vaI (j) = Θ (sqrt (n))
(C) val (j) = Θ (n)
(D) val (j) = Θ (nlogn)

Ответ (С)

Обратите внимание на точку с запятой после цикла for, поэтому в теле ничего нет. Переменная j изначально равна 0, а значение j является суммой значений i. i инициализируется как n и уменьшается до половины в каждой итерации.

j = n / 2 + n / 4 + n / 8 + .. + 1 = Θ (n)

2. Рассмотрим следующую C-функцию, в которой a [n] и b [m] — это два отсортированных целочисленных массива, а c [n + m] — еще один целочисленный массив.

void xyz(int a[], int b [], int c[])

{

  int i, j, k;

  i = j = k = O;

  while ((i<n) && (j<m))

     if (a[i] < b[j]) c[k++] = a[i++];

     else c[k++] = b[j++];

}

Какие из следующих условий выполняются после завершения цикла while?
(я) J
(A) только (I)
(B) только (II)
(C) либо (I) или (II), но не оба
(D) ни (i), ни (ii)

Ответ (С)
Условие (i) истинно, если последний вставленный элемент в c [] от a [], а условие (ii) истинно, если последний вставленный элемент от b [].


3. Рассмотрим этот код C, чтобы поменять местами два целых числа и эти пять операторов: код

void swap(int *px, int *py) 

{

   *px = *px - *py;

   *py = *px + *py;

   *px = *py - *px;

}

S1: сгенерирует ошибку компиляции
S2: может генерировать ошибку сегментации во время выполнения в зависимости от переданных аргументов
S3: правильно реализует процедуру обмена для всех входных указателей, относящихся к целым числам, хранящимся в ячейках памяти, доступных для процесса
S4: правильно реализует процедуру обмена для некоторых, но не для всех допустимых указателей ввода
S5: может добавлять или вычитать целые числа и указатели.
(А) S1
(B) S2 и S3
(С) S2 и S4
(D) S2 и S5

Ответ (С)
S2: может генерировать ошибку сегментации, если значение в указателях px или py является постоянным или px или py указывают на недопустимую область памяти
S4: Может не работать для всех входов, так как может произойти арифметическое переполнение.

Пожалуйста, пишите комментарии, если вы найдете какие-либо неправильные ответы / объяснения, или вы хотите поделиться дополнительной информацией по темам, обсужденным выше.

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

Язык C | Комплект 6

0.00 (0%) 0 votes