2013 UNAN- LEON SENTENCIA DE CONTROL DO WHILE M.Sc. Ana María Salga G.
Unidad IV: Estructuras de control Sentencia -while La forma general de esta sentencia es: sentencia; while (expresion); sentencia se ejecutará mientras el valor de expresion sea verdadero. sentencia siempre se ejecuta al menos una vez. Si sentencia es compuesta se encierra entre. Nota: Lo normal es que sentencia incluya algún elemento que altere el valor de condición de salida del bucle. Para la mayoría de las aplicaciones es mejor y más natural comprobar la condición antes de ejecutar el bucle, por ello se usa más la sentencia while. Un ejemplo de uso de esta sentencia es el siguiente programa, que pide un número igual a 0: int numero; printf("introduce el numero 0:\n"); scanf("%d", &numero); /* Se lee el numero */ while (numero!= 0); 2 M.Sc. Ana María Salga G.
El laso es muy similar al laso while solo que while verifica el test y luego ejecuta el cuerpo del laso. En cambio el laso ejecuta el cuerpo del laso y luego verifica el test. Por lo tanto el cuerpo del laso se ejecuta al menos una vez. Ejemplo #2 Construya un programa en C que, al recibir como datos los pagos efectuas en el último mes, permita obtener la suma de los mismos, pero no sabemos exactamente cuántos fueron. //sumapagos.c float pag, spa = 0; printf("ingrese el primer pago:\t"); scanf("%f",&pag); spa= spa + pag; printf("ingrese el siguiente pago, 0 para terminar: "); scanf("%f",&pag); while(pag!=0); printf("\nel total de pagos del mes es:%.2f\n",spa); 3 M.Sc. Ana María Salga G.
Ejemplo #3 Escriba un programa en C que, al recibir como datos los salarios de los profesores de una universidad, obtenga tanto la nómina como el promedio de los salarios. //salarioprom.c int i = 0; float sal, prom, nomina = 0; printf("ingrese el salario del profesor: "); scanf("%f",&sal); nomina= nomina + sal; i++; printf("ingrese el salario del profesor, 0 para terminar: "); scanf("%f",&sal); while(sal!=0); prom = nomina/i; printf("\nnomina: %.2f \t Promedio de salarios: %.2f\n",nomina, prom); 4 M.Sc. Ana María Salga G.
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 long fact=1; int num,i; printf("numero = "); scanf("%d",&num); if (num>=0) if(num == 1 num == 0) fact=1; printf("!%d = %ld\n\n",num,fact); i = 1; fact = fact * i; i++; while(i<=num); printf("!%d = %ld\n\n",num,fact); printf("a los valores negativos no se le calcula el factorial."); 5 M.Sc. Ana María Salga G.
Ejemplo #5 Realice un programa que, al recibir como datos n números enteros, obtenga la suma de los números pares y el promedio de los impares. //sumprompar_impar.c int i = 1, n, num, spa = 0, sim = 0, cim = 0; printf("ingrese el numero de datos que se van a procesar: "); scanf("%d",&n); if(n > 0) printf("\ningrese el numero %d: ",i); scanf("%d",&num); if(num!= 0) if(num % 2 == 0) spa = spa + num; sim = sim + num; cim++; i++; while(i <= n); printf("\nla suma de los numeros pares es: %d\n",spa); printf("\nel promedio de los numeros impares es %5.2f\n\n",(float)(sim/cim)); printf("\n El valor de N es incorrecto\n"); 6 M.Sc. Ana María Salga G.
Ejemplo #6: Lo siguiente se llama conjetura de Ulam en honor del matemático S. Ulam: Empiece con cualquier entero positivo. Si es par, divídase entre 2; si es impar, multiplíquese por 3 y agréguese 1. Obtenga enteros sucesivamente repitien el proceso hasta que el entero en curso no sea 1. Al final se obtendrá el número 1, independientemente del entero inicial. Por ejemplo, cuan el entero inicial es 26, la secuencia será: 26 13 40 20 10 5 16 8 4 2 1 //ulam2.c int n; printf("escriba un entero positivo:"); scanf("%d",&n); while(n<=0); printf("sucesion de Ulam para %d\n",n); if(n%2==0) n=n/2; n=3 * n + 1; printf("%d ",n); while(n!=1); printf("\n\n"); 7 M.Sc. Ana María Salga G.
Sentencia break La sentencia break se utiliza para terminar la ejecución de bucles o salir de una sentencia switch. Es necesaria en la sentencia switch para transferir el control fuera de la misma. En caso de bucles anidas, el control se transfiere fuera de la sentencia más interna en la que se encuentre, pero no fuera de las externas. Ejemplo #7: //break2.c void main(void ) int x; for (x = 1; x <= 10; x++) if (x == 5) break; printf("%d\t", x); printf("\n"); Ejemplo #8: //breakinfinito. int contar = 0; int max; printf("cuantos holas?:"); scanf("%d",&max); 8 M.Sc. Ana María Salga G.
for(;;) //bucle for que no termina nunca if(contar < max) puts("hola!"); contar++; break; Sentencia de control while Ejemplo #9: //clave.c int clave = -9; int entrada; printf("introduzca un entero:"); while(scanf("%d",&entrada)) if(entrada!= clave) printf("%d\n",entrada); printf("introduzca un entero:"); break; 9 M.Sc. Ana María Salga G.
Sentencia continue Obliga a ejecutar la siguiente iteración del bucle while, o for nde está contenida. Ejemplo #10: //continue2.c void main(void ) int x; for (x = 1; x <= 10; x++) if (x == 5) continue; printf("%d\t", x); printf("\n\nuso de continue para omitir la impresion del valor 5\n\n"); Ejemplo #11: //pares.c /* imprime numeros pares del 1 al 100*/ int x; for(x=1; x<=100; x++) if(x%2) continue; printf("%d\n", x); 10 M.Sc. Ana María Salga G.
Ejercicios resueltos break y continue Ejercicio #1 : //continue3.c int i = 0, x = 0; for(i = 1; i < 10; i++) if(i % 2 == 1) x += i; x--; printf("%d\t",x); continue; printf("\nx = %d\n\n",x); Ejercicio #2 : //break3.c int i = 0, x = 0; for(i = 1; i < 10; i++) if(i % 2 == 1) x += i; x--; printf("%d\t",x); break; 11 M.Sc. Ana María Salga G.
printf("\nx = %d\n\n",x); Ejercicio 3: /* Calcular la media de los números no negativos de una lista de n números */ //continue.c int n, cont, nmedia=0; float x, media, suma=0; /* inicializar y leer el valor de n*/ printf("cuantos numeros?"); scanf("%d",&n); /* leer los numeros */ for(cont = 1; cont <=n; cont ++) printf("x= "); scanf("%f",&x); if(x<0) continue; suma+=x; nmedia++; /* calcular la media y escribir la respuesta */ media = suma /nmedia; printf("la media es %f\n",media); 12 M.Sc. Ana María Salga G.
Ejercicios resueltos while Ejercicio #4 Escriba un programa que reciba s parámetros enteros, m y n, con m<n. Se debe calcular la suma: 1 1 1 1 + + +... + m m+ 1 m+ 2 m+ n //seriem_n.c int m,n,i = 0; float suma=0; printf("introduzca los enteros m y n:\n"); scanf("%d %d",&m,&n); while(m>n); suma= suma + 1.0/(float)(m+i); i++; while(i<=n); printf("el resulta de la funcion es %g\n",suma); 13 M.Sc. Ana María Salga G.
Ejercicio #5 El siguiente programa, recibe como dato un número entero N y obtiene el resulta de la siguiente serie: //seriepar_imp.c #include <math.h> int N,i = 2; float suma=1; printf("ingrese el valor de N: "); scanf("%d",&n); 1 1 + 2 2-3 3 - ± N N if(i % 2 == 0) suma= suma + pow(i,i); if(i % 2!= 0) suma= suma - pow(i,i); printf("i= %d\t suma = %g\n",i,suma); i++; while(i<=n); printf("\nel resulta final de la serie es %g\n\n",suma); 14 M.Sc. Ana María Salga G.
Ejercicio #6 Escriba un programa para evaluar la función y = 4x 2 16x + 15, nde x toma los valores de 1 a 2, en incremento de 0.1. Para cada x la salida debe dar el valor de y. Además debe imprimir el mensaje POSITIVO o NEGATIVO, según el signo de y. El formato de salida debe ser: Valor de x Valor de y Signo 1.0 3.00 POSITIVO 1.1 2.24 POSITIVO... 2.0-1.00 NEGATIVO Solución: //posneg.c #include <stdlib.h> #include <math.h> float x = 1, y; printf("valor de x\tvalor de y\tsigno\n"); printf("-------------------------------------\n"); y = 4 * pow(x,2) - 16 * x + 15; if(y > 0) printf("%.2f\t\t%.2f\t\tpositivo\n",x,y); if(y < 0) printf("%.2f\t\t%.2f\t\tnegativo\n",x,y); x+=0.1; while(x <= 2); 15 M.Sc. Ana María Salga G.
Ejercicio #7 Escriba un programa que calcule la nómina total de una empresa, sin saber con anticipación cuántos empleas tiene ésta. Use como centinela una pregunta. //nominacentinela.c float pago, phora, nominatot=0; int htrab; char nombre[100], resp='s'; fflush(stdin); printf("\n\nintroduzca el nombre del emplea:\n"); gets(nombre); printf("horas trabajadas y suel por hora:"); scanf("%d %f",&htrab,&phora); pago=htrab*phora; printf("el emplea %s tiene un salario de %g\n",nombre,pago); nominatot+=pago; printf("\ndesea introducir otro emplea?(s/n)\n"); fflush(stdin); resp=getchar(); while(resp=='s' resp=='s'); printf("\nnomina total: %f\n",nominatot); 16 M.Sc. Ana María Salga G.
Ejercicio #8: Una solicitante para un empleo de secretaria recibirá un máximo de 5 pruebas de mecanografía. Será contratada tan pronto como logre teclear más de 50 palabras por minuto en s pruebas. Escriba un programa que permita al supervisor teclear la calificación de cada prueba después de que aquella sea completada. El programa deberá imprimir Contratar tan pronto como el solicitante califique, sin hacer más pruebas. Después de que 5 pruebas hayan si hechas, si todavía el solicitante no ha reuni las condiciones, el programa deberá imprimir Rechazar. //mecanografa.c int puntaje, masdecincuenta=0,pruebas=0; pruebas++; printf("teclear puntaje:"); scanf("%d",&puntaje); if(puntaje>50) masdecincuenta++; while((pruebas<5)&&(masdecincuenta<2)); if(masdecincuenta==2) printf("contratar\n"); printf("rechazar\n"); Ejercicio #9: Las potencias de s son 1, 2, 4, 8, 16, 32, 64,etc. Para obtener la siguiente potencia de 2, se multiplica la anterior por 2. Usan un ciclo while, escriba un programa que imprima la primera potencia de 2 que es más de 1000. //potencentinela.c int r=1; 17 M.Sc. Ana María Salga G.
Sentencia de control while printf("%d\t",r); r = r*2; while(r<1000); printf("la primera potencia de 2 mayor de 1000 es %d\n",r); Ejercicios propuestos 1. Realizar una nueva versión usan while, de los ejercicios propuestos while del 5 al 9. 2. Elaborar un programa que encuentre la suma de los primeros N términos de la sucesión de FIBONACCI. Esta se genera empezan por los números 0 y 1 y calculan cada nuevo miembro como la suma de los s miembros precedentes de la sucesión, así: 0 1 1 2 3 5 8 13 3. Das N valores, diseñe un programa que haga el siguiente proceso: Si el valor es menor que cero calcular su cubo. Si el valor está entre 0 y 100 calcular su cuadra. Si el valor está entre 101 y 1000 calcular su raíz cuadrada. 4. Un vender desea calcular la comisión total sobre la venta de varios artículos. Al vender le corresponde el 10% de comisión sobre artículos, cuyo precio es menor o igual a $1000 y el 7% de comisión sobre aquellos artículos cuyo precio sea mayor de $1000. Elabore un programa para obtener la comisión total, si se conoce que el vender hizo N ventas. 5. Una oficina de seguros ha reuni datos concernientes a tos los accidentes de tránsito ocurris en el área metropolitana de Medellín en el último año. Por cada conductor involucra en un accidente se toman los siguientes datos: año de nacimiento, sexo(1: Femenino, 2: Masculino), registro del carro(1: Medellín, 2: Otras ciudades). Hacer un programa en C que muestre: El porcentaje de conductores menores de 25 años. Porcentaje de conductores del sexo femenino. Porcentaje de conductores masculinos con edades entre 12 y 30 años. Porcentaje de conductores cuyos carros están registras fuera de Medellín. 18 M.Sc. Ana María Salga G.
6. Un restaurante paga a sus meseros s clases de comisiones: Una comisión del 7% sobre toda venta. Otra comisión que depende del tipo de venta: 15% si la venta es de conta, 10% si la venta se hizo en cheque y, 5% si se hizo con tarjeta de crédito. El restaurante tiene por cada venta: Identificación del vender(1, 2, 3) Tipos de ventas(1: conta; 2: cheque; 3: tarjeta) Cuantía de la venta. Elaborar un programa que obtenga el total a pagar a cada uno de los empleas. 7. Se tiene la siguiente información por cada uno de los N estudiantes de la universidad: Edad Sexo(1: masculino; 2: femenino) Carrera (1: Ingeniería; 2: otra carrera) Hacer un algoritmo que obtenga: Promedio de edad de los estudiantes de Ingeniería. Porcentaje de hombres en la universidad. Porcentaje de mujeres que estudian Ingeniería. 8. En una tienda de artículos para caballeros al final del día se carga en la computara las boletas que confeccionaron los distintos venderes para saber cuanto fue la comisión del día de cada uno de ellos. Los datos que se ingresan (por boleta) son: el número de vender y el importe. Cuan no hay más boletas para cargar se ingresa 0. Tenien en cuenta que el negocio tiene 3 venderes y que el porcentaje sobre las ventas es del 5%, indicar cuánto ganó cada vender en el día. 9. Realice la simulación y salida de los siguientes incisos: void main(void ) int n; for (n = 0; n <= 100; n++) if (n % 5!= 0) continue; printf("%d ", n); 19 M.Sc. Ana María Salga G.
//break.c int i, j, x=0; for(i=0;i<5;i++) for(j=0;j<1;j++) x+=(i+j-1); printf("%d",x); break; printf("\nx=%d",x); //break2.c int i, j, x=0; for(i=0;i<5;i++) for(j=0;j<3;j++) x+=(i+j-1); printf("%d ",x); break; printf("\nx=%d",x); 20 M.Sc. Ana María Salga G.
Bibliografía Ceballos Francisco Javier. Curso de Programación C/C++. Segunda Edición. Editorial RAMA, Madrid, 2002. Joyanes Aguilar Luis, Zahonero Martínez Ignacio. Programación en C. Metología, estructura de datos y objetos. Mc Graw Hill. Byron S. Gottfried. Programación en C. Mc Graw Hill. H.M. Dietel P. J. Dietel. Como Programar en C/C++. Segunda Edición. Prentice Hall. Hernández María Lourdes. Diseño estructura de algoritmos. Diagramas de flujos y pseucódigos. Universidad de Teuxtepe, México. Cairó Osval. Fundamentos de programación. Piensa en C. Prentice Hall. Primera edición, 2006. 21 M.Sc. Ana María Salga G.