Conceptos básicos de programación en C: lógica booleana y flujo de control

8

La mayoría de la gente piensa que la codificación se trata de algoritmos complejos. No lo es. Se trata principalmente de tomar decisiones simples. En C, esas opciones se reducen a una sola cosa: expresiones booleanas.

Los has visto en sentencias if y bucles ** while**. Son los semáforos de su programa. El verde va. Paradas rojas.

Tomemos este ejemplo básico.

Pide un número. Comprueba si ese número es menor que cero. Si es así, el programa habla. ¿Si no lo es? Silencio.

La parte (b < 0) es la expresión booleana. C lo evalúa. Verdadero significa ejecutar la siguiente línea. Falso significa omitirlo. Simple.

Pero ¿qué pasa cuando necesitas más matices?

Manejo de valores cero y positivos

El único control anterior deja un vacío. ¿Qué pasa si el usuario ingresa cero? ¿O un número entero positivo? El programa los ignora.

Aquí hay una estructura un poco más compleja.

Ahora tienes lógica para valores negativos, cero y positivos. Las secciones "else if" y "else" capturan los otros casos. Sigue siendo básico, pero cubre todas las bases.

Condiciones complejas y errores comunes

La lógica del mundo real rara vez es simple. A veces se necesitan dos condiciones para que se cumplan a la vez.

Considere esta línea:

Léelo como en inglés. Si x es igual a y Y j es mayor que k, establezca z en 1. De lo contrario, establezca q en 10.

Observe a los operadores.

C usa == para probar la igualdad. Utiliza un solo = para asignar un valor.

Esta es una trampa clásica. Si escribes "if (x = y)", no estás comprobando si son iguales. Está asignando y a x y luego verificando si el resultado es distinto de cero. Tu lógica se rompe. Utilice siempre dobles iguales para las comparaciones.

El símbolo && representa una operación booleana AND. Ambas partes deben ser ciertas.

El kit de herramientas completo para operadores booleanos

No es necesario que los memorices, pero sí debes saber cómo son. Aparecen en todas partes en código C.

  • Igualdad : ==
  • Desigualdad : !=
  • Menos de : <
  • Mayor que : >
  • Menor o igual a : <=
  • Mayor o igual a : >=
  • Y : &&
  • O : ||
  • NO : !

Por qué esto es importante para los usuarios cotidianos

Lógica de bucle en C: estructuras while, do- while y for

Puede utilizar bucles ** while con la misma facilidad que las declaraciones if** básicas. Considere un ejemplo simple:

Este código repite esas dos líneas hasta que a sea mayor o igual a b. La estructura es sencilla. C también ofrece una construcción do- while, que garantiza que el bloque de código se ejecute al menos una vez antes de verificar la condición. Aquí hay un fragmento que muestra una verificación de entrada básica:

Cómo el bucle for simplifica la iteración

El bucle for es esencialmente una abreviatura de un bucle ** while**. Si tienes un código como este:

Puedes comprimirlo en una sola declaración para :

El bucle ** while tiene tres partes distintas: inicialización ( x=1), prueba ( x<10) e incremento ( x++). El bucle for** los agrupa en una sola línea. Pero no estás limitado a variables simples. Mire este escenario más complejo:

Puedes reescribir esto usando un bucle for :

Parece desordenado. Es confuso. Pero funciona. El operador de coma le permite encadenar varias declaraciones en las secciones de inicialización e incremento de un bucle for. Sin embargo, no puedes poner una coma en la sección de prueba.

A muchos programadores de C les encanta empaquetar la lógica en una sola línea. Otros argumentan que destruye la legibilidad. No existe un consenso universal. Sólo tienes que decidir si valoras la brevedad sobre la claridad.

El peligro de = vs == en expresiones booleanas

El doble signo igual == es una fuente de errores frecuentes en C. Los desarrolladores suelen escribir un solo signo igual = por error. El compilador acepta ambos, pero el comportamiento es drásticamente diferente.

En C, las expresiones booleanas se evalúan como números enteros. Cero significa Falso. Cualquier número entero distinto de cero significa Verdadero. Esto significa que puedes escribir legalmente:

Pero, ¿qué pasa si escribes "si (a = b)"?

Esta no es una comparación. Es una tarea. La declaración if (a=b) asigna el valor de b a a, luego prueba el valor resultante de a para determinar su veracidad booleana. Si a se vuelve cero, la condición es Falsa. Si se convierte en otra cosa, es Verdadero.

Su variable a cambia de valor durante este proceso. Esto rara vez es lo que desea cuando desea comparar valores. Si bien esta función de asignación condicional puede resultar útil en contextos específicos, es una trampa para los incautos. Tenga cuidado con su uso = y ==. Un error tipográfico lo cambia todo.