SlideShare una empresa de Scribd logo
http://www.eps.uam.es/~phaya
PROG-I
2009-10
PROGRAMACIÓN
BÁSICA EN C
Semana 3 – Temas 2.4 y 2.5
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
Salida de datos con formato
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
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
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
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
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;
}
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
#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
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
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;
}
Entrada de datos
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
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
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
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
Operadores
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
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
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
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
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
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
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
 ¿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
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

Más contenido relacionado

La actualidad más candente

Problemas+resueltos+de+c$2 b$2b
Problemas+resueltos+de+c$2 b$2bProblemas+resueltos+de+c$2 b$2b
Problemas+resueltos+de+c$2 b$2b
FRESH221 C.R
 
Ejemplos Para Dev C++
Ejemplos Para Dev C++Ejemplos Para Dev C++
Ejemplos Para Dev C++
cemayoral
 
Algoritmos - Funciones C++
Algoritmos - Funciones C++ Algoritmos - Funciones C++
Algoritmos - Funciones C++
Ronal Palomino
 
Ejemplos c
Ejemplos cEjemplos c
Ejemplos c
Carlos
 
Trampas en c ++
Trampas en c ++Trampas en c ++
Trampas en c ++
DTQ4
 

La actualidad más candente (20)

Programación 1: funciones en C
Programación 1: funciones en CProgramación 1: funciones en C
Programación 1: funciones en C
 
Programación 1: introducción a C
Programación 1: introducción a CProgramación 1: introducción a C
Programación 1: introducción a C
 
Introduccion Lenguaje C Blanca
Introduccion Lenguaje  C BlancaIntroduccion Lenguaje  C Blanca
Introduccion Lenguaje C Blanca
 
Lenguaje de programación
Lenguaje de programaciónLenguaje de programación
Lenguaje de programación
 
Programación en C++
Programación en C++Programación en C++
Programación en C++
 
Problemas+resueltos+de+c$2 b$2b
Problemas+resueltos+de+c$2 b$2bProblemas+resueltos+de+c$2 b$2b
Problemas+resueltos+de+c$2 b$2b
 
Ejemplos Para Dev C++
Ejemplos Para Dev C++Ejemplos Para Dev C++
Ejemplos Para Dev C++
 
Programación 1: arreglos en C
Programación 1: arreglos en CProgramación 1: arreglos en C
Programación 1: arreglos en C
 
Revista digital
Revista digitalRevista digital
Revista digital
 
Programación 1: tipos básicos de datos en C
Programación 1: tipos básicos de datos en CProgramación 1: tipos básicos de datos en C
Programación 1: tipos básicos de datos en C
 
Presnetación Go
Presnetación GoPresnetación Go
Presnetación Go
 
Apun c
Apun cApun c
Apun c
 
Lenguaje C
Lenguaje CLenguaje C
Lenguaje C
 
Ejercicios C
Ejercicios CEjercicios C
Ejercicios C
 
Algoritmos - Funciones C++
Algoritmos - Funciones C++ Algoritmos - Funciones C++
Algoritmos - Funciones C++
 
Ejemplos c
Ejemplos cEjemplos c
Ejemplos c
 
Trabajo de ejercicios de lenguaje c
Trabajo de ejercicios de lenguaje cTrabajo de ejercicios de lenguaje c
Trabajo de ejercicios de lenguaje c
 
Fundamentos de Computación y Programación
Fundamentos de Computación y ProgramaciónFundamentos de Computación y Programación
Fundamentos de Computación y Programación
 
Trampas en c ++
Trampas en c ++Trampas en c ++
Trampas en c ++
 
Ejercicios de programación.
Ejercicios de programación.Ejercicios de programación.
Ejercicios de programación.
 

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

Microcontroladores: Programación de microcontroladores tomo 1
Microcontroladores: Programación de microcontroladores tomo 1Microcontroladores: Programación de microcontroladores tomo 1
Microcontroladores: Programación de microcontroladores tomo 1
 
Ejemplos c
Ejemplos cEjemplos c
Ejemplos c
 
Lenguaje c
Lenguaje c Lenguaje c
Lenguaje c
 
Introduccion a C++.pdf
Introduccion a C++.pdfIntroduccion a C++.pdf
Introduccion a C++.pdf
 
Curso c ii
Curso c iiCurso c ii
Curso c ii
 
Primera clase
Primera clasePrimera clase
Primera clase
 
Computacion punteros
Computacion punterosComputacion punteros
Computacion punteros
 
Instituto tecnológico particular
Instituto tecnológico particularInstituto tecnológico particular
Instituto tecnológico particular
 
