Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

Tema 2 - Programación básica en C (III)

71 visualizaciones

Publicado el

Tema 2 - Programación básica en C

2.6 Escribir sentencias de control y repetición

Publicado en: Educación
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

Tema 2 - Programación básica en C (III)

  1. 1. http://www.eps.uam.es/~phaya PROG-I 2009-10 PROGRAMACIÓN BÁSICA EN C Semana 4 – Tema 2.6 /*Programa motivación */ int main(void) { while (1) printf("Lo conseguire"); return 0; }
  2. 2. PROG-I /24PROG-I Objetivos Semana 2 2.1 Aplicar las directivas de preprocesador de C para incluir ficheros de cabecera 2.2 Utilizar los tipos de datos definidos de forma estándar en C para declarar variables 2.3 Declarar, definir y llamar funciones para implementar modularidad en un programa Semana 3 2.4 Hacer uso de las funciones de entrada/salida 2.5 Realizar operaciones de asignación, aritméticas y lógicas en C Semana 4 2.6 Escribir sentencias de control y repetición Curso 2009-10Tema - 2 Programación básica 2
  3. 3. Sentencias condicionales
  4. 4. PROG-I /24PROG-I Resumen operadores relacionales y lógicos Curso 2009-10Tema - 2 Programación básica 4 Operador Explicación V F > Mayor que 1 0 < Menor que 1 0 == Igual a 1 0 >= Menor o igual a 1 0 <= Mayor o igual a 1 0 != Distinto a 1 0 A B ! A A && B A || B 0 0 1 0 0 0 ≠0 1 0 1 ≠0 0 0 0 1 ≠0 ≠0 0 1 1 Op. relaciones y lógicos: Verdadero ≠ 0, Falso = 0 Operadores Lógicos Se evalúan en cortocircuito: en cuanto se sabe el resultado de la expresión se deja de evaluar. Ej; a = 3; x = ((a == 3) || (b = 2)); x = ((a < 1) && b = sqrt(2)))
  5. 5. PROG-I /24PROG-I Sentencia if (expr) sentencia [else sentencia]  Permite ejecutar distintas instrucciones dependiendo de la evaluación de expresión condicional. if ( expr ) sentencia  Expresión condicional: V ≠ 0, F = 0  Variable: if (encontrado)…  Expresión con operadores lógicos y relacionales: if ((n > 0) && (n % 3 == 0)) …  Función que devuelve entero: if (! esPrimo(a)) …  else if ( expr ) sentencia else sentencia Ej: if (a > b) z = a; else z = b; Ej: si a > b z ← a si no z ← b Curso 2009-10 5Tema - 2 Programación básica
  6. 6. PROG-I /24PROG-I Sentencia if (expr) sentencia [else sentencia]  Ejs. if (distancia <= radio) printf("PUNTO INTERIOR"); else printf("PUNTO EXTERIOR"); scanf("%f", &x); if (x < 0) x = -x; printf("%.2f",x); 11 22 scanf("%c", &c); if (('A' <= c) && (c <= 'Z')) { desp = 'a'-'A'; c += desp; } printf("%cn", c); 33 if (x > max) { printf("Nuevo max. %fn", x); max = x; } else { printf("Seguimos probando"); i++; } 44 Curso 2009-10 6Tema - 2 Programación básica
  7. 7. PROG-I /24 if (salario/2 > letramensual) printf("Prestamo concedido: %un", prestamo); else if (salario > letramensual) printf("Prestamo al 80%%: %.1fn", prestamo*0.8); else printf("Prestamo denegadon"); Sentencias condicionales anidadas si salario/2 > letramensual Prestamo concedido si no si salario > letramensual Prestamo concedido al 80% si no Prestamo denegado Curso 2009-10 7Tema - 2 Programación básica
  8. 8. PROG-I /24 Sentencias condicionales anidadas (ej2) if (tieneTrabajo) if (salario/2 > letramensual) printf("Prestamo concedido: %un", prestamo); else if (salario > letramensual) printf("Prestamo al 80%%: %.1fn", prestamo*0.8); else printf("Prestamo denegadon"); else printf("Prestamo denegadon");  cada else se asocia con el if más cercano  Cuidado con la indentación Curso 2009-10 8Tema - 2 Programación básica
  9. 9. PROG-I /24 Sentencias condicionales anidadas (ej3) Incorrecto if (x > 0) if (x < 20) printf("esta entre 0 y 20n"); else printf("no esta entre 0 y 20n"); else printf("no esta entre 0 y 20n"); Correcto if ((0 < x) && (x < 20)) printf("esta entre 0 y 20n"); else printf ("no esta entre 0 y 20n"); Curso 2009-10 9Tema - 2 Programación básica
  10. 10. PROG-I /24 Control de errores if ((edad < MIN_EDAD) ||(edad > MAX_EDAD)) printf("edad %d incorrectan", edad); else { … … … } if (salario < 0) printf("Error %d salarion", salario); else if (letramensual <= 0) printf("Error %d letran", letramensual); else { … … } 11 22 Curso 2009-10 10Tema - 2 Programación básica
  11. 11. PROG-I /24PROG-I Condicional múltiple (switch)  Cada caso se etiqueta por uno entero (int, char, enum).  Si se cumple que la expresión se corresponde con alguna de las etiquetas comienza la ejecución en ese punto.  break: punto de salida de la sentencia  default: opción por defecto switch (expresión) { case const-expr: sentencias [break;] case const-expr: sentencias [break;] [default: sentencias] } switch (cantidad) { case 1: descuento = 0; break; case 2: case 3: case 4: descuento = 0.05; break; case 5: case 6: descuento = 0.10; break; default: descuento = 0.25; } Curso 2009-10 11Tema - 2 Programación básica
  12. 12. PROG-I /24PROG-I Operador condicional  Operador trinario  expr1 ? expr2 : expr3  El valor devuelto depende del resultado expr1  Si expr ≠ 0 (verdadero) el resultado coincide con el resultado de la expr2  Si expr = 0 (falso) el resultado coincide con el resultado de la expr3  El tipo del resultado depende del tipo de expr2 y expr3, independientemente de cual se evalue Curso 2009-10Tema - 2 Programación básica 12 Ej: z = (a > b) ? a : b; /* z = max(a, b) */ printf("%fn", (y > 0) ? y : -y);
  13. 13. Sentencias de repetición
  14. 14. PROG-I /24PROG-I Bucles  Bucles definidos: aquellos que conocemos a priori cuantas iteraciones se van a realizar. Ej. Imprimir los 10 primeros números impares.  desde...hasta  Bucles indefinidos: aquellos que a priori no conocemos el número de iteraciones. Se necesita especificar una condición de parada. Ej. Calcular la suma de una lista de números enteros hasta que un operando sea negativo.  cero o más iteraciones: mientras...haz  una o más iteraciones: haz...mientras Curso 2009-10 14Tema - 2 Programación básica
  15. 15. PROG-I /24PROG-I Bucles definidos: desde...hasta  Se utiliza para implementar bucles definidos for (expr1; expr2; expr3) sentencia  expr1 y expr3 son asignaciones o llamadas a función  expr1: se evalúa antes de comenzar el bucle  expr3: se evalúa al final de cada iteración.  expr2 es un expresión relacional  Se comprueba antes de cada iteración para decidir si se el bucle continua.  expr1: inicialización, expr2: condición parada, expr3: incremento Ej:. int i; for (i = 0; i < MAX; i++) { printf("%d ", i); } Ej:. desde i ← 0 hasta MAX imprime i Curso 2009-10 15Tema - 2 Programación básica
  16. 16. PROG-I /24PROG-I Ejemplo 1: #include <stdio.h> /* Imprimir los n primeros números pares:*/ /* 2,4,6,8,10,12,14 …*/ int main(void) { int n, i; scanf("%d", &n); for (i = 1; i <= n; i++) printf("%d ", 2*i); printf("n"); } Pas o Instruccion i n salid a 1 scanf(…); ? 7 2 printf("%d…); 1 7 2 3 printf("%d…); 2 7 4 4 printf("%d…); 3 7 6 5 printf("%d…); 4 7 8 6 printf("%d…); 5 7 10 7 printf("%d…); 6 7 12 8 printf("%d…); 7 7 14 9 printf("n"); 8 7 salto bucle for Curso 2009-10 16Tema - 2 Programación básica
  17. 17. PROG-I /24PROG-I Ejemplo 2: /* Imprimir los números enteros dentro de un intervalo dado de mayor a menor:*/ int main(void) { int a, b, i; scanf("%d%d", &a, &b); for (i = a; i <= b; i--) printf("%d ", i); printf("n"); } Pas o Instrucci on i a b salid a 1 scanf(…); ? 2 -3 2 printf(%d…) ; 2 2 -3 2 3 printf(%d…) ; 1 2 -3 1 4 printf(%d…) ; 0 2 -3 0 5 printf(%d…) ; 1 2 -3 1 6 printf(%d…) ; -1 2 -3 -1 7 printf(%d…) ; -2 2 -3 -2 8 printf(%d…) ; -3 2 -3 -3 printf(%d…) bucle for Curso 2009-10 17Tema - 2 Programación básica
  18. 18. PROG-I /24PROG-I Anidar bucles for #include <stdio.h> /* Imprimir la tabla de multiplicar del 0 al 9: */ int main(void) { int i, j; for (i = 0; i<=9; i++) { for (j = 0; j<=9; j++) printf("%2d ", i*j); printf("n"); } return 0; } se repite 10 veces se repite 10 veces ¿cuántas veces se ejecuta? ¿cuántas veces se ejecuta? Curso 2009-10 18Tema - 2 Programación básica
  19. 19. PROG-I /24PROG-I  while: es una de las dos realizaciones de un bucle indefinido. while (expr) sentencia  Mientras se cumpla la condición (<expr> ≠ 0) se ejecutará el bucle  Un bucle while se ejecutará cero o más veces. Bucles indefinidos Ej: int main(void) { int n, suma = 0; scanf("%d",&n); while (n >= 0) { suma += n; scanf("%d",&n); } printf("suma=%dn", suma); return 0; } Ej: suma ← 0 lee n mientras n >= 0 suma ← suma + n lee n imprime suma Curso 2009-10 19Tema - 2 Programación básica
  20. 20. PROG-I /24PROG-I Ejemplo 1: /* Calcular la suma de una secuencia de números introducido por teclado hasta que uno de los números sea negativo */ * #include <stdio.h> int main(void) { int n, suma = 0; scanf("%d",&n); while (n >= 0) { suma += n; scanf("%d",&n); } printf("suma=%dn", suma); } Pas o Instruccion suma n 1 suma=0 0 ? 2 scanf 0 4 3 suma += n 4 4 4 scanf 4 2 6 suma += n 6 2 7 scanf 6 5 8 suma += n 11 5 9 scanf 11 2 10 suma += n 13 2 11 scanf 13 -1 bucle while 11 22 33 44 Curso 2009-10 20Tema - 2 Programación básica
  21. 21. PROG-I /24PROG-I  do:Es una de las dos realizaciones de un bucle indefinido do sentencia while (expr) ;  Haz sentencia mientras se cumpla la condición (<expr> ≠ 0)  Un bucle do..while se ejecutará una o más veces. Bucle indefinidos Ej: n ← 0 suma ← 0 haz suma ← suma + n lee n mientras n >= 0 imprime suma Ej: int main(void) { int n = 0, suma = 0; do { suma += n; scanf("%d",&n); }while( n >= 0); printf("suma=%dn", suma); return0; } Curso 2009-10 21Tema - 2 Programación básica
  22. 22. PROG-I /24PROG-I Break y continue  break: termina la ejecución de un bucle en el punto en el que aparezca. Si hubiera varios bucles anidados sólo afecta al más interior.  continue: continua con la siguiente iteración. while (!(x == vbuscado)) { scanf("%lf", &x); if (x < 0.0) break; } for (i = 0; i < TOTAL; ++i) { c = getchar(); if (isdigit(c)) continue; c = toupper(c); … }for (nc = 0; ; nc++) { c = getchar(); if (c == EOF) break; } Curso 2009-10 22Tema - 2 Programación básica
  23. 23. PROG-I /24PROG-I Consideraciones generales  Bucle for  Aunque es posible realizar bucles indefinidos (break), pensar en utilizarlo con definido.  La variables que se utilizen dentro de la definición del bucle no se deberían modificar dentro del mismo.  Se puede emplear el operador ,  Bucle while y do  Aunque es posible realizar bucles definidos, pensar en utilizarlo siempre con definido.  while: se ejecuta cero o más veces  do: se ejecuta una o más veces  Empler break y continue cuando sea extrictamente necesario. Repensar la definición del bucle. Curso 2009-10 23Tema - 2 Programación básica

×