Volver a los posts
•
cprogramacióntutoriales

calculadora elemental en c

el código detrás del «algoritmo»

a mi hermano menor le dejaron una práctica de introducción a la programación en la prepa: escribir un programa en C que lea dos números y calcule su suma, resta, multiplicación, división y potencia.

la profesora les dio el ejemplo para sumar dos enteros con scanf y printf. para extenderlo a las demás operaciones sin meter cosas raras ni funciones complejas, este es el código escrito de la forma más directa y clara posible para alguien que está aprendiendo.

el código

#include <stdio.h>

int main() {
    int a;
    int b;

    printf("ingresa el primer número: ");
    scanf("%d", &a);

    printf("ingresa el segundo número: ");
    scanf("%d", &b);

    /* 1. suma */
    int suma = a + b;
    printf("suma: %d\n", suma);

    /* 2. resta */
    int resta = a - b;
    printf("resta: %d\n", resta);

    /* 3. multiplicación */
    int multiplicacion = a * b;
    printf("multiplicación: %d\n", multiplicacion);

    /* 4. división */
    if (b == 0) {
        printf("división: no se puede dividir entre cero\n");
    } else {
        float division = (float)a / b;
        printf("división: %.2f\n", division);
    }

    /* 5. potencia (a elevado a b) */
    if (b < 0) {
        printf("potencia: solo exponentes positivos o cero\n");
    } else {
        int potencia = 1;
        for (int i = 0; i < b; i++) {
            potencia = potencia * a;
        }
        printf("potencia: %d\n", potencia);
    }

    return 0;
}

paso por paso: lo que hay que entender

cuando vas empezando, lo mejor es que cada línea haga una sola cosa evidente: calculas el valor, lo guardas en una variable con nombre claro y luego lo imprimes.

1. por qué (float)a / b en la división

si dejas simplemente a / b siendo variables enteras (int), C hace división entera y corta los decimales: 5 / 2 te daría 2.

para que aparezca el 2.50, convertimos a a flotante con (float)a antes de dividir. el formato %.2f en el printf le dice a la pantalla que solo muestre dos decimales.

además, siempre revisamos con un if (b == 0) para no romper el programa intentando dividir entre cero.

2. el símbolo ^ no saca potencias

en matemáticas escribimos 2 ^ 3 para decir “dos al cubo”. pero en C, el símbolo ^ significa otra cosa completamente distinta (una operación lógica binaria llamada XOR).

3. cómo hacer la potencia con un ciclo for

como no hay un operador para potencia, la hacemos con el algoritmo básico: multiplicar la base por sí misma tantas veces como indique el exponente.

  1. empezamos con potencia = 1; (porque cualquier número elevado a la 0 es 1).
  2. con el ciclo for, multiplicamos potencia = potencia * a; una y otra vez.
  3. por ejemplo, si a = 2 y b = 3:
    • vuelta 1: potencia = 1 * 2 (queda en 2)
    • vuelta 2: potencia = 2 * 2 (queda en 4)
    • vuelta 3: potencia = 4 * 2 (queda en 8)

4. el misterio de meter decimales en un %d

¿qué pasa si el usuario escribe 1.1 o 1.9 esperando que la calculadora sea mágica?

como scanf está esperando un número entero (%d), lee el 1, se detiene de golpe en el punto decimal . y lo deja atorado en el búfer de entrada del teclado. cuando el programa ejecuta la siguiente llamada a scanf para leer la variable b, se vuelve a topar con ese mismo punto que no puede procesar como entero, salta la lectura y deja valores no previstos. por eso en este nivel de principiante es clave recordar que el programa está diseñado estrictamente para números enteros.

5. números grandes y límites del int

si pruebas bases y exponentes pequeños como 2 elevado a 16 ($65{,}536$) o a 20 ($1{,}048{,}576$), el resultado se imprime sin problema. pero si intentas calcular potencias mucho mayores (como 2 elevado a 32), los números superan la capacidad que un int de 32 bits puede almacenar en memoria (alrededor de 2 mil millones) y el resultado se “desborda”, dando números negativos o disparates. entender que las variables tienen un tamaño finito en memoria es otra de las lecciones fundamentales de C.


así de sencillo. no hace falta meter bibliotecas externas ni cosas avanzadas para aprender las bases: variables claras con nombre propio, un if para cuidar casos especiales y un ciclo simple.