Lenguaje C | conjunto 9

Las siguientes preguntas se han hecho en el examen GATE 2012.
1. ¿Cuál será el resultado del siguiente segmento del programa C? 
 

C

char inchar = 'A';
switch (inchar)
{
case 'A' :
    printf ("choice A \n") ;
case 'B' :
    printf ("choice B ") ;
case 'C' :
case 'D' :
case 'E' :
default:
    printf ("No Choice") ;
}

(A) No hay opción 
(B) Opción A 
(C) Opción A 
Opción B No hay opción 
(D) El programa no da resultados porque es erróneo
Respuesta (C) 
No hay declaración de ruptura en el caso ‘A’. Si se ejecuta un caso y no contiene interrupción, todos los casos posteriores se ejecutan hasta que se encuentra una declaración de interrupción. Es por eso que todo lo que está dentro del interruptor está impreso. 
Trate de seguir el programa como un ejercicio. 
 

C

int main()
{
    char inchar = 'A';
    switch (inchar)
    {
    case 'A' :
        printf ("choice A \n") ;
    case 'B' :
    {
        printf ("choice B") ;
        break;
    }
    case 'C' :
    case 'D' :
    case 'E' :
    default:
        printf ("No Choice") ;
    }
}

2. Considere el siguiente programa en C 
 

C

int a, b, c = 0;
void prtFun (void);
int main ()
{
    static int a = 1; /* line 1 */
    prtFun();
    a += 1;
    prtFun();
    printf ( "\n %d %d " , a, b) ;
}
 
void prtFun (void)
{
    static int a = 2; /* line 2 */
    int b = 1;
    a += ++b;
    printf (" \n %d %d " , a, b);
}

¿Qué salida generará el segmento de código dado?  
(A) 3 1 
4 1 
4 2 
(B) 4 2 
6 1 
6 1 
(C) 4 2 
6 2 
2 0 
(D) 3 1 
5 2 
5 2
Respuesta (C) 
‘a’ y ‘b’ son variables globales . prtFun() también tiene ‘a’ y ‘b’ como variables locales. Las variables locales ocultan las globales (consulte las reglas de alcance en C ). Cuando se llama a prtFun() por primera vez, la ‘b’ local se convierte en 2 y la ‘a’ local se convierte en 4. 
Cuando se llama a prtFun() por segunda vez, se usa la misma instancia de ‘a’ estática local y una nueva instancia de ‘b ‘ se crea porque ‘a’ es estático y ‘b’ no es estático. Entonces ‘b’ se vuelve 2 nuevamente y ‘a’ se convierte en 6. 
main() también tiene su propia variable estática local llamada ‘a’ que oculta la ‘a’ global en main. La instrucción printf() en main() accede a la ‘a’ local e imprime su valor. La misma instrucción printf() accede a la ‘b’ global ya que no hay una variable local llamada ‘b’ en main. Además, el valor predeterminado de las variables int estáticas y globales es 0. Es por eso que la instrucción printf en main() imprime 0 como valor de b.
3. ¿Qué salida generará el segmento de código dado si:  
La línea 1 se reemplaza por “auto int a = 1”; 
La línea 2 se reemplaza por “registro int a = 2;”  
(A) 3 1 
4 1 
4 2 
(B) 4 2 
6 1 
6 1 
(C) 4 2 
6 2 
2 0 
(D) 4 2 
4 2 
2 0
Respuesta (D) 
Si reemplazamos la línea 1 por “auto int a = 1;” y la línea 2 por «register int a = 2;», entonces ‘a’ se vuelve no estático en prtFun(). La salida del primer prtFun() sigue siendo la misma. Pero, la salida de la segunda llamada prtFun() cambia a medida que se crea una nueva instancia de ‘a’ en la segunda llamada. Entonces “4 2” se imprime de nuevo. Finalmente, el printf() en main imprimirá “2 0”. Hacer que ‘a’ sea una variable de registro no cambiará nada en la salida.
Consulte GATE Corner para ver todos los trabajos/soluciones/explicaciones del año anterior, plan 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 *