Рубрики

Язык C | Набор 10

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

1) Рассмотрим следующую программу на языке Си:

#include <stdio.h>
main()
{

    int i;

    int *pi = &i;

    scanf("%d", pi);

    printf("%d\n", i+5);

}

Какое из следующих утверждений является ИСТИННЫМ?
(A) Компиляция не удалась.
(B) Выполнение приводит к ошибке во время выполнения.
(C) При выполнении напечатанное значение на 5 больше, чем адрес переменной i.
(D) При выполнении напечатанное значение на 5 больше, чем введенное целое значение.

Ответ: (D)
Объяснение: В программе нет проблем, так как пи указывает на правильное местоположение.
Также в scanf () мы передаем адрес переменной, а pi это адрес.

2) Рассмотрим функцию func, показанную ниже:

int func(int num)

{

    int count = 0;

    while (num)

    {

        count++;

        num >>= 1;

    }

    return (count);

}

Значение, возвращаемое функцией (435): __________.

Ответ: 9
Объяснение: Функция в основном возвращает позицию старшего значащего бита в двоичном представлении n. MSD в двоичном представлении 435 является 9-ым битом.

3) Рассмотрим функцию C, приведенную ниже.

int f(int j)

{

  static int i = 50;

  int k;

  if (i == j)

  {

    printf("something");

    k = f(i);

    return 0;

  }

  else return 0;

}

Что из следующего является ИСТИННЫМ?
(A) Функция возвращает 0 для всех значений j.
(B) Функция печатает строку что-то для всех значений j.
(C) Функция возвращает 0, когда j = 50.
(D) Функция исчерпает стек времени выполнения или запускается в бесконечный цикл, когда j = 50

Ответ: (D)
Объяснение: Когда j равен 50, функция будет вызывать себя снова и снова, поскольку ни i, ни j не изменяются внутри рекурсии.

4) Рассмотрим функцию C, приведенную ниже. Предположим, что массив listA содержит n (> 0) элементов, отсортированных по возрастанию.

int ProcessArray(int *listA, int x, int n)

{

    int i, j, k;

    i = 0;

    j = n-1;

    do{

        k = (i+j)/2;

        if (x <= listA[k])

            j = k-1;

        if (listA[k] <= x)

            i = k+1;

    } while (i <= j);

    if (listA[k] == x)

        return(k);

    else

        return -1;

}

Какое из следующих утверждений о функции ProcessArray является ПРАВИЛЬНЫМ?
(A) Он попадет в бесконечный цикл, когда x отсутствует в listA.
(B) Это реализация бинарного поиска.
(C) Он всегда найдет максимальный элемент в listA.
(D) Он вернет -1, даже если x присутствует в listA.

Ответ: (Б)
Объяснение: Программа представляет собой простую итеративную реализацию C двоичного поиска .

5) Рассмотрим следующую функцию

double f(double x)

{

   if (abs(x*x - 3) < 0.01) return x;

   else return f(x/2 + 1.5/x);

}

Задайте значение q (с точностью до 2 десятичных знаков), чтобы f (q) вернуло q: _____ .

Ответ: 1.732
Объяснение:
Главное, на что следует обратить внимание, это выражение «abs (x * x — 3) 2 близко к 0 (меньше 0,01), что означает, что когда x близко к квадратному корню из 3. Квадратный корень из 3 равен 1,732.


Смотрите ниже для полного решения всех работ GATE CS 2014

GATE-CS-2014- (Set-1)
GATE-CS-2014- (Set-2)
GATE-CS-2014- (Set-3)

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

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

Язык C | Набор 10

0.00 (0%) 0 votes