0% encontró este documento útil (0 votos)
1K vistas12 páginas

Sentencias en C++

El documento describe las sentencias en C++. Explica que las sentencias controlan el flujo de ejecución de un programa y pueden ser de expresión, compuestas, de selección, iteración, salto o declaración. Describe las sentencias if-else y switch como formas de selección condicional y los bucles while, do-while y for como sentencias de iteración que permiten repetir bloques de código.
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
1K vistas12 páginas

Sentencias en C++

El documento describe las sentencias en C++. Explica que las sentencias controlan el flujo de ejecución de un programa y pueden ser de expresión, compuestas, de selección, iteración, salto o declaración. Describe las sentencias if-else y switch como formas de selección condicional y los bucles while, do-while y for como sentencias de iteración que permiten repetir bloques de código.
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

Sentencias (Statements) en C++ Las sentencias ("Statements") especifican y controlan el flujo de ejecucin del programa.

Si no existen sentencias especficas de seleccin o salto, el programa se ejecuta de forma secuencial en el mismo orden en que se ha escrito el cdigo fuente (es el que podramos considerar orden "natural" de ejecucin). Una expresin es una secuencia de operadores, operandos, elementos de puntuacin y palabras clave, que especifican una computacin. Tiene sentido computacional en s misma y equivale a una frase en el lenguaje normal. Entre sus caractersticas distintivas estn las de poder producir un resultado y posibles efectos laterales.

Cualquier expresin finalizada en un punto y coma ; forma una sentencia: <expresin>;


C++ ejecuta las sentencias evaluando la expresin. Todos los efectos colaterales de la evaluacin son tenidos en cuenta antes de ejecutar la prxima sentencia. La mayora de sentencias C++ son asignaciones o llamadas a funciones. Un caso especial es la sentencia nula; consiste en un punto y coma (;) aislado. Una sentencia nula no hace nada, pero puede ser necesaria en situaciones en que la sintaxis del lenguaje espere una sentencia pero nuestro programa no necesita hacer nada.

Clasificacin de las sentencias Dada la definicin anterior, resulta evidente que pueden existir infinitas sentencias distintas, e innumerables criterios para su clasificacin. Una de las posibles, que adems coincide con la clasificacin del Estndar, distingue las siguientes clases de sentencia:

De etiqueta De expresin Compuestas De seleccin De iteracin De salto De declaracin Bloques de intento

Adems de las anteriores, por sus caractersticas especiales podramos considerar las siguientes clases adicionales:

Sentencias de preproceso Sentencias ensamblador

Sentencias compuestas

Las sentencias compuestas, tambin denominadas bloques se utilizan en aquellas situaciones en que la sintaxis espera una sentencia pero se necesita usar varias. Ejemplo: if (first) ++x; else { --x; z = a; } Sentencias de seleccin
Las sentencias de seleccin, tambin llamadas de control de flujo, permiten decidir entre distintos cursos de accin en funcin de ciertos valores. Las ms comunes en C++ son: if...else. switch

Recuerde que de no ser por estas sentencias, el flujo de ejecucin del programa estara siempre constreido a la ejecucin de sus sentencias en el orden en que estn colocadas en el cdigo fuente.

if else En su forma abreviada, cuando no existe la clusula else, esta sentencia permite escoger entre ejecutar o no una sentencia, en funcin del resultado de una expresin lgica. En su forma ampliada, cuando la clusula else est presente, permite escoger entre dos opciones alternativas.

Sintaxis if ( <condicin> ) <bloque1>; else <bloque2>; <condicin> debe ser una expresin relacional que devuelve un valor lgico, es decir, un bool, y estar obligatoriamente entre parntesis. Pueden declararse variables dentro de la <condicin>.
Por ejemplo, la siguiente es una sintaxis vlida:

if (int val = func(arg)) val = z ; else val = y;

El mbito de la variable val incluye toda la sentencia if, incluyendo, en su caso, el bloque <sentencia2> de else. La clusula else es opcional, pero no puede haber sentencias entre el if y else. <Bloque1>. Es una sentencia o bloque de cdigo que se ejecuta si <condicion> se evala como cierto (true). <Bloque2> es una sentencia o bloque de cdigo que se ejecuta si existe un else y <condicion> resulta falso (false)

