Documentos de Académico
Documentos de Profesional
Documentos de Cultura
UNAN – LEON
FACULTAD DE CIENCIA Y TECNOLOGIA
Departamento de Computación
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
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.
Condición falsa
__bucle
verdadera
sentencia
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
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.
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);
while(contador < n)
{
printf("*");
contador++;
}/* fin de while */
}
Ejemplo #3:
//bucleinfinito.c
#include <stdio.h>
void main()
{
int contador = 1;
while(contador < 100)
{
printf("%d \n", contador);
contador--;
}/* fin de while */
}
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á.
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",¬a);
while(nota != centinela)
{
suma += nota;
printf("Introduzca la siguiente nota:");
scanf("%d",¬a);
}/* fin de while*/
puts("Final");
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");
La sentencia break se utiliza, a veces, para realizar una terminación anormal del
bucle. Su sintaxis es:
break;
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:
//supermercadowhile.c
#include <stdio.h>
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();
}
Ejercicios propuestos
Finalmente para fijar el precio del kilo de huevo, se toma como base la siguiente
tabla:
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:
DÍGITO COLOR
1ó2 amarilla
3ó4 rosa
5ó6 roja
7ó8 verde
9ó0 azul
Sintaxis:
do
sentencia
while(expresión);
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:
//entrada.c
#include <stdio.h>
int i = 0, n, numero, suma = 0;
void main(void)
{
printf("Secuencia de entrada:\n");
scanf("%d",&n);
do
{
scanf("%d",&numero);
suma = suma + numero;
i++;
}while(i < n);
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);
Ejemplo #4:
//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.");
}
Ejemplo #5:
//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];
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);
i++;
}while(i < nempleados);
Problemas Propuestos
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.