Ana Maria Salgado G 2012 Sentencia de control for M.Sc. Ana María Salgado. Universidad Nacional Autónoma de Nicaragua León. Abril 2012 1 M.Sc. Ana María Salgado G.
Unidad IV: Estructuras de control Sentencia for La forma general de esta sentencia es: for (expresion 1; expresion 2; expresion 3) sentencia; Figura 3.4: Sentencia for Inicialmente se ejecuta expresión 1, se hace para inicializar la variable que controla la repetición del bucle. expresión 2 es una condición que debe ser cierta para que se ejecute sentencia. expresión 3 se utiliza para modificar el valor de la variable que controla el ciclo, se realiza un incremento o decremento. El bucle se repite mientras expresión 2 sea cierto. 2 M.Sc. Ana María Salgado G.
Si sentencia es compuesta se encierra entre. Si se omite expresión 2 se asumirá el valor permanente de 1 y el bucle se ejecutará de forma indefinida (bucle infinito). Ejemplo #1: //holafor.c int i; for(i=0; i < 5; i++) printf("hola!\n"); printf("el valor de i es: %d\n",i); Ejemplo #2: //fordesc2.c int n; for(n=10; n >5; n--) printf("%d \t %d \n",n,n*n*n); 3 M.Sc. Ana María Salgado G.
Ejemplo #3: //potencia.c int i,p=1,base,n; printf("entero elevado a una potencia\n"); printf("base:"); scanf("%d",&base); printf("potencia:"); scanf("%d",&n); for (i=1;i<=n ;i++) p=p*base; printf("%d^%d = %d\n",base,n,p); Ejemplo #4: float i; for(i = 1; i <= 5; i += 0.5) printf("%g\n",i); Ejemplo #5: //Bucle controlado por dos variables int f,c; for(f = 3, c = 6; f + c < 40; f++, c += 2) printf("f = %d\t c = %d\n", f, c); 4 M.Sc. Ana María Salgado G.
Ejercicios resueltos Ejemplo #1: Escriba un programa que reciba dos 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 //serie1.c int m,n,i; float suma=0; do printf("introduzca los enteros m y n\n"); scanf("%d %d",&m,&n); while(m>n); for(i=0;i<=n;i++) suma+=1.0/(float)(m+i); printf("el resultado de la funcion es %g\n",suma); Ejemplo #2: Se usa el esquema siguiente para calcular la comisión mensual por ventas(en dólares) ganada por un empleado de una empresa bienes raíces: Ventas totales Comisión Hasta 100,000 1% de las ventas totales $100,000 200,000 1% de los primeros $100,000 más 2% del exceso sobre $100,000 Más de $200,000 1% de los primeros $100,000 más 2% de los siguientes $100,000 más 3% del exceso sobre $200,000 5 M.Sc. Ana María Salgado G.
a) Escriba un programa que calcule la comisión mensual de un grupo de vendedores con base en su total de ventas. b) Haga que el programa anterior lleve un registro de cuántos empleados recibieron una comisión de, por lo menos, 2000 dólares. //comision3.c float ventas,com; int nempleados, i, n=0; char nombre[100]; printf("cuantos empleados quiere procesar?"); scanf("%d",&nempleados); for(i=0;i<nempleados;i++) fflush(stdin); printf("\nintroduzca el nombre del empleado #%d:",i+1); gets(nombre); printf("\ncuanto fue su venta?:"); fflush(stdin); scanf("%f",&ventas); if(ventas <=100000) com = ventas * 0.01; else if(ventas >100000 && ventas <=200000) com = (100000 * 0.01) + ((ventas - 100000) * 0.02); else if(ventas >200000) com = (100000 * 0.01) + (100000 * 0.02) + ((ventas - 200000) * 0.03); printf("el empleado %s vendio %g y su comision fue %g\n",nombre,ventas,com); if(com >=2000) n++; printf("\n\n%d empleados recibieron una comision de por lo menos 2000 dolares\n",n); 6 M.Sc. Ana María Salgado G.
Ejemplo #3: Escriba un programa de nómina para una compañía que tiene seis empleados, algunos de los cuales son hombres y otros mujeres. Para cada empleado el programa debe leer el nombre, el sexo, las horas de trabajo y el sueldo por hora. La primera parte de la impresión debe dar el nombre y el pago de cada empleado. La segunda parte, el total de los pagos para cada sexo, así como el promedio de los pagos a los hombres y el promedio de los pagos a las mujeres. //nomina.c float pago, phora, pagotothombres =0, pagototmuj=0, promuj, promhomb; char sexo; int htrab, i, muj=0, homb=0; char nombre[100]; for(i=0;i<6;i++) printf("\n\nempleado #%d\n",i+1); fflush(stdin); printf("\nintroduzca el nombre\n"); gets(nombre); printf("sexo:"); sexo = getchar(); printf("horas trabajadas y sueldo por hora:"); scanf("%d %f",&htrab,&phora); pago=htrab*phora; printf("el empleado %s tiene un salario de %g\n",nombre,pago); if(sexo == 'f') pagototmuj+=pago; muj++; if(sexo == 'm') pagotothombres+=pago; homb++; printf("\ntotal de pagos para mujeres es %f\n",pagototmuj); 7 M.Sc. Ana María Salgado G.
printf("\ntotal de pagos para hombres es %f\n",pagotothombres); promhomb = pagotothombres/homb; promuj = pagototmuj/muj; printf("\npago promedio de hombres = %f\n",promhomb); printf("\npago promedio de mujeres = %f\n",promuj); Ejemplo #4: Escriba un programa que calcule la suma de la siguiente serie: 1 2 3 n + + + +... + 2 n x x x x 1 3 //serie2.c #include <math.h> int x,n,i; float suma = 1; printf("ingrese el valor de n:"); scanf("%d",&n); printf("ingrese el valor de x:"); scanf("%d",&x); for(i = 1; i <= n; i++) suma = suma +i/pow(x,i); printf("suma = %.2f\n",suma); 8 M.Sc. Ana María Salgado G.
Ejemplo #5: Escriba un programa para evaluar la función y = 4x 2 16x + 15, donde 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: //posneg2.c #include <stdlib.h> #include <math.h> float x, y; printf("valor de x\tvalor de y\tsigno\n"); printf("-------------------------------------\n"); for(x = 1; x <= 2; x+=0.1) y = 4 * pow(x,2) - 16 * x + 15; if(y > 0) printf("%.2f\t\t%.2f\t\tpositivo\n",x,y); else if(y < 0) printf("%.2f\t\t%.2f\t\tnegativo\n",x,y); 9 M.Sc. Ana María Salgado G.
Ejercicios propuestos 1. Leer 20 números e imprimir cuántos son positivos, cuántos negativos y cuántos neutros. 2. Suponga que se tiene un conjunto de calificaciones de un grupo de 40 alumnos. Realizar un programa para calcular la calificación media y la calificación más baja de todo el grupo. 3. Una persona debe realizar un muestreo con 50 personas para determinar el promedio de peso de los niños, jóvenes, adultos y viejos que existen en su zona habitacional. Se determinan las categorías con base en la sig, tabla: CATEGORIA EDAD Niños 0-12 Jóvenes 13-29 Adultos 30-59 Viejos 60 en adelante 4. Un Zoólogo pretende determinar el porcentaje de animales que hay en las siguientes tres categorías de edades: de 0 a 1 año, de más de 1 año y menos de 3 y de 3 o más años. El zoológico todavía no está seguro del animal que va a estudiar. Si se decide por elefantes solo tomará una muestra de 20 de ellos; si se decide por las jirafas, tomará 15 muestras, y si son chimpancés tomará 40. 5. Una compañía ha reducido a la mitad los límites de crédito de sus clientes. Por lo tanto, si un cliente tenía un límite de crédito de C$2000, su límite ahora es de C$1000. Escriba un programa que analice el estado de crédito de treinta clientes de esa compañía. Para cada cliente se pedirá: Número de cuenta. El límite de crédito actual. El saldo actual del cliente(es decir, la cantidad actual que el cliente le debe a la empresa). Su programa deberá calcular e imprimir el nuevo límite de crédito para cada cliente, y deberá determinar qué clientes tienen saldos actuales que exceden sus nuevos límites de crédito. 10 M.Sc. Ana María Salgado 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. Metodologí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 estructurado de algoritmos. Diagramas de flujos y pseudocódigos. Universidad de Teuxtepe, México. 11 M.Sc. Ana María Salgado G.