Puesto que el if simplemente chequea el valor resultante de <condicion> (igual o desigual a cero), las dos expresiones siguientes son equivalentes: if ( expresion ) <sentencia> ; if ( expresion !=0 ) <sentencia> ; Ejemplos Uno sencillo: if (salida == 'S') break; Otro ejemplo: if (a > b) z = a; else z = b; Se podra haber escrito de forma ms comprimida: if (a > b) z = a; else z = b; Otro ejemplo: if (int val = func(count)) { /* sentencias */ } else { // otra va de accin cout << "val es falso"; } Otro ejemplo: if (first) ++x; else { --x; z = a; }

Puesto que la clusula else es opcional, en los if... else anidados podra haber ambigedad sobre a qu if corresponde un else; esto se evita asociando el else al if ms interno sin else. Por ejemplo, en los dos trozos de cdigo siguientes, el primero tiene una indentacin que no se corresponde con la realidad lgica del programa.
switch Se trata de una sentencia condicional multi-salida en la que las decisiones se toman en funcin de un valor numrico entero de entre una serie de opciones posibles. Puede existir una clusula por defecto o bien no adoptarse ninguna accin.

Sintaxis
switch ( <expresion> ) { case <const1> : <Bloque1>; [break;] case <const2> : < Bloque2>; [break;] . . . case <constN> : < BloqueN>; [break;] [default : < BloqueD>; ] } La sentencia switch comprueba cuando una expresin <expresion> entre parntesis (que se

traduce en un valor numrico) coincide con alguno de una serie de valores enteros constantes y diferentes (<constX>). En cuyo caso, se ejecuta un bloque de cdigo especfico <sentencia>. En caso de estar presente la clusula opcional default y no existir concordancia con ninguno de los valores anteriores, se ejecuta una sentencia por defecto (<BloqueD>). Los valores case y default pueden aparecer en cualquier orden, aunque lo usual es colocar default al final. Los dos puntos : despus de <constX> son imprescindibles.

Las expresiones <constX> son expresiones constantes que se resuelven en un entero. Pueden ser simples o compuestas, como se muestra en el ejemplo.

switch (c - 48) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: cout << "Dgito" << endl; break; case 17: case 21: case 25: case 31: case 37: case 49: case 53: case 57: case 63: case 69: cout << "Vocal" << endl; break; default: cout << "Otro carcter" << endl; }

Despus de ejecutado el bloque de cdigo correspondiente a una concordancia, siguen las comprobaciones, por lo que puede ser conveniente incluir un break para abandonar el control del switch (no es necesario ningn break despus de la ltima). Ver ejemplo.
Es ilegal que la transferencia de control originada en alguna clusula case o default se salte una declaracin que incluya un inicializador implcito o explcito. A menos que la declaracin est situada en el interior de un bloque que sea saltado completamente durante la transferencia. Ejemplo:

