ESTRUCTURAS DE SELECCIÓN
SENTENCIAS IF Y SWITCH
Sugerencias y herramientas para crear para crear y presentar diapositivas en
formato panorámico
Contenido
1.    Estructuras de control
2.    La sentencia if
3.    Sentencia if de dos alternativas if-else
4.    Sentencias if-else anidadas
                  if else
5.    Sentencias de control switch
6.    Expresiones condicionales: el operador ?:
7.    Evaluación
      E l ió en cortocircuito d expresiones ló i
                           i i de            i  lógicas
8.    Puesta a punto de programas
9.    Resumen
10.   Ejercicios
Estructuras de control
 Las estructuras de control controlan el flujo de ejecución
 de un programa o función. Las estructuras de control
 permiten combinar instrucciones o sentencias
 individuales en una simple unidad lógica con un punto
 de entrada y un punto de salida
 Las instrucciones o sentencias se organizan en 3 tipos
                                      g                p
 de estructuras de control que sirven para controlar el
 flujo de la ejecución: sentencia, selección (decisión) y
 repetición.
 repetición
La sentencia if
 En C la estructura de control de selección principal es
                                               p    p
 una sentencia if. La sentencia if tiene dos alternativas o
 formatos posibles. El formato mas sencillo tiene la
 sintaxis siguiente:
 If (condición) sentencia;
   condición; es una expresión entera (lógica).
   Sentencia; es cualquier sentencia ejecutable, que se
   ejecutara solo si la condición toma un valor distinto de cero
Ejemplos
 /* este programa lee dos números enteros y comprueba cual es el valor del resto de la división, si el resto es cero, n es
 divisible por d*/
 #include <stdio.h>
 #include <stdlib.h>
 int main ()
 {
     int n, d;
     printf ("introduzca dos enteros: ");
     scanf ("%d,%d",&n,&d);
     if (n%d==0)
 printf("%d es divisible por %dn",n,d);
     system("PAUSE");
     return 0;
 }
Ejemplos
 /*visualiza la tarifa de luz según el gasto de corriente eléctrica para un gasto menor de 1000kwh la tarifa es de 1.2, entre 1000 y 1850kwh es de 1 y mayor a 1850kwh es de 0.9 USD */


 #include <stdio.h>
 #include <stdlib.h>
 #define TARIFA1 1.2
 #define TARIFA2 1.0
 #define TARIFA3 0.9
 int main ()
 {
     float gasto, tasa;
     printf ("n gasto de corriente:");
     scanf("%f", &gasto);
     if (gasto<1000.0) tasa=TARIFA1;
     if (gasto>=1000.0 && gasto<=1850.0) tasa=TARIFA2;
     if (gasto>1850.0) tasa=TARIFA3;
     printf("nTasa que le corresponde a %.1f Kwh es de %fn",gasto,tasa);
     system("PAUSE");
     return 0;
 }
Sentencia if de dos alternativas: if-else
 Un segundo formato de la sentencia if es la sentencia
 if-else. Este formato de la sentencia if tiene la siguiente
 sintaxis:
 If (expresión_logica) Sentencia1 else Sentencia2
 En este formato Accion1 y Accion2 son individualmente
                                           individualmente,
 o bien una única sentencia que termina en un (;) o un
 grupo de sentencias encerrado entre llaves
Ejemplos
 /*calcular el mayor de los números leídos en el teclado y visualizar en la pantalla*/
 #include <stdio.h>
 #include <stdlib.h>
 int main()
 {
     int x,y;
     printf("introduzca dos enteros:");
     scanf("%d,%d",&x,&y);
     if(x>y)
     printf("el mayor es:%dn",x);
     else
     printf("el mayor es:%dn",y);
     system("PAUSE");
     return 0;
 }
Ejemplos
 /*dada la función f(x), calcular la función para un valor dado de x y visualizarlo en la pantalla
 f(x)=      {x^2-x para x<=0.0
            {-x^2+3x para x>0              */
 #include <stdio.h>
 #include <stdlib.h>
 #include <math.h>
 int main ()
 {
     float f,x;
     printf ("n Elige un valor de x:");
     scanf ("%f",&x); /*seleccion del rango en el que se encuentra x*/
     if (x<=0.0)
     f=pow(x,2)-x;
     else
     f=-pow(x,2)+3*x;
     printf ("f(%.1f)=%.3fn",x,f);
     system ("PAUSE");
     return 0;
 }