Escuela
EscuelaEscuela
Escuela
 
Escuela
EscuelaEscuela
Escuela
 
C++.pdf
C++.pdfC++.pdf
C++.pdf
 
El lenguaje c
El lenguaje cEl lenguaje c
El lenguaje c
 
5. PROGRAMACION ESTRUCTURADA C++.pptx
5. PROGRAMACION ESTRUCTURADA C++.pptx5. PROGRAMACION ESTRUCTURADA C++.pptx
5. PROGRAMACION ESTRUCTURADA C++.pptx
 
Lenguajec diapositivas
Lenguajec diapositivasLenguajec diapositivas
Lenguajec diapositivas
 
Tercera unidad
Tercera unidadTercera unidad
Tercera unidad
 
Tercera unidad
Tercera unidadTercera unidad
Tercera unidad
 
Tercera unidad
Tercera unidadTercera unidad
Tercera unidad
 
Tercera unidad
Tercera unidadTercera unidad
Tercera unidad
 
Apuntes1 elementos del lenguaje c
Apuntes1 elementos del lenguaje cApuntes1 elementos del lenguaje c
Apuntes1 elementos del lenguaje c
 
Estructura de un programa
Estructura de un programaEstructura de un programa
Estructura de un programa
 

Más de Pablo Haya (7)

2017 12-15-iv jornadas innovación psicología
2017 12-15-iv jornadas innovación psicología2017 12-15-iv jornadas innovación psicología
2017 12-15-iv jornadas innovación psicología
 
Introducción a la interacción en mesas multicontacto
Introducción a la interacción en mesas multicontactoIntroducción a la interacción en mesas multicontacto
Introducción a la interacción en mesas multicontacto
 
Interaccion natural
Interaccion naturalInteraccion natural
Interaccion natural
 
Experimentación en Interacción Persona-Ordenador
Experimentación en Interacción Persona-OrdenadorExperimentación en Interacción Persona-Ordenador
Experimentación en Interacción Persona-Ordenador
 
Diseño de la interacción
Diseño de la interacciónDiseño de la interacción
Diseño de la interacción
 
Tema 3 - Técnicas básicas de diseño de algoritmos
Tema 3 - Técnicas básicas de diseño de algoritmosTema 3 - Técnicas básicas de diseño de algoritmos
Tema 3 - Técnicas básicas de diseño de algoritmos
 
Tema 1 - Introducción
Tema 1  - IntroducciónTema 1  - Introducción
Tema 1 - Introducción
 

Último

Presentación de medicina Enfermedades Fotográfico Moderno Morado (1).pdf
Presentación de medicina Enfermedades Fotográfico Moderno Morado (1).pdfPresentación de medicina Enfermedades Fotográfico Moderno Morado (1).pdf
Presentación de medicina Enfermedades Fotográfico Moderno Morado (1).pdf
juancmendez1405
 

Último (20)

Diagnostico del corregimiento de Junin del municipio de Barbacoas
Diagnostico del corregimiento de Junin del municipio de BarbacoasDiagnostico del corregimiento de Junin del municipio de Barbacoas
Diagnostico del corregimiento de Junin del municipio de Barbacoas
 
32 LECTURAS CORTAS PARA NIÑOS.pdf · versión 1.pdf
32 LECTURAS CORTAS PARA NIÑOS.pdf · versión 1.pdf32 LECTURAS CORTAS PARA NIÑOS.pdf · versión 1.pdf
32 LECTURAS CORTAS PARA NIÑOS.pdf · versión 1.pdf
 
Tema 8 Estructura y composición de la Tierra 2024
Tema 8 Estructura y composición de la Tierra 2024Tema 8 Estructura y composición de la Tierra 2024
Tema 8 Estructura y composición de la Tierra 2024
 
Descripción anatómica de los músculos de la cabeza de equino y bovino (6).pdf
Descripción anatómica de los músculos de la cabeza de equino y bovino (6).pdfDescripción anatómica de los músculos de la cabeza de equino y bovino (6).pdf
Descripción anatómica de los músculos de la cabeza de equino y bovino (6).pdf
 
BIENESTAR TOTAL - LA EXPERIENCIA DEL CLIENTE CON ATR
BIENESTAR TOTAL - LA EXPERIENCIA DEL CLIENTE CON ATRBIENESTAR TOTAL - LA EXPERIENCIA DEL CLIENTE CON ATR
BIENESTAR TOTAL - LA EXPERIENCIA DEL CLIENTE CON ATR
 
