Está en la página 1de 19

2010

UNAN – LEON
FACULTAD DE CIENCIA Y TECNOLOGIA

Departamento de Computación

Autor: M.Sc. Ana María Salgado G.


Asignatura:
Programación Estructurada

SENTENCIAS DE CONTROL
CICLOS while y do while

Este documento es una extracción del libro Programación en C, metodología, estructura de datos y objetos, de
Luis Joyanes Aguilar e Ignacio Zahonero Martínez. Fue recopilado por la M.Sc. Ana María Salgado G. y
complementado con ejercicios obtenidos de otros textos e Internet.
Sentencias while y do while

SENTENCIA DE CONTROL while

Un bucle(ciclo) es cualquier construcción de programa que repite una sentencia o


secuencia de sentencias un número de veces. La sentencia(o grupo de sentencias)
que se repiten en un bloque se denomina cuerpo del bucle y cada repetición del
cuerpo del bucle se llama iteración del bucle.

Un bucle while tiene una condición del bucle(una expresión lógica) que controla la
secuencia de repetición. La posición de esta condición del bucle es delante del
cuerpo del bucle y significa que un bucle while es un bucle pretest, de modo que
cuando se ejecuta el mismo, se evalúa la condición antes de que se ejecute el
cuerpo del bucle.

El diagrama indica que la ejecución de la sentencia o sentencias expresadas se


repite mientras la condición del bucle permanece verdadera y termina cuando se
hace falsa. Si la condición es inicialmente falsa , el cuerpo del bucle no se ejecutará.
En otras palabras, el cuerpo de un bucle while se ejecutará cero o más veces.

Condición falsa
__bucle

verdadera

sentencia

2 M.Sc. Ana María Salgado G.


Sentencias while y do while

Sintaxis:

while(condición_bucle)
sentencia; cuerpo

while(condición_bucle)
{
sentencia-1;
sentencia-2;
.
cuerpo
.
.
sentencia-n;
}

Donde:
• condición_bucle es una expresión lógica o booleana
• sentencia es una sentencia simple o compuesta

El funcionamiento de una sentencia while es:


1. Se evalúa la condición_bucle
2. Si condición_bucle es verdadera(distinto de cero):
a) La sentencia especificada, denominada el cuerpo del bucle, se
ejecuta.
b) Vuelve el control al paso 1.
3. En caso contrario:
El control se transfiere a la sentencia siguiente al bucle while.

Las sentencias del cuerpo del bucle se repiten mientras que la expresión
lógica(condición del bucle) sea verdadera. Cuando se evalúa la expresión lógica y
resulta falsa, se termina y se sale del bucle y se ejecuta la siguiente sentencia de
programa después de la sentencia while.

3 M.Sc. Ana María Salgado G.


Sentencias while y do while

Ejemplo #1:

//contador.c

/* cuenta hasta 9 */
#include <stdio.h>

void main()
{
int x = 0;
while(x < 10)
printf("X: %d\n",x++);
}

Ejemplo #2:
//contadorasteriscos.c

/* visualizar n asteriscos */

#include <stdio.h>

void main()
{
int contador = 0, n;
printf("Cuantos asteriscos quiere?:");
scanf("%d",&n);

4 M.Sc. Ana María Salgado G.


Sentencias while y do while

while(contador < n)
{
printf("*");
contador++;
}/* fin de while */
}

La variable que representa la condición del bucle se denomina también variable de


control del bucle debido a que su valor determina si el cuerpo del bucle se repite.
La variable de control del bucle debe ser:
1. inicializada
2. comprobada
3. actualizada para que el cuerpo del bucle se ejecute adecuadamente. Cada
etapa se resume así:
1. Inicialización. contador se establece a un valor inicial(se inicializa a cero,
aunque podría ser otro su valor) antes de que se alcance la sentencia while.
2. Prueba/condición. Se comprueba el valor de contador antes de que
comience la repetición de cada bucle(denominada iteración o pasada).
3. Actualización: contador se actualiza(su valor se incrementa en 1, mediante
el operador ++) durante cada iteración.

Si la variable de control no se actualiza el bucle se ejecutará siempre. Tal bucle


se denomina bucle infinito. Un bucle infinito se producirá cuando la condición
del bucle permanece y no se hace falsa en ninguna iteración.

Ejemplo #3:

//bucleinfinito.c
#include <stdio.h>
void main()
{
int contador = 1;
while(contador < 100)
{
printf("%d \n", contador);
contador--;
}/* fin de while */
}

5 M.Sc. Ana María Salgado G.


Sentencias while y do while

Bucles while con cero iteraciones

