Medido con sizeof en Windows de 64 bits, gcc 16.2.0. Puede variar en otras plataformas.
Reto 1 · Complétalo
°C a °F: falta una línea.
grados.c
#include<stdio.h>
int main(void)
{
float c = 36.5f;
float f = ______;
printf("%.1f C = %.1f F\n", c, f);
return 0;
}
1
Copia el código en grados.c
2
Cambia ______ por la fórmulaPista: F = C × 9 ÷ 5 + 32
3
Compila y compara con la salida esperada
salida esperada
$ gcc grados.c && ./a.out
36.5 C = 97.7 F
Rómpelo 1
La caja sin estrenar no está vacía.
sinini.c
#include<stdio.h>
int main(void)
{
int x;
printf("x = %d\n", x);
return 0;
}
gcc
$ gcc -Wall -Wextra sinini.c
sinini.c: In function 'main':
sinini.c:7:5: warning: 'x' is used uninitialized [-Wuninitialized]
7 | printf("x = %d\n", x);
| ^~~~~~~~~~~~~~~~~~~~~
sinini.c:5:9: note: 'x' was declared here
5 | int x;
| ^
terminal
$ ./a.out
x = 32759
Una variable sin valor guarda lo que hubiera en esa memoria. Compila siempre con -Wall -Wextra y lee los avisos.
Salida real de gcc 16.2.0. Ese número salió en esta máquina; en la tuya será otro.
Rómpelo 2
Las cajas tienen fondo.
desborde.c
#include<stdio.h>
int main(void)
{
unsignedchar vidas = 255;
printf("Antes: %d\n", vidas);
vidas = vidas + 1;
printf("Despues: %d\n", vidas);
return 0;
}
terminal
$ gcc desborde.c && ./a.out
Antes: 255
Despues: 0
unsigned char guarda de 0 a 255. Al pasar de 255 da la vuelta, como un odómetro.
Ejecútalo
Ahora el programa escucha.
suma.c
#include<stdio.h>
int main(void)
{
int a, b;
printf("Primer numero: ");
scanf("%d", &a);1
printf("Segundo numero: ");
scanf("%d", &b);
printf("%d + %d = %d\n", a, b, a + b);2
return 0;
}
1scanf lee y guarda%d es un entero · el & es la dirección de la caja
2El cálculo va en el printfa + b se evalúa antes de imprimir
terminal
$ gcc suma.c && ./a.out
Primer numero: 7
Segundo numero: 5
7 + 5 = 12
Entradas tecleadas: 7 y 5. Salida real de la ejecución.
Rómpelo 3
Olvidaste el &. gcc lo vio primero.
sinamp.c
#include<stdio.h>
int main(void)
{
int edad;
printf("Edad: ");
scanf("%d", edad);1
printf("Tienes %d\n", edad);
return 0;
}
gcc
$ gcc -Wall -Wextra sinamp.c
sinamp.c: In function 'main':
sinamp.c:8:13: warning: format '%d' expects argument of type 'int *', but argument 2 has type 'int' [-Wformat=]
8 | scanf("%d", edad);
| ~^ ~~~~
| | |
| | int
| int *
scanf pide la dirección de la caja y aquí recibe su contenido. El programa compila, pero el aviso es serio: no lo ignores.
Salida real de gcc 16.2.0 · se muestra solo el primer aviso.
Operadores
Los mismos operadores. Otro disfraz.
Lo que ya sabes
En C
asignar ←
=
comparar: igual a
==
distinto de
!=
y (las dos ciertas)
&&
o (alguna cierta)
||
no (negar)
!
residuo de dividir
%
+ − * / se escriben igual que siempre. Ojo: = asigna y == compara. Confundirlos es un rito de iniciación.