Lo que hace este bucle es sumar a "sumo" en cada iteración de esta manera los valores de n que a cada ciclo sera cada vez menor hasta detener por completo cuando llegue n valer 0 que en la programacion 0 es lo mismo que falso.
Eso es lo que pasa....
1º iteracion:
entra en el bucle por que do permite el paso antes de comprobar.
sumo vale 0 y n vale 5
se asigna el valor de n a sumo que a partir de ese momento vale 5.
En while() se decrementa primero y después se mira si es verdadero, o sea n pasa a valer 4 y se comprueba si 4 es verdadero, cosa que si es verdadero en ese caso. Al ser verdadero vuelve hacia el "do" y repite el mismo proceso.
2º iteracion:
Entra en do por que es verdadero en el while anterior.
Ahora "sumo" vale 5 y n vale 4.
se incrementa sumo n lo que vale 4.
OBS el operador += es como el ++, pero el ++ solo incrementa una unidad y el operador += lo que hace es incrementar lo que aya del lado derecho de el, sumo =+ n; ahora en ese punto equivale a 5 += 4; que es lo mismo que: sumo=sumo+n; o sea ( sumo = 5+4 ).
Se decrementa en while a "n" y se comprueba si es verdadero, ahora n vale 3¿Es verdadero? ¡Si, si que lo es, mientras no sea 0 seguira siendo verdadero ;)
entramos por do mas una vez...
3º iteracion XDDD
esta la calcula tu ^^
asi va a seguir hasta que while reciba un falso, en la programación solo existe un falso y es el cero "0", algunos lenguajes tienen la palabra reservada false, pero es como si de 0 se tratara. De echo si creas una variable tipo bool numero = false; y imprimes el "numero" con un cout o un printf envés de decir false te va dar un claro "CERO" 0 =D
te hago una sugerencia ^^ Compila eso y así tienes control de lo que vale cada numero en cada iteración:
atento a los operadores --, ++ y +=
si por ejemplo tienes una expresión:
valor = numero++;
y valor fuera 0 y numero fuera 10.
si pongo valor = n++; y imprimo "valor", me va imprimir 10 ¿Pero como asi si lo he incrementado el valor?¿NO?
cuando hago:
valor = numero++;
primero estoy asignando el valor de "numero" a "valor" y solo despues se incrementa, eso puede ser una fuente de problemas si no te fias bien.
si n vale 10 y quiero asignar a valor lo que vale numero incrementado debo poner el operador++ antes.
valor = ++numero;
Ahora valor vale 11 ;)
Lo mismo que el de --
Con el de += no tienes ese problema por que piensas que += es lo mismo que sumar lo que viene despues del+= con lo que esta antes...
valor = valor +numero;
Aqui hacemos que valor que vale 0 se sume a numero que vale 10 y lo metemos dentro de ella misma, o sea ahora valor vale lo que valor + numero.
El resto ya va por tu cuenta ;)