• No se han encontrado resultados

Tema 4: Estructuras de control

N/A
N/A
Protected

Academic year: 2022

Share "Tema 4: Estructuras de control"

Copied!
13
0
0

Texto completo

(1)

Tema 4: Estructuras de control

Selectivas (if, switch), operador ternario ‘?:’. Repetitivas o cíclicas (while, do while, for, break, continue).

(2)

Estructuras de control 1) Selectivas

1a) Simple y múltiple: Se usan para decidir hacer algo en determinado punto, o decidir entre dos acciones Ejemplos:

if (resultado >= 3)

printf(“aprobó \n”);

else

printf(“no aprobó \n”);

if (temperatura < 0)

printf(“congelado \n”); if (resultado >= 3)

{ printf(“aprobó \n”);

printf(“felicitaciones \n”); } else

{ printf(“no aprobó \n”);

printf(“suerte la próxima \n”); } Simple Multiple

Profs. Buitrago - Jiménez

(3)

1) Selectivas (cont.)

Ejemplo: para tomar una decisión basado en varias condiciones if (resultado >= 18)

printf(“aprobó con 5 \n”);

else if (resultado >= 14)

printf(“aprobó con 4 \n”);

else if (resultado > = 10)

printf(“aprobó con 3 \n”);

else

printf(“no aprobó \n”);

(4)

Estructuras de control 1) Selectivas

1b) switch:

Esta es la otra manera de llevar a cabo una selección múltiple, pero sólo se usa para interrogar una sola variable, todas las ramas dependen del valor de esa variable.

Tiene un caso “default” que captura todos los casos no especificados (esto es opcional).

¿qué sucede si se comenta el “break”

del case 2?

ver ejemploC1A/ejC1A

int number;

switch (number) {

case 0:

printf(“ninguno \n”);

break;

case 1:

printf(“uno \n”);

break;

case 2:

printf(“dos \n”);

break;

default:

printf(“muchos \n”);

Profs. Buitrago - Jiménez }

(5)

1) Selectivas

1c) expresión condicional:

if (a > b) z = a;

else

z = b;

z = ( a > b ) ? a: b;

Cálculo en z del máximo de a y b

Sintaxis: expresión 1 ? expresión 2 : expresión 3

La expresión 1 es evaluada. Si ésta es no cero (verdadera), entonces la expresión 2 es evaluada. En caso contrario (expresión 1 es cero (falso)) la expresión 3 es evaluada.

Sólo una, expresión 2 o expresión 3, es evaluada.

Obs.: El operador condicional ?: es "ternario", en el sentido de que se aplica a tres expresiones o elementos. La mayoría de los operadores en C son "binarios"

(como la adición (+) y la sustracción (-)), y hay algunos "unarios" como ++ y -- ver ejC2

(6)

Profs. Buitrago - Jiménez

Operador ‘?:’

El operador ternario ‘?:’ no está restringido al formato de asignación, como en el siguiente ejemplo:

y = x > 9 ? 100 : 200;

Se puede tener un uso más amplio de este operador, tal como se muestra en este otro ejemplo:

Archivo main.c

#include <stdio.h>

int f1(int) , f2(void) ; main ()

{ int t;

printf("\nIngrese un entero: ");

scanf("%d",&t);

printf("\n");

t ? f1(t)+f2() :

printf("\nIngresó cero\n");

}

Archivo f1.c int f1(int n)

{ printf("%d",n);

return 0;

}

Archivo f2.c int f2(void)

{ printf(" fue el valor que Ud.

ingresó \n");

return 0;

}

ver ejemploC1B

(7)

2) Repetitivas

Esta instrucción repite el bloque de instrucciones hasta que la condición al inicio sea falsa.

2a) lazo “while”

char s1[100];

int i = 0;

scanf (“%s”, s1);

while (s1[i] != ‘\0’) i++;

printf (“longitud es %d \n”, i);

Ejemplo:

Al finalizar el programa, i es la longitud

del arreglo de caracteres s1. ver ejemploC3/ejC3

(8)

Estructuras de control 2) Repetitivas

Es similar al lazo “while” excepto que la prueba de la condición se lleva a cabo al final del lazo. Esto garantiza este se ejecute al menos una vez antes de terminar

2b) lazo “do . . . while”

int valor;

do {

printf(“Ingrese un número entero distinto de cero”);

printf(“o 0 para salir: \n”);

scanf (“%d”, &valor);

} while (valor != 0);

Ejemplo:

importante no olvidar

este punto y coma ver ejemploC3/ejC3

Profs. Buitrago - Jiménez

(9)

2) Repetitivas

Es para lazos donde se conoce el número de iteraciones de antemano.

2c) lazo “for”

Ejemplo: promedio de los números en un arreglo.

float arreglo[100];

float total = 0.0;

