Estructuras de control
PRO F E S O R A : N E LW I B Á E Z
TIPOS
ESTRUCTURAS
DE SELECCIÓN
• IF
• IF….ELSE
ESTRUCTURAS
REPETITIVAS
• WHILE
• DO… WHILE
• FOR
La primera construcción que usaremos será "si ... entonces ...".
El formato en C es: if (condición) sentencia;
/*---------------------------*/
#include <stdio.h>
#include <stdlib.h>
int main() {
int numero;
printf("Escribe un numero: ");
scanf("%d", &numero);
if (numero>0) printf("El numero es positivo.\n");
system("pause");
}
Nota: para comprobar si un valor
numérico es mayor que otro,
usamos el símbolo “>”, como se
ve en este ejemplo.Para ver si dos
valores son iguales, usaremos dos
símbolos de “igual”: if
(numero==0). Las demás
posibilidades las veremos algo más
adelante. En todos los casos, la
condición que queremos
comprobar deberá indicarse entre
paréntesis.
Ejercicio:
Crear un programa que pida al usuario dos
números enteros y diga cual es el mayor de ellos.
◦La "sentencia" que se ejecuta si se cumple la condición
puede ser una sentencia simple o una compuesta. Las
sentencias compuestas se forman agrupando varias
sentencias simples entre llaves ( { y } ):
#include <stdio.h>
Ejemplo
#include <stdlib.h>
int main()
{
int numero;
printf("Escribe un numero: ");
scanf("%d", &numero);
if (numero>0)
{
printf("El numero es positivo.\n");
printf("Recuerde que también puede usar negativos.\n");
system("pause");
} /* Aqui acaba el "if" */
} /* Aqui acaba el cuerpo del programa */
En este caso, si el número es
positivo, se hacen dos cosas:
escribir un texto y luego...
¡escribir
otro! (Claramente, en este
ejemplo, esos dos “printf”
podrían ser uno solo; más
adelante
iremos encontrando casos en lo
que necesitemos hacer cosas
“más serias” dentro de una
sentencia compuesta)
Recordar:
OPERADORES RELACIONALES: <, <=, >, >=, ==, !=
Hemos visto que el
símbolo “>” es el que se
usa para comprobar si un
número es mayor que
otro.
EL SÍMBOLO DE “MENOR QUE” TAMBIÉN ES
SENCILLO, PERO LOS DEMÁS SON UN POCO
MENOS EVIDENTES, ASÍ QUE VAMOS A VERLOS:
< Menor que
> Mayor que
<= Menor o igual que
>= Mayor o igual que
== Igual a
!= No igual a (distinto de)
Podemos indicar lo que queremos que ocurra en caso de que no se cumpla la condición, usando
la orden “else” (en caso contrario), así:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int numero;
printf("Escribe un número: ");
scanf("%d", &numero);
if (numero>0) printf("El número es positivo.\n");
else printf("El número es cero o negativo.\n");
system("pause");
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
int numero;
Podríamos intentar evitar
el uso de “else” si
utilizamos un “if” a
continuación de otro, así:
printf("Escribe un número: ");
scanf("%d", &numero);
if (numero>0) printf("El número es positivo.\n");
if (numero<=0) printf("El número es cero o negativo.\n");
system("pause");
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
int numero;
printf("Escriba un número: ");
scanf("%d", &numero);
if (numero < 0)
printf("El número es negativo.\n");
else
if (numero == 0)
printf("El número es cero.\n");
else
printf("El número es positivo.\n");
system("pause");
}
Otra forma:
Operadores lógicos: &&, ||, !
Estas condiciones se puede encadenar con “y”, “o”, etc., que se indican de la siguiente forma:
if ((opcion==1) && (usuario==2)) ...
if ((opcion==1) || (opcion==3)) ...
if ((!(opcion==opcCorrecta)) || (tecla==ESC)) ...
(Suponiendo que ESC fuera una constante ya definida con anterioridad).
Ejemplo
#include <stdio.h>
#include <stdlib.h>
int main()
{
int numero;
printf("2==3 vale %d\n", 2==3); /* Escribe 0 es decir falso*/
printf("2!=3 vale %d\n", 2!=3); /* Escribe 1 es decir verdadero*/
system("pause");
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
int numero;
printf("Escribe un número: ");
scanf("%d", &numero);
if (numero!=0) /* Comparación normal */
printf("El número no es cero.\n");
if (numero) /* Comparación “con truco” */
printf("Y sigue sin ser cero.\n");
system("pause");
}
Nota:
En este ejemplo, la expresión “if
(numero)” se fijará en el valor de la variable
“numero”. Si es distinto de cero, se
considerará que la condición es correcta, y
se ejecutará la sentencia correspondiente
(el “printf”).
En cambio, si la variable “numero” vale 0,
es considera que la condición es falsa, y no
se sigue analizando.
En general, es preferible evitar este tipo
de construcciones. Resulta mucho más
legible algo
como “if (numero!=0)” que “if(numero)”.
Estructuras repetitivas
Si queremos hacer que una sección de nuestro programa se repita mientras se cumpla una
cierta condición, usaremos la orden “while”. Esta orden tiene dos formatos distintos, según
comprobemos la condición al principio o al final.
En el primer caso, su sintaxis es :
while (condición)
sentencia;
Es decir, la sentencia se repetirá mientras la condición sea cierta. Si la condición es falsa ya
desde un principio, la sentencia no se ejecuta nunca. Si queremos que se repita más de una
sentencia, basta agruparlas entre { y }.
#include <stdio.h>
#include <stdlib.h>
int main()
{
int numero;
printf("Teclea un número (0 para salir): ");
scanf("%d", &numero);
while (numero!=0)
{
if (numero > 0) printf("Es positivo\n");
else printf("Es negativo\n");
printf("Teclea otro número (0 para salir): ");
scanf("%d", &numero);
system("pause");
}
}
Un ejemplo que nos diga si
cada número que
tecleemos es positivo o
negativo, y que pare
cuando tecleemos el
número 0:
Este es el otro formato que puede tener la orden “while”: la condición se comprueba al final.
El punto en que comienza a repetirse se indica con la orden “do”, así:
Al igual que en el caso anterior, si queremos que se repitan varias órdenes (es lo habitual),
deberemos encerrarlas entre llaves.
#include <stdio.h>
#include <stdlib.h>
int main() {
int valida = 711;
int clave;
do
{
printf("Introduzca su clave numérica: ");
scanf("%d", &clave);
if (clave != valida) printf("No válida!\n");
}
while (clave != valida);
printf("Aceptada.\n");
system("pause");
}
Como ejemplo, vamos a ver cómo
sería el típico programa que nos pide
una clave de acceso y nos nos deja
entrar hasta que tecleemos la clave
correcta. Eso sí, como todavía no
sabemos manejar cadenas de texto,
la clave será un número:
Esta es la orden que usaremos habitualmente para
crear partes del programa que se repitan un cierto
número de veces. El formato de “for” es :
#include <stdio.h>
#include <stdlib.h>
int main()
{
int contador;
for (contador=1; contador<=10; contador++)
printf("%d ", contador);
system("pause");
}
Nota: Recordemos que “contador++” es una forma abreviada de escribir “contador=contador+1”, de
modo que en este ejemplo aumentamos la variable de uno en uno.
#include <stdio.h>
#include <stdlib.h>
int main()
Los bucles “for” se pueden anidar
(incluir uno dentro de otro), de modo
que podríamos escribir
las tablas de multiplicar del 1 al 5 con:
{
int tabla, numero;
for (tabla=1; tabla<=5; tabla++)
for (numero=1; numero<=10; numero++)
printf("%d por %d es %d\n", tabla, numero, tabla*numero);
system("pause");
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
char letra;
for (letra='a'; letra<='z'; letra++)
printf("%c", letra);
system("pause");
}
Otro ejemplo:
#include <stdio.h>
#include <stdlib.h>
int main() {
int i;
for (i=0; i<=10; i++)
{
if (i==5) break;
printf("%d ", i);
system("pause");
}
}
Sentencia break: termina el bucle
Podemos salir de un bucle “for” antes de
tiempo
con
la
orden
“break”:
El resultado de este programa
es:
01234
(en cuanto se llega al valor 5,
se interrumpe el “for”, por lo
que no se alcanza el valor 10).
Descargar

include