Lenguaje C | conjunto 2

Se han hecho las siguientes preguntas en el examen GATE CS.

1. Considere el siguiente segmento de programa C:

char p[20];
char *s = "string";
int length = strlen(s);
int i;
for (i = 0; i < length; i++)
     p[i] = s[length — i];
printf("%s",p);

La salida del programa es (GATE CS 2004)
a) gnirts
b) gnirt
c) string
d) no se imprime ninguna salida

Respuesta(d)
Consideremos la siguiente línea dentro del bucle for
p[i] = s[longitud — i];
Para i = 0, p[i] será s[6 — 0] y s[6] es ‘\0’
Entonces p[0] se convierte en ‘\0’. No importa lo que venga en p[1], p[2]….. ya que P[0] no cambiará para i >0. No se imprime nada si imprimimos una string con el primer carácter ‘\0’


2. Considere la siguiente función C

void swap (int a, int b)
{
   int temp;
   temp = a;
   a = b;
   b = temp;
}

Para intercambiar los valores de dos variables x e y. (PUERTA CS 2004)

a) intercambio de llamadas (x, y)
b) intercambio de llamadas (&x, &y)
c) intercambio (x,y) no se puede usar porque no devuelve ningún valor
d) intercambio (x,y) no se puede usar como parámetros se pasan por valor

Respuesta (d)
¿Por qué a, b y c son incorrectos?
a) el intercambio de llamadas (x, y) no causará ningún efecto en xey ya que los parámetros se pasan por valor.
b) el intercambio de llamadas (&x, &y) no funcionará ya que la función swap() espera valores, no direcciones (o punteros).
c) no se puede usar swap (x, y) pero la razón dada no es correcta.

3. Considere la siguiente función C:

int f(int n)
{
   static int i = 1;
   if (n >= 5)
      return n;
   n = n+i;
   i++;
   return f(n);
}

El valor devuelto por f(1) es (GATE CS 2004)
a) 5
b) 6
c) 7
d) 8

Respuesta (c)
Dado que i es estático, la primera línea de f() se ejecuta solo una vez.

Execution of f(1) 
    i = 1
    n = 2
    i = 2
 Call f(2) 
    i = 2
    n = 4
    i = 3
 Call f(4) 
   i = 3
   n = 7
   i = 4
 Call f(7)
  since n >= 5 return n(7)


4. Considere el siguiente fragmento de programa para invertir los dígitos en un entero dado para obtener un nuevo entero. Sea n = D1D2…Dm

int n, rev;
rev = 0;
while (n > 0) 
{
   rev = rev*10 + n%10;
   n = n/10;
}

La condición invariable del bucle al final de la i-ésima iteración es: (GATE CS 2004)

a) n = D1D2….Dm-i y rev = DmDm-1…Dm-i+1
b) n = Dm-i+1…Dm-1Dm y rev = Dm-1….D2D1
c) n ≠ rev
d ) n = D1D2….Dm y rev = DmDm-1…D2D1

respuesta (a)


5. Considere el siguiente programa en C

main()
{
   int x, y, m, n;
   scanf ("%d %d", &x, &y);
   /* x > 0 and y > 0 */
   m = x; n = y;
   while (m != n)
   { 
      if(m>n)
         m = m - n;
      else
         n = n - m;
   }
   printf("%d", n);
}

El programa calcula (GATE CS 2004)
a) x + y usando restas repetidas
b) x mod y usando restas repetidas
c) el máximo común divisor de x e y
d) el mínimo común múltiplo de x e y

Respuesta (c)
Esta es una implementación del algoritmo de Euclides para encontrar GCD

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *