Universidad Nacional Autónoma de Nicaragua UNAN-León Departamento de Computación Laboratorio #4: Estructuras Cíclicas en C (for,while,do…while) GUÍA DE LABORATORIO #4 SENTENCIAS DE CONTROL EN C: CICLO for, while y do…while OBJETIVO: Realizar programas en Lenguaje C aplicando for, while y do…while. TEMPORIZACIÓN: Inicio de la Práctica: 06/05/2013. Tiempo de Desarrollo de la Práctica de Laboratorio: 1 Sesión 1 Universidad Nacional Autónoma de Nicaragua UNAN-León Departamento de Computación Laboratorio #4: Estructuras Cíclicas en C (for,while,do…while) INTRODUCCIÓN: Una de las características de las computadoras que aumentan considerablemente su potencia es su capacidad para ejecutar una tarea muchas (repetidas) veces con gran velocidad, precisión y fiabilidad. Las tareas repetitivas es algo que los humanos encontramos difíciles y tediosas de realizar. Las estructuras de control iterativas o repetitivas que realizan la repetición o iteración de acciones. C soporta tres tipos de estructuras de control: los bucles while, for y do-while. Estas estructuras de control o sentencias repetitivas controlan el número de veces que una sentencia o listas de sentencias se ejecutan. LA SENTENCIA 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. Las dos principales cuestiones de diseño en la construcción del bucle son: ¿Cuál es el cuerpo del bucle? ¿Cuántas veces se iterará el cuerpo del bucle? Un bucle while tiene una condición del bucle (una expresión lógica) que controla la secuencia de repetición. 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. La condición del bucle se evalúa antes de que se ejecute el cuerpo del bucle y, por consiguiente, si esta 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. La forma general de la instrucción while es: while (condición-bucle) { sentencia 1; sentencia 2 ; ….. sentencia n ; } El comportamiento o funcionamiento de una sentencia (bucle) while es: 1. Se evalúa la condición del bucle. 2. Si condición del bucle es verdadera (distinto de cero): a. La sentencia especificada, denominada el cuerpo del bucle, se b. Vuelve el control al paso 1. 3. En caso contrario: El control se transfiere a la sentencia siguiente al bucle o sentencia while. 2 Universidad Nacional Autónoma de Nicaragua UNAN-León Departamento de Computación Laboratorio #4: Estructuras Cíclicas en C (for,while,do…while) Ejemplo #1: Programa que imprime los números pares entre 1 y N. //pares.c #include<stdio.h> void main( ) { int n=1,cn; printf ("Cuantos numeros?"); scanf ("%d",&cn); while(n<=cn) { if(n%2==0) printf("%d es Par\n",n); n++; } } Ejemplo #2: Programa que imprime la tabla de multiplicar de un número N introducido por teclado. //tablamultiplicar.c #include<stdio.h> void main() { int N,m=1; printf("Que tabla de multiplicar deseas?"); scanf("%d",&N); while(m<=10) { printf("%d * %d = %d\n",N,m,N*m); m++; } } REPETICIÓN: EL BUCLE for El bucle for es el más adecuado para implementar bucles controlados por contador que son bucles en los que un conjunto de sentencias se ejecutan una vez por cada valor de un rango especificado. La sentencia for (bucle for) es un método para ejecutar un bloque de sentencias un número fijo de veces. El bucle for se diferencia del bucle while en que las operaciones de control del bucle se sitúan en un solo sitio: la cabecera de la sentencia. 3 Universidad Nacional Autónoma de Nicaragua UNAN-León Departamento de Computación Laboratorio #4: Estructuras Cíclicas en C (for,while,do…while) El bucle for contiene las cuatro partes siguientes: • Parte de inicialización, que inicializa las variables de control del bucle. Se pueden utilizar variables de control del bucle simples o múltiples. • Parte de condición, que contiene una expresión lógica que hace que el bucle realice las iteraciones de las sentencias, mientras que la expresión sea verdadera. • Parte de incremento, que incrementa o decrernenta la variable o variables de control del bucle. • Sentencias, acciones o sentencias que se ejecutarán por cada iteración del bucle. La sentencia for es equivalente al siguiente código while: Inicialización; while(condición iteración) { Sentencia(s); incremento; } Existen dos formas de implementar la sentencia for que se utilizan normalmente para implementar bucles de conteo: formato ascendente, en el que la variable de control se incrementa y formato descendente, en el que la variable de control se decrementa. Formato ascendente: for(var_control=valor_inicial; var-control<=valor-límite; expresión_incremento) sentencia(s); Formato descendente: for(var_control=valor_inicial; var_control>=valor-límite; expresión_decremento) sentencia(s); Ejemplo #3: Programa que imprime los números pares entre 1 y N. #include<stdio.h> void main( ) { int n=1,cn; printf ("Cuantos numeros?"); scanf ("%d",&cn); for(n=1;n<=cn;n++) { if(n%2==0) printf("%d es Par\n",n); } } 4 Universidad Nacional Autónoma de Nicaragua UNAN-León Departamento de Computación Laboratorio #4: Estructuras Cíclicas en C (for,while,do…while) Ejemplo #4: El dueño de una tienda desea registrar sus ventas por medio de una computadora. Diseñe un programa en C que permita realizar las siguientes operaciones para N clientes: a) El monto de la compra de cada cliente. b) Calcule e imprima el IVA (15% de la compra). c) Calcule e imprima el total a pagar. d) Lea la cantidad con que paga el cliente. e) Calcule e imprime el cambio. Al final del día deberá imprimir la cantidad de dinero que debe haber en la caja. //caja.c #include<stdio.h> void main() { float monto_c,pago_cli,cambio,iva,total_p,total_caja=0.0; int num_c,c; printf("Cuantos Clientes?"); scanf("%d",&num_c); for(c=0;c<num_c;c++) { printf("***\nCliente #%d***\n",c+1); printf("Total Compra:"); scanf("%f",&monto_c); iva= monto_c*0.15; total_p= monto_c + iva; printf("El cliente debe pagar: %.2f",total_p); printf("Cantidad recibida por el cliente %d es:",c+1); scanf("%f",&pago_cli); if(pago_cli<total_p) continue; else cambio = pago_cli - total_p; printf("Su cambio es: %.2f",cambio); total_caja+= total_p; } printf("\n***EN CAJA HAY C$ %.2f\n",total_caja); } MÁS SOBRE BUCLES: LA INSTRUCCIÓN do…while Cuando se construye un bucle utilizando la instrucción while, la comprobación para la continuación del bucle se realiza al comienzo de cada pasada. Sin embargo, a veces es deseable disponer de un bucle en el que se realice la comprobación al final de cada pasada. Esto se puede hacer mediante la instrucción do…while. 5 Universidad Nacional Autónoma de Nicaragua UNAN-León Departamento de Computación Laboratorio #4: Estructuras Cíclicas en C (for,while,do…while) La forma general de la instrucción do…while es: do instrucción(es); while(expresión) La instrucción se ejecutará repetidamente, mientras que el valor de expresión sea verdadero (es decir, distinto de cero). Observe que instrucción siempre se ejecutará al menos una vez, ya que la comprobación de la condición de repetición no se realiza hasta el final de la primera pasada por el bucle. La instrucción puede ser simple o compuesta, aunque en la mayoría de las veces será compuesta. Debe incluir algún elemento que altere el valor de expresión para que el bucle tenga un final. Ejemplo #5: calcular la media de los números no negativos de una lista de N números. //media.c #include <stdio. h> void main( ) { int n,cont=1,nmedia=0; float x,media,suma=0; /* inicializar y leer el valor de n */ printf("Cuantos números?"); scanf ("%d",&n); /*Leer los números*/ do { printf ("Numero %d:",cont); scanf("%f",&x); if (x<0) continue; suma += x; ++nmedia; cont++; }while(cont<=n); /* calcular la media y escribir la respuesta */ media = suma/nmedia; printf("\nLa media es %.2f\n", media); } 6 Universidad Nacional Autónoma de Nicaragua UNAN-León Departamento de Computación Laboratorio #4: Estructuras Cíclicas en C (for,while,do…while) EJERCICIOS PROPUESTOS: 1. Realice un programa en C que lea un número N e imprima si dicho número es Armstrong o no. Un número es de Armstrong si la suma de los dígitos que lo componen elevados al cubo es igual al número. Ejemplos: 153=13+53+33 370=33+73+03 371=33+73+13 407=43+03+73 2. El gerente de Farmacia “La Baratera” desea un programa en C que calcule el aumento de sueldo para su grupo de N empleados, teniendo en cuenta los siguientes criterios: • Si el sueldo es inferior a C$5000 el aumento será del 10%. • Si el sueldo es superior a C$5000 el aumento será del 8%. Imprima el nombre, nuevo sueldo del trabajador y el total de nómina de la empresa, considerando el aumento de cada trabajador. Nota: resuelva utilizando el ciclo while,for, do…while. 3. Escriba un programa en C tal que dada una cantidad entera imprima el número de dígitos que la componen. Ejemplo: 234 tiene 3 dígitos. Nota: resuelva utilizando el ciclo while 7