Estructuras De Control C++
Enviado por elbort • 17 de Septiembre de 2013 • 2.814 Palabras (12 Páginas) • 390 Visitas
Tema 3
Estructuras de control en C++
1
E.T.S.I. Telecomunicaci´on Laboratorio de Programaci´on 2
2
´Indice general
3.1. Bloques de sentencias
En C++ el concepto de bloque de sentencias se utilizar para agrupar un conjunto de
sentencias dentro de un ´ambito concreto del programa. Un bloque de sentencias es un
conjunto de instrucciones englobadas bajo llaves: ’{’ y ’}’.
Hay diferentes lugares, en un programa escrito en C++, donde podemos usar bloques
de c´odigo. Por ejemplo, en la sintaxis habitual de la funci´on main(), todas las instrucciones
que pertenecen a esta funci´on principal se escriben dentro de una llave de apertura
y una llave de cierre. Todo lo que hay entre esas dos llaves es el c´odigo de la funci´on
principal. De la misma manera, como se ver´a en el siguiente tema, cualquier otra funci´on
tiene sus llaves para agrupar las instrucciones que forman parte de ella.
Por otro lado, en C++ son posibles otros bloques de c´odigo que, como veremos en
este tema, est´an asociados a estructuras de control y que engloban un conjunto de instrucciones
que se ejecutan bajo las condiciones que controlan estas estructuras.
3.2. Operadores relacionales y l´ogicos
ANSI C++ define el tipo bool que tiene dos literales, false y true. Una expresi´on
booleana o l´ogica es, por consiguiente, una secuencia de operandos y operadores que se
combinan para producir uno de los valores false o true.
ANSI C no tiene tipos de datos l´ogicos o booleanos para representar los valores verdadero
o falso. En su lugar utiliza el tipo int para ese prop´osito, con el valor 0 representando
false y cualquier otro valor representando verdadero.
Operadores como == o <= que comprueban una relaci´on entre dos operandos se llaman
operadores relacionales y se utilizan en expresiones de la forma:
expresion1 operador_relacional expresion2
3
E.T.S.I. Telecomunicaci´on Laboratorio de Programaci´on 2
Los operadores relacionales se usan normalmente en sentencias de selecci´on y de
iteraci´on para comprobar una condici´on. Operadores relacionales en C++:
Operador Significado Ejemplo
== (¡Ojo!, no =) Igual a a == b
!= No igual a a != b
> Mayor que a > b
< Menor que a < b
>= Mayor o igual a >= b
<= Menor o igual a <= b
Ejemplos:
x < 5.75 b * b >= 5.0 * a * c
Los operadores l´ogicos se utilizan con expresiones para devolver un valor verdadero o
falso (true o false). Se denominan tambi´en operadores booleanos. Los operadores l´ogicos
de C++ son: not (!), and (&&) y or (||). El operador not produce falso si su operando es
verdadero, y viceversa. El operador and produce verdadero s´olo si ambos operandos son
verdaderos; si cualquiera de los operando es falso, produce falso. El operador or produce
verdadero si cualquiera de los operandos es verdadero, y falso en caso de que los dos
operandos sean falsos. Ejemplos:
!(7 == 5) (aNum > 5) && (letra == ’a’) a >= 5 || b == 3 && c <= 8
3.3. Precedencia de operadores
La precedencia de operadores determina el orden en que se eval´uan los operadores
en una expresi´on. Seguiremos como referencia la siguiente lista, donde los operadores de
cada grupo tiene prioridad sobre los del grupo siguiente:
1. ! (not) - (menos unario) + (m´as unario)
2. operadores multiplicativos: * / %
3. operadores aditivos: + - (binarios)
4. operadores relacionales de diferencia: < <= > >=
5. operadores relacionales de igualdad y desigualdad: == !=
6. operador l´ogico de conjunci´on: &&
4
Estructuras de control en C++
7. operador l´ogico de disyunci´on: ||
Adem´as de esta lista, tenemos que tener en cuenta los siguientes puntos:
Si dos operadores se aplican al mismo operando, el operador con m´as prioridad se
aplica primero.
Todos los operadores del mismo grupo tienen igual prioridad y asociatividad (se
expresan de izquierda a derecha).
Los par´entesis tienen la m´axima prioridad.
3.4. Estructuras de selecci´on
C++ tiene dos estructuras de control para la selecci´on, if (selecci´on simple y binaria)
y switch (selecci´on m´ultiple).
3.4.1. Estructura if
La sentencia if elige entre varias alternativas en base al valor de una o m´as expresiones
booleanas.
La notaci´on BNF de esta sentencia es la siguiente:
<sent_if> ::= if (<expres_bool>) <bloque_sent>
{else if (<expres_bool>) <bloque_sent>}
[else <sec_sent>]
donde <expres bool> es una expresi´on booleana y <sec sent> puede ser una sola sentencia
o un bloque de sentencias.
<sec_sent> ::= [’{’{<sentencia>}’}’|<sentencia>]
Las formas m´as sencillas de esta sentencia, son :
if (<expres_bool>) if (<expres_bool>)
<sentencia> <sentencia>
else
<sentencia>
if (<expres_bool>) if (<expres_bool>)
5
E.T.S.I. Telecomunicaci´on Laboratorio de Programaci´on 2
{ {
<sent 1> <sent 1>
... ...
<sent n> <sent n>
} }
else
{
<sent 1>
...
<sent n>
}
N´otese que en el caso en el que s´olo siga una sentencia al if no es necesario incluir
las llaves, pero s´ı lo es cuando lo siguen m´as de una sentencia.
Los programas a menudo realizan una serie de tests de los que s´olo uno ser´a verdadero.
Como ejemplo, consid´erese un programa para escribir en pantalla un mensaje diferente
correspondiente a un n´umero que representa una calificaci´on num´erica. En C++, utilizando
sentencias if anidadas, quedar´ıa:
if (Nota == 10)
cout << "Matricula de Honor";
else
if (Nota >= 9)
cout << "Sobresaliente";
else
if (Nota >= 7)
cout << "Notable";
else
if (Nota >= 5)
cout << "Aprobado";
else
cout << "Suspenso";
Sin embargo, C++ nos proporciona una forma m´as concisa de expresar lo anterior, completamente
equivalente:
if (Nota ==
...