Sentencias if-else anidadas
           if else
 Una sentencia if es anidada cuando la secuencia de
 la rama verdadera o la rama falsa, es a su vez una
 sentencia if
            if.
 Una sentencia if anidada se puede utilizar para
 implementar d i i
 i l       t decisiones con varias alternativas o
                                 i     lt   ti
 multi-alternativas
Formato
Ejemplos
 /*calcular el mayor de 3 números enteros*/
 #include <stdio.h>
 #include <stdlib.h>
 int main ()
 {
     int a,b,c, mayor;
     printf ("nIntroduzca tres numeros enteros:");
     scanf ("%d,%d,%d",&a,&b,&c);
     if (a>b)
       if(a>c)mayor=a;
       else mayor=c;
     else
     if (b>c) mayor=b;
     else mayor=c;
        printf ("El mayor es %dn",mayor);
     system("PAUSE");
     return 0;
 }
Sentencia de control switch
 La sentencia switch es una sentencia C que se utiliza
 para seleccionar una de entre múltiples alternativas. La
 sentencia switch es especialmente útil cuando al
                             p
 selección se basa en el valor de una variable simple o
 de una expresión simple denominada expresión de
              p           p                    p
 control o selector. El valor de esta expresión puede ser
 de tipo int o chart, pero no float ni double
Sintaxis
Ejemplos
 /*dada una nota de un examen mediante un código escribir el literal que le
 corresponde a la nota*/                                                      case 'C': puts("Aprobado");
 #include <stdio.h>
 #
                                                                                               break;
 #include <stdlib.h>
 int main ()
                                                                              case 'D':
 {                                                                            case 'F': puts("Suspendido");
     char nota;
                                                                                               break;
                                                                                               break
     printf ("Introduzca calificacion (A-F) y pulse Intro:");
     scanf("%c",&nota);
                                                                                        default:
     switch (nota)                                                                             puts("No es posible esta nota");
     {                                                                            }
          case 'A': puts("Exelente. Examen superado");
                                                                                               puts ("Final de programa");
                  break;
          case 'B': puts("Notable. Suficiencia");                                              system("PAUSE");
                                                                                               return 0;
                                                                               }
Expresiones condicionales: El operador ?:
 C tiene un tercer mecanismo de selección, una expresión
 que produce uno de dos valores, resultado de una
 expresión lógica o booleana (también denominada
 condición).
 condición) Este mecanismo se denomina expresión
 condicional. Una expresión condicional tiene el formato
 C?A:B y es realmente una operación ternaria (tres
 operandos) en el que C A y B son l tres operandos y
          d )     l    C,           los            d
 ?: es el operador
 Condición ? Expresion1 : expresion2
Evaluación en cortocircuito de expresiones lógicas
  Cuando se evalúan expresiones lógicas en C se puede
  emplear una técnica denominada evaluación en
  cortocircuito. Este tipo de evaluación significa que se puede
  detener la evaluación de una expresión lógica tan pronto
                                      p          g        p
  como su valor pueda ser determinado con certeza.
  Si x es negativo, la expresión
    (x>=0)&&(y>1)
    (    0)&&( 1)
    Se evalúa en cortocircuito ya que x>=0 será falso y por tanto el
    valor final de la expresión será falso.
Errores frecuentes de programación
 Uno de los errores mas comunes en una sentencia if es utilizar un operador de asignación (=)
 en lugar de un operador de igualdad (==)( )
 En una sentencia if anidada, cada clausula else se corresponde con la if precedente mas
 cercana.
 Las comparaciones con los operadores == de cantidades algebraicamente iguales pueden
 producir una expresión l
     d                    lógica f l
                                  falsa, d b d a que l mayoría d l números reales no se
                                         debido        la         de los              l
 almacenan exactamente
 Cuando en una sentencia switch o en un bloque de sentencias falta una de las llaves ({,})
 aparece un mensaje de error “cumpound statement missing } in fuction”
 El selector de una sentencia switch debe ser de tipo entero o compatible entero
 Cuando se utiliza una sentencia switch, asegúrese que el selector switch y las etiquetas case
 son del mismo tipo (int, chart pero no float). Si el valor se evalúa a un valor no listado en
 ninguna de las etiquetas case la sentencia switch no gestionara ninguna acción; por esta
                             case,
 causa se suele poner una etiqueta default para resolver este problema
Resumen
Ejercicios
 Escribir un programa que lea tres enteros y emita un mensaje que indique
 si están o no en orden numérico
  i tá              d        éi
 Determine si el carácter asociado a un código introducido por el teclado
 corresponde a un carácter alfabético, digito, de puntuación, especial o no
 imprimible
 Escribir un programa que acepte fechas escritas de modo usual y las
 visualice como tres números
 Escribir
 E ibi y ejecutar un programa que simule un calculador simple. L d
             j t                         i l        l l d i l Lee dos
 enteros y un carácter. Si el carácter es un +, se imprime la suma; si es un –
 se imprime la diferencia; si es un *, se imprime el producto; si es un /, se
 imprime el cociente; y si es un % se imprime el resto