El cuerpo de un bucle no se ejecuta nunca si la condición de repetición del bucle no


se cumple, es falsa(es cero en C), cuando se alcanza while la primera vez.

contador = 10;
while(contador > 100)
{

}

El bucle anterior nunca se ejecutará ya que la condición del bucle(contador > 100)
es falsa la primera vez que se ejecuta. El cuerpo del bucle nunca se ejecutará.

BUCLES CONTROLADOS POR CENTINELAS

Normalmente, no se conoce con exactitud cuántos elementos de datos se


procesarán antes de comenzar su ejecución. Esto se produce bien porque hay
muchos datos a contar normalmente o porque el número de datos a procesar
depende de cómo prosigue el proceso de cálculo.

Un medio para manejar esta situación es instruir al usuario a introducir un único


dato definido y especificado denominado valor centinela como último dato. La
condición del bucle comprueba cada dato y termina cuando se lee el valor
centinela. En realidad el centinela es un valor que sirve para terminar el proceso
del bucle.

En el siguiente fragmento de código hay un bucle con centinela; se introducen


notas mientras que ésta sea distinta de centinela.

6 M.Sc. Ana María Salgado G.


Sentencias while y do while

Ejemplo #4:

//centinela.c

/*
entrada de datos numéricos,
centinela -1
*/

#include <stdio.h>
void main()
{
int nota,suma = 0;
const int centinela = -1;
printf("Introduzca primera nota: ");
scanf("%d",&nota);
while(nota != centinela)
{
suma += nota;
printf("Introduzca la siguiente nota:");
scanf("%d",&nota);
}/* fin de while*/

puts("Final");

printf("La suma de las notas es %d \n",suma);


}

7 M.Sc. Ana María Salgado G.


Sentencias while y do while

Ejemplo #5:

En una tienda de descuento las personas que van a pagar el importe de su compra
llegan a la caja y sacan una bolita de color, que les dirá qué descuento tendrán
sobre el total de su compra. Determinar la cantidad que pagará cada cliente desde
que la tienda abre hasta que cierra. Se sabe que si el color de la bolita es roja el
cliente obtendrá un 40% de descuento; si es amarilla un 25% y si es blanca no
obtendrá descuento.

//colorbolita.c

#include <stdio.h>
#include <string.h>
char resp = 's';
char colorbolita[20];
float importecompra, desc, cantidadpagar;

void main(void)
{
while(resp == 's' || resp == 'S')
{
printf("Importe de compra: ");
fflush(stdin);
scanf("%f",&importecompra);
printf("\nColor de la bolita: ");
fflush(stdin);
gets(colorbolita);

if(strcmp(colorbolita,"roja") == 0)
desc = importecompra * 0.4;
else if(strcmp(colorbolita,"amarilla") == 0)
desc = importecompra * 0.25;
else if(strcmp(colorbolita,"blanca") == 0)
desc = 0;
else
printf("Color invalido\n");

cantidadpagar = importecompra - desc;


printf("\nCantidad a pagar = %.2f\n",cantidadpagar);
8 M.Sc. Ana María Salgado G.
Sentencias while y do while

printf("\nDesea introducir otro cliente?\n");


fflush(stdin);
resp = getchar();
}
}

La sentencia break en los bucles

La sentencia break se utiliza, a veces, para realizar una terminación anormal del
bucle. Su sintaxis es:
break;

La sentencia break se utiliza para la salida de un bucle while o do-while, aunque


también se puede utilizar dentro de una sentencia switch, siendo éste su uso más
frecuente.

9 M.Sc. Ana María Salgado G.


Sentencias while y do while

Ejemplo #6:

//clave.c
int clave = -9;
int entrada;

#include <stdio.h>
void main(void)
{

printf("Introduzca un entero:");
while(scanf("%d",&entrada))
{
if(entrada != clave)
{
printf("%d\n",entrada);
printf("Introduzca un entero:");

}
else
break;
}
}

Ejemplo #7:

En un supermercado un ama de casa pone en su carrito los artículos que va


tomando de los estantes. La señora quiere asegurarse de que el cajero le cobre bien
lo que ella ha comprado, por lo que cada vez que toma un articulo anota su precio
junto con la cantidad de artículos iguales que ha tomado y determina cuánto
dinero gastará en ese artículo; a esto le suma lo que irá gastando en los demás
artículos, hasta que decide que ya tomó todo lo que necesitaba. Ayúdale a esta
señora a obtener el total de sus compras.

10 M.Sc. Ana María Salgado G.


Sentencias while y do while

//supermercadowhile.c

#include <stdio.h>

