Mientras que los bucles en c ++

Una característica fundamental de la programación C ++ es la capacidad de bucle. C ++ ofrece tres construcciones de bucle en C ++. los mientras bucle tiene el siguiente formato:

while (expresión) {// cosas que hacer en un bucle} // continuar aquí una vez expresión es falsa

Cuando un programa se encuentra con una mientras bucle, primero evalúa la expresión en el paréntesis. Si esta expresión es cierto, entonces el control pasa a la primera línea dentro de la {. Cuando el control llega a la }, el programa vuelve de nuevo a la expresión y comienza de nuevo. Control continúa ciclo a través de la codeína los tirantes hasta expresión evalúa a falso (O hasta que otra cosa se rompe el bucle).

El seguimiento Factorial programa demuestra la mientras lazo:

Factorial (N) = N * (N-1) * (N-2) * ... * 1 //// Factorial - calcular factorial usando el mientras // construct.//#include #incluir #incluir using namespace std-int main (int nNumberofArgs, char * pszArgs []) {// introducir el número para calcular el factorial ofint nTarget-cout lt; lt; "Este programa calcula factorial.n"lt; lt; "Introduzca un número para tomar factorial de: "-cin gt; gt; nTarget - // comenzar con un acumulador que se inicializa a 1int nAccumulator = 1int nValue = 1-tiempo (nValue lt; = nTarget) {cout lt; lt; nAccumulator lt; lt; " * "lt; lt; nValue lt; lt; " es igual "-nAccumulator = nAccumulator * nValue-cout lt; lt; nAccumulator lt; lt; endl-nValue ++ -} // mostrar la resultcout lt; lt; nTarget lt; lt; " factorial "lt; lt; nAccumulator lt; lt; endl - // espera hasta que el usuario esté listo antes de la terminación del programa // para permitir al usuario ver el programa resultscout lt; lt; "Pulse Intro para continuar ..." lt; lt; endl-cin.ignore (10, `n`) - cin.get () - volver 0-}

El programa comienza por preguntar al usuario por un valor objetivo. El programa lee este valor en nTarget. Entonces, el programa inicializa tanto nAccumulator y nValue a 1 antes de entrar en el bucle.

(Preste atención - esta es la parte interesante.) El programa compara nValue a nTarget. Supongamos que el usuario ha entrado en un valor objetivo de 5. En el primer bucle, la pregunta es, “¿Es 1 menor o igual a 5?” La respuesta es, evidentemente, cierto, lo que el control fluye en el bucle.

El programa da salida al valor de nAccumulator (1) y nValue (También 1) antes de multiplicar nAccumulator por nValue y almacenar el resultado en nAccumulator.

La última instrucción en los incrementos de bucle nValue desde 1 hasta 2.

Una vez hecho esto, el control pasa de nuevo hasta la mientras comunicado donde nValue (Ahora 2) se compara con nTarget (Todavía 5). “Es de 2 a menos de o igual a 5?” Claramente, cierto-lo que el control fluye de nuevo en el bucle. nAccumulator Ahora se establece en el resultado de nAccumulator (1 vez nValue (2). Los incrementos última declaración nValue a 3.

Este ciclo de diversión continúa hasta nValue alcanza el valor 6, que ya no es menor que o igual a 5. En ese punto, el control pasa a la primera instrucción más allá de la abrazadera cerrada }. Esto se muestra gráficamente aquí.

La salida real desde el programa aparece como sigue para un valor de entrada de 5:

Este programa calcula factorial.Enter una serie de tomar factorial de: 51 * 1 es igual a 11 * 2 es igual a 22 * ​​3 es igual a 66 * 4 es igual a 2,424 * 5 es igual a 1,205 factorial es 120Press Intro para continuar. . .

No se garantiza que el código dentro de las llaves de una mientras bucle se ejecuta en absoluto: Si la expresión condicional es falsa la primera vez que se evalúa, el control pasa alrededor de los tirantes sin buceo en Consideremos, por ejemplo, la salida del programa Factorial cuando el usuario introduce un valor objetivo de 0.:

Este programa calcula factorial.Enter una serie de tomar factorial de: 00 factorial es 1 Pulse Intro para continuar. . .

No hay líneas de salida se generan desde dentro del bucle porque la condición “¿Es nValue menos de o igual a 0” era falsa incluso para el valor inicial de 1. El cuerpo de la mientras bucle nunca fue ejecutado.

Artículos Relacionados