Creando una calculadora simple con C

CCBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este proyecto, aprenderemos cómo crear una calculadora simple utilizando el lenguaje de programación C. La calculadora será capaz de realizar operaciones aritméticas básicas como suma, resta, multiplicación y división. También implementaremos comprobaciones para garantizar que la entrada del usuario sea válida y manejaremos los casos en los que la entrada conduce a un comportamiento no definido.

👀 Vista previa

$./Calculator
32+11
=43.000000

$./Calculator
41-34.9
=6.100000

$./Calculator
10/2
=5.000000

$./Calculator
2*4
=8.000000

$./Calculator
10%3
=1

🎯 Tareas

En este proyecto, aprenderás:

  • Cómo obtener la entrada del usuario en C utilizando scanf()
  • Cómo comprobar el formato de la expresión aritmética de entrada
  • Cómo realizar cálculos aritméticos basados en la entrada del usuario
  • Cómo manejar los errores de división por cero
  • Cómo implementar el operador de residuo solo para operandos enteros

🏆 Logros

Después de completar este proyecto, serás capaz de:

  • Entender cómo obtener la entrada del usuario en C
  • Implementar diferentes operaciones aritméticas en C
  • Realizar comprobaciones de errores y manejar la entrada no válida
  • Compilar y ejecutar programas C utilizando el compilador gcc

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL c(("C")) -.-> c/ControlFlowGroup(["Control Flow"]) c(("C")) -.-> c/UserInteractionGroup(["User Interaction"]) c(("C")) -.-> c/BasicsGroup(["Basics"]) c/BasicsGroup -.-> c/variables("Variables") c/BasicsGroup -.-> c/operators("Operators") c/ControlFlowGroup -.-> c/if_else("If...Else") c/ControlFlowGroup -.-> c/switch("Switch") c/UserInteractionGroup -.-> c/user_input("User Input") c/UserInteractionGroup -.-> c/output("Output") subgraph Lab Skills c/variables -.-> lab-298833{{"Creando una calculadora simple con C"}} c/operators -.-> lab-298833{{"Creando una calculadora simple con C"}} c/if_else -.-> lab-298833{{"Creando una calculadora simple con C"}} c/switch -.-> lab-298833{{"Creando una calculadora simple con C"}} c/user_input -.-> lab-298833{{"Creando una calculadora simple con C"}} c/output -.-> lab-298833{{"Creando una calculadora simple con C"}} end

Obtener la entrada del usuario

Obtener la entrada del usuario es muy sencillo, puedes utilizar las funciones de entrada/salida formateadas del lenguaje C printf() y scanf().

A continuación se muestra el código del programa responsable de leer la entrada del usuario:

#include<stdio.h>
int main()
{
   double number1=0.0;     // Define el primer operando
   double number2=0.0;     // Define el segundo operando
   char operation=0;       // operation debe ser '+', '-', '*', '/' o '%'

   printf("\nIngrese el cálculo\n");
   scanf("%lf%c%lf",&number1,&operation,&number2);

   return 0;
}
✨ Revisar Solución y Practicar

Comprobando el formato y realizando cálculos

La siguiente funcionalidad que nuestro programa necesita implementar es comprobar el formato de la expresión aritmética de entrada.

La comprobación más básica es determinar si la operación especificada en la expresión de entrada es válida. Las operaciones válidas son +, -, *, /, %, por lo que necesitamos comprobar si la operación de entrada pertenece a este conjunto.

Además, es importante destacar que cuando la operación es / o %, el segundo operando no puede ser 0. Si es 0, la operación es inválida.

La lógica para estas comprobaciones se puede implementar utilizando instrucciones if. Alternativamente, una instrucción switch ofrece una forma mejor y más concisa de manejar esto. Es más fácil de entender y menos verbosa en comparación con una serie de instrucciones if.

switch(operation)
{
    case '+':
        printf("=%lf\n",number1+number2);
        break;

    case '-':
        printf("=%lf\n",number1-number2);
        break;

    case '*':
        printf("=%lf\n",number1*number2);
        break;

    case '/':
        if(number2==0)
            printf("\n\n\aError de división por cero!\n");
        else
            printf("=%lf\n",number1/number2);
        break;

    case '%':
        if((long)number2==0)
            printf("\n\n\aError de división por cero!\n");
        else
            printf("=%ld\n",(long)number1%(long)number2);
        break;

    default:
        printf("\n\n\aOperación inválida!\n");
        break;
}

El operador de residuo % no tiene sentido para los tipos float o double, ya que pueden representar resultados precisos. El operador % solo tiene sentido cuando se aplica a tipos enteros. Por lo tanto, antes de aplicar este operador, los operandos deben ser convertidos a enteros. Cuando el operador es %, el segundo operando se convierte a un entero. Por lo tanto, no es suficiente solo comprobar si el segundo operando es 0, sino también si el valor de number2 es 0 cuando se convierte a un long. Por ejemplo, 0.5 no es 0, pero cuando se convierte a un entero, se convierte en 0.

✨ Revisar Solución y Practicar

Compilando y ejecutando archivos

Después de escribir el archivo del programa, puedes compilar el archivo fuente para obtener un archivo ejecutable. El comando para compilar es el siguiente:

gcc -o Calculator Calculator.c

Nota: El formato del comando gcc anterior es gcc -o nombre_del_archivo_salida nombre_del_archivo_fuente.c. Si no se proporciona "nombre_del_archivo_salida", el nombre del archivo de salida predeterminado es a.out.

En este momento, notarás un nuevo archivo llamado Calculator en el directorio. Este es el archivo ejecutable que obtuvimos después de compilar y enlazar el archivo fuente. Para ejecutarlo, utiliza el comando ./Calculator.

./Calculator
$./Calculator
32+11
=43.000000

$./Calculator
41-34.9
=6.100000

$./Calculator
10/2
=5.000000

$./Calculator
2*4
=8.000000

$./Calculator
10%3
=1
✨ Revisar Solución y Practicar

Resumen

En este proyecto, utilizamos el lenguaje de programación C para crear una calculadora simple. Actualmente, la calculadora tiene una funcionalidad limitada y solo puede admitir cálculos básicos con dos operandos. Los estudiantes pueden continuar ampliando esta calculadora, por ejemplo, agregando soporte para múltiples operandos o introduciendo mecanismos de precedencia de operadores.