Salida de programas C | Conjunto 55 (Operadores Ternarios)

Predecir la salida de los siguientes programas
Pregunta 1

#include <stdio.h>
int main()
{
    int x, a = 0;
    x = sizeof(a++) ? printf("Geeks for Geeks\n") : 0;
    printf("Value of x:%d\n", x);
    printf("Value of a:%d", a);
    return 0;
}

Producción:

Geeks for Geeks
Value of x:16
Value of a:0

Explicación: sizeof es un operador de tiempo de compilación, por lo que en el momento de la compilación, sizeof y su operando se reemplazan por el valor del resultado. El operando no se evalúa (excepto cuando es una array de longitud variable) en absoluto; sólo importa el tipo de resultado. En el operador sizeof, a++ no se evaluará. Por lo tanto, seguirá siendo el mismo, es decir, el valor de a será 0.
printf devuelve el número de ancho. Geeks for Geeks tiene un ancho de 16. Esto devolverá 16. Así que x ahora es 16.

Pregunta 2

#include <stdio.h>
int main()
{
    int x;
    x = 5 > 8 ? 10 : 1 != 2 < 5 ? 20 : 30;
    printf("Value of x:%d", x);
    return 0;
}

Producción:

Value of x:30

Explicación :

exp1?exp2:exp3          
5 > 8 ? 10: 1!= 2<5 ? 20:30

La salida de exp1 es falsa, por lo que se evaluará exp3 (1 != 2 <5 ? 20 : 30). En exp3, esta también es una forma de operador ternario.
1 != 2< 5 ? 20 : 30 ( exp1 ? exp2 : exp3 )
Ahora, se evaluará exp1. De acuerdo con la precedencia del operador, 2<5 se evaluará primero (dará como resultado 1). Ahora, exp1 es como 1!=1 (la condición es falsa). Entonces, se evaluará exp3. Por lo tanto, la salida final es 30.

Pregunta 3

#include <stdio.h>
int main()
{
    int x;
    x = 5 < 8 ? 1 != 2 < 5 == 0 ? 10 : 20 : 30;
    printf("Value of x:%d", x);
    return 0;
}

Producción:

Value of x:10

Explicación :

exp1?exp2:exp3
5 < 8? 1!=2<5 == 0 ? 10:20:30

exp1 es verdadero, por lo que se evaluará exp2. exp2 también está en forma de operador ternario.
1!= 2<5 == 0? 10 : 20 ( exp1?exp2:exp3 )
se evalúa exp1(1 != 2 < 5 ==0). En exp1, de acuerdo con la precedencia del operador, 2<5 se evaluará primero (la condición es verdadera). Ahora exp1 es 1!=1==0. Nuevamente, de acuerdo con la precedencia del operador, se evalúa 1==0 (la condición es falsa). Ahora exp1 es 1! = 0 (la condición es verdadera). Ahora, se evaluará exp2. Por lo tanto, el resultado final es 10.

Pregunta 4

#include <stdio.h>
#include <stdio.h>
int main()
{
    int x;
    x = 2 > 5 != 1 ? 5 < 8 && 8 > 2 ? !5 ? 10 : 20 : 30 : 40;
    printf("Value of x:%d", x);
    return 0;
}

Producción:

Value of x:20

Explicación:

exp1?exp2:exp3
2 > 5 != 1 ? 5 2 ? !5 ? 10:20:30:40

exp1 se evaluará siempre. De acuerdo con la precedencia del operador, 2>5 se evaluará primero (la condición es falsa). Ahora, exp1 es 0! = 1. La condición es verdadera. Entonces, se evaluará exp2, esto también está en forma de operador ternario.

52 ? !5 ? 10:20:30 
(exp1?exp2:exp3)

se evaluará exp1. De acuerdo con la precedencia del operador, se evaluará 52 (la condición es verdadera). Ahora, exp1 es 1&&1 (la condición es verdadera). Entonces se evaluará exp2, también está en forma de operador ternario.

!5 ? 10:20 (exp1?exp2:exp3)

Se evaluará exp1, el valor de !5 es cero, por lo que se evaluará exp3. La salida final será 20.

Pregunta 5

#include <stdio.h>
int main()
{
    int x;
    x = 2 > 5 ? 1 != 2 > 5 ? 10 : 20 : 5 < 8 ? 2 != 2 > 5 ?
    !5 ? 30 : !1 != 1 ? 40 : 50 : 60 : 70;
    printf("Value of x:%d", x);
    return 0;
}

Producción:

Value of x:40

Explicación

exp1?exp2:exp3
2>5   ?   1!=2>5?10:20   :  55?!5?30:!1!=1?40:50:60:70;

exp1 se evaluará siempre. 2>5 (la condición es falsa), por lo que se evaluará exp3, que también está en forma de operador ternario.

55?!5?30:!1!=1?40:50:60 : 70  (exp1?exp2:exp3)

Se evaluará exp1, 5<8 (la condición es verdadera), por lo que se evaluará exp2, que también está en forma de operador ternario.

2!=2>5  ?  !5?30:!1!=1?40:50  :  60 (exp1?exp2:exp3)

Se evaluará exp1. De acuerdo con la precedencia del operador, 2>5 se evaluará primero (la condición es falsa). Entonces, exp1 ahora es 2! = 0 (la condición es verdadera). Ahora, se evaluará exp2, que está en forma de operador ternario.

!5  ?  30  :  !1!=1?40:50  (exp1?exp2:exp3)

se evaluará exp1, el valor de !5 es cero. Entonces, se evaluará exp3, que está en forma de operador ternario.

!1!=1  ?  40  :  50  (exp1?exp2:exp3)

exp1 será evaluado. De acuerdo con la precedencia del operador, !1 será evaluado primero, es decir. 0. Ahora, exp1 es 0! = 1 (la condición es verdadera), se evaluará exp2. Por lo tanto, la salida final es 40.

Este artículo es una contribución de Vinay Singh . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado 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 *