switch (n) { case 1: case 10: int y; // L-3: Ok. no incluye inicializacin cout << "Caso-1" << endl; break; case 2: { int z = 0; // L-8: Ok. dentro de un bloque cout << "Caso-2" << endl; break; } case 3: int x = 3; // L-13: Error-1 cout << "Caso-3" << endl; break; case 4: // L-16: for (int i = 0; i<4; i++) // L-17: Error-2 cout << "Caso-4" << endl; break; default: // L-20: cout << "Resto de casos" << endl; }
Sentencias de iteracin

Las sentencias de iteracin permiten repetir un conjunto de sentencias ejecutando un bucle. En C++ existen tres formas de iteraciones: los bucles while, dowhile y for. Bucle while La sentencia while permite ejecutar repetidamente un bloque de cdigo mientras se cumpla una determinada condicin que es chequeada antes de cada iteracin. Sintaxis while ( <condicion> ) <sentencia> ;

La sentencia while ejecuta iterativamente el bucle definido por el bloque de cdigo <sentencia> siempre que el valor devuelto por la expresin <condicin> (que debe estar entre parntesis) sea cierto. Nota: recordemos que cierto (true) equivale numricamente a distinto de cero, mientras que falso (false) equivale al valor cero. Puesto que la condicin se evala antes que cada ejecucin del bucle, si al comienzo <condicion> devuelve falso, <sentencia> no se ejecuta ninguna vez, y el control pasa a la siguiente sentencia. Si <condicin> devuelve cierto se ejecuta el bucle <sentencia>, y a continuacin se vuelve a evaluar <condicion> con lo que se repite el ciclo. Ejemplos while (*p == ' ') p++; while ( i <= j) i++; La sentencia puede estar vaca, realizndose entonces toda la computacin requerida en la clusula <condicin>. Ejemplo: while ( getchar() != 'Z' ); Aunque lo normal es que la <sentencia> sea un bloque de cdigo entre corchetes: while (i < n) { cout << i << endl; ++i; } Intente por s mismo la explicacin de las salidas del programa adjunto antes de leer el comentario final (esta disposicin es muy utilizada en bucles que deben repetirse un nmero n de veces). #include <iostream> using namespace std; int main() { // ========== int x = 5, y = 5; while ( x-- ) { cout << "x = " << x << endl; } while ( --y ) { cout << " y = " << y << endl; }

cout << "Terminado!!" << endl; } Salida: x=4 x=3 x=2 x=1 x=0 y=4 y=3 y=2 y=1 Terminado!! Comentario En ambas iteraciones, la condicin indicada en el parntesis es chequeada antes de ejecutar la iteracin (la salida en pantalla). La diferencia entre ambos es que el postdecremento (x--) se realiza despus de la evaluacin del parntesis (comprobacin de que su contenido es cierto). En consecuencia, el ciclo del primer bucle es como sigue:
1. comprobacin de que x es cierto (distinto de cero). El resultado, que denominaremos R, es un bool. 2. decremento unitario de x 3. dos posibilidades: 1. R == true ejecutar el bucle (salida en pantalla) volver al punto 1. 2. R == false abandonar el bucle. En cambio, en el segundo bucle, el predecremento (--x) se realiza antes de la evaluacin del parntesis (comprobacin de la condicin del bucle). En consecuencia, el ciclo del segundo bucle puede resumirse as: 1. decremento unitario de x 2. comprobacin de que x es cierto (distinto de cero). El resultado, que denominaremos R, es un bool. 3. dos posibilidades: 1. R == true ejecutar el bucle (salida en pantalla) volver al punto 1. 2. R == false abandonar el bucle.

Bucle do...while

La sentencia do ... while permite ejecutar repetidamente un bloque de cdigo mientras se cumpla una determinada condicin que es chequeada despus de cada iteracin.

Sintaxis do <sentencia> while ( <condicin> ); La sentencia do ejecuta repetidamente el bucle definido por el bloque de cdigo <sentencia> hasta que la sentencia de control <condicin> devuelve el valor falso. Puesto que el control se evala despus de cada ejecucin del bucle, resulta que este se ejecuta al menos una vez, aunque <condicin> devuelva el valor falso desde el principio (si requiere que el bucle no se ejecute ninguna vez, es mejor utilizar while). La forma ms genrica de la expresin suele ser: do { <Bloque de sentencias> ; } while ( <condicin> ); Ejemplo Este programa solicita una clave de acceso indefinidamente hasta que el usuario proporciona una que coincide con el valor almacenado en la matriz checkword. #include <stdio.h> #include <string.h> int main () { // =================== char checkword[80] = "password"; char password[80] = ""; do { printf ("Introducir clave: "); scanf("%s", password); } while (strcmp(password, checkword)); return 0; } Nota: C++ no dispone en ninguna de sus sentencias de bucle de la opcin loop (o similar), como la ofrecida por otros lenguajes para saltar al principio desde cualquier punto de la iteracin. No obstante, ofrece alternativas que pueden servir para el caso. Ver las sentencias goto y continue en el siguiente captulo. A continuacin se muestra un caso simtrico al presentado para los bucles while, que utiliza los operadores unitarios de decremento. Intente explicar por s mismo las salidas obtenidas antes de leer el comentario:

