Tipos y variables en C — 3 programas reales en gedit y Fedora
Los tipos y variables en C práctica real es lo que toca ahora. En el artículo anterior vimos la teoría. Ahora abre gedit en Fedora y escribe el código mientras lees, es la única forma de que se quede. Tres programas progresivos con capturas reales de mi terminal.
Recuerda el flujo de trabajo:
gedit programa.c & # abrir editor en segundo plano # ... escribes el código ... gcc programa.c -o programa # compilar ./programa # ejecutar
Tabla de Contenidos
Tipos y variables en C práctica — Programa 1: Calculadora básica con tipos numéricos
Crea el archivo:
gedit calculadora.c &
Este programa demuestra la diferencia entre división entera y flotante, el error más común en C:
#include <stdio.h>
int main() {
/* Variables */
int a, b;
float resultado_float;
int resultado_entero;
/* Entrada de datos */
printf("Introduce el primer número: ");
scanf("%d", &a);
printf("Introduce el segundo número: ");
scanf("%d", &b);
/* Operaciones */
resultado_entero = a / b;
resultado_float = (float)a / b;
/* Resultados */
printf("\n--- Resultados con %d y %d ---\n", a, b);
printf("Suma: %d\n", a + b);
printf("Resta: %d\n", a - b);
printf("Multiplicación: %d\n", a * b);
printf("División entera: %d\n", resultado_entero);
printf("División real: %.4f\n", resultado_float);
printf("Módulo (resto): %d\n", a % b);
printf("a al cuadrado: %d\n", a * a);
return 0;
}
Compila y ejecuta:
bash
gcc calculadora.c -o calculadora ./calculadora
Resultado con 7 y 3:
Introduce el primer número: 7 Introduce el segundo número: 3 --- Resultados con 7 y 3 --- Suma: 10 Resta: 4 Multiplicación: 21 División entera: 2 División real: 2.3333 Módulo (resto): 1 a al cuadrado: 49
Fíjate en la diferencia clave: a / b con dos enteros da 2, pero (float)a / b da 2.3333. El cast (float) convierte a a flotante antes de dividir. Si no lo pones, aunque el resultado se guarde en un float, la división ya se hizo como entera y el daño está hecho.
Tipos y variables en C práctica — Programa 2: Calculadora de notas con media y clasificación
gedit notas.c &
#include <stdio.h>
int main() {
/* Variables para las notas */
float nota1, nota2, nota3, nota4;
float media;
char clasificacion;
int aprobado;
/* Entrada de notas */
printf("=== CALCULADORA DE NOTAS ===\n\n");
printf("Nota 1 (0-10): ");
scanf("%f", ¬a1);
printf("Nota 2 (0-10): ");
scanf("%f", ¬a2);
printf("Nota 3 (0-10): ");
scanf("%f", ¬a3);
printf("Nota 4 (0-10): ");
scanf("%f", ¬a4);
/* Cálculo de media */
media = (nota1 + nota2 + nota3 + nota4) / 4.0;
/* Clasificación — sin booleano, usamos int */
aprobado = (media >= 5.0);
/* Clasificación por letra */
if (media >= 9.0) clasificacion = 'A';
else if (media >= 7.0) clasificacion = 'B';
else if (media >= 5.0) clasificacion = 'C';
else clasificacion = 'F';
/* Resultados */
printf("\n--- Resultados ---\n");
printf("Nota 1: %.2f\n", nota1);
printf("Nota 2: %.2f\n", nota2);
printf("Nota 3: %.2f\n", nota3);
printf("Nota 4: %.2f\n", nota4);
printf("Media: %.2f\n", media);
printf("Letra: %c\n", clasificacion);
printf("Aprobado (1=si, 0=no): %d\n", aprobado);
return 0;
}
El programa usa if/else if/else para clasificar la nota. La sintaxis en C es exactamente igual que en Python pero con paréntesis obligatorios en la condición y llaves en el cuerpo. Lo veremos en profundidad en el artículo de estructuras de control, por ahora el código es intuitivo si vienes de FP1.
gcc notas.c -o notas ./notas
Resultado:
=== CALCULADORA DE NOTAS === Nota 1 (0-10): 7.5 Nota 2 (0-10): 8.0 Nota 3 (0-10): 6.5 Nota 4 (0-10): 9.0 --- Resultados --- Nota 1: 7.50 Nota 2: 8.00 Nota 3: 6.50 Nota 4: 9.00 Media: 7.75 Letra: B Aprobado (1=si, 0=no): 1
Fíjate en tres detalles importantes:
Primero — dividimos entre 4.0 y no entre 4. Si dividieras entre 4 (entero) y la suma también fuera entera, obtendrías división entera. Con 4.0 forzamos que sea flotante.
Segundo — aprobado es un int que vale 1 o 0, porque en C no hay booleano. Lo imprimimos con %d.
Tercero — clasificacion es un char que guardamos con = directamente. Lo imprimimos con %c.
Tipos y variables en C práctica — Programa 3: Ficha de estudiante con datos personales
Este programa es el más completo, usa todos los tipos básicos y demuestra cómo manejar caracteres con scanf:
gedit ficha.c &
#include <stdio.h>
int main() {
/* Datos del estudiante */
int dni;
char inicial_nombre;
char inicial_apellido;
int edad;
float nota_media;
int creditos;
int anio_ingreso; # en C no hay "ñ"
/* Entrada de datos */
printf("=== FICHA DE ESTUDIANTE ===\n\n");
printf("DNI (solo números): ");
scanf("%d", &dni);
printf("Inicial del nombre: ");
scanf(" %c", &inicial_nombre); /* espacio antes de %c — importante */
printf("Inicial del apellido: ");
scanf(" %c", &inicial_apellido);
printf("Edad: ");
scanf("%d", &edad);
printf("Nota media (0-10): ");
scanf("%f", ¬a_media);
printf("Créditos matriculados: ");
scanf("%d", &creditos);
printf("Año de ingreso: ");
scanf("%d", &anio_ingreso);
/* Cálculos */
int anios_carrera = 2026 - anio_ingreso;
float nota_sobre_100 = nota_media * 10;
int aprobado = (nota_media >= 5.0);
/* Mostrar ficha */
printf("\n=============================\n");
printf(" FICHA DE ESTUDIANTE\n");
printf("=============================\n");
printf("DNI: %d\n", dni);
printf("Iniciales: %c.%c.\n", inicial_nombre, inicial_apellido);
printf("Edad: %d años\n", edad);
printf("Nota media: %.2f/10 (%.1f/100)\n", nota_media, nota_sobre_100);
printf("Créditos: %d\n", creditos);
printf("Ingreso: %d (%d año/s)\n", anio_ingreso, anios_carrera);
printf("Estado: %s\n", aprobado ? "Aprobado" : "Suspenso");
printf("=============================\n");
return 0;
}
gcc ficha.c -o ficha ./ficha
El espacio antes de %c en scanf
Fíjate en scanf(" %c", &inicial_nombre), hay un espacio antes del %c. Ese espacio no es un error, es necesario. Sin él, scanf podría leer el salto de línea del Enter anterior en vez del carácter que escribes. Es uno de los comportamientos más molestos de C para los principiantes.
scanf("%c", &c); // puede leer el '\n' del Enter anterior
scanf(" %c", &c); // el espacio descarta espacios y saltos de línea
El operador ternario en C
En el último printf usamos aprobado ? "Aprobado" : "Suspenso", es el operador ternario, igual que en Python pero con diferente sintaxis:
// C condicion ? valor_si_true : valor_si_false // Python equivalente valor_si_true if condicion else valor_si_false
Los errores que más aparecen en estos programas
Error 1 — Olvidar el & en scanf:
scanf("%d", edad); // error — comportamiento indefinido
scanf("%d", &edad); // correcto
Error 2 — División entera inesperada:
float media = (nota1 + nota2) / 2; // si notas son float, ok float media = (7 + 8) / 2; // → 7 (división entera de enteros) float media = (7 + 8) / 2.0; // → 7.5 correcto
Error 3 — Usar %f con int o %d con float:
int x = 5;
printf("%f\n", x); // comportamiento indefinido — tipo incorrecto
printf("%d\n", x); // correcto
Error 4 — No inicializar variables:
int x;
printf("%d\n", x); // x tiene basura — valor indeterminado
int x = 0;
printf("%d\n", x); // correcto — siempre inicializa
Visualízalo con Python Tutor
Python Tutor no es solo para Python, también soporta C. Es especialmente útil en C porque puedes ver exactamente cómo se almacena cada variable en memoria, qué dirección ocupa y cómo cambia su valor en cada instrucción.
Ve a pythontutor.com, selecciona C en el desplegable de lenguaje y pega este código:
#include <stdio.h>
int main() {
int a = 7;
int b = 3;
float resultado_entero = a / b;
float resultado_real = (float)a / b;
int aprobado = (resultado_real >= 5.0);
printf("División entera: %.1f\n", resultado_entero);
printf("División real: %.4f\n", resultado_real);
printf("Aprobado: %d\n", aprobado);
return 0;
}
Ejecuta paso a paso y observa:
- Cómo
resultado_enterovale2.0aunque esperas2.3333— la división entera ya ocurrió antes de guardarse en el float - Cómo
aprobadovale0o1— nuncaTrueoFalse - Las direcciones de memoria de cada variable — algo que en Python nunca ves y en C es fundamental
Es la herramienta más útil para entender por qué C se comporta diferente a Python en las operaciones numéricas.

Resumen y siguiente paso
En este artículo practicaste tipos y variables en C con tres programas reales. Los conceptos clave que usaste: cast (float) para evitar división entera, int como booleano con 1 y 0, %c con espacio previo en scanf, y el operador ternario para condiciones simples.
En el siguiente artículo encontrarás ejercicios propuestos con solución para practicar por tu cuenta.

Un comentario