Presentación de medicina Enfermedades Fotográfico Moderno Morado (1).pdf
Presentación de medicina Enfermedades Fotográfico Moderno Morado (1).pdfPresentación de medicina Enfermedades Fotográfico Moderno Morado (1).pdf
Presentación de medicina Enfermedades Fotográfico Moderno Morado (1).pdf
 
📝 Semana 09 - Tema 01: Tarea - Aplicación del resumen como estrategia de fuen...
📝 Semana 09 - Tema 01: Tarea - Aplicación del resumen como estrategia de fuen...📝 Semana 09 - Tema 01: Tarea - Aplicación del resumen como estrategia de fuen...
📝 Semana 09 - Tema 01: Tarea - Aplicación del resumen como estrategia de fuen...
 
Proceso de admisiones en escuelas infantiles de Pamplona
Proceso de admisiones en escuelas infantiles de PamplonaProceso de admisiones en escuelas infantiles de Pamplona
Proceso de admisiones en escuelas infantiles de Pamplona
 
Vínculo afectivo (labor expositivo de grupo )
Vínculo afectivo (labor expositivo de grupo )Vínculo afectivo (labor expositivo de grupo )
Vínculo afectivo (labor expositivo de grupo )
 
Evaluación de los Factores Internos de la Organización
Evaluación de los Factores Internos de la OrganizaciónEvaluación de los Factores Internos de la Organización
Evaluación de los Factores Internos de la Organización
 
TRABAJO CON TRES O MAS FRACCIONES PARA NIÑOS
TRABAJO CON TRES O MAS FRACCIONES PARA NIÑOSTRABAJO CON TRES O MAS FRACCIONES PARA NIÑOS
TRABAJO CON TRES O MAS FRACCIONES PARA NIÑOS
 
Lec. 08 Esc. Sab. Luz desde el santuario
Lec. 08 Esc. Sab. Luz desde el santuarioLec. 08 Esc. Sab. Luz desde el santuario
Lec. 08 Esc. Sab. Luz desde el santuario
 
Análisis de la situación actual .La Matriz de Perfil Competitivo (MPC)
Análisis de la situación actual .La Matriz de Perfil Competitivo (MPC)Análisis de la situación actual .La Matriz de Perfil Competitivo (MPC)
Análisis de la situación actual .La Matriz de Perfil Competitivo (MPC)
 
Proyecto integrador Vereda Cujacal Centro.pptx
Proyecto integrador Vereda Cujacal Centro.pptxProyecto integrador Vereda Cujacal Centro.pptx
Proyecto integrador Vereda Cujacal Centro.pptx
 
Proceso de gestión de obras - Aquí tu Remodelación
Proceso de gestión de obras - Aquí tu RemodelaciónProceso de gestión de obras - Aquí tu Remodelación
Proceso de gestión de obras - Aquí tu Remodelación
 
Creación WEB. Ideas clave para crear un sitio web
Creación WEB. Ideas clave para crear un sitio webCreación WEB. Ideas clave para crear un sitio web
Creación WEB. Ideas clave para crear un sitio web
 
LA ILIADA Y LA ODISEA.LITERATURA UNIVERSAL
LA ILIADA Y LA ODISEA.LITERATURA UNIVERSALLA ILIADA Y LA ODISEA.LITERATURA UNIVERSAL
LA ILIADA Y LA ODISEA.LITERATURA UNIVERSAL
 
Presentación Propuesta de Proyecto Social Colorido y Juvenil Multicolor y Neg...
Presentación Propuesta de Proyecto Social Colorido y Juvenil Multicolor y Neg...Presentación Propuesta de Proyecto Social Colorido y Juvenil Multicolor y Neg...
Presentación Propuesta de Proyecto Social Colorido y Juvenil Multicolor y Neg...
 
Presentación Pedagoía medieval para exposición en clases
Presentación Pedagoía medieval para exposición en clasesPresentación Pedagoía medieval para exposición en clases
Presentación Pedagoía medieval para exposición en clases
 
6.Deícticos Dos_Enfermería_EspanolAcademico
6.Deícticos Dos_Enfermería_EspanolAcademico6.Deícticos Dos_Enfermería_EspanolAcademico
6.Deícticos Dos_Enfermería_EspanolAcademico
 

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

  • 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. Salida de datos con formato
  • 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. 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. 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. 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. 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. 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. #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. 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. 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; }
  • 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. 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. 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. 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
  • 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. 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. 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. 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. 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. 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. 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.  ¿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. 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

Notas del editor

  1. ¡¡¡¡ Evaluación en cortocircuito !!!!!