#include <iostream> using namespace std; int main() { // ======== int x = 5, y = 5; do { cout << "x = " << x << endl; } while ( x-- ); do { cout << "y = " << y << endl; } while ( --y ); cout << "Terminado OK!!" << endl; } Salida: x=5 x=4 x=3 x=2 x=1 x=0 y=5 y=4 y=3 y=2 y=1 Terminado OK!! Comentario En este caso, las el bloque de cdigo (salida en pantalla) es ejecutado antes del chequeo de la condicin expresada en el parntesis. La diferencia entre ambos bucles es que en el primero, el postdecremento (x--) se realiza despus de la evaluacin del parntesis (comprobacin de que su contenido es cierto). En consecuencia, el ciclo es como sigue: 1. ejecutar el bloque de cdigo (salida en pantalla) 2. comprobacin de que x es cierto (distinto de cero). El resultado, que denominaremos R, es un bool. 3. decremento unitario de x 4. dos posibilidades: 1. R == true volver al punto 1. 2. R == false abandonar el bucle. En cambio, en el segundo bucle, el predecremento (--x) se realiza antes de la evaluacin del parntesis (comprobacin de la condicin del bucle). En consecuencia, su ciclo puede resumirse as:

1. ejecutar el bloque de cdigo (salida en pantalla) 2. decremento unitario de x 3. comprobacin de que x es cierto (distinto de cero). El resultado, que denominaremos R, es un bool. 4. dos posibilidades: 1. R == true volver al punto 1. 2. R == false abandonar el bucle.

Bucle for
Esta sentencia permite realizar un bucle repetidamente en base a una condicin, la cual suele estar basada en el valor de un contador que se actualiza despus de cada ejecucin del bucle. Sintaxis for ( [<inicio>] ; [<condicion>] ; [<incremento>] ) <sentencia> La sentencia for realiza un bucle iterativo, es equivalente al: for <inicio> to <condicin> step <incremento> <sentencias> end for de otros lenguajes. <inicio> e <incremento> pueden ser llamadas a funciones o sentencias de asignacin. <sentencia> es del cuerpo del bucle, y puede ser cualquier bloque de cdigo. La utilizacin ms comn suele adoptar la forma: for ( <inicio> ; <condicin> ; <incremento> ) { <sentencias>; } Ejemplo for(i=0; i<n; i++) { /* sentencias del bucle */ } <inicio> inicia las variables para el bucle antes de la primera iteracin. Puede ser una expresin o una declaracin. El ejemplo que sigue sera correcto en C++: for (int i=0; i<10; i++) printf("i =%5.0d\n", i); En cambio, para compilarlo en C sera necesario declarar i en una expresin anterior: int i; for (i=0; i<10; i++) printf("i =%5.0d\n", i);

El mbito de una variable definida en la expresin <inicio> es variable. <condicin> Debe ser una expresin relacional (devuelva un valor lgico). Es comprobada antes de la primera ejecucin del bloque <sentencia>, que es ejecutado repetidamente hasta que <condicin> sea falso, por lo que si <condicin> devuelve falso desde el principio, el bucle no se ejecuta nunca. <incremento>. Despus de cada iteracin del bucle, <incremento> incrementa un contador de bucle; en consecuencia j++ es funcionalmente equivalente a ++j. <sentencia> es el bucle de for; sentencia o bloque de cdigo que se ejecuta iterativamente. El mbito de cualquier identificador declarado dentro l se limita al final de la sentencia de control.

*********** Ejemplo: Analice los siguientes ciclos anidados. while (first) { ... for (int x = 1; x < y; ++x) { ... do { // begin second ... ... } while (second); // end second ... } // end for ... } // end first

Sentencias de salto

Las sentencias de salto permiten transferir el control del programa de forma incondicional. Existen cuatro de estas sentencias: break, continue y return. Ejemplo: while (foo) { start: if (some) break; ... if (first) goto start; ... if (second) continue; ... if (! any) return; ... }

También podría gustarte