guardar datos en variables, conocer los tipos básicos y comunicarte con el usuario con printf y scanf.
Incluye 4 ejercicios con pistas y solución y un quiz de 6 preguntas. Tiempo estimado: 60 minutos.
1. Variables
Una variable es una caja con nombre y tipo en memoria. En C hay que declarar el tipo antes de usarla.
int edad = 30; // entero
double precio = 9.99; // decimal de doble precisión
char letra = 'A'; // un carácter (comillas SIMPLES)
Reglas de nombres: letras, dígitos y _; no empieza por dígito; C distingue mayúsculas (Edad ≠ edad).
⚠️ Una variable local sin inicializar contiene basura. Inicializa siempre:
int x = 0;.
2. Tipos básicos
| Tipo | Tamaño típico | Uso | Formato printf |
|---|---|---|---|
char |
1 byte | un carácter / byte pequeño | %c (o %d como número) |
int |
4 bytes | enteros (≈ ±2 mil millones) | %d |
long long |
8 bytes | enteros enormes | %lld |
unsigned int |
4 bytes | solo ≥ 0 | %u |
float |
4 bytes | decimales (~7 cifras) | %f |
double |
8 bytes | decimales (~15 cifras) | %f / %.2f |
sizeof(int) te dice cuántos bytes ocupa un tipo. Los enteros desbordan en silencio: INT_MAX + 1 da un negativo (<limits.h>).
3. Constantes
const double IVA = 0.21; // no se puede modificar
#define MAX_ALUMNOS 30 // sustitución de texto (módulo 11)
4. Operadores aritméticos y conversiones
+ - * / % y los abreviados += -= *= /= ++ --.
- División entera:
7 / 2es3, no3.5.7 % 2es1(resto). - Para dividir con decimales hace falta que algún operando sea decimal:
7 / 2.0o(double)7 / 2. - Un cast
(double)xconvierte el valor en esa expresión.
5. Salida con printf
printf("Tengo %d años y mido %.2f m. Mi inicial es %c\n", edad, altura, letra);
%d entero · %f real (%.2f = 2 decimales) · %c carácter · %s cadena · %5d ancho 5 · %% un símbolo %.
Debe haber un argumento por cada %, del tipo correcto; si no, comportamiento indefinido.
6. Entrada con scanf
int n;
double x;
scanf("%d", &n); // OJO al &: scanf necesita la DIRECCIÓN donde escribir
scanf("%lf", &x); // double en scanf = %lf (¡con l!)
scanf("%d %d", &a, &b);// varios valores
scanfdevuelve cuántos valores leyó con éxito:if (scanf("%d", &n) != 1) { /* entrada inválida */ }.- Para leer un
charsaltando blancos previos:scanf(" %c", &c)(espacio antes del%). - El
&lo entenderás del todo en el módulo 7 (punteros).
Prueba esto
- Imprime
sizeof(int),sizeof(double)ysizeof(char)con%zu. - ¿Qué imprime
printf("%d\n", 10 / 4);? ¿Yprintf("%f\n", 10 / 4);? (el segundo es un error de tipo: ¿qué sale y por qué?). - Declara
int x;sin inicializar e imprímelo. Ejecútalo 3 veces.
Resumen
- Declara con tipo, inicializa siempre.
int / int= división entera. Usadoubleo un cast para decimales.printflleva%por cada valor;scanflleva&(salvo con arrays de char).
Ejercicios prácticos del módulo 2
Programar se aprende programando: intenta cada ejercicio antes de mirar las pistas, y usa la solución solo para comparar. Marca los que resuelvas y tu progreso se guarda en este navegador.
2.1 Suma de dos enteros
Entrada de ejemplo
5 7
Salida esperada
La suma es 12
Tu punto de partida
#include <stdio.h>
int main(void) {
int a, b;
// TODO: lee a y b con scanf, e imprime "La suma es X"
return 0;
}Cópialo en tu editor, complétalo, compílalo (gcc -Wall -Wextra programa.c -o programa) y prueba la entrada de ejemplo. Para que se corrija solo con varios casos de prueba, descarga el curso.
Pista 1
scanf("%d %d", &a, &b); -- fijate en el & delante de cada variable.
Pista 2
printf("La suma es %d\n", a + b);
Ver solución (inténtalo antes)
#include <stdio.h>
int main(void) {
int a, b;
scanf("%d %d", &a, &b);
printf("La suma es %d\n", a + b);
return 0;
}2.2 Rectangulo: area y perimetro
Entrada de ejemplo
3 4
Salida esperada
Area: 12.00 Perimetro: 14.00
Tu punto de partida
#include <stdio.h>
int main(void) {
double base, altura;
// TODO
return 0;
}Cópialo en tu editor, complétalo, compílalo (gcc -Wall -Wextra programa.c -o programa) y prueba la entrada de ejemplo. Para que se corrija solo con varios casos de prueba, descarga el curso.
Pista 1
Con scanf los double se leen con %lf (L minuscula + f). Con printf basta %f, pero usa %.2f.
Pista 2
perimetro = 2 * (base + altura)
Ver solución (inténtalo antes)
#include <stdio.h>
int main(void) {
double base, altura;
scanf("%lf %lf", &base, &altura);
printf("Area: %.2f\n", base * altura);
printf("Perimetro: %.2f\n", 2 * (base + altura));
return 0;
}2.3 Grados Celsius a Fahrenheit
Entrada de ejemplo
25
Salida esperada
25.0 C = 77.0 F
Tu punto de partida
#include <stdio.h>
int main(void) {
double c;
// TODO
return 0;
}Cópialo en tu editor, complétalo, compílalo (gcc -Wall -Wextra programa.c -o programa) y prueba la entrada de ejemplo. Para que se corrija solo con varios casos de prueba, descarga el curso.
Pista 1
Si c es double, c * 9 / 5 ya se hace en coma flotante. Lo que no puedes es escribir 9 / 5 solo.
Pista 2
printf("%.1f C = %.1f F\n", c, f);
Ver solución (inténtalo antes)
#include <stdio.h>
int main(void) {
double c;
scanf("%lf", &c);
printf("%.1f C = %.1f F\n", c, c * 9.0 / 5.0 + 32.0);
return 0;
}2.4 Cociente, resto y division real
Entrada de ejemplo
23 7
Salida esperada
cociente=3 resto=2 real=3.286
Tu punto de partida
#include <stdio.h>
int main(void) {
int a, b;
// TODO
return 0;
}Cópialo en tu editor, complétalo, compílalo (gcc -Wall -Wextra programa.c -o programa) y prueba la entrada de ejemplo. Para que se corrija solo con varios casos de prueba, descarga el curso.
Pista 1
a / b entre dos int da un int (descarta decimales). % da el resto.
Pista 2
(double)a / b convierte a antes de dividir, y entonces la division es real.
Ver solución (inténtalo antes)
#include <stdio.h>
int main(void) {
int a, b;
scanf("%d %d", &a, &b);
printf("cociente=%d resto=%d real=%.3f\n", a / b, a % b, (double)a / b);
return 0;
}Quiz del módulo 2
6 preguntas para comprobar que has fijado los conceptos. Las opciones se barajan cada vez.