04 - sentencias de control condicionales y ciclos en lenguaje c: for, while, do while, break,...
TRANSCRIPT
1
04 – Sentencias de control condicionales y ciclos
Diego Andrés Alvarez MarínProfesor Asociado
Universidad Nacional de ColombiaSede Manizales
2
Temario
Condicionales
if, if-else
switch, case, default
Ciclos
while
do-while
for
break, continue
goto
3
if else
if (condición)comando1;
elsecomando2;
comando3;comando2
condición
comando1
comando3
true false
4
if else
Observeque los ifs se pueden
anidar
Observe que la condición va entre
paréntesis
5
a ? b : c
Si la expresión a es verdadera, entonces se evalúa la expresión b y el resultado es el valor de b; de lo contrario la expresión c se evalua y se retorna dicho resultado.
6
switch case defaultswitch(var){case op1:
comando1;break;
case op2:comando2;
case op3:comando3;break;
default:comando4;
}comando5;
var = op1
var = op2
var = op3
comando4
comando5
comando1
comando2
comando3
true
true
true
false
false
false
7
switch case default
Este último break esinnecesario
Las expresiones comparadas deben ser de tipo entero o char.
Las expresiones contra las que se comparan deben ser constantes enteras o tipo char
8
GNU C extension switch case
default
Se puede especificar un rango en la etiqueta, algo así como:
case bajo ... alto:
Cuidado con los espacios:
bajo ... alto correcto bajo...alto incorrecto
GNU C extension quiere decir que esta es una característica soportada por el compilador gcc, pero que no está definida en el estándar ANSI C
Este último break es innecesario
Declarando variables dentro de un switch {}
10
while
condición comando1
while (condición)comando1;
comando2;
comando2
false
true
11
while
El ciclo while se ejecuta mientras la condición sea verdadera. Si la condición es falsa, se sale del ciclo.
12
while
Se puede utilizar un break para salirse del ciclo
Uno puede leer este bucle infinito con la salida utilizando el if como un: “repita hasta que (c = 'Z')”
13
do while
condición
comando1
do{
comando1;}while(condición);comando2;
comando2
false
true
14
do whileRepite hasta que la condición de salida se vuelve falsa
15
for
condición
inicialización
for(inicialización;condición; incremento)comando1;
comando2;
comando1
true
false
incremento
comando2
16
for
La estructura general del ciclo for es:
for(inicialización; condición; incremento) comando1;
comando2;
Primero se evalúa la expresión de inicialización, luego se evalúa la condición. Si la condición es falsa, entonces el ciclo termina y el programa continua en el comando2. De lo contrario, si la condición es verdadera, el comando1 se ejecuta. Finalmente el incremento se evalua y una nueva iteración del ciclo comienza con una nueva evaluación de la condición.
17
0 1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9 10
x = 1, y = 10x = 3, y = 9x = 5, y = 8x = 7, y = 7x = 9, y = 6
18
En C99 se permite utilizar declaración de variables dentro del for, similar a como se hace en C++
Se debe usar la bandera de compilación -std=c99
19
Convirtiendo decimales a binarios
20
break
break se utiliza para salirse del bloque {} actual de un ciclo (for, while, do while) o de un switch.
Si se pone un break dentro de un ciclo o switch anidado, el break solo se sale del bloque (ciclo o switch) interior, no de los otros ciclos o switchs.
21
continue
continue usa en ciclos para saltarse el resto del bloque actual y salta de nuevo a la condición del ciclo.
Si se pone un continue dentro de un ciclo anidado, este solo afecta el ciclo interior.
22
goto(evite usar esta orden)
La etiqueta debe residir en la misma función que el goto que salta a ella. Un goto no puede saltar a una etiqueta en una función diferente.
Este es un ejemplo en el cual el uso del goto está justificado. Observe que aquí quiero salir de los dos ciclos. Un break, solo nos sacaría del for interior, mientras que el goto nos saca de los dos ciclos con una sola instrucción, sin perder claridad en el código.
23
Tomado de: http://xkcd.com/292/
Evite usar “goto”http://en.wikipedia.org/wiki/Goto
24
Normas de estiloUnas normas de estilo en programación, son tan importantes que todas las empresas dedicadas a programación imponen a sus empleados una mínima uniformidad, para facilitar el intercambio de programas y la modificación por cualquier empleado, sea o no el programador inicial. Por supuesto, cada programa debe ir acompañado de una documentación adicional, que aclare detalladamente cada módulo del programa, objetivos, algoritmos usados, ficheros... (ver por ejemplo https://code.google.com/p/google-styleguide/)
No existen un conjunto de reglas fijas para programar con legibilidad, ya que cada programador tiene su modo y sus manías y le gusta escribir de una forma determinada. Lo que sí existen son un conjunto de reglas generales, que aplicándolas, en mayor o menor medida, se consiguen programas bastante legibles. Aquí intentaremos resumir estas reglas.
Normas de estilo en la programación
● Lo principal es mejorar tanto como se pueda la claridad en el código. El código debe ser leíble por usted mismo (en el futuro) y por otras personas sin dificultad.
● Cuando se escriben los programas se debe priorizar la legibilidad del código por encima de todo, incluso sobre la velocidad de ejecución (excepto en aplicaciones muy específicas).
● Hay que entender que el código normalmente se escribe una vez, pero se lee decenas de veces.
● Sea consistente con su estilo de programación.
Líneas
● Una línea no debe sobrepasar la columna 80.
● Use líneas en blanco para separar el código en párrafos o bloques.
● Coloque una instrucción por línea; sin embargo, si el colocar dos o más sentencias en una misma línea mejora la claridad del programa, entonces hágalo así.
● Evite líneas muy largas. En vez de esto utilice varias líneas.
● Coloque los operadores ++ y -- en sus propias líneas. No use ++ y -- dentro de otras sentencias.
Espacios e identaciones
● Use identaciones de 3 espacios (configure su editor).
● Coloque espacios antes y después de cada operador binario y de cada signo =, así como los espacios separan las palabras en un texto. Los operadores unarios (++, –) van junto al identificador sobre el que actuán.
● En una sentencia que consiste de dos o más líneas, cada línea excepto la primera debe identarse un nivel extra para indicar que es una continuación de la primera.
La identación y las llaves {}
● Utilice apropiadamente las llaves {} para delimitar los bloques de código. Las llaves deben ocupar una sola línea y deben estar en la misma columna (identación ALLMAN).
● Cuando un if/while afecta a más de una línea, enciérrela entre llaves.
Nombres de variables
● Use nombres de variables simples y descriptivos
● Las constantes se escriben en MAYUSCULAS.
● Use el guión bajo _ para mejorar la claridad de los nombres de las variables. Ej: ancho_viga
● No use la L minúscula o la O mayúscula como nombres de variables.
● Los nombres cortos tales como x ó y son aceptables cuando su significado es claro y cuando un nombre largo no añadiría información o claridad adicional.
● i,j,k se utilizan exclusivamente como contadores en los ciclos for/while/do-while.
Variables
● Evite en lo posible usar variables globales. Utilice en lo posible variables shared o en su defecto pase las variables globales como argumentos a la función.
● Declare las variables globales tan cerca al lugar donde las va a utilizar como sea posible.
Comentarios
● Comente el código mientras programa.
● Después de declarar una variable, escriba un comentario que explique para que sirve esa variable.
● Incluya comentarios antes de cada bloque de código. Estos describirán los propósitos del bloque en el cumplimiento de una tarea cohesiva. El uso de nombres significativos en variables y funciones minimizan la necesidad de comentarios.
● Procure alinear los comentarios que van en líneas seguidas
Comentarios
● Antes de definir una función se debe poner un comentario que diga en una línea o dos qué es lo que hacen dichas funciones y se expliquen los parámetros de la misma. Estos comentarios son para que una persona que esté explorando el código pueda entender qué hace una función sin tener que estudiarla en profundidad. Este breve comentario en el encabezado de la función debe apoyarse a su vez en un nombre de función descriptivo.
Consejos generales
● Compile el código de modo tal que este no tenga Warnings. Muchas veces los Warnings muestran errores en los códigos.
Material basado en:
http://www.gnu.org/software/gnu-c-manual/gnu-c-manual.html
http://en.cppreference.com/w/cpp/language/goto
Wikipedia