Patrón de prueba de pantalla panorámica (16:9)




                               Prueba de la
                                relación de
                                  aspecto
                            (Debe parecer circular)




       4x3

16x9

Clase 6

  • 1.
    ESTRUCTURAS DE SELECCIÓN SENTENCIASIF Y SWITCH Sugerencias y herramientas para crear para crear y presentar diapositivas en formato panorámico
  • 2.
    Contenido 1. Estructuras de control 2. La sentencia if 3. Sentencia if de dos alternativas if-else 4. Sentencias if-else anidadas if else 5. Sentencias de control switch 6. Expresiones condicionales: el operador ?: 7. Evaluación E l ió en cortocircuito d expresiones ló i i i de i lógicas 8. Puesta a punto de programas 9. Resumen 10. Ejercicios
  • 3.
    Estructuras de control Las estructuras de control controlan el flujo de ejecución de un programa o función. Las estructuras de control permiten combinar instrucciones o sentencias individuales en una simple unidad lógica con un punto de entrada y un punto de salida Las instrucciones o sentencias se organizan en 3 tipos g p de estructuras de control que sirven para controlar el flujo de la ejecución: sentencia, selección (decisión) y repetición. repetición
  • 4.
    La sentencia if En C la estructura de control de selección principal es p p una sentencia if. La sentencia if tiene dos alternativas o formatos posibles. El formato mas sencillo tiene la sintaxis siguiente: If (condición) sentencia; condición; es una expresión entera (lógica). Sentencia; es cualquier sentencia ejecutable, que se ejecutara solo si la condición toma un valor distinto de cero
  • 5.
    Ejemplos /* esteprograma lee dos números enteros y comprueba cual es el valor del resto de la división, si el resto es cero, n es divisible por d*/ #include <stdio.h> #include <stdlib.h> int main () { int n, d; printf ("introduzca dos enteros: "); scanf ("%d,%d",&n,&d); if (n%d==0) printf("%d es divisible por %dn",n,d); system("PAUSE"); return 0; }
  • 6.
    Ejemplos /*visualiza latarifa de luz según el gasto de corriente eléctrica para un gasto menor de 1000kwh la tarifa es de 1.2, entre 1000 y 1850kwh es de 1 y mayor a 1850kwh es de 0.9 USD */ #include <stdio.h> #include <stdlib.h> #define TARIFA1 1.2 #define TARIFA2 1.0 #define TARIFA3 0.9 int main () { float gasto, tasa; printf ("n gasto de corriente:"); scanf("%f", &gasto); if (gasto<1000.0) tasa=TARIFA1; if (gasto>=1000.0 && gasto<=1850.0) tasa=TARIFA2; if (gasto>1850.0) tasa=TARIFA3; printf("nTasa que le corresponde a %.1f Kwh es de %fn",gasto,tasa); system("PAUSE"); return 0; }
  • 7.
    Sentencia if dedos alternativas: if-else Un segundo formato de la sentencia if es la sentencia if-else. Este formato de la sentencia if tiene la siguiente sintaxis: If (expresión_logica) Sentencia1 else Sentencia2 En este formato Accion1 y Accion2 son individualmente individualmente, o bien una única sentencia que termina en un (;) o un grupo de sentencias encerrado entre llaves
  • 8.
    Ejemplos /*calcular elmayor de los números leídos en el teclado y visualizar en la pantalla*/ #include <stdio.h> #include <stdlib.h> int main() { int x,y; printf("introduzca dos enteros:"); scanf("%d,%d",&x,&y); if(x>y) printf("el mayor es:%dn",x); else printf("el mayor es:%dn",y); system("PAUSE"); return 0; }
  • 9.
    Ejemplos /*dada lafunción f(x), calcular la función para un valor dado de x y visualizarlo en la pantalla f(x)= {x^2-x para x<=0.0 {-x^2+3x para x>0 */ #include <stdio.h> #include <stdlib.h> #include <math.h> int main () { float f,x; printf ("n Elige un valor de x:"); scanf ("%f",&x); /*seleccion del rango en el que se encuentra x*/ if (x<=0.0) f=pow(x,2)-x; else f=-pow(x,2)+3*x; printf ("f(%.1f)=%.3fn",x,f); system ("PAUSE"); return 0; }
  • 10.
    Sentencias if-else anidadas if else Una sentencia if es anidada cuando la secuencia de la rama verdadera o la rama falsa, es a su vez una sentencia if if. Una sentencia if anidada se puede utilizar para implementar d i i i l t decisiones con varias alternativas o i lt ti multi-alternativas
  • 11.
  • 12.
    Ejemplos /*calcular elmayor de 3 números enteros*/ #include <stdio.h> #include <stdlib.h> int main () { int a,b,c, mayor; printf ("nIntroduzca tres numeros enteros:"); scanf ("%d,%d,%d",&a,&b,&c); if (a>b) if(a>c)mayor=a; else mayor=c; else if (b>c) mayor=b; else mayor=c; printf ("El mayor es %dn",mayor); system("PAUSE"); return 0; }
  • 13.
    Sentencia de controlswitch La sentencia switch es una sentencia C que se utiliza para seleccionar una de entre múltiples alternativas. La sentencia switch es especialmente útil cuando al p selección se basa en el valor de una variable simple o de una expresión simple denominada expresión de p p p control o selector. El valor de esta expresión puede ser de tipo int o chart, pero no float ni double
  • 14.
  • 15.
    Ejemplos /*dada unanota de un examen mediante un código escribir el literal que le corresponde a la nota*/ case 'C': puts("Aprobado"); #include <stdio.h> # break; #include <stdlib.h> int main () case 'D': { case 'F': puts("Suspendido"); char nota; break; break printf ("Introduzca calificacion (A-F) y pulse Intro:"); scanf("%c",&nota); default: switch (nota) puts("No es posible esta nota"); { } case 'A': puts("Exelente. Examen superado"); puts ("Final de programa"); break; case 'B': puts("Notable. Suficiencia"); system("PAUSE"); return 0; }
  • 16.
    Expresiones condicionales: Eloperador ?: C tiene un tercer mecanismo de selección, una expresión que produce uno de dos valores, resultado de una expresión lógica o booleana (también denominada condición). condición) Este mecanismo se denomina expresión condicional. Una expresión condicional tiene el formato C?A:B y es realmente una operación ternaria (tres operandos) en el que C A y B son l tres operandos y d ) l C, los d ?: es el operador Condición ? Expresion1 : expresion2
  • 17.
    Evaluación en cortocircuitode expresiones lógicas Cuando se evalúan expresiones lógicas en C se puede emplear una técnica denominada evaluación en cortocircuito. Este tipo de evaluación significa que se puede detener la evaluación de una expresión lógica tan pronto p g p como su valor pueda ser determinado con certeza. Si x es negativo, la expresión (x>=0)&&(y>1) ( 0)&&( 1) Se evalúa en cortocircuito ya que x>=0 será falso y por tanto el valor final de la expresión será falso.
  • 18.
    Errores frecuentes deprogramación Uno de los errores mas comunes en una sentencia if es utilizar un operador de asignación (=) en lugar de un operador de igualdad (==)( ) En una sentencia if anidada, cada clausula else se corresponde con la if precedente mas cercana. Las comparaciones con los operadores == de cantidades algebraicamente iguales pueden producir una expresión l d lógica f l falsa, d b d a que l mayoría d l números reales no se debido la de los l almacenan exactamente Cuando en una sentencia switch o en un bloque de sentencias falta una de las llaves ({,}) aparece un mensaje de error “cumpound statement missing } in fuction” El selector de una sentencia switch debe ser de tipo entero o compatible entero Cuando se utiliza una sentencia switch, asegúrese que el selector switch y las etiquetas case son del mismo tipo (int, chart pero no float). Si el valor se evalúa a un valor no listado en ninguna de las etiquetas case la sentencia switch no gestionara ninguna acción; por esta case, causa se suele poner una etiqueta default para resolver este problema
  • 19.
  • 20.
    Ejercicios Escribir unprograma que lea tres enteros y emita un mensaje que indique si están o no en orden numérico i tá d éi Determine si el carácter asociado a un código introducido por el teclado corresponde a un carácter alfabético, digito, de puntuación, especial o no imprimible Escribir un programa que acepte fechas escritas de modo usual y las visualice como tres números Escribir E ibi y ejecutar un programa que simule un calculador simple. L d j t i l l l d i l Lee dos enteros y un carácter. Si el carácter es un +, se imprime la suma; si es un – se imprime la diferencia; si es un *, se imprime el producto; si es un /, se imprime el cociente; y si es un % se imprime el resto
  • 21.
    Patrón de pruebade pantalla panorámica (16:9) Prueba de la relación de aspecto (Debe parecer circular) 4x3 16x9