char resp = 'S';


float sumc = 0, precioart, compra;
int cantart;

void main(void)
{
while(resp == 's' || resp == 'S')
{
printf("\nPrecio del articulo: ");
fflush(stdin);
scanf("%f",&precioart);
printf("Cantidad de articulos a comprar: ");
fflush(stdin);
scanf("%d",&cantart);
compra = precioart * cantart;
sumc = sumc + compra;
printf("\nMas articulos?\n");
fflush(stdin);
resp = getchar();
}

printf("\nTotal de compras = %.2f\n",sumc);


}

11 M.Sc. Ana María Salgado G.


Sentencias while y do while

Ejercicios propuestos

1. En una granja se requiere saber alguna información para determinar el


precio de venta por cada kilo de huevo. Es importante determinar el promedio de
calidad de las n gallinas que hay en la granja. La calidad de cada gallina se obtiene
según la fórmula:

calidad = peso de la gallina * altura de la gallina


numero de huevos que pone

Finalmente para fijar el precio del kilo de huevo, se toma como base la siguiente
tabla:

PROMEDIO DE CALIDAD PRECIO POR KILO DE HUEVO


mayor o igual que 15 1.2 * promedio de calidad
mayor que 8 y menor que 15 1.00 * promedio de calidad
menor o igual que 8 0.80 * promedio de calidad

2. Una compañía de seguros tiene contratados a n vendedores. Cada uno hace


tres ventas a la semana. Su política de pagos es que un vendedor recibe un sueldo
base, y un 10% extra por comisiones de sus ventas. El gerente de su compañía
desea saber cuánto dinero obtendrá en la semana cada vendedor por concepto de
comisiones por las tres ventas realizadas, y cuánto tomando en cuenta su sueldo
base y sus comisiones.

3. En una empresa se requiere calcular el salario semanal de cada uno de los n


obreros que laboran en ella. El salario se obtiene de la sig. forma:
Si el obrero trabaja 40 horas o menos se le paga $20 por hora
Si trabaja más de 40 horas se le paga $20 por cada una de las primeras 40
horas y $25 por cada hora extra.

4. Obtener el promedio de calificaciones de un grupo de n alumnos.

5. El Dpto. de Seguridad Pública y Tránsito del D.F. desea saber, de los n autos
que entran a la ciudad de México, cuántos entran con calcomanía de cada color.
Conociendo el último dígito de la placa de cada automóvil se puede determinar el
color de la calcomanía utilizando la sig. relación:

12 M.Sc. Ana María Salgado G.


Sentencias while y do while

DÍGITO COLOR
1ó2 amarilla
3ó4 rosa
5ó6 roja
7ó8 verde
9ó0 azul

6. En un supermercado un cajero captura los precios de los artículos que los


clientes compran e indica a cada cliente cuál es el monto de lo que deben pagar. Al
final del día le indica a su supervisor cuánto fue lo que cobró en total a todos los
clientes que pasaron por su caja.

7. Calcular el promedio de edades de hombres, mujeres y de todo un grupo de


alumnos.

REPETICION : EL BUCLE do…while

La sentencia do-while se utiliza para especificar un bucle condicional que se


ejecuta al menos una vez. Esta situación se suele dar en algunas circunstancias en
las que se ha de tener la seguridad de que una determinada acción se ejecutará una
o varias veces, pero al menos una vez.

Sintaxis:

do
sentencia
while(expresión);

La construcción do comienza ejecutando sentencia. Se evalúa a continuación


expresión. Si expresión es verdadera, entonces se repite la ejecución de sentencia.
Este proceso continúa hasta que expresión es falsa.

13 M.Sc. Ana María Salgado G.


Sentencias while y do while

Ejemplo #1:
//do1.c

#include <stdio.h>
int digito;

void main(void)
{
do
{
printf("Introduzca un dígito (0 - 9): ");
scanf("%d",&digito);
}while((digito <0) || (digito > 9));
}

Ejemplo #2:

Escriba un programa que sume una secuencia de enteros, en la cual el primer


entero que se lea indicará el número de valores que faltan por leer. Una secuencia
de entrada podría ser: 5 100 200 300 400 500
Donde 5 indica que los 5 valores siguientes deberán ser sumados.

//entrada.c

#include <stdio.h>
int i = 0, n, numero, suma = 0;

void main(void)
{
printf("Secuencia de entrada:\n");
scanf("%d",&n);

14 M.Sc. Ana María Salgado G.


Sentencias while y do while

do
{
scanf("%d",&numero);
suma = suma + numero;
i++;
}while(i < n);

printf("\nLa suma de los enteros introducidos es %d \n\n",suma);


}