int i;

. . .

for (i=0; i < m; i++) total + = arreglo[i];

total = total / m;

. . . Consta de 3 partes:

• La inicialización de la variable del lazo

• La condición de terminación / prueba. Se sale cuando esta es falso.

• El tercero se ejecuta cada vez que el bloque de instrucciones del lazo se termina. Corresponde a un incremento de la variable índice del lazo.

(10)

Estructuras de control 2) Repetitivas

Obs. Se permite en estos lazos tener varias variables de control.

for ( h = 100, i = 0; h >= i; h--, i++);

2c) lazo “for” (cont.)

“break”: Esta instrucción es usada para salida abrupta de un lazo

“continue”: Es similar al “break”, pero obliga un salto inmediato a la instrucción de control del lazo.

• Lazo “while”, salta a la condición de prueba.

• Lazo “do . . . while”, salta a la condición de prueba.

• Lazo “for”, salta a la condición de prueba e inicia la iteración siguiente.

Profs. Buitrago - Jiménez

(11)

Ejemplo. Programa que imprime un vector de números reales de longitud 15 como una matriz de 3 filas y 5 columnas:

#include <stdio.h>

#include <stdlib.h>

main() {

int i, n = 15;

float a[ ] = {0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11., 12., 13., 14. };

char c;

for (i = 0; i < n; i++ )

{ if (i%5 == 4 || i == n-1) c = ‘\n’;

else

c = ‘ ’;

printf(“%5.2f %c”, a[i], c);

} }

for (i = 0; i < n; i++ )

printf (“%5.2f %c”, a[i],

(i%5 == 4 || i == n-1) ? ‘\n’ : ‘ ‘);

ver ejemploC4/ejC4 y ejemploC4A1/ejC4A1

(12)

Profs. Buitrago - Jiménez

Estructura de control for

Se puede dar un uso amplio a las expresiones que conforman una estructura cíclica for, tal como se ilustra en el siguiente ejemplo:

Archivo main.c

#include <stdio.h>

int leer_num(void), indicador(void);

int cuadrado(int);

main () { int t;

for(indicador(); t=leer_num();

indicador()) cuadrado(t);

}

Archivo indicador.c

int indicador(void) { printf(": ");

return 0;

}

Archivo leer_num.c int leer_num(void) { int t;

scanf("%d",&t);

return t;

}

Archivo cuadrado.c

int cuadrado(int num)

{ printf("%d\n",num*num);

return 0;

} ver ejemploC4B

(13)

Se puede dar un uso amplio a las expresiones que conforman una estructura cíclica for, tal como se ilustra en el siguiente ejemplo:

/* Programa para sumar los enteros del 1 al 5 */

#include <stdio.h>

void main(void) {

int i=1, suma=0; /* primera forma */

for ( ; i<=5 ; ) { suma += i;

++i;

} printf("suma 1 = %d\n", suma);

suma=0; /* segunda forma */

for (i=1; i<=5; ++i) suma+=i;

printf("suma 2 = %d\n", suma);

for(i=1, suma=i; i<5 ; ++i, suma+=i) /* tercera forma */;

printf("suma 3 = %d\n", suma);

for(i=1, suma=0; i<=5 ; suma+=i, ++i) /* cuarta forma */;

printf("suma 4 = %d\n", suma);

4 formas distintas de escribir un bucle for para sumar los enteros del 1 al 5.

ver ejC_4formasFOR

Referencias

Documento similar

The following conclusions are drawn: (i) the current regulatory guidance documents detailing the phase I and II ERA procedure should be updated and harmonised across Member States

Será condición indispensable para poder ser participante del Banco de Libros durante el curso 2020-2021, la entrega por parte del alumnado del lote completo de libros de texto

SI SE UTILIZA LIBRO DE TEXTO (ya sea de elaboración propia o no, digital o no) como material elegido para impartir la asignatura, NO FORMARÁN PARTE DEL BANCO DE LIBROS, los

La Normativa de evaluación del rendimiento académico de los estudiantes y de revisión de calificaciones de la Universidad de Santiago de Compostela, aprobada por el Pleno or-

nes de una misma comunidad político-religiosa y, cultural, con muy ligeras diferencias en su zona Central, la mediterránea.' Es cierto que en las regiones montañosas del

Gastos derivados de la recaudación de los derechos económicos de la entidad local o de sus organis- mos autónomos cuando aquélla se efectúe por otras enti- dades locales o

Si es cierta se ejecuta el Bloque de sentencias y luego las instrucciones de operación en ese orden y se vuelve a evaluar la condición. • Si la condición es falsa termina

A nivel nacional la legislación básica en materia fitosanitaria se constituye en torno a la Ley 43/2002 , de 20 de noviembre, de Sanidad Vegetal , al Real Decreto 739/2021, de 24