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 (II)

85 visualizaciones

Publicado el

Tema 2 - Programación básica en C

2.4 Hacer uso de las funciones de entrada/salida
2.5 Realizar operaciones de asignación, aritméticas y lógicas en C

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

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

  1. 1. http://www.eps.uam.es/~phaya PROG-I 2009-10 PROGRAMACIÓN BÁSICA EN C Semana 3 – Temas 2.4 y 2.5
  2. 2. PROG-I /27PROG-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. Salida de datos con formato
  4. 4. PROG-I /27 printf int printf(const char * format, ...); Ej1: #include <stdio.h> printf("%s, %s %4d, %.2d:%.2dn", weekday, month, day, hour, min); Martes, Enero 15, 20:03 Ej2: #include <math.h> #include <stdio.h> printf("pi = %.5fn", 4 * atan(1.0)); pi = 3.14159  <stdio.h>  imprimir con formato char weekday[] = "Martes"; char month[] = "Enero"; int day = 15; int hour = 20; int min = 3; Curso 2009-10 4Tema 2 – Programación básica
  5. 5. PROG-I /27PROG-I printf  ABC. Sección 11.1, pag. 493  %<flags><ancho><precision><long>conversion  Cero o más flags  - justifica a la izquierda la conversión  + fuerza a que aparezca el signo (+ ó -)  # notación alternativa para octal y hexadecimales  0 Rellena con ceros hasta el ancho del campo  "espacio" si el signo es positivo deja un espacio inicial.  ancho: mínimo de caracteres que ocupará la conversión  precisión: comienza con . Depende de la conversión. En números enteros determina el número mínimo de dígitos. En números reales, la cantidad de decimales. En cadena de caracteres indica el número máximo de caracteres a escribir.  longitud: modificar que puede ser h, l ó L. h – short, l – long y L – long double Curso 2009-10 5Tema 2 – Programación básica
  6. 6. PROG-I /27PROG-I printf Símbo lo Conversión Precisió n por defecto d,i Entero con signo 1 u Entero sin signo 1 o octal (sin 0 al principio) 1 x, X hexadecimal (sin 0x ó 0X) al principio 1 f Real con doble precisión 6 e, E Real con doble precisión en notación científica 6 c Imprime un caracter - s Imprime un cadena de caracteres - Curso 2009-10 6Tema 2 – Programación básica
  7. 7. PROG-I /27PROG-I Problema (Salida con formato)  Realizar una programa que pida la distancia entre dos ciudades (km), la cantidad de combustible necesario para realizar el viaje (l), y el coste de la unidad de combustible (euros/l). Imprimir por pantalla un resumen de los datos anteriores, más el consumo medio a los 100 km. y el coste del viaje. Asumir que la distancia y la cantidad de combustible son números enteros. distancia ← 740 combustible ← 60 precioCombustible ← 1.145 consumoMedio ← combustible*100 / distancia precioViaje ← distancia * precioCombustible imprime distancia imprime combustible imprime precioCombustible imprime consumoMedio imprime precioViaje Curso 2009-10 7Tema 2 – Programación básica
  8. 8. Primeraaproximación #include <stdio.h> int main(){ int distancia, /* km */ combustible; /* litros consumidos en el viaje */ float precioCombustible, /* euro/litros */ consumoMedio, /* litros a los 100km */ precioViaje; /* coste total del viaje */ distancia = 740; combustible = 60; precioCombustible = 1.145; consumoMedio = combustible *100 / distancia; precioViaje = combustible * precioCombustible; printf("Distancia:%d km.n", distancia); printf("Combustible gastado:%d l.n", combustible); printf("Precio combustible:%f euros/ln", precioCombustible); printf("Consumo medio:%f l.n", consumoMedio); printf("Coste:%f eurosn", precioViaje); return 0; }
  9. 9. PROG-I /27PROG-I Salida con formato Entrada: 740 60 1.145 Salida: Distancia:740 km. Combustible gastado:60 l. Precio combustible:1.145000 euros/l Consumo medio:8.000000 l. Coste:68.699997 euros Nueva Salida buscada: Distancia:_____________740 km. Combustible gastado:____60 l. Precio combustible:1.145000 euros/l Consumo medio:8.000000 l. Coste:68.699997 euros 10 car. (‘Distancia:’) + X car. = 20 car. (‘Combustible gastado:’) + Y car. Curso 2009-10 9Tema 2 – Programación básica
  10. 10. #include <stdio.h> int main(){ int distancia, /* km */ combustible; /* litros consumidos en el viaje */ float precioCombustible, /* euro/litros */ consumoMedio, /* litros a los 100km */ precioViaje; /* coste total del viaje */ distancia = 740; combustible = 60; precioCombustible = 1.145; consumoMedio = combustible *100 / distancia; precioViaje = combustible * precioCombustible; printf("Distancia:%16d km.n", distancia); printf("Combustible gastado:%6d l.n", combustible); printf("Precio combustible:%f euros/ln", precioCombustible); printf("Consumo medio:%f l.n", consumoMedio); printf("Coste:%f eurosn", precioViaje); return 0; } Segundaaproximación
  11. 11. PROG-I /27 Salida con formato Salida buscada: Distancia:_____________740 km. Combustible gastado:____60 l. Precio combustible:______1.145 euros/l Consumo medio:___________8.00 l. Coste:__________________68.70 euros 19 car. (‘Precio combustible:’) car. + Z car. = 26 Z car. = 7 Si queremos alinear parte entera con parte entera => 7 + 3 decimales + ‘.’ = 11 car. Distancia: 740 km. Combustible gastado: 60 l. Precio combustible:1.145000 euros/l Consumo medio:8.000000 l. Coste:68.699997 euros Salida: Curso 2009-10 11Tema 2 – Programación básica
  12. 12. Terceraaproximación #include <stdio.h> int main(){ int distancia, /* km */ combustible; /* litros consumidos en el viaje */ float precioCombustible, /* euro/litros */ consumoMedio, /* litros a los 100km */ precioViaje; /* coste total del viaje */ distancia = 740; combustible = 60; precioCombustible = 1.145; consumoMedio = combustible *100 / distancia; precioViaje = combustible * precioCombustible; printf("Distancia:%16d km.n", distancia); printf("Combustible gastado:%6d l.n", combustible); printf("Precio combustible:%11.3f euros/ln", precioCombustible); printf("Consumo medio:%15.2f l.n", consumoMedio); printf("Coste:%23.2f eurosn", precioViaje); return 0; }
  13. 13. Entrada de datos
  14. 14. PROG-I /27 scanf int scanf(const char * format, ...); Ej1: int dia, anio; char nombremes [20]; scanf("%d %s %d", &dia, nombremes, &anio); /*20 Ene 2009 */ Ej2: int dia, mes, anio; scanf("%d/%d/%d", &dia, &mes, &anio); /* 20/01/2009 */  Lectura con formato  Se para cuando se empareja todo el formato, o cuando se produce un error.  Devuelve el número de argumentos que ha sido capaz de emparejar. Curso 2009-10 14Tema 2 – Programación básica
  15. 15. PROG-I /27PROG-I Formato scanf  ABC. Sección 11.2, pag. 499  Contenido  Espacio en blanco  Carácter ordinario  Especificación de conversión (%). Indica el formato en que se va almacenar en la variable que le corresponda casar. Si se añade un * despue´s del % significa que se consume pero no se almacena. Se puede especificar el número máximo de caracteres a consumir.  Conversión  d i o u x : convierte al entero correspondiente.  e f : convierte a float.  s : lee hasta el siguiente carácter blanco y almacena lo consumido en una cadena de caracteres.  c : lee un carácter (cuentan también los blancos)  Modificadores h, l, L : similar a printf Curso 2009-10 15Tema 2 – Programación básica
  16. 16. PROG-I /27PROG-I Entrada de datos  Reglas a tener en cuenta  enteros: salta todos los ‘blancos’, y consume el siguiente número entero.  reales: salta todos los ‘blancos’, y consume el siguiente número real.  char: consume el siguiente carácter.  string: Consume todos los caracteres hasta el siguiente blanco.  cualquier otro tipo de dato: no se puede leer directamente! (* caracteres blancos: espacio, tabuladores, saltos de línea y retornos de carro) Curso 2009-10 16Tema 2 – Programación básica
  17. 17. PROG-I /27PROG-I Ejercicio  Modificar el programa anterior para emplear la entrada estándar como suministradora de los valores iniciales. Curso 2009-10 17Tema 2 – Programación básica
  18. 18. Operadores
  19. 19. PROG-I /27PROG-I Operadores  Operador: tipo especial de función perteneciente al lenguaje que por similitud con el lenguaje matemático se expresa mediante caracteres particulares.  Todo operador:  Recibe un o más operandos (argumentos)  Devuelve el resultado de la operación como salida.  El resultado tiene un tipo (int, long, float…)  ¿Si los operandos son de distinto tipo? véase ABC, Sección 3.11, pag.131  Tipos  En cuanto al número de operandos  Unarios: requieren un único operando  Binarios: requieren dos operandos  En cuanto al tipo de operación  Aritméticos  Relacionales  Lógicos  Asignación  Incremento/Posdecremento  Bits Curso 2009-10 19Tema 2 – Programación básica
  20. 20. PROG-I /27PROG-I Operadores Aritméticos  Unarios  Binarios  Ejemplos Operador Tipo de datos Explicación + - int, float, double Cambian el signo Operador Tipo de datos Explicación + -* / int, float, double % int módulo int a,b; a = 20; b = -a; /* a=20, b=-20 */ a = a - b; /* a=40, b=-20 */ b = a % b; /* a=40, b=0 */ int a, b; float x; a = 30; b = a / 20; x = a / 20; printf("a=%d, b=%d, c=%.2fn",a,b,x); /* ¿qué aparece por pantalla? */ Curso 2009-10 20Tema 2 – Programación básica
  21. 21. PROG-I /27PROG-I  Todos son binarios  El resultado de la operación será un entero:  0 si la relación es falsa  1, si la relación es verdadera Operadores relacionales Operador Explicación > Mayor que < Menor que == Igual a >= Menor o igual a <= Mayor o igual a != Distinto a Ej: int a,b; a = 20; b = 30; printf("%d", a == b); printf("%d", a <= b); printf("%d", a >= b); printf("%d", a != b); Curso 2009-10 21Tema 2 – Programación básica
  22. 22. PROG-I /27PROG-I Operadores lógicos  Lógica booleana: véase Unidad 2 de FC (Operaciones y expresiones booleanas. Leyes y reglas del álgebra de Boole)  Operadores lógicos:  Unario: not (!)  Binario: and (&&), or (||)  Tabla de verdad: A y B expresiones que devuelven un número entero  V significa 0≠  F significa = 0 A B ! A A && B A || B F F T F F F T T F T T F F F T T T F T T Curso 2009-10 22Tema 2 – Programación básica
  23. 23. PROG-I /27PROG-I Asignación  ¡Es un operador!  identificador_variable = expresión ó literal  dias = edad * 365;  a = b = 5;  expr1 op= expr2  expr1 = (expr1) op (expr2)  op puede ser + - * / % << >> & ^ |  i += 2; es eq. i = i + 2;  x *= y + 1; es eq. x = x * (y+1); Curso 2009-10 23Tema 2 – Programación básica
  24. 24. PROG-I /27PROG-I Incremento y decremento  Unarios: ++ y --  ++n, --n, n++, n--  (++n) Preincremento: se incrementa la variable, y se emplea como resultado el nuevo valor.  (n++) Postincremento: se emplea como resultado el valor actual de la variable, y se incrementa.  Efecto lateral: se modifica la variable!  Ej:  x = ++n ; /* si n = 10 ¿x y n? */  x = n++; /* si n = 10 ¿x y n? */  n++; /* es válido e idéntico a ++n */ Curso 2009-10 24Tema 2 – Programación básica
  25. 25. PROG-I /27PROG-I Operadores a nivel de bit.  Operan sobre la representación binaria de la variable  & AND  | OR  ^ OR exclusivo (XOR)  << desplazamiento izquierda  >> desplazamiento derecha  ~ complemento a uno (NOT)n = n & 0177; /* int n = 23, ¿n? */ x = x | SET_ON; /* long x = 4350, SET_ON 1, ¿x? */ x = x & ~077; /* short x = 76, ¿x? */ x=1 y y = 2, /* ¿x & y es distinto de x && y? */ x << 2; /* char x = 125, ¿x? */ 1001 & 0111 = 0001 1001 | 0111 = 1111 1001 ^ 0111 = 1110 1001 << 2 = 0100 1001 >> 2 = 0010 ~1001 = 0110 Curso 2009-10 25Tema 2 – Programación básica
  26. 26.  ¿Qué operadores se evalúan primero?  x = 4 + (5 * 3); /* ¿x? */  x = (4 + 5) * 3; /* ¿x? */  x = 4 + 5 * 3; /* ¿x? */  Paréntesis implícitos:  i < lim-1  i < (lim-1)  (i < lim)-1  Otro ejemplo:  x && y == 0  (x && y) ==0)  x && (y ==0)  Asociación:  Izq. a derch.  x * y * 2; => (x * y) * 2;  Derch. a izq.  x = y = 2; => x = (y = 2); Operador Asoc. () [] -> . izq a dch ! ~ ++ -- + - * (tipo) sizeof dch a izq * / % izq a dch + - izq a dch << >> izq a dch < <= > >= izq a dch == != izq a dch & izq a dch Precedencia
  27. 27. PROG-I /27PROG-I Conversión de tipos  Conversión de tipos en expresiones.  Implícita. Se convierte de un tipo más restrictivo a otro menos restrictivo sin problemas. Al revés supone perdida de representación.  Explícita. Haciendo un casting (cambio de tipo temporal):  (tipo) expresión  int a; float x = 24.6; a = (int) x;  int a = 34, b = 25; float x; x = a / b; /* ¿x? */ x = (float) a / b; /* ¿x? */ x = a / (float) b; /* ¿x? */ x = (float) a / (float) b; /* ¿x? */ Curso 2009-10 27Tema 2 – Programación básica

×