Salida de programas en C | conjunto 2

Prediga la salida de los siguientes programas. 
Pregunta 1 

c

#include<stdio.h>
char *getString()
{
    char str[] = "Will I be printed?";   
    return str;
}
int main()
{
    printf("%s", getString());
    getchar();
}

Salida: algún valor basura 
El programa anterior no funciona porque las variables de array se almacenan en la sección de pila. Entonces, cuando getString devuelve los valores en str se eliminan y str se convierte en un puntero colgante.
Pregunta 2 
 

C

#include<stdio.h>
int main()
{
    static int i=5;
    if(--i){
        main();
        printf("%d ",i);
    }  
}
Producción

0 0 0 0 

Explicación: dado que i es una variable estática y se almacena en la sección de datos, todas las llamadas a main comparten la misma i. 
Pregunta 3 
 

c

#include<stdio.h>
int main()
{
    static int var = 5;
    printf("%d ",var--);
    if(var)
        main();                  
}
Producción

5 4 3 2 1 

 
Explicación: Igual que la pregunta anterior. La única diferencia aquí es que la secuencia de llamadas a main y printf cambia, por lo tanto, la salida es diferente.
Pregunta 4 
 

C

#include<stdio.h>
int main()
{
    int x;
    printf("%d",scanf("%d",&x));
    /* Suppose that input value given
        for above scanf is 20 */
    return 1;
}
Producción

1

scanf devuelve el no. de entradas que ha leído con éxito.
Pregunta 5 
 

C

# include <stdio.h>
int main()
{
   int i=0;
   for(i=0; i<20; i++)
   {
     switch(i)
     {
       case 0:
         i+=5;
       case 1:
         i+=2;
       case 5:
         i+=5;
       default:              
         i+=4;
         break;
     }
     printf("%d  ", i);
   }
 
   getchar();
   return 0;
}  
Producción

16  21  

Explicación: 
Inicialmente i = 0. Dado que el caso 0 es verdadero, i se convierte en 5, y dado que no hay declaración de interrupción hasta la última declaración del bloque de cambio, i se convierte en 16. Antes de comenzar la siguiente iteración, i se convierte en 17 debido a i++. Ahora, en la próxima iteración, ningún caso es verdadero, por lo que la ejecución se vuelve predeterminada y i se convierte en 21.
En C, si un caso es verdadero, el bloque de interruptores se ejecuta hasta que encuentra una declaración de ruptura. Si no está presente ninguna declaración de interrupción, todos los casos se ejecutan después del caso verdadero. Si desea saber por qué el interruptor se implementa de esta manera, esta implementación es útil para situaciones como las siguientes.
 

 switch (c)
 {
    case 'a':
    case 'e':
    case 'i' :
    case 'o':
    case 'u':
      printf(" Vowel character");
      break;
    default : 
      printf("Not a Vowel character"); 
      break;    
  } 

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 *