Bloque 3.2 Operadores aritméticos ● Suma <+> : x + y ● Resta <-> : x – y ● Multiplicación <*>: x * y ● División </> : x / y ● Módulo <%> : x % y (resto de la división ● ● Si los operandos son enteros tipo del resultado es entero. Si hay un real el resultado es tipo real Expresiones aritméticas Ejemplo: 4 5x ⋅z10y6 3 Las expresiones se evaluan de izquierda a derecha Las multiplicaciones y divisiones prevalecen sobre las sumas y restas Para especificar el orden de operación se utilizán paréntesis Operadores lógicos y relacionales Operadores relacionales - “ == “ : ¿es igual? - “ != “ : ¿es diferente? - “ < “ : ¿es menor? - “ > “ : ¿es mayor? - “ <= “ : ¿es menor o igual? - “ >= ” : ¿es mayor o igual? Operadores lógicos - ” ! “ : NOT : Negación lógica -> cambia el valor booleano - “ && ”: AND : Es un “y” lógico -> verdad si ambos son verdad - “ || ” : OR : Es on “o” inclusivo -> verdad si al menos uno es verdad - “ ^ ” : XOR : Es un “o” exclusivo -> verdad si ambos son diferentes Ejemplos Números x de 0 a 10: (x>=0) && (x<=10) Números x fuera del intervalo [0,10]: (x<0) || (x>10) Estructuras de control Estructuras condicionales - if - else - encadenamiento y estructuras anidadas - switch Estructuras repetitivas - El bucle while - El bucle for - Bucles anidados Programación estructurada IDEA PRINCIPAL: La estructura de control de un programa sólo debe tener un punto de entrada y un punto de salida Este tipo de estructura es predecible y disciplinada, no salta de un lado a otro de forma impredecible. Si no, será muy complicado depurar un programa y probarlo If La sentencia if nos permite elegir si se ejecuta o no un bloque de instrucciones. Sintaxis if (condición) instruccion1(); if (condición) { instruccion2(); } Consideraciones acerca del uso de la sentencia if Un error común: - Olvidar los paréntesis al poner la condición del if es un error sintáctico (los paréntesis son necesarios) if (condición); sentencia; es interpretado como - Confundir el operador de comparación == con el operador de asignación = puede producir errores inesperados - Los operadores de comparación ==, ! =, <= y >= han de escribirse sin espacios. - => y =< no son operadores válidos en C. if (condición) ; // Sentencia vacía sentencia; Ejercicio: Pedir un número al usuario e imprimirlo sólo si es mayor de cero else Permite ejecutar un trozo de código si una condición se cumple y otro si no se cumple if (condición) { bloque3 } else { bloque4 } Encadenamiento Podemos encadenar muchos if – else para ver cuándo se cumplen unas condiciones específicas: #include <stdio.h> void main () { //libreria de entrada/salida float nota; printf(“Déme una nota: ”); //imprime por pantalla scanf(“%f”,&nota); //recoge lo que escribe un usuario if (nota>=9) { printf(“Sobresaliente”); } else if (nota>=7) { printf(“Notable”); } else if (nota>=5) { printf(“Aprobado”); } else { printf(“Suspenso”); } } If anidados Los if se pueden ir anidando, es decir, incluir más sentencias if dentro de los trozos de código a ejecutar cuando se cumplen las condiciones #include <stdio.h> void main() { float a,b; printf(“Escriba un número a dividir y un divisor”); scanf (“%f %f”,&a,&b); if (b==0) { printf(“La solución es infinito”); } else { if (a==0) { printf(“La solución es cero”); } else { printf(“La solución es &f, a/b”); } } } switch Evaluamos una expresión o variable y en caso de que valga un valor determinado ejecutamos un trozo de código diferente switch (expresión) { case expr_cte1: sentencia1; case expr_cte2: sentencia2; ... case expr_cteN: sentenciaN; default: sentencia; } Estructuras repetitivas – for y while Se utilizan cuando tenemos que repetir un trozo de código muchas veces. En vez de escribir las mismas lineas muchas veces las metemos en un bucle de repetición. El bucle de repetición se ejecuta hasta que se deja de cumplir una condición El bucle for El bucle se ejecuta hasta que una condición se deja de cumplir Sólo se puede utilizar cuando sabemos el número de iteraciones de nuestro bucle Ejemplo: int j=0 for (int i=0; i < 100; i++) { j=j+i } ¿Qué hace este código? while Ejemplo: Sumar una serie de números hasta que el usuario introduzca un cero #include <stdio.h> void main() { double suma; // Suma de los datos double n; // Número leído desde el teclado suma = 0; // Inicialización de la suma printf (“Introduzca un número (0 para terminar)”); scanf (“%f”, &n); while (n!=0) { suma = suma + n; printf (“Introduzca un número (0 para terminar): ”); scanf (“%f”, &n); } printf(“Suma total = %lf\n”, suma); } Depuración - Depuramos un código cuando no tiene errores pero no da los resultados que nosotros esperamos. - Cuando los programas son largos o complicados el tiempo de depuración supera en muchas veces el tiempo de edición. - Los métodos más inmediatos de depuración: - ejecutando el código paso a paso - poniendo trazas en el código - mediante ventanas de inspección