Lenguaje C | conjunto 8

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

1) ¿Qué imprime el siguiente fragmento de programa C?

char c[] = "GATE2011";
char *p =c;
printf("%s", p + p[3] - p[1]) ;

(A) PUERTA2011
(B) E2011
(C) 2011
(D) 011

Respuesta: (C)
Ver comentarios para una explicación.

char c[] = "GATE2011";
 
 // p now has the base address string "GATE2011"
char *p =c; 
 
// p[3] is 'E' and p[1] is 'A'.  
// p[3] - p[1] = ASCII value of 'E' - ASCII value of 'A' = 4
// So the expression  p + p[3] - p[1] becomes p + 4 which is 
// base address of string "2011"
printf("%s", p + p[3] - p[1]) ; 

2) Considere la siguiente función C recursiva que toma dos argumentos

unsigned int foo(unsigned int n, unsigned int r) {
  if (n  > 0) return (n%r +  foo (n/r, r ));
  else return 0;
}

¿Cuál es el valor de retorno de la función foo cuando se llama como foo(513, 2)?
(A) 9
(B) 8
(C) 5
(D) 2

Respuesta: (D)
foo(513, 2) devolverá 1 + foo(256, 2). Todas las llamadas recursivas posteriores (incluida foo(256, 2)) devolverán 0 + foo(n/2, 2) excepto la última llamada foo(1, 2) . La última llamada foo(1, 2) devuelve 1. Entonces, el valor devuelto por foo(513, 2) es 1 + 0 + 0…. + 0 + 1.
La función foo(n, 2) básicamente devuelve la suma de bits (o el recuento de bits establecidos) en el número n.


3) ¿Cuál es el valor de retorno de la función foo cuando se llama como foo(345, 10)?

(A) 345
(B) 12
(C) 5
(D) 3

Respuesta: (B)
La llamada foo(345, 10) devuelve la suma de los dígitos decimales (porque r es 10) en el número n. La suma de los dígitos de 345 es 3 + 4 + 5 = 12.

Consulte GATE Corner para ver todos los documentos/soluciones/explicaciones del año anterior, programa de estudios, fechas importantes, notas, etc.

Escriba comentarios si encuentra que alguna de las respuestas/explicaciones es incorrecta, o si desea compartir más información sobre los temas discutidos anteriormente.

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 *