Una sentencia C++ simple es cada una de las sentencias individuales de un programa, como las sentencias y expresiones variables vistas en las secciones anteriores. Siempre terminan con punto y coma (;) y se ejecutan en el mismo orden en que aparecen en un programa.
Pero los programas no se limitan a una secuencia lineal de instrucciones. Durante su proceso, un programa puede repetir segmentos de código, o tomar decisiones y desviarse. Con este fin, C++ proporciona instrucciones de control de flujo para especificar qué debe hacer nuestro programa, cuándo y bajo qué circunstancias.
Muchas de las instrucciones de control de flujo explicadas en esta sección requieren una instrucción genérica como parte de su sintaxis. Esta instrucción puede ser una simple instrucción C++, como una única instrucción, terminando con un punto y coma (;), o una instrucción compuesta. Una instrucción compuesta es un grupo de instrucciones (cada una de las cuales termina con su propio punto y coma), pero todas agrupadas en un bloque, rodeadas de llaves: {}:
{instrucción1; instrucción2; instrucción3;}
Todo el bloque se considera como una única instrucción (compuesta de varias subinstrucciones. Cuando una instrucción genérica forma parte de la sintaxis de una instrucción de control de flujo, puede ser una instrucción simple o compuesta.
Declaraciones de selección: si y de lo contrario
La palabra clave if se utiliza para ejecutar una instrucción o bloque si y sólo si se cumple una condición. Su sintaxis es la siguiente:
si la declaración (de condición)
Aquí, la condición es la expresión que se está evaluando. Si esta condición es cierta, se ejecuta la instrucción. Si es incorrecta, la instrucción no se ejecuta (simplemente se ignora) y el programa continúa inmediatamente después de la instrucción de selección completa.
Por ejemplo, el siguiente fragmento de código imprime el mensaje (x = 100), sólo si el valor almacenado en la variable x es 100:
si (x == 100) coste <<<< "x = 100";
Si x no es exactamente 100, esta instrucción se ignora y no se imprime nada.
Si se desea incluir varias instrucciones que se ejecutarán cuando se cumpla la condición, estas instrucciones se deben colocar entre paréntesis ({}), formando un bloque:
si (x == 100){ coste <<< "x es"; coste <<<< x;}.
Como de costumbre, la sangría y los saltos de línea en el código no tienen ningún efecto. Por lo tanto, el código anterior es equivalente a:
si (x == 100) {costes <<< "x es"; costes <<<< x; }
Instrucciones de selección con si también puede especificar lo que sucede cuando la condición no se cumple, usando la palabra clave else para introducir una instrucción alternativa. Su sintaxis es la siguiente:
if (condition) instruction1 else instruction2
donde se ejecuta la instrucción1 en el caso de que la condición sea verdadera y en el caso contrario se ejecuta la instrucción2.
Por ejemplo:
si (x == 100) coste <<< "x es 100"; de lo contrario coste <<<< "x no es 100";
Esta impresión x es 100, si x tiene un valor de 100, pero si no lo tiene, y sólo si no lo tiene, x es diferente de 100.
Se pueden concatenar varias estructuras if + else para verificar un rango de valores. Por ejemplo:
si (x> 0) coste <<< "x es positivo"; si (x <0) coste <<<< "x es negativo"; si no, coste <<< "x es 0";
Esto muestra si x es positivo, negativo o cero al concatenar dos estructuras if-else. Una vez más, también habría sido posible ejecutar más de una instrucción por caso agrupándolas en bloques entre paréntesis: {}.
Instrucción de iteración (loops)
Los bucles repiten una declaración varias veces o mientras se cumple una condición.
Son introducidos por las palabras clave while, do y for.
El bucle mientras
El tipo más simple de bucle es el bucle while. Su sintaxis es la siguiente:
Instrucciones de (expresión)
El bucle simplemente repite la instrucción mientras la expresión sea verdadera. Si, después de ejecutar una instrucción, la expresión ya no es verdadera, el bucle finaliza y el programa continúa justo después del bucle. Por ejemplo, veamos una cuenta atrás usando un bucle while:
// Cuenta atrás personalizada usando while#include <iostream>using namespace std;int (){ int n = 10; while (n> 0) { cost <<<< n <<","; --n; } cost <<<< "takeoff! \ n";}
La instrucción de primera mano da el valor 10. Este es el primer número de la cuenta atrás. Se inicia entonces el bucle while: si este valor cumple la condición n>0 (que n es mayor que cero), se ejecuta el bloque que sigue a la condición y se repite mientras la condición (n>0) siga siendo verdadera.
Todo el proceso del programa anterior puede ser interpretado de acuerdo con el siguiente guión (comenzando con la mano):
- n tiene asignado un valor
- La condición durante la verificación (n>0. En este punto, hay dos posibilidades: la condición es verdadera: la instrucción se ejecuta, la condición es falsa: ignora la instrucción y continúa después de Ejecutar la instrucción: cost <<<< n <<<«,»;-n;(muestra el valor de n y disminuye n en 1)
- Al final de la cuadra. Vuelva automáticamente al paso 2.
- Continuar el programa justo después del bloque: ¡imprimir despegue! y terminar el programa.
Una cosa a considerar con While loops es que el bucle debe terminar en algún momento. Por lo tanto, la declaración debe modificar los valores verificados en la condición de una manera u otra, para forzarla a convertirse en falsa en algún momento. De lo contrario, el bucle continuará para siempre. En este caso, el bucle incluye -n, que disminuye en uno el valor de la variable evaluada en la condición (n) – eventualmente hará que la condición (n>0) sea falsa después de un número de iteraciones del bucle. Para ser más precisos, después de 10 iteraciones, n se convierte en 0, lo que hace que la condición ya no sea verdadera y termina el bucle while.
Tenga en cuenta que la complejidad de este bucle es trivial para un ordenador y que toda la cuenta atrás se realiza instantáneamente, sin ningún tipo de retraso práctico entre los elementos de la cuenta atrás (si está interesado, consulte sleep_for para ver un ejemplo de una cuenta atrás con retrasos.
El bucle de hacer las cosas a la vez
Un bucle muy similar es el bucle do-while, cuya sintaxis es la siguiente:
También lea las estructuras de datos en las
instrucciones
C++++do
mientras (condición)
;
Se comporta como un bucle while, excepto que la condición se evalúa después de la ejecución de la instrucción en lugar de antes, garantizando al menos una ejecución de la instrucción, incluso si la condición nunca se cumple. Por ejemplo, el siguiente ejemplo de programa de ejemplo incluye cualquier texto introducido por el usuario hasta que éste se despida:
// echo machine#include <iostream>#include <string>using namespace std;int main (){ string str; do { cout <<< "Enter text:"; getline (cin, str); cout <<<<< "You have entered:" <<<< str << \ n'; } while (str! = "goodbye");}
Resultado de la ejecución:
Entrar texto: holaEntrar texto: holaEntrar texto: ¿quién está ahí? entrar texto: adiósEntrar texto: adiósEntrar: adiós
El bucle do-while es generalmente preferido a un bucle while cuando la instrucción debe ejecutarse al menos una vez, por ejemplo cuando la condición verificada hasta el final del bucle se determina en la propia instrucción de bucle.
En el ejemplo anterior, la entrada del usuario en el bloque determina lo que determina si el bucle termina. Por lo tanto, incluso si el usuario desea completar el bucle lo antes posible introduciendo adiós, el bloque de bucle debe ejecutarse al menos una vez para solicitar una entrada y, de hecho, la condición sólo puede determinarse después. se ejecuta.
El bucle para
El bucle for está diseñado para iterar varias veces. Su sintaxis es la siguiente:
para (inicialización; condición; aumento) instrucción;
Al igual que el bucle while, este bucle repite la instrucción siempre y cuando la condición sea verdadera. Pero, además, el bucle for proporciona ubicaciones específicas que contienen una expresión de inicialización y de aumento, ejecutada respectivamente antes del inicio del bucle y después de cada iteración. Por lo tanto, es particularmente útil utilizar variables de contador como condición.
Esto funciona de la siguiente manera:
- se ejecuta la inicialización. Normalmente, esto declara una variable de contador y le asigna un valor inicial. Esto se hace sólo una vez, al principio del bucle.
- se verifica la condición. Si esto es cierto, el bucle continúa; de lo contrario, el bucle termina y la instrucción es ignorada.
- se ejecuta la instrucción. Como de costumbre, puede ser una instrucción simple o un bloque rodeado de tirantes {}.
- El aumento se ejecuta y el bucle vuelve al paso 2.
- finaliza el bucle: la ejecución continúa con la siguiente instrucción.
A continuación se muestra un ejemplo de una cuenta atrás utilizando un bucle for:
// Cuenta atrás usando un for#include <iostream>usando namespace std;int principal (){for (int n = 10; n> 0; n--) { cost <<<<<",","; } cost <<<<< "takeoff! \ n";}
Los tres campos de un bucle son opcionales. Pueden dejarse vacíos, pero en cualquier caso, los puntos y coma entre ellos son obligatorios. Por ejemplo, para (; n <10;) est une boucle sans initialisation ni augmentation (équivalent à une boucle while); et pour (; n <10; ++ n) est une boucle avec augmentation, mais aucune initialisation (peut-être parce que la variable a déjà été initialisée avant la boucle. Une boucle sans condition équivaut à une boucle dont la condition est vraie (c’est-à-dire une boucle infinie.
Dado que cada uno de los campos se ejecuta en un momento determinado del ciclo de vida de un bucle, puede ser útil ejecutar más de una única expresión sólo mediante una inicialización, condición o instrucción. Desgraciadamente, no se trata de declaraciones, sino de expresiones sencillas que no pueden ser sustituidas por un bloque. Como expresiones, sin embargo, pueden utilizar el operador de comas (,): este operador es un separador de expresiones y puede separar varias expresiones cuando normalmente sólo se espera una. Por ejemplo, al usarlo, sería posible que un bucle gestionara dos variables de contador, inicializándolas y aumentándolas:
para (n = 0, i = 100; n! = i; ++ n, - i){ // cualquier cosa aquí...}
Este bucle se ejecutará 50 veces si no se modifica n ni i en el bucle:
n comienza con un valor de 0 e i con 100, la condición es n! = i (es decir, n no es igual a i. Dado que n aumenta en uno y i disminuye en uno en cada iteración, la condición del bucle se volverá falsa después de la 50ª iteración, cuando n e i son iguales a 50.
Rango basado en bucle
El bucle for tiene otra sintaxis, que se utiliza exclusivamente con las pistas:
para la instrucción (declaración: rango);
Este tipo de lazo atraviesa todos los elementos del rango, donde la declaración declara una variable capaz de tomar el valor de un elemento de este rango. Las playas son secuencias de elementos, incluyendo tablas, contenedores y cualquier otro tipo que soporten funciones de inicio y final; la mayoría de estos tipos aún no han sido introducidos en este tutorial, pero ya conocemos al menos un tipo de rango: cadenas, que son secuencias de caracteres.
Un ejemplo de un bucle basado en un rango que utiliza cadenas:
// basado en el bucle for#include <iostream>#include <string>using namespace std;int main (){ string str {"Hello!"}; for (char c: str) { cout <<<<"[" <<<<< c << "]"; } cout <<< < \ \ n' }
Tenga en cuenta que lo que precede a los dos puntos (:) en el bucle for corresponde a la declaración de una variable char (los elementos de una cadena son del tipo char. A continuación se utiliza esta variable, c, en el bloque de instrucciones para representar el valor de cada uno de los elementos del rango.
Este bucle es automático y no requiere la declaración explícita de ninguna variable de contador.
Los bucles basados en la playa generalmente también utilizan la deducción de tipo para el tipo de elementos con auto. Típicamente, el bucle basado en el rango anterior también puede escribirse de la siguiente manera:
para (auto c: str) cout <<<"[" <<<<< c <"]";
Aquí, el tipo de c se deduce automáticamente como el tipo de elementos en str.
Instrucciones de salto
Las instrucciones de salto se utilizan para modificar el flujo de un programa realizando saltos a ubicaciones específicas.
La instrucción de ruptura
break deja un bucle, incluso si no se cumple la condición para su final. Se puede utilizar para terminar un bucle infinito o para forzarlo a terminar antes de su final natural. Por ejemplo, detengamos la cuenta atrás antes de su fin natural:
// ejemplo de un bucle con break#include <iostream>usando namespace std;int main (){for (int n = 10; n> 0; n--) {cost <<< n <<<",","; if (n == 3) {cost <<<< "abted countdown!"; Break; } } }}}.
Formación continua
La instrucción continúa forzando al programa a ignorar el resto del lazo en la iteración actual, como si se hubiera alcanzado el final del bloque de instrucciones, haciendo que éste salte al principio de la siguiente iteración. Por ejemplo, pasemos al número 5 de nuestra cuenta atrás:
// ejemplo de un bucle con continuous#include <iostream>usando namespace std;int principal (){ para (int n = 10; n> 0; n--) { si (n == 5) continuous; cost <<<< n <<<","; } cost <<<< "takeoff! \ n";}
La instrucción goto
goto le permite hacer un salto absoluto a otro punto del programa. Este salto incondicional ignora los niveles de anidamiento y no hace que la pila se desenrolle automáticamente. Por lo tanto, es una característica que se debe utilizar con precaución, y preferiblemente en el mismo bloque de instrucciones, especialmente en presencia de variables locales.
También leaLas clases en C++++El
punto de destino se identifica mediante una etiqueta, que se utiliza como argumento para la instrucción goto. Una etiqueta consiste en un identificador válido seguido de dos puntos (:.
goto se considera generalmente una característica de bajo nivel, sin casos particulares de uso en los paradigmas modernos de programación de alto nivel que se utilizan generalmente con C++. Pero, por ejemplo, aquí hay una versión de nuestro bucle de cuenta atrás usando goto:
// ejemplo de un goto#include loop <iostream>usando namespace std;int main (){ int n = 10;mylabel: cost <<< n <<<",","; n--; si (n> 0) cambia a mylabel; cost <<<< "takeoff! \ n";}
Otra instrucción de selección: switch
La sintaxis de la instrucción del interruptor es un poco peculiar. Su propósito es buscar un valor entre una serie de posibles expresiones constantes. Esto es algo similar a la concatenación de instrucciones if-else, pero limitado a expresiones constantes. Su sintaxis más típica es:
switch (expresión){case constant1:group-of-statements-1;break;case constant2:group-of-statements-2;break;...default:default-group-of-statements}
Esto funciona de la siguiente manera: switch evalúa una expresión y comprueba si es equivalente a la constante1; si es así, ejecuta el grupo de declaración-1 hasta que encuentra la instrucción de ruptura.
Cuando encuentra esta instrucción de ruptura, el programa salta al final de toda la instrucción del interruptor (la llave de cierre.
Si la expresión no era igual a la constante1, entonces se compara con la constante2. Si es igual a esto, ejecuta el grupo de instrucciones-2 hasta que se encuentra una pausa, y luego salta al final del conmutador.
Finalmente, si el valor de la expresión no coincide con ninguna de las constantes especificadas anteriormente (puede haber cualquier número de ellas), el programa ejecuta las instrucciones incluidas tras la etiqueta por defecto: etiqueta, si existe (porque es opcional.
Los siguientes dos fragmentos de código tienen el mismo comportamiento, demostrando el equivalente a una instrucción de interruptor:
ejemplo de equivalencia de conmutación si-elseswitch
(x) {caja 1:coste << "x es 1";ruptura;caja 2:coste <<< "x es 2";ruptura;defecto:coste <<< "valor desconocido x";}
si (x == 1) {curva <<<< "x es 1";}o bien (x == 2) {curva <<<< "x es 2";}o bien {curva <<< "valor desconocido x";}.
La instrucción switch tiene una sintaxis algo peculiar heredada de los primeros días de los primeros compiladores de C, ya que utiliza etiquetas en lugar de bloques. En el uso más típico (indicado anteriormente), esto significa que se requieren instrucciones de separación después de cada grupo de instrucciones para una etiqueta en particular. Si no se incluye la pausa, todas las instrucciones apropiadas (incluidas las que se encuentran bajo cualquier otra etiqueta) también se ejecutan hasta el final del bloque de interruptores o hasta que se alcanza una instrucción de salto (como la pausa.
Si el ejemplo anterior no incluía la instrucción de ruptura después del primer grupo para el caso uno, el programa no saltaría automáticamente al final del bloque de interruptores después de imprimir x es igual a 1, y en su lugar continuaría ejecutando las instrucciones en el caso dos (así imprimiendo x es 2. Luego continuará haciéndolo hasta que se encuentre una instrucción de interrupción o hasta el final del bloque de conmutación. Esto evita poner las instrucciones de cada caso entre paréntesis {} y también puede ser útil para ejecutar el mismo conjunto de instrucciones para diferentes valores posibles. Por ejemplo:
switch (x) { case 1: case 2: case 3: case 3: cost << "x is 1, 2 or 3"; break; default: cost <<< "x is not 1, 2 or 3"; }
Tenga en cuenta que el interruptor se limita a comparar la expresión evaluada con etiquetas que son expresiones constantes. No es posible utilizar variables como etiquetas o rangos, ya que no son expresiones constantes C++ válidas.
Para verificar rangos o valores que no son constantes, es preferible utilizar concatenaciones de si y si no instrucciones.
Otros consejos interesantes:
- C # – Loops Puede haber una situación en la que tenga que ejecutar un bloque de código varias veces. En general, las instrucciones se ejecutan secuencialmente: primero se ejecuta la primera instrucción de una función, seguida de….
- Operadores en C++ Una vez introducidas las variables y constantes, podemos empezar a utilizarlas utilizando operadores. La siguiente es una lista completa de operadores. En esta etapa, probablemente no es necesario……
- C++ Ejercicios con soluciones Ejercicios corregidos en el lenguaje C++, descargue también la lista completa de ejercicios (lenguaje C, C++, tablas, punteros,…. Vea a continuación una serie de ejercicios para descargar. Ejercicios 1: Escribir un programa en C….
- Estructura de un programa en C++ La mejor manera de aprender un lenguaje de programación es escribir programas. Normalmente, el primer programa que los principiantes escriben es un programa llamado «Hello World», que simplemente muestra «Hello World» en la pantalla de…..
- Cómo instalar el control parental en Windows 10 Aprenda a configurar el control parental en Windows 10. Si su hijo empieza a usar su ordenador personal o si usted compra su primer ordenador, debe empezar a usar la familia Microsoft….