Cómo programar en C

Qué es C ?

C es un lenguaje de programación de bajo nivel. Es muy "cercano" al leguaje de máquina. Si tuviera que clasificarse, C es de mayor nivel que lenguajes como assembler pero de menor nivel que lenguajes como C++ y de mucho menor nivel que lenguajes como Python. En esta entrada, se va a omitir y simplificar MUCHA información. Está enfocada a alguien que no sabe absolutamente nada de programación.

Cómo programar en C ?

Para programar en C, se necesita un programa (compilador) normalmente llamado gcc o bien, puedes utilizar un compilador online que internamente utiliza el compilador.
El compilador es el encargado de interpretar el lenguaje C y pasarlo a lenguaje de máquina, literalmente unos (1) y ceros (0) para que que el computador pueda entender y ejecutar el programa. Una vez que tienes el compilador a mano, debes comenzar a aprender la sintaxis y la manera en la que funciona un programa escrito en C, sigue leyendo.

Ejecución de programa

Todo programa en C, es interpretado en orden secuencial (primera instrucción/linea, luego la segunda, luego la tercera, etc). Las instrucciones/lineas, son separadas por un punto y coma ";" y son independientes de la indentación. En C, la ejecución del programa parte por la primera instrucción de una función main. El siguiente código, es 100% funcional, pero no hace nada.
/* este programa no hace nada */
int main {

}
Las palabras contenidas entre /* y */ son comentarios, desde el punto de vista del programa, no son relevantes. Son usados para que una persona pueda leer el comentario, para tratar de clarificar lo que hace una sección del programa. En este caso el comentario: /* este programa no hace nada */, le dice a una persona que "este programa no hace nada". Este programa retorna un Warning al ser compilado, más adelante se explica porqué.

Variables

Las variables son objetos que almacenan valores. Los programas en C usan las variables para tomar decisiones o ejecutar acciones dentro del programa. Las variables son de un tipo, los más comunes son:
  • char: caracter, tal como: 'a', '!', '5', etc.
  • int: número entero, tal como: 0, -5, 1241, etc.
  • float: número real, tal como: -1.55, 86172, -9191741690084.000455
En C (y en cualquier programa en realidad), el contenido de las variables es finito, i.e. están limitados:
  • char: Los valores están limitados a los caracteres ASCII (esto no es tan cierto)
  • int: Los valores dependen de la máquina, pero como mínimo contienen el rango: [−32,767, +32,767]
  • float: También depende de la máquina, el valor más pequeño representable es aproximadamente 1.175494351*E-38 y el valor máximo que puede representar es aproximadamente 3.402823466*E+38
Para definir el tipo de variable, debemos definir el tipo y darle un nombre. Al definir la variable, le asignamos su valor (son conceptos distintos, pero en este momento no importa):
int main {
    int a = -10; /* le damos el valor -10 a la variable tipo int llamada "a" */
    char letra = 's'; /* le asignamos a la variable tipo char llamada "letra" el valor 's' */
}

Expresiones compuestas

Las expresiones compuestas son expresiones ejecutan una función determinada, tipicamente:
  • Comparar: Realizar comparaciones entre objetos.
    int main {
        int a = -10;
        if (a < 0){
            a = 0; /* forzamos que a sea 0 */
        }else{
            a = a; /* a retiene su valor */
        }
    }
    
  • Generar Bucles: Repetir bloques de código.
    /* este programa trata de buscar si converge la sucesión b_{i+1} = b_i/2 + 2.5 cuando i es grande con b_1 = 40 */
    int main {
        float b = 40;
        for (int i = 0; i<100; i++){
            b = b/2 + 2.5; /* repetimos 100 veces */
        }
    }
    
  • Llamar funciones: Llamar bloques de código que reciben parámetros determinados.
    #include <stdio.h>
    
    /* este programa trata de buscar si converge la sucesión b_{i+1} = b_i/2 + 1 cuando i es grande con b_1 = 3 */
    int main(){
        float b = 40;
        for (int i = 0; i<50; i++){
            b = b/2 + 2.5; /* repetimos 50 veces */
        }
        printf("%f",b); /* imprimimos a la consola */
    }