3. Sentencias de control

Anuncio
Sentencias de control
Fundamentos de Informática EUP ULPGC
Jose Torres
Introducción
Programa: secuencia ordenada de instrucciones =>
flujo de ejecución = orden en que se ejecutan
Hasta ahora ejecución secuencial = orden en el que
aparecen en el texto del programa
Esto es limitado, nesecitamos:
- ejecutar conjunto de instrucciones cuando se cumple una
condición
- repetir un conjunto de instrucciones un número de veces
Existen sentencias de control para expresar los distintos
flujos de ejecución
Fundamentos de Informática EUP ULPGC
Jose Torres
Tipos de flujos de ejecución que son implementados
mediante sentencias de control:
− Secuencia: ejecución sucesiva de dos o más operaciones;
una instrucción detrás de otra separadas por ‘;’
− Selección: se realiza una u otra operación, dependiendo
de una condición; sentencia ‘if-else’
− Iteración: repetición de una operación mientras se cumpla
una condición (bucle); sentencias ‘while’, ’for’ y ’do-while’
Fundamentos de Informática EUP ULPGC
Jose Torres
Fundamentos de Informática EUP ULPGC
Jose Torres
Sentencia if (selección)
Forma general:
if (expresion)
sentencia;
Si expresion es verdadera (valor mayor que 0) => se ejecuta
sentencia
La expresion debe estar entre paréntesis
Si sentencia es compuesta (secuencia de instrucciones) =>
if (expresion)
{
sentencia_1;
sentencia_2;
...
sentencia_n; }
Fundamentos de Informática EUP ULPGC
Jose Torres
Diagrama de flujo:
Fundamentos de Informática EUP ULPGC
Jose Torres
ƒ Ejemplo 1:
Programa que lee un número y comprueba si es mayor que
cero:
#include <stdio.h>
void main()
{
int numero;
/* leer el numero */
printf("Introduzca un numero: ");
scanf("%d", &numero);
if (numero > 0)
printf("El numero %d es mayor que cero.\n", numero);
if (numero <= 0)
printf("El numero %d no es mayor que cero.\n", numero);
}
Fundamentos de Informática EUP ULPGC
Jose Torres
ƒ Ejemplo 2:
Programa que lee un número y lo eleva al cuadrado si es >0
#include <stdio.h>
void main()
{
int numero, cuadrado;
/* leer el numero */
printf("Introduzca un numero: ");
scanf("%d", &numero);
if (numero > 0)
{
cuadrado = numero * numero;
printf("El cuadrado de %d es %d.\n", numero, cuadrado);
}
if (numero <= 0) printf("El numero no es mayor que 0.\n”);
}
Fundamentos de Informática EUP ULPGC
Jose Torres
Sentencia if-else (selección)
Forma ampliada de la sentencia if
Forma general:
if (expresion)
sentencia_1;
else
sentencia_2;
Si expresion es:
- verdadera (valor mayor que 0) => se ejecuta sentencia 1
- falsa (valor igual a 0) => se ejecuta sentencia 2
Si las sentencias son compuestas se encierran entre { }
Fundamentos de Informática EUP ULPGC
Jose Torres
Sentencia if-else, diagrama de flujo:
Fundamentos de Informática EUP ULPGC
Jose Torres
ƒ Ejemplo :
Programa que lee un número e indica si es mayor que cero:
#include <stdio.h>
void main()
{
int numero;
/* leer el numero */
printf("Introduzca un numero: ");
scanf("%d", &numero);
if (numero > 0)
printf("El numero %d es mayor que cero.\n", numero);
else
printf("El numero %d no es mayor que cero.\n", numero);
}
Fundamentos de Informática EUP ULPGC
Jose Torres
Las sentencias pueden ser a su vez sentencias if-else
if (e1)
S1
else
if (e2)
S2
else
S3
El funcionamiento sería:
− si e1 es verdadera se ejecuta S1
− si e1 es falsa y e2 es verdadera se ejecuta S2
− si e1 es falsa y e2 es falsa se ejecuta S3
Fundamentos de Informática EUP ULPGC
Jose Torres
Ejemplo: comprobar si un número es menor, mayor o igual
que 0
#include <stdio.h>
void main() {
int numero;
printf("Introduzca un numero: ");
scanf("%d", &numero);
if (numero < 0)
printf (“El numero es menor que cero.\n”);
else
if (numero > 0)
printf (“El numero es mayor que cero.\n”);
else
printf (“El numero es igual que cero.\n”); }
Fundamentos de Informática EUP ULPGC
Jose Torres
falso
falso
(numero < 0)
verdadero
(numero > 0)
verdadero
printf (“El numero es menor que cero.\n”);
printf (“El numero es mayor que cero.\n”);
printf (“El numero es igual que cero.\n”);
Este sería el diagrama de flujo del ejemplo anterior
Fundamentos de Informática EUP ULPGC
Jose Torres
Sentencia while (iteración)
Forma general:
while (expresion)
sentencia
sentencia se ejecutará mientras el valor de expresion sea
verdadero (distinto de 0)
Se evalúa la expresión; si es verdadera se ejecuta la
sentencia y se vuelve a evaluar la expresión; si es falsa se
ejecuta la siguiente sentencia
Lo normal es que sentencia incluya alguna instrucción
que altere el valor de expresión, proporcionando así la
condición de salida del bucle
Fundamentos de Informática EUP ULPGC
Jose Torres
Si la sentencia es compuesta se encierra entre { }
while (expresion)
{
sentencia 1
sentencia 2
.
.
sentencia N
}
Fundamentos de Informática EUP ULPGC
Jose Torres
Diagrama de flujo de la sentencia while
Fundamentos de Informática EUP ULPGC
Jose Torres
Ejemplo 1: programa que lee enteros y los escribe en
pantalla hasta que se teclee el cero
#include <stdio.h>
void main()
{
int n;
printf("Introduzca un numero: ");
scanf("%d", &n);
while (n != 0)
{
printf(“El numero tecleado fue %d.\n”, n);
printf("Introduzca otro numero: ");
scanf("%d", &n);
}
printf(“Haz tecleado un cero. Fin del programa.”);
}
Fundamentos de Informática EUP ULPGC
Jose Torres
Ejemplo 2: igual que 1 pero que además diga si es positivo o
negativo
#include <stdio.h>
void main()
{
int n;
printf("Introduzca un numero: ");
scanf("%d", &n);
while (n != 0)
{
printf(“El numero tecleado fue %d.\n”, n);
if (n < 0) printf(“El número es negativo.\n”);
else printf(“El número es positivo.\n”);
}
printf(“Haz tecleado un cero. Fin del programa.”);
}
Fundamentos de Informática EUP ULPGC
Jose Torres
Ejemplo: programa que lee un número n y calcula 1+2+..+n
#include <stdio.h>
void main()
{
int n, suma = 0;
printf("Introduzca un numero: ");
scanf("%d", &n);
while (n > 0)
{
suma = suma + n;
n = n - 1; /* equivalente a n-- */
}
printf("1 + 2 +...+ n = %d\n", suma);
}
Fundamentos de Informática EUP ULPGC
Jose Torres
Sentencia for (iteración)
Forma general:
for (asignacion1; expresion; asignacion2)
sentencia
Inicialmente (solo la primera vez) se ejecuta asignacion1: se
inicializa algún parámetro que controla la repetición del bucle
expresion es una condición que debe ser cierta para que se
ejecute sentencia
asignacion2 se utiliza para modicar el valor del parámetro
El bucle se repite mientras expresion no sea cero (falso)
Si sentencia es compuesta se encierra entre { }
Fundamentos de Informática EUP ULPGC
Jose Torres
Diagrama de flujo de la sentencia for
(expresion1=asignacion1, expresion2=expresion,
expresion3=asignacion2)
Fundamentos de Informática EUP ULPGC
Jose Torres
Ejemplo: Programa que imprime los 100 primeros números
#include <stdio.h>
void main()
{
int numero;
for (numero=0; numero <100; numero++)
printf("%d ", numero);
}
Fundamentos de Informática EUP ULPGC
Jose Torres
El diagrama de flujo sería
Fundamentos de Informática EUP ULPGC
Jose Torres
Ejemplo 2: muestra la cuenta atrás desde un numero dado
#include <stdio.h>
void main()
{
int numero, indice;
printf (“Dame el inicio de la cuenta atrás: ”);
for (indice=numero; indice > 0; indice++)
printf("%d\n ", indice);
printf(“Despegue…\n”);
}
Fundamentos de Informática EUP ULPGC
Jose Torres
Ejemplo 3: calcula el doble de los 10 primeros números
naturales
#include <stdio.h>
void main()
{
int numero, doble;
for (numero=0; numero <10; numero++)
{
doble=2*numero;
printf("El doble de %d es %d.\n", numero, doble);
}
}
Fundamentos de Informática EUP ULPGC
Jose Torres
Equivalencia del for y el while
for (numero=0; numero <100; numero++)
printf("%d ", numero);
es equivalente a
numero=0;
while (numero < 100)
{
printf("%d ", numero);
numero++;
}
Fundamentos de Informática EUP ULPGC
Jose Torres
Sentencia do-while (iteración)
Formal general:
do
sentencia
while (expresion);
sentencia se ejecutará mientras el valor de expresión sea
verdadero (distinto de 0)
sentencia siempre se ejecuta al menos una vez (diferente a
while)
Si la sentencia es compuesta se encierra entre { }
Fundamentos de Informática EUP ULPGC
Jose Torres
Diagrama de flujo:
Fundamentos de Informática EUP ULPGC
Jose Torres
Ejemplo: programa que calcula el sumatorio de 1 a n
#include <stdio.h>
void main()
{
int numero, suma=0;
printf ("Introduzca un numero (mayor que 0): ");
scanf ("%d", &numero);
do {
suma=suma+numero;
numero--;
} while (numero != 0);
printf ("1 + 2 +...+ n = %d\n", suma);
}
Fundamentos de Informática EUP ULPGC
Jose Torres
Sentencia switch
Estructura de selección: permite decidir que secuencia se
ejecuta a continuación
Formal general:
Fundamentos de Informática EUP ULPGC
Jose Torres
switch (expresion)
case exp 1:
sentencia 1.1;
sentencia 1.2;
…
break;
…
case exp N:
sentencia N.1;
sentencia N.2;
…
break;
default:
sentencia D.1;
sentencia D.2;
…
Fundamentos de Informática EUP ULPGC
{
}
Jose Torres
Se evalúa la expresion del switch que debe dar un valor
entero o un carácter
(exp 1, . . . , exp N representan expresiones constantes
de valores enteros o caracteres)
Después se ejecutarán las instrucciones a partir de la
sentencia case cuya expresión coincida con el valor de la
expresión del switch, hasta la próxima sentencia break o el
final de la sentencia switch completa
Si no se encuentra una sentencia ‘case’ cuya expresion
coincida con el resultado del ‘switch’, se ejecutan las
instrucciones del ‘default’, en caso de que exista
Fundamentos de Informática EUP ULPGC
Jose Torres
Diagrama de flujo:
Fundamentos de Informática EUP ULPGC
Jose Torres
Ejemplo: programa que dada una letra, responde si es vocal
o consonante
#include <stdio.h>
void main()
{
char letra;
printf("Introduzca una letra: ");
scanf("%d", &letra);
switch (letra)
{
case ‘a':
case ‘A':
case ‘e':
case ‘E':
case ‘i':
Fundamentos de Informática EUP ULPGC
Jose Torres
case ‘I':
case ‘o':
case ‘O':
case ‘u':
case ‘U':
printf("%c es una vocal.", letra);
break;
default:
printf("%c es una consonante.", letra);
}
}
Fundamentos de Informática EUP ULPGC
Jose Torres
Ejemplo: programa que dado el número del mes de un año
no bisiesto, responde los días que tiene
#include <stdio.h>
void main()
{
int mes, diasMes;
printf("Introduzca el numero del mes: ");
scanf("%d", &mes);
Fundamentos de Informática EUP ULPGC
Jose Torres
switch (mes)
{
case 4:
case 6:
case 9:
case 11:
diasMes=30;
break;
case 2:
diasMes=28;
break;
default:
diasMes=31;
}
printf (“El mes numero %d tiene %d dias.”, mes, diasMes);
}
Fundamentos de Informática EUP ULPGC
Jose Torres
Bucles anidados
Los bucles se pueden anidar unos dentro de otros
Ejemplo: Calcular 1 + 2 + …N mientras N sea distinto de 0
#include <stdio.h>
void main()
{
int N;
int suma;
int j;
Fundamentos de Informática EUP ULPGC
Jose Torres
do {
/* leer el numero N */
printf("Introduzca N: ");
scanf("%d", &N);
suma = 0;
for (j = 0; j <= N; j++)
suma = suma + j;
/* bucle anidado */
printf("1 + 2 + ... + N = %d\n", suma);
} while (N > 0);
/* fin del bucle do */
}
Fundamentos de Informática EUP ULPGC
Jose Torres
Descargar