Lección 3 · 3 de 20
Aritmética y conversiones · C
Haga cuentas en C: suma, resta, producto, la división entera, el resto con %, las conversiones (cast) a double e int y los atajos += y ++.

Los operadores +, -, * y / funcionan como en matemáticas, con una excepción importante: si los dos números son int, la división entera descarta los decimales. Por eso 7 / 3 da 2 y no 2.33. El operador `%` da el resto de esa división: 7 % 3 es 1, la pizza que sobra.
Para obtener los decimales, al menos uno de los números tiene que ser double. Eso se consigue con una conversión o *cast*: (double)pizzas convierte 7 en 7.0 y entonces la división da 2.333333.
El orden importa: en (double)(pizzas / people) la división entera se hace primero y da 2; convertirla después ya no recupera los decimales, solo da 2.000000.
La conversión contraria, (int)bill, corta los decimales sin redondear: 47.85 pasa a 47. Para los céntimos se multiplica por 100, se suma 0.5 para redondear y % 100 se queda con las dos últimas cifras.
Por último, los atajos: score += 5 equivale a score = score + 5, score *= 2 a score = score * 2 y score++ suma 1. Así, 10 pasa a 15, luego a 30 y termina en 31.
Código · main.c
#include <stdio.h>int main(void) { int pizzas = 7, people = 3; // + - * / work as in maths... printf("Slices: %d\n", pizzas * 8); // ...but int / int drops the decimals. printf("Pizzas each: %d\n", pizzas / people); // % gives the remainder of the division. printf("Pizzas left over: %d\n", pizzas % people); // With a double in the division, the decimals stay. double share = (double)pizzas / people; printf("Exact share: %f\n", share); // Careful: the cast must come before the division. double too_late = (double)(pizzas / people); printf("Cast too late: %f\n", too_late); // Turning a double into an int cuts off the decimals. double bill = 47.85; int euros = (int)bill; int cents = (int)(bill * 100 + 0.5) % 100; printf("Bill: %d euros and %d cents\n", euros, cents); // Shortcuts that change a variable. int score = 10; score += 5; // score = score + 5 score *= 2; // score = score * 2 score++; // add 1 printf("Score: %d\n", score); return 0;}Salida · cc main.c -o main && ./main
Slices: 56 Pizzas each: 2 Pizzas left over: 1 Exact share: 2.333333 Cast too late: 2.000000 Bill: 47 euros and 85 cents Score: 31
Para recordar
int / intda un entero: se pierden los decimales.%da el resto de la división entera.(double)xconvierte antes de dividir;(int)xcorta los decimales.+=,-=,*=y++cambian la propia variable.
Ejercicio
Con 7 pizzas de 8 porciones y 5 personas, calcule cuántas porciones le tocan a cada una y cuántas sobran, solo con / y %.