Ejemplo #3:
Realice un programa que calcule el producto de los enteros impares del 1 al 10.

//primpardow.c

#include <stdio.h>
void main(void)
{
long producto=1;
int i = 1;

do
{
if((i%2)!=0)
producto=producto*i;
i++;
} while(i<=10);

printf("\nEl producto de los impares es %ld\n\n",producto);


}

15 M.Sc. Ana María Salgado G.


Sentencias while y do while

Ejemplo #4:

La función factorial se aplica a enteros positivos. El factorial de un entero positivo


n es (!n) es igual al producto de los enteros positivos del 1 al n. Escriba un
programa que calcule el factorial de un entero. Ejemplo: !3 = 1*2*3 = 6

//factorial.c
/*Este programa calcula el factorial de un numero*/

#include <stdio.h>
float fact=1;
int num,i;

void main(void)
{
printf("Numero = ");
scanf("%d",&num);
if (num>=0)
{
if(num == 1 || num == 0)
{
fact=1;
printf("!%d = %.0f\n\n",num,fact);
}

else
{
i = 1;
do
{
fact = fact * i;
i++;
}while(i<=num);
printf("!%d = %.0f\n\n",num,fact);
}
}
else
printf("A los valores negativos no se le calcula el factorial.");
}

16 M.Sc. Ana María Salgado G.


Sentencias while y do while

Ejemplo #5:

Se registran de los empleados de una empresa Número de INSS, sueldo y sexo (1


femenino y 2 masculino). Diseñar en Pseudocódigo y codificar en C un algoritmo
que permita informar cuántas mujeres ganan más de $500 y cuántos hombres
ganan menos de $400.

//empleados.c

#include <stdio.h>
#include <stdlib.h>

enum s
{
femenino = 1,
masculino = 2
};

void main(void )
{
enum s sexo;
int nempleados, mujeres = 0, hombres = 0, i = 0;
float sueldo;
char Ninss[10];

printf("Cuantos empleados tiene la fabrica?");


scanf("%d",&nempleados);

do
{
printf("Numero de INSS del empleado # %d:", i +1);
fflush(stdin);
gets(Ninss);
printf("Sueldo del empleado # %d:\n",i + 1);
fflush(stdin);
scanf("%f",&sueldo);

17 M.Sc. Ana María Salgado G.


Sentencias while y do while

printf("Sexo:1- femenino, 2 - masculino-> ");


fflush(stdin);
scanf("%d",&sexo);

if(sexo == femenino && sueldo > 500)


mujeres++;
else if(sexo == masculino && sueldo < 400)
hombres++;

i++;
}while(i < nempleados);

printf("\n%d mujeres ganan mas de $500 \n\n",mujeres);


printf("%d varones ganan menos de $400 \n\n",hombres);
}

Problemas Propuestos

1. Determinar la cantidad semanal de dinero que recibirá cada uno de los n


obreros de una empresa. Se sabe que cuando las horas que trabajó un obrero
exceden de 40, el resto se convierte en horas extras que se pagan al doble de una
hora normal, cuando no exceden de 8; cuando las horas extras exceden de 8 se
pagan las primeras 8 al doble de lo que se paga por una hora normal y el resto al
triple.

2. Un jefe de casilla desea determinar cuántas personas de cada una de las


secciones que componen su zona asisten el día de las votaciones. Las secciones son:
norte, sur y centro. También desea determinar cuál es la sección con mayor
número de votantes.

3. Calcular la suma siguiente:


100 + 98 + 96 + 94 + . . . + 0 en este orden

4. Leer 50 calificaciones de un grupo de alumnos. Calcule y escriba el


porcentaje de reprobados. Tomando en cuenta que la calificación mínima
aprobatoria es de 70.

18 M.Sc. Ana María Salgado G.


Sentencias while y do while

5. Leer por cada alumno de Diseño estructurado de algoritmos su numero de


control y su calificación en cada una de las 5 unidades de la materia. Al final que
escriba el numero de control del alumno que obtuvo mayor promedio. Suponga
que los alumnos tienen diferentes promedios.

6. Leer los 250,000 votos otorgados a los 3 candidatos a gobernador e imprimir


el número del candidato ganador y su cantidad de votos.

7. Suponga que tiene usted una tienda y desea registrar las ventas en su
computadora. Diseñe un algoritmo que lea por cada cliente, el monto total de su
compra. Al final del día que escriba la cantidad total de ventas y el numero de
clientes atendidos.

19 M.Sc. Ana María Salgado G.

También podría gustarte