Computadoras y Programación · ENES Juriquilla · UNAM
Módulo 3 · Sesión 2 · Lenguaje C
terminal — curso
$ gcc grados.c$ ./a.out36.5 C = 97.7 F$

Guardar. Pedir. Calcular.

Variables, entrada y operadores en C, con retos.
Por
Walter Rosales
Un pequeño problema

Tu Hola, mundo dice lo mismo. Siempre.

bash
$ ./a.outHola, mundo$ ./a.outHola, mundo$ ./a.outHola, mundo
Hoy el programa aprende a recordar, a escuchar y a calcular.
Cómo trabajamos hoy

Menos diapositivas. Más retos.

1 · Ejecútalo
Copias el código, compilas y ves qué hace.
2 · Complétalo
Falta una línea. La escribes tú.
3 · Rómpelo
Cambias algo a propósito y lees el error.
Cada tema de hoy trae los tres. Al final, tres retos para llevarte.
Variables

Una variable es una caja con nombre y con tipo.

int
19
edad
int edad = 19;
float
1.72
estatura
float estatura = 1.72f;
char
'W'
inicial
char inicial = 'W';
Tipo · nombre · valor. En ese orden.
Ejecútalo

Declarar, asignar, imprimir.

variables.c
#include <stdio.h>
 
int main(void)
{
int edad = 19;1
float estatura = 1.72f;
char inicial = 'W';
 
printf("Edad: %d\n", edad);2
printf("Estatura: %.2f m\n", estatura);3
printf("Inicial: %c\n", inicial);
return 0;
}
1Declarar y asignartipo, nombre y valor inicial
2%d, %f, %cel hueco donde cae la variable
3%.2fel float con dos decimales
terminal
$ gcc variables.c && ./a.out Edad: 19 Estatura: 1.72 m Inicial: W
Tipos de dato

Cuatro cajas, cuatro tamaños.

char
1 byte
%c
un carácter
int
4 bytes
%d
números enteros
float
4 bytes
%f
decimales
double
8 bytes
%f
decimales con más precisión · en scanf: %lf
tipos.c
$ gcc tipos.c && ./a.out char : 1 byte int : 4 bytes float : 4 bytes double : 8 bytes
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)
{
unsigned char 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.
Rómpelo 4

5 / 2 = 2. Sí, dos.

division.c
#include <stdio.h>
 
int main(void)
{
int a = 5, b = 2;
 
printf("5 / 2 = %d\n", a / b);
printf("5 %% 2 = %d\n", a % b);
printf("5 / 2.0 = %.1f\n", a / 2.0);
printf("(float)a / b = %.1f\n", (float)a / b);
return 0;
}
terminal
$ gcc division.c && ./a.out 5 / 2 = 2 5 % 2 = 1 5 / 2.0 = 2.5 (float)a / b = 2.5
grados_roto.c
float f = c * (9 / 5) + 32; $ ./a.out 36.5 C = 68.5 F
Entre dos enteros, C divide como enteros y tira la parte decimal. Por eso 9 / 5 vale 1: mira lo que le hace a tu °C a °F.
Ejecútalo

El residuo decide.

parimpar.c
#include <stdio.h>
 
int main(void)
{
int n;
 
printf("Numero: ");
scanf("%d", &n);
 
if (n % 2 == 0)1
printf("%d es par\n", n);
else
printf("%d es impar\n", n);
return 0;
}
1n % 2 es el residuodividir entre 2 deja 0 si n es par, 1 si es impar
terminal
$ gcc parimpar.c && ./a.out Numero: 7 7 es impar $ ./a.out Numero: 10 10 es par
Reto 2 · Complétalo

Segundos a h : m : s.

hms.c
#include <stdio.h>
 
int main(void)
{
int total, h, m, s;
 
printf("Segundos: ");
scanf("%d", &total);
 
h = ______;
m = ______;
s = ______;
 
printf("%d s = %d h %d min %d s\n", total, h, m, s);
return 0;
}
1
Copia el código en hms.c
2
Escribe las tres fórmulasPista: / divide entre enteros · % te da lo que sobra
3
Prueba con 3725 y con otro número tuyo
salida esperada
$ gcc hms.c && ./a.out Segundos: 3725 3725 s = 1 h 2 min 5 s
Retos del día

Tres retos. Compila y compara.

A · IMC
a.out
$ ./a.out Peso (kg): 70 Estatura (m): 1.75 IMC = 22.9
IMC = peso ÷ estatura². Usa decimales.
B · Promedio
a.out
$ ./a.out Tres calificaciones: 8 9 9 Promedio con int : 8 Promedio con float: 8.67
Hazlo con int y con float. ¿Por qué cambia?
C · Calculadora
a.out
$ ./a.out Dos numeros: 17 5 17 + 5 = 22 17 - 5 = 12 17 * 5 = 85 17 / 5 = 3 17 % 5 = 2
Suma, resta, producto, división y residuo.
Aquí solo ves la salida esperada. El código lo escribes tú; después rómpelo.
El mensaje de hoy

Declarar. Pedir. Calcular.

Con esas tres piezas ya se escriben programas de verdad. Cada ejemplo de este deck se compiló y se ejecutó antes de llegar a esta sala.
Gracias
Walter Rosales
CEO & Co-Founder iGalenus
walter.rosales@igalenus.com
@walterr_rosales
https://walter-rosales.com
walter-rosales.com