SlideShare una empresa de Scribd logo
http://www.eps.uam.es/~phaya
PROG-I
2009-10
PROGRAMACIÓN
BÁSICA EN C
Semana 2 – Temas 2.1, 2.2 y 2.3
{From The C programming Language
By Brian W. Kernighan and Dennis M. Ritchie. }
main() {
printf("hello, worldn");
}
PROG-I /61PROG-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
PROG-I /61PROG-I
Problema
 Dado la edad en años de una persona, calcular aproximadamente el
número de días que lleva viviendo.
 Algoritmo:
Curso 2009-10 3Tema 2 – Programación básica en C
Entradas: edad: número entero
Salida: dias: número entero
1. edad ← 34
2. dias ← edad * 365
3. imprime dias
/* Mi segundo programa
Dado los años que tiene una persona,
calcula aproximadamente la edad en dias */
#include <stdio.h>
int main(void)
{
int edad, dias;
edad = 34;
dias = edad *365;
printf("llevas viviendo unos:");
printf("%d diasn", dias);
return 0;
}
PROG-I /61PROG-I
/* Mi segundo programa
Dado los años de una persona,
calcula aprox la edad en dias */
#include <stdio.h>
int main(void)
{
int edad, dias;
edad = 34;
dias = edad *365;
printf("llevas viviendo unos:");
Mi segundo programa
Curso 2009-10 4Tema 2 – Programación básica en C
Comentarios
aniosadias.c
PROG-I /61PROG-I
/* Mi segundo programa
Dado los años de una persona,
calcula aprox la edad en dias */
#include <stdio.h>
int main(void)
{
int edad, dias;
edad = 34;
dias = edad *365;
printf("llevas viviendo unos:");
Mi segundo programa
Curso 2009-10 5Tema 2 – Programación básica en C
Prepocesador
aniosadias.c
Comentarios
PROG-I /61PROG-I
/* Mi segundo programa
Dado los años de una persona,
calcula aprox la edad en dias */
#include <stdio.h>
int main(void)
{
int edad, dias;
edad = 34;
dias = edad *365;
printf("llevas viviendo unos:");
Mi segundo programa
Curso 2009-10 6Tema 2 – Programación básica en C
Función
principal
aniosadias.c
Prepocesador
Comentarios
PROG-I /61PROG-I
/* Mi segundo programa
Dado los años de una persona,
calcula aprox la edad en dias */
#include <stdio.h>
int main(void)
{
int edad, dias;
edad = 34;
dias = edad *365;
printf("llevas viviendo unos:");
Mi segundo programa
Curso 2009-10 7Tema 2 – Programación básica en C
Prepocesador
Función
principal
Declaración
Variables
aniosadias.c
Comentarios
PROG-I /61PROG-I
/* Mi segundo programa
Dado los años de una persona,
calcula aprox la edad en dias */
#include <stdio.h>
int main(void)
{
int edad, dias;
edad = 34;
dias = edad *365;
printf("llevas viviendo unos:");
Mi segundo programa
Curso 2009-10 8Tema 2 – Programación básica en C
Prepocesador
Función
principal
Declaración
Variables
aniosadias.c
Sentencias
Comentarios
PROG-I /61PROG-I
/* Mi segundo programa
Dado los años de una persona,
calcula aprox la edad en dias */
#include <stdio.h>
int main(void)
{
int edad, dias;
edad = 34;
dias = edad *365;
printf("llevas viviendo unos:");
Mi segundo programa
Curso 2009-10 9Tema 2 – Programación básica en C
aniosadias.c
Entradas: edad: número entero
Salida: dias: número entero
1. edad ← 34
2. dias ← edad * 365
3. imprime dias
PROG-I /61PROG-I
Compilación, enlazado y ejecución
phaya@robinson:~/docencia/prog1-0910/c/tema2$ cc aniosadias.c
phaya@robinson:~/docencia/prog1-0910/c/tema2$ ./a.out
llevas viviendo unos:12410 dias
Curso 2009-10 10Tema 2 – Programación básica en C
phaya@robinson:~/docencia/prog1-0910/c/tema2$ cc aniosadias.c -o aniosadias
phaya@robinson:~/docencia/prog1-0910/c/tema2$ ./aniosadias
llevas viviendo unos:12410 dias
phaya@robinson:~/docencia/prog1-0910/c/tema2$ cc -Wall -ansi -pedantic
-o aniosdias aniosadias.c
phaya@robinson:~/docencia/prog1-0910/c/tema2$ ./aniosadias
llevas viviendo unos:12410 dias
 Sin opciones
 Indicando el nombre del ejecutable
 Activadas advertencias, comprobación código ANSI, nombre
del ejecutable
PROG-I /61PROG-I
/* Mi segundo programa
Dado los años de una persona,
calcula aprox la edad en dias */
#include <stdio.h>
int main(void)
{
int edad, dias;
edad = 34;
dias = edad *365;
printf("llevas viviendo unos:");
Declaración de Variables
Curso 2009-10 11Tema 2 – Programación básica en C
aniosadias.c
 Permite almacenar datos del
programa. El valor de la variable
puede cambiar a lo largo del
programa.
 Cada variables se define con un
nombre (identificador) y almacena un
valor de un tipo de datos determinado
(ej, un número entero, un número real,
un cadena de caracteres…).
 No se puede cambiar el tipo de una
variable.
 El compilador reserva memoria para
almacenar el valor, y comprueba que
los valores que se vayan a guardan
coincidan con el tipo de la misma.
 La variables que se vayan a emplear
deben ser previamente declaradas.
PROG-I /61PROG-I
1. /* Mi segundo programa
2. Dado los años de una persona,
3. calcula aprox la edad en dias
*/
4. #include <stdio.h>
5.
6. int main(void)
7. {
8. int edad, dias;
9.
10. edad = 34;
11. dias = edad *365;
12. printf("llevas viviendo
Simulación de ejecución
Curso 2009-10 12Tema 2 – Programación básica en C
aniosadias.c
ee
aniosadias
edadedad
main
diasdias
?? ??
8. int edad,
dias;
PROG-I /61PROG-I
1. /* Mi segundo programa
2. Dado los años de una persona,
3. calcula aprox la edad en dias
*/
4. #include <stdio.h>
5.
6. int main(void)
7. {
8. int edad, dias;
9.
10. edad = 34;
11. dias = edad *365;
12. printf("llevas viviendo
Simulación de ejecución
Curso 2009-10 13Tema 2 – Programación básica en C
aniosadias.c
ee
aniosadias
edadedad
main
diasdias
3434 ??
10. edad = 34;
PROG-I /61PROG-I
1. /* Mi segundo programa
2. Dado los años de una persona,
3. calcula aprox la edad en dias
*/
4. #include <stdio.h>
5.
6. int main(void)
7. {
8. int edad, dias;
9.
10. edad = 34;
11. dias = edad *365;
12. printf("llevas viviendo
Simulación de ejecución
Curso 2009-10 14Tema 2 – Programación básica en C
aniosadias.c
ee
aniosadias
edadedad
main
diasdias
3434 1241012410
11. dias = edad
*365;
PROG-I /61PROG-I
1. /* Mi segundo programa
2. Dado los años de una persona,
3. calcula aprox la edad en dias
*/
4. #include <stdio.h>
5.
6. int main(void)
7. {
8. int edad, dias;
9.
10. edad = 34;
11. dias = edad *365;
12. printf("llevas viviendo
Simulación de ejecución
Curso 2009-10 15Tema 2 – Programación básica en C
aniosadias.c
ee
aniosadias
edadedad
main
diasdias
3434 1241012410
12. printf("llevas viviendo
unos:");
PROG-I /61PROG-I
1. /* Mi segundo programa
2. Dado los años de una persona,
3. calcula aprox la edad en dias
*/
4. #include <stdio.h>
5.
6. int main(void)
7. {
8. int edad, dias;
9.
10. edad = 34;
11. dias = edad *365;
12. printf("llevas viviendo
Simulación de ejecución
Curso 2009-10 16Tema 2 – Programación básica en C
aniosadias.c
ee
aniosadias
edadedad
main
diasdias
3434 1241012410
13. printf("%d diasn",
dias);
PROG-I /61PROG-I
1. /* Mi segundo programa
2. Dado los años de una persona,
3. calcula aprox la edad en dias
*/
4. #include <stdio.h>
5.
6. int main(void)
7. {
8. int edad, dias;
9.
10. edad = 34;
11. dias = edad *365;
12. printf("llevas viviendo
Simulación de ejecución
Curso 2009-10 17Tema 2 – Programación básica en C
aniosadias.c
ee
aniosadias
edadedad
main
diasdias
3434 1241012410
14. return 0;
PROG-I /61PROG-I
Identificadores
 Identificador: Un identificador es un nombre simbólico definido por el
programador para denominar diferentes elementos del lenguaje (ej. una
variable o una función.)
identificador: ( carácter | '_' ) { carácter | '_' | dígito}
carácter: ‘a’..’z’| ‘A’..’Z’
dígito: ‘0’|‘1’| ‘2’| ‘3’| ‘4’| ‘5’| ‘6’| ‘7’| ‘8’| ‘9’
Observaciones
 Sólo se pueden utilizar caracteres del alfabeto anglosajón. ¡No valen ñ ó
acentos!
 Es sensible a mayúsculas y minúsculas:
 Case-sensitive: los identificadores distinguen mayúsculas de
minúsculas (ej, C, java)
 Case-insensitive: no distinguen (ej. Pascal)
 Un identificador no puede ser una palabra reservada, aunque sea válido
sintácticamente.
 Palabras reservadas (keywords): double, register, signed, if…
 ABC, sección 2.4 Keywords, pag. 77
Curso 2009-10 18Tema 2 – Programación básica en C
PROG-I /61
Ejemplo identificadores
 Correcto
 Odisea2001
 Holamundo
 anio
 primos_2
 hola_mundo
 Incorrecto
 2001odisea
 2_primos
 hola mundo
 hola-mundo
 año
 $valor
 valor$
 pablo!
 p.a.b.l.o
 continue
 Identificadores distintos
 PrecioProducto ≠ Precioproducto ≠ precioproducto ≠ PRECIOproducto ≠
productoPRECIO …
No puede
empezar
por un dígito
‘-’ no válido
espacio no
válido
‘!’ no válido
‘$’ no válido
‘ñ’ no válido
‘.’ no válido
palabra reservada
Curso 2009-10 19Tema 2 – Programación básica en C
PROG-I /61PROG-I
Declaración de variables
 Se especifica el tipo y el nombre de la variable.
 Se puede declarar e inicializar una variable a la
par.
 Se pueden declarar nuevas variables dentro de
un bloque, al principio del mismo. El ámbito de la
variables se restringe a las dos llaves.
 Sintaxis variada.
Curso 2009-10 20Tema 2 – Programación básica en C
int main(void)
{
int edad;
int dias;
...
int main(void)
{
int edad = 32,
dias;
...
int main(void)
{
int edad=32;
int dias;
...
int main(void)
{
int edad, dias ;
...
int main(void)
{
int
edad,dias;
...
int main(void)
{
int edad,
dias;
...
int main(void)
{
int edad dias;
...
PROG-I /61PROG-I
Tipos de datos
 Tipos de datos básicos
 char: un único byte que puede almacenar un carácter siguiendo la
codificación interna local.
 int: un número entero.
 float: número real en coma flotante como precisión simple
 double: número real en coma flotante como precisión doble simple
 Modificadores de signo (cambian la interpretación)
 unsigned
 signed
 Modificadores de cantidad (cambia el tamaño en memoria)
 short
 long
Curso 2009-10 21Tema 2 – Programación básica en C
PROG-I /61PROG-I
Tipos int
 Permiten representar magnitudes numéricas enteras.
 La capacidad de representación siempre será limitada y finita.
 Se aplican los modificadores unsigned, signed, short y long
Curso 2009-10 22Tema 2 – Programación básica en C
int main(void)
{
int a;
signed int b;
unsigned int c;
short int d;
signed short int e;
unsigned short int f;
long int g;
signed long int h;
unsigned long int i;
...
int main(void)
{
int a;
unsigned c;
short d;
unsigned short f;
long g;
unsigned long i;
...
PROG-I /61PROG-I
Rango de representación
TIPO Nº BYTES RANGO
short 2 -32768..32767
unsigned short 2 0..65535
int 4 -2.147.483.648..2.147.483.647
unsigned int 4 0..4.294.967.295
long 4 -2147483648..2147483647
unsigned long 4 0..4.294.967.295
long long 8 -9.223.372.036.854.775.808..
9.223.372.036.854.775.807
unsigned long
long
8 0..18.446.744.073.709.551.615
 Cada compilador es libre de elegir el tamaño adecuado a la hardware asociado, sujeto a
las siguientes restricciones: short e ints al menos 2 bytes, longs al menos 32, y short no
puede ser mayor que int, el cual no puede superar a long. Máximos y mínimos en
<limits.h> y <float.h>
 sizeof: ABC, sección 3.8, pag. 122
 Desbordamiento: véase ejercicio 6 y ABC ejercicio 6, pag. 140Curso 2009-10 23Tema 2 – Programación básica en C
PROG-I /61PROG-I
Tipo Char
 Almacena un byte.
 Tabla ASCII (man ascii)
 No imprimibles: 0..31 y el 127
 Imprimibles
 Un carácter en C se representa entrecomillado
(comilla simple)
 Los caracteres especiales se representan:
 Usando el número correspondiente de la tabla ASCII
 Caracteres especiales: 'n', 'r', 't'…
 Véase ABC, sección 3.3, pag. 113
 Modificadores
 char
 signed char: -128..127
 unsigned char: 0..255
 Véase ABC, ejercicio 10, pag. 141
#include <stdio.h>
int main(void)
{
char inicial = 'M';
char primeraLetra = 'A';
char ultimoLetra = 'z';
char c1 = '7';
char c2 = 7;
char c3 = 'n';
printf("%c %dn", c1, c1);
printf("%c %dn", c2, c2);
printf("%c %dn", c3, c3);
c1 = c1 + 1;
printf("%c %dn", c1, c1);
return 0;
}
Curso 2009-10 24Tema 2 – Programación básica en C
PROG-I /61PROG-I
Tipo reales
 Permiten representar magnitudes
reales.
 float, double, long double
 Tamaños depende del
compilador
 <limits.h> y<float.h>
 Notación decimal y con
exponente
 Imp:
 No se pueden representar todos
los número reales
 Las operaciones pueden no ser
exactas
 Precisión y rango
#include <stdio.h>
int main(void)
{
float x = 12.0;
float y = 0.125e5; /* 0.125 * 105
*/
float z = 87.35E+10;
double dx = +0.3;
double dy = -0.1;
double dz = 5e-3;
...
}
Curso 2009-10 25Tema 2 – Programación básica en C
TIPO Nº
BYTES
DIGITOS
REPRESENTA
BLES
RANGO
float 4 6 1.17549*10-38
.. 3.40282*10-38
double 8 15 2.22507*10-308
..1.79769*10308
PROG-I /61PROG-I
Constantes
Curso 2009-10 26Tema 2 – Programación básica en C
#include <stdio.h>
#define DIAS_ANIO 365
int main(void)
{
int edad, dias;
edad = 34;
dias = edad *DIAS_ANIO;
printf("llevas viviendo unos:");
printf("%d diasn", dias);
return 0;
}
 Valor constante: El valor se mantiene
inalterable durante la ejecución del
programa
 const tipo variable
 const double NA =
6.02214179E23
 Empleando preprocesador
 macro #define
#define INTERES 4.35
#define NA 6.02214179E23
/*Numero de Avogrado*/
#define PI 3.14159265
#define DIST_TIERRA_LUNA 384400
#define RADIO_LUNA 3474.8
#define MASA_LUNA 7.349E22
#define INICIAL_NOMBRE 'P'
#define MENSAJE "Cuidado"
#define VOLUMEN_LUNA 4*PI*RADIO_LUNA*RADIO_LUNA*RADIO_LUNA/3
PROG-I /61PROG-I
Cadena de caracteres
 char nombre[longitud_maxima] = "cadena de caracteres";
 No se pueden asignar una constante
 msg1 = "No voy"; /* NO funciona */
 Acceder a caracteres individuales
 printf("%c", msg1[2]);
#include <stdio.h>
int main(void)
{
char msg1[20] = "Voy ";
char msg2[] = "a realizar ";
const char msg3[] = "los ejercicios de PROG I";
printf("%s%s%sn", msg1, msg2, msg3);
printf("Voy a realizar los ejercicios de PROG In");
return 0;
}
Curso 2009-10 27Tema 2 – Programación básica en C
PROG-I /61PROG-I
Errores sintácticos
 Programa con errores
Curso 2009-10 28Tema 2 – Programación básica en C
1. #include <stdio.h>
2. int main(void)
3. {
4. int edad, dias
5.
6. edad = 34;
7. dia = edad *365;
8. printf("llevas viviendo unos:");
9. printf(%d diasn", dias);
10. return 0;
11. }
PROG-I /61PROG-I
Errores sintácticos
phaya@robinson:~/docencia/prog1-0910/c/tema2$ cc –Wall –ansi –pedantic
errores.c
errores.c: In function 'main':
errores.c:7: error: syntax error before 'edad'
errores.c:8: error: 'dia' undeclared (first use in this function)
errores.c:8: error: (Each undeclared identifier is reported only once
errores.c:8: error: for each function it appears in.)
errores.c:10: error: syntax error before '%' token
errores.c:10: error: stray '' in program
errores.c:10: error: missing terminating " character
errores.c:7: warning: unused variable 'dias'
errores.c:12: warning: control reaches end of non-void function
Curso 2009-10 29Tema 2 – Programación básica en C
PROG-I /61PROG-I
Errores en tiempo de ejecución
#include <stdio.h>
int main(void)
{
int x = 1, y = 0, z;
z = x / y;
printf("%dn", z);
return 0;
}
Curso 2009-10 30Tema 2 – Programación básica en C
PROG-I /61PROG-I
Errores semánticos
#include <stdio.h>
int main(void)
{
short edad, dias, horas, minutos, segundos;
edad = 34;
dias= edad*365;
horas= dias*24;
minutos= horas*60;
segundos= minutos*60;
printf("llevas viviendo unos:%d seg.", segundos);
return 0;
}
Curso 2009-10 31Tema 2 – Programación básica en C
PROG-I /61PROG-I
Tipo definidos: enumerado
 anónimos: otra forma de definir constante
 enum {valores}
 nombre: un nuevo tipo de dato
 enum nombre {valores}
enum {CASADA, SEPARADA, DIVORCIADA, VIUDA, SOLTERA};
enum palo {OROS, COPAS, ESPADAS, BASTOS};
enum boolean {FALSE, TRUE};
enum months {JAN = 1, FEB, MAR, APR, MAY, JUN,
JUL, AUG, SEP, OCT, NOV, DEC };
enum escapes {BELL = 'a', BACKSPACE = 'b', TAB = 't',
NEWLINE = 'n', VTAB = 'v', RETURN = 'r' };
int main(void) {
int estadocivil = SOLTERA;
enum months mes = SEP;
enum palo p = OROS; ...
Curso 2009-10 32Tema 2 – Programación básica en C
PROG-I /61PROG-I
Funciones
 Permiten organizar los programas de forma modular, tal
que cada función se pueda construir y depurar por
separado.
 Abstracción
 Modularización
 Reutilización
calVolCilindrocalVolCilindro
calAreaCircul
o
calAreaCircul
o
calAreaConocalAreaCono
Curso 2009-10 33Tema 2 – Programación básica en C
PROG-I /61PROG-I
¿Qué es una función?
 Funciones: son bloques que procesan datos y devuelven un
resultado.
 Una función se define como:
 nombre: identificador de la función
 parámetros formales: lista de parámetros que precisa la función.
Cada parámetro tiene un tipo particular.
 tipo: del resultado devuelto por la función
float altura
float radio
float
20.5
10
6440.26
Parámetros
formales
tipo devuelto
calculaVolCilindro
nombre
definición
calculaVolCilindro(20.5, 10)
invocación
Curso 2009-10 34Tema 2 – Programación básica en C
PROG-I /61PROG-I
Funciones
 Partes de una función
 Prototipo, cabecera ó interfaz
 float calculaVolCilindro(float altura, float radio);
 tipo nombre(lista parametros);
 Implementación
 Sección de declaraciones
 Cuerpo de la función
 Ej:
 double sqrt (double x);
 ¡No es necesario conocer la implementación de la función para
poder emplear!
 Todos los lenguajes de programación proveen de un
conjunto de funciones/procedimientos predefinidos
 Librería estándar de C (ABC, Apéndice A, pag. 641)
Curso 2009-10 35Tema 2 – Programación básica en C
PROG-I /61PROG-I
Invocación
 Parámetros actuales: valores concretos que toman los
parámetros formales en cada invocación
 Deben coincidir en
 número
 orden
 tipo.
 Posibilidades:
 Literal
 Variable
 Expresión
 Otra función
 Ej:
 double pow(double x, double y);
1. #include <stdio.h>
2. #include <math.h>
3.
4. int main(void)
5. {
6. float res;
7.
8. res = pow(2,2);
9. printf("%.0fn",res);
10. res = pow(res, 2);
11. printf("%.0fn",res);
12. printf("%.0fn", pow(res*2,2));
13. printf("%.0fn",
pow(pow(res,2),2));
14. return 0;
15. }
Curso 2009-10 36Tema 2 – Programación básica en C
PROG-I /61PROG-I
1. #include <stdio.h>
2. #include <math.h>
3.
4. int main(void)
5. {
6. float res;
7.
8. res = pow(2,2);
9. printf("%.0fn",res);
10. res = pow(res, 2);
11. printf("%.0fn",res);
12. printf("%.0fn", pow(res*2,2));
13. printf("%.0fn", pow(pow(res,2),2));
14. return 0;
15. }
Simulación de ejecución
Curso 2009-10 37Tema 2 – Programación básica en C
ejpow.c
ee
ejpow.c
main
resres
??
6. float res;
PROG-I /61PROG-I
1. #include <stdio.h>
2. #include <math.h>
3.
4. int main(void)
5. {
6. float res;
7.
8. res = pow(2,2);
9. printf("%.0fn",res);
10. res = pow(res, 2);
11. printf("%.0fn",res);
12. printf("%.0fn", pow(res*2,2));
13. printf("%.0fn", pow(pow(res,2),2));
14. return 0;
15. }
Simulación de ejecución
Curso 2009-10 38Tema 2 – Programación básica en C
ejpow.c
ee
ejpow.c
main
resres
4.04.0
8. res = pow(2,2);
PROG-I /61PROG-I
1. #include <stdio.h>
2. #include <math.h>
3.
4. int main(void)
5. {
6. float res;
7.
8. res = pow(2,2);
9. printf("%.0fn",res);
10. res = pow(res, 2);
11. printf("%.0fn",res);
12. printf("%.0fn", pow(res*2,2));
13. printf("%.0fn", pow(pow(res,2),2));
14. return 0;
15. }
Simulación de ejecución
Curso 2009-10 39Tema 2 – Programación básica en C
ejpow.c
ee
ejpow.c
main
resres
4.04.0
9.
printf("%.0fn",res);
PROG-I /61PROG-I
1. #include <stdio.h>
2. #include <math.h>
3.
4. int main(void)
5. {
6. float res;
7.
8. res = pow(2,2);
9. printf("%.0fn",res);
10. res = pow(res, 2);
11. printf("%.0fn",res);
12. printf("%.0fn", pow(res*2,2));
13. printf("%.0fn", pow(pow(res,2),2));
14. return 0;
15. }
Simulación de ejecución
Curso 2009-10 40Tema 2 – Programación básica en C
ejpow.c
ee
ejpow.c
main
resres
16.016.0
10. res = pow(res, 2);
PROG-I /61PROG-I
1. #include <stdio.h>
2. #include <math.h>
3.
4. int main(void)
5. {
6. float res;
7.
8. res = pow(2,2);
9. printf("%.0fn",res);
10. res = pow(res, 2);
11. printf("%.0fn",res);
12. printf("%.0fn", pow(res*2,2));
13. printf("%.0fn", pow(pow(res,2),2));
14. return 0;
15. }
Simulación de ejecución
Curso 2009-10 41Tema 2 – Programación básica en C
ejpow.c
ee
ejpow.c
main
resres
16.016.0
11. printf("%.0fn",res);
PROG-I /61PROG-I
1. #include <stdio.h>
2. #include <math.h>
3.
4. int main(void)
5. {
6. float res;
7.
8. res = pow(2,2);
9. printf("%.0fn",res);
10. res = pow(res, 2);
11. printf("%.0fn",res);
12. printf("%.0fn", pow(res*2,2));
13. printf("%.0fn", pow(pow(res,2),2));
14. return 0;
15. }
Simulación de ejecución
Curso 2009-10 42Tema 2 – Programación básica en C
ejpow.c
ee
ejpow.c
main
resres
16.016.0
12. printf("%.0fn",
pow(res*2,2));
Salida:1024
PROG-I /61PROG-I
1. #include <stdio.h>
2. #include <math.h>
3.
4. int main(void)
5. {
6. float res;
7.
8. res = pow(2,2);
9. printf("%.0fn",res);
10. res = pow(res, 2);
11. printf("%.0fn",res);
12. printf("%.0fn", pow(res*2,2));
13. printf("%.0fn", pow(pow(res,2),2));
14. return 0;
15. }
Simulación de ejecución
Curso 2009-10 43Tema 2 – Programación básica en C
ejpow.c
ee
ejpow.c
main
resres
16.016.0
13. printf("%.0fn",
pow(pow(res,2),2));
Salida:65536
PROG-I /61PROG-I
Ejemplo declaración
#define PI 3.14159265
/* calculaVolCilindro – */
/* Esta función calculo el volumen de un cilindro */
/* en función de su altura y el radio de la base */
/* Entrada: */
/* altura: real, altura del cilindro */
/* radio: real, radio de la base */
*)
/*Salida: */
/* real que representa el área del cilindro */
float calculaVolCilindro (float altura, float radio);
#include "volumenes.h"
float calculaVolCilindro (float altura, float radio)
{
return altura * PI *radio *radio;
}
volumenes.h
volumenes.c
Curso 2009-10 44Tema 2 – Programación básica en C
PROG-I /61PROG-I
Ejemplo de uso
#include <stdio.h>
#include "volumenes.h"
int main(void)
{
float a, r;
scanf("%f %f", a, r);
printf("Area: %fn", calculaVolCilindro(a, r));
}
volumenes.c
Curso 2009-10 45Tema 2 – Programación básica en C
PROG-I /61PROG-I
Ejemplo de uso
#include <stdio.h>
#define PI 3.14159265
float calculaVolCilindro (float altura, float radio)
{
return altura * PI *sqr(radio);
}
int main(void)
{
float a, r;
scanf("%f %f", a, r);
printf("Area: %f", calculaVolCilindro(a, r));
}
No es obligatorio que coincidan
nombre de variable con
nombre de parámetros formales
Curso 2009-10 46Tema 2 – Programación básica en C
PROG-I /61
1 Prototipo – N implementaciones
int cubo(int d)
{
return d * d * d;
}
int cubo(int d);
{
return pow(d,3);
}
int cubo(int d)
{
int i, res;
res = 1;
for (i=1; i <=3; i++)
res *= d;
return res;
}
int cubo(int d);
{
int i, tmp, res;
tmp = 0;
for (i = 1; i<d; i++)
tmp += d;
res = 0;
for (i = 1; i<tmp; i++)
res += d;
return res;
}
Curso 2009-10 47Tema 2 – Programación básica en C
PROG-I /61
Paso de parámetros (por valor)
d
h
α
h =
sen( )α
cos( )α
d
en radianes!!α
1. #include <stdio.h>
2. #define PI 3.14159265
3.
4. double altura(double dist, double angulo)
5. {
6. double tg;
7. angulo = angulo*PI/180;
8. tg = sin(angulo)/cos(angulo);
9. return dist*tg;
10. }
11.
12. int main(void)
13. {
14. double a;
15. a = 30;
16. printf("%f",(altura(100,a));
17. return 0;
18. }
alturatri.c
Curso 2009-10 48Tema 2 – Programación básica en C
PROG-I /61
Paso de parámetros (por valor)
Curso 2009-10Tema 2 – Programación básica en C 49Curso 2009-10 49
ee
alturatri.c
main
aa
??
14. double a;
PROG-I /61
Paso de parámetros (por valor)
Curso 2009-10Tema 2 – Programación básica en C 50Curso 2009-10 50
ee
alturatri.c
main
aa
30.030.0
15. a = 30;
PROG-I /61
Paso de parámetros (por valor)
Curso 2009-10Tema 2 – Programación básica en C 51Curso 2009-10 51
ee
alturatri.c
main
aa
30.030.0
16. printf("%f",(altura(100,a));
PROG-I /61
Paso de parámetros (por valor)
Curso 2009-10Tema 2 – Programación básica en C 52Curso 2009-10 52
ee
alturatri.c
main
aa
30.030.0
16. printf("%f",(altura(100,a));
distdist
100.0100.0
anguloangulo
30.030.0
altura
copia del
valor
copia del
valor
copiadelvalorcopiadelvalor
PROG-I /61
Ejecución (Invocación de la función altura)
Curso 2009-10Tema 2 – Programación básica en C 53Curso 2009-10 53
ee
alturatri.c
main
aa
30.030.0
6. double tg;
distdist
100.0100.0
anguloangulo
30.030.0
altura
tgtg
??
PROG-I /61
Ejecución (Invocación de la función altura)
Curso 2009-10Tema 2 – Programación básica en C 54Curso 2009-10 54
ee
alturatri.c
main
aa
30.030.0
7. angulo = angulo*PI/180;
distdist
100.0100.0
anguloangulo
0.5235990.523599
altura
tgtg
??
PROG-I /61
Ejecución (Invocación de la función altura)
Curso 2009-10Tema 2 – Programación básica en C 55Curso 2009-10 55
ee
alturatri.c
main
aa
30.030.0
8. tg = sin(angulo)/cos(angulo);
distdist
100.0100.0
anguloangulo
0.5235990.523599
altura
tgtg
0.5773500.577350
PROG-I /61
Ejecución (Invocación de la función altura)
Curso 2009-10Tema 2 – Programación básica en C 56Curso 2009-10 56
ee
alturatri.c
main
aa
30.030.0
9. return dist*tg;
distdist
100.0100.0
anguloangulo
0.5235990.523599
altura
tgtg
0.5773500.577350
PROG-I /61
Ejecución (Invocación de la función altura)
Curso 2009-10Tema 2 – Programación básica en C 57Curso 2009-10 57
ee
alturatri.c
main
aa
30.030.0
16. printf("%f", 57.735027);
PROG-I /61PROG-I
Visibilidad de variables
 Variables globales vs. Variables locales
 La variables definidas dentro de una función no son visibles fuera
de esta.
#include <stdio.h>
#define PI 3.14159265
double area_circulo(double diametro)
{
double radio;
radio = diametro / 2;
return PI * radio * radio;
}
int main(void)
{
double d = 5;
printf("El area es %fn", area_circulo(d));
printf("El radio es %fn", radio);
return 0;
}
Curso 2009-10 58Tema 2 – Programación básica en C
PROG-I /61PROG-I
Visibilidad de variables (II)
 Variables globales son visibles desde que se declaran en adelante.
#include <stdio.h>
#define PI 3.14159265
double radio;
double area_circulo(double diametro)
{
radio = diametro / 2;
return PI * radio * radio;
}
int main(void)
{
double d = 5;
printf("El area es %fn", area_circulo(d));
printf("El radio es %fn", radio);
return 0;
}
 Se prohíbe modificar/utilizar una variable global desde una
función. Dentro de una función sólo se pueden modificar/utilizar
variables locales, o parámetros.
Curso 2009-10 59Tema 2 – Programación básica en C
PROG-I /61
Ejecución (Variables globales)
Curso 2009-10Tema 2 – Programación básica en C 60Curso 2009-10 60
ee
alturatri.c
main
dd
5.05.0
9. double d = 5;
radioradio
??
PROG-I /61PROG-I
Ejercicio de Ámbito
int main() { ... } /* no puede utilizar int a */
int a = 20; /* visible desde aquí en adelante */
void func1() { ... } /* Utiliza XXX a */
void func2(void){
float a; /* variable local a diferente a la anterior */
{
char a; /* de nuevo otra variable a diferente */
... /* Utiliza XXX a */
}
... /* reaparece XXX a */
}
/* reaparece XXX a */
void func3() { ... } /* Utiliza XXX a */
Curso 2009-10 61Tema 2 – Programación básica en C

Más contenido relacionado

La actualidad más candente

La actualidad más candente (19)

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
 
Programación en C++
Programación en C++Programación en C++
Programación en C++
 
Apun c
Apun cApun c
Apun c
 
Lenguaje de programación
Lenguaje de programaciónLenguaje de programación
Lenguaje de programación
 
Ejemplos Para Dev C++
Ejemplos Para Dev C++Ejemplos Para Dev C++
Ejemplos Para Dev 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
 
Programación 1: arreglos en C
Programación 1: arreglos en CProgramación 1: arreglos en C
Programación 1: arreglos en C
 
Algoritmos - Funciones C++
Algoritmos - Funciones C++ Algoritmos - Funciones C++
Algoritmos - Funciones C++
 
Presnetación Go
Presnetación GoPresnetación Go
Presnetación Go
 
Ejercicios C
Ejercicios CEjercicios C
Ejercicios C
 
Ejercicios propuestos
Ejercicios propuestosEjercicios propuestos
Ejercicios propuestos
 
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
 
Revista digital
Revista digitalRevista digital
Revista digital
 
Lenguaje C
Lenguaje CLenguaje C
Lenguaje C
 
Ejemplos c
Ejemplos cEjemplos c
Ejemplos c
 
Trampas en c ++
Trampas en c ++Trampas en c ++
Trampas en c ++
 
Lenguaje c neo
Lenguaje c neoLenguaje c neo
Lenguaje c neo
 

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

Modelo Cocomo
Modelo CocomoModelo Cocomo
Modelo Cocomo
 
Cur04 05 pract06c++
Cur04 05 pract06c++Cur04 05 pract06c++
Cur04 05 pract06c++
 
taller tegnologia.docx..pdf
taller tegnologia.docx..pdftaller tegnologia.docx..pdf
taller tegnologia.docx..pdf
 
C++
C++C++
C++
 
C++
C++C++
C++
 
Manual basico de C++
Manual basico  de C++Manual basico  de C++
Manual basico de C++
 
C++
C++C++
C++
 
C++
C++C++
C++
 
C++
C++C++
C++
 
Manual Básico de Programación en C++
Manual Básico de Programación en C++Manual Básico de Programación en C++
Manual Básico de Programación en C++
 
C++
C++C++
C++
 
C++
C++C++
C++
 
Manual cpp. c++..
Manual cpp. c++..Manual cpp. c++..
Manual cpp. c++..
 
Sesión4p.pdf
Sesión4p.pdfSesión4p.pdf
Sesión4p.pdf
 
2 2018 cip200_primer_parcial
2 2018 cip200_primer_parcial2 2018 cip200_primer_parcial
2 2018 cip200_primer_parcial
 
Parpadear un LED
Parpadear un LEDParpadear un LED
Parpadear un LED
 
EP Unidad03: Planificación financiera y análisis de riesgos
EP Unidad03: Planificación financiera y análisis de riesgosEP Unidad03: Planificación financiera y análisis de riesgos
EP Unidad03: Planificación financiera y análisis de riesgos
 
Sesion 4
Sesion 4Sesion 4
Sesion 4
 
Guia 5 dev c++
Guia 5 dev c++Guia 5 dev c++
Guia 5 dev c++
 
Tutorial c++
Tutorial c++Tutorial c++
Tutorial c++
 

Más de Pablo Haya

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íaPablo Haya
 
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 multicontactoPablo Haya
 
Interaccion natural
Interaccion naturalInteraccion natural
Interaccion naturalPablo Haya
 
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-OrdenadorPablo Haya
 
Diseño de la interacción
Diseño de la interacciónDiseño de la interacción
Diseño de la interacciónPablo Haya
 
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 algoritmosPablo Haya
 
Tema 1 - Introducción
Tema 1  - IntroducciónTema 1  - Introducción
Tema 1 - IntroducciónPablo Haya
 

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

corpus-christi-sesion-de-aprendizaje.pdf
corpus-christi-sesion-de-aprendizaje.pdfcorpus-christi-sesion-de-aprendizaje.pdf
corpus-christi-sesion-de-aprendizaje.pdfYolandaRodriguezChin
 
PLAN DE TRABAJO CONCURSO NACIONAL CREA Y EMPRENDE.docx
PLAN DE TRABAJO CONCURSO NACIONAL CREA Y EMPRENDE.docxPLAN DE TRABAJO CONCURSO NACIONAL CREA Y EMPRENDE.docx
PLAN DE TRABAJO CONCURSO NACIONAL CREA Y EMPRENDE.docxDavidAlvarez758073
 
CAPACIDADES SOCIOMOTRICES LENGUAJE, INTROYECCIÓN, INTROSPECCION
CAPACIDADES SOCIOMOTRICES LENGUAJE, INTROYECCIÓN, INTROSPECCIONCAPACIDADES SOCIOMOTRICES LENGUAJE, INTROYECCIÓN, INTROSPECCION
CAPACIDADES SOCIOMOTRICES LENGUAJE, INTROYECCIÓN, INTROSPECCIONMasielPMP
 
El fundamento del gobierno de Dios. Lec. 09. docx
El fundamento del gobierno de Dios. Lec. 09. docxEl fundamento del gobierno de Dios. Lec. 09. docx
El fundamento del gobierno de Dios. Lec. 09. docxAlejandrino Halire Ccahuana
 
PRÁCTICAS PEDAGOGÍA.pdf_Educación Y Sociedad_AnaFernández
PRÁCTICAS PEDAGOGÍA.pdf_Educación Y Sociedad_AnaFernándezPRÁCTICAS PEDAGOGÍA.pdf_Educación Y Sociedad_AnaFernández
PRÁCTICAS PEDAGOGÍA.pdf_Educación Y Sociedad_AnaFernándezRuben53283
 
Un libro sin recetas, para la maestra y el maestro Fase 3.pdf
Un libro sin recetas, para la maestra y el maestro Fase 3.pdfUn libro sin recetas, para la maestra y el maestro Fase 3.pdf
Un libro sin recetas, para la maestra y el maestro Fase 3.pdfsandradianelly
 
2º conclusiones descriptivas educacion fisica (1).docx
2º conclusiones descriptivas educacion fisica (1).docx2º conclusiones descriptivas educacion fisica (1).docx
2º conclusiones descriptivas educacion fisica (1).docxRobertoCarlosFernand14
 
PROYECTO INTEGRADOR ARCHIDUQUE. presentacion
PROYECTO INTEGRADOR ARCHIDUQUE. presentacionPROYECTO INTEGRADOR ARCHIDUQUE. presentacion
PROYECTO INTEGRADOR ARCHIDUQUE. presentacionyorbravot123
 
Productos contestatos de la Séptima sesión ordinaria de CTE y TIFC para Docen...
Productos contestatos de la Séptima sesión ordinaria de CTE y TIFC para Docen...Productos contestatos de la Séptima sesión ordinaria de CTE y TIFC para Docen...
Productos contestatos de la Séptima sesión ordinaria de CTE y TIFC para Docen...Monseespinoza6
 
Semana #10-PM3 del 27 al 31 de mayo.pptx
Semana #10-PM3 del 27 al 31 de mayo.pptxSemana #10-PM3 del 27 al 31 de mayo.pptx
Semana #10-PM3 del 27 al 31 de mayo.pptxLorenaCovarrubias12
 
Presentación Revistas y Periódicos Digitales
Presentación Revistas y Periódicos DigitalesPresentación Revistas y Periódicos Digitales
Presentación Revistas y Periódicos Digitalesnievesjiesc03
 
1º GRADO CONCLUSIONES DESCRIPTIVAS PRIMARIA.docx
1º GRADO CONCLUSIONES DESCRIPTIVAS  PRIMARIA.docx1º GRADO CONCLUSIONES DESCRIPTIVAS  PRIMARIA.docx
1º GRADO CONCLUSIONES DESCRIPTIVAS PRIMARIA.docxFelixCamachoGuzman
 
c3.hu3.p3.p2.Superioridad e inferioridad en la sociedad.pptx
c3.hu3.p3.p2.Superioridad e inferioridad en la sociedad.pptxc3.hu3.p3.p2.Superioridad e inferioridad en la sociedad.pptx
c3.hu3.p3.p2.Superioridad e inferioridad en la sociedad.pptxMartín Ramírez
 
True Mother's Speech at THE PENTECOST SERVICE..pdf
True Mother's Speech at THE PENTECOST SERVICE..pdfTrue Mother's Speech at THE PENTECOST SERVICE..pdf
True Mother's Speech at THE PENTECOST SERVICE..pdfMercedes Gonzalez
 
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...crcamora123
 
diagnostico final (1). analisis - encuestas
diagnostico final (1). analisis - encuestasdiagnostico final (1). analisis - encuestas
diagnostico final (1). analisis - encuestasansomora123
 

Último (20)

corpus-christi-sesion-de-aprendizaje.pdf
corpus-christi-sesion-de-aprendizaje.pdfcorpus-christi-sesion-de-aprendizaje.pdf
corpus-christi-sesion-de-aprendizaje.pdf
 
PLAN DE TRABAJO CONCURSO NACIONAL CREA Y EMPRENDE.docx
PLAN DE TRABAJO CONCURSO NACIONAL CREA Y EMPRENDE.docxPLAN DE TRABAJO CONCURSO NACIONAL CREA Y EMPRENDE.docx
PLAN DE TRABAJO CONCURSO NACIONAL CREA Y EMPRENDE.docx
 
CAPACIDADES SOCIOMOTRICES LENGUAJE, INTROYECCIÓN, INTROSPECCION
CAPACIDADES SOCIOMOTRICES LENGUAJE, INTROYECCIÓN, INTROSPECCIONCAPACIDADES SOCIOMOTRICES LENGUAJE, INTROYECCIÓN, INTROSPECCION
CAPACIDADES SOCIOMOTRICES LENGUAJE, INTROYECCIÓN, INTROSPECCION
 
El fundamento del gobierno de Dios. Lec. 09. docx
El fundamento del gobierno de Dios. Lec. 09. docxEl fundamento del gobierno de Dios. Lec. 09. docx
El fundamento del gobierno de Dios. Lec. 09. docx
 
PRÁCTICAS PEDAGOGÍA.pdf_Educación Y Sociedad_AnaFernández
PRÁCTICAS PEDAGOGÍA.pdf_Educación Y Sociedad_AnaFernándezPRÁCTICAS PEDAGOGÍA.pdf_Educación Y Sociedad_AnaFernández
PRÁCTICAS PEDAGOGÍA.pdf_Educación Y Sociedad_AnaFernández
 
Un libro sin recetas, para la maestra y el maestro Fase 3.pdf
Un libro sin recetas, para la maestra y el maestro Fase 3.pdfUn libro sin recetas, para la maestra y el maestro Fase 3.pdf
Un libro sin recetas, para la maestra y el maestro Fase 3.pdf
 
2º conclusiones descriptivas educacion fisica (1).docx
2º conclusiones descriptivas educacion fisica (1).docx2º conclusiones descriptivas educacion fisica (1).docx
2º conclusiones descriptivas educacion fisica (1).docx
 
PROYECTO INTEGRADOR ARCHIDUQUE. presentacion
PROYECTO INTEGRADOR ARCHIDUQUE. presentacionPROYECTO INTEGRADOR ARCHIDUQUE. presentacion
PROYECTO INTEGRADOR ARCHIDUQUE. presentacion
 
Productos contestatos de la Séptima sesión ordinaria de CTE y TIFC para Docen...
Productos contestatos de la Séptima sesión ordinaria de CTE y TIFC para Docen...Productos contestatos de la Séptima sesión ordinaria de CTE y TIFC para Docen...
Productos contestatos de la Séptima sesión ordinaria de CTE y TIFC para Docen...
 
Semana #10-PM3 del 27 al 31 de mayo.pptx
Semana #10-PM3 del 27 al 31 de mayo.pptxSemana #10-PM3 del 27 al 31 de mayo.pptx
Semana #10-PM3 del 27 al 31 de mayo.pptx
 
PPT: El fundamento del gobierno de Dios.
PPT: El fundamento del gobierno de Dios.PPT: El fundamento del gobierno de Dios.
PPT: El fundamento del gobierno de Dios.
 
Presentación Revistas y Periódicos Digitales
Presentación Revistas y Periódicos DigitalesPresentación Revistas y Periódicos Digitales
Presentación Revistas y Periódicos Digitales
 
1º GRADO CONCLUSIONES DESCRIPTIVAS PRIMARIA.docx
1º GRADO CONCLUSIONES DESCRIPTIVAS  PRIMARIA.docx1º GRADO CONCLUSIONES DESCRIPTIVAS  PRIMARIA.docx
1º GRADO CONCLUSIONES DESCRIPTIVAS PRIMARIA.docx
 
c3.hu3.p3.p2.Superioridad e inferioridad en la sociedad.pptx
c3.hu3.p3.p2.Superioridad e inferioridad en la sociedad.pptxc3.hu3.p3.p2.Superioridad e inferioridad en la sociedad.pptx
c3.hu3.p3.p2.Superioridad e inferioridad en la sociedad.pptx
 
True Mother's Speech at THE PENTECOST SERVICE..pdf
True Mother's Speech at THE PENTECOST SERVICE..pdfTrue Mother's Speech at THE PENTECOST SERVICE..pdf
True Mother's Speech at THE PENTECOST SERVICE..pdf
 
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...
 
diagnostico final (1). analisis - encuestas
diagnostico final (1). analisis - encuestasdiagnostico final (1). analisis - encuestas
diagnostico final (1). analisis - encuestas
 
5.Deicticos Uno_Enfermería_EspanolAcademico
5.Deicticos Uno_Enfermería_EspanolAcademico5.Deicticos Uno_Enfermería_EspanolAcademico
5.Deicticos Uno_Enfermería_EspanolAcademico
 
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
 
4.Conectores Dos_Enfermería_Espanolacademico
4.Conectores Dos_Enfermería_Espanolacademico4.Conectores Dos_Enfermería_Espanolacademico
4.Conectores Dos_Enfermería_Espanolacademico
 

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

  • 1. http://www.eps.uam.es/~phaya PROG-I 2009-10 PROGRAMACIÓN BÁSICA EN C Semana 2 – Temas 2.1, 2.2 y 2.3 {From The C programming Language By Brian W. Kernighan and Dennis M. Ritchie. } main() { printf("hello, worldn"); }
  • 2. PROG-I /61PROG-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. PROG-I /61PROG-I Problema  Dado la edad en años de una persona, calcular aproximadamente el número de días que lleva viviendo.  Algoritmo: Curso 2009-10 3Tema 2 – Programación básica en C Entradas: edad: número entero Salida: dias: número entero 1. edad ← 34 2. dias ← edad * 365 3. imprime dias /* Mi segundo programa Dado los años que tiene una persona, calcula aproximadamente la edad en dias */ #include <stdio.h> int main(void) { int edad, dias; edad = 34; dias = edad *365; printf("llevas viviendo unos:"); printf("%d diasn", dias); return 0; }
  • 4. PROG-I /61PROG-I /* Mi segundo programa Dado los años de una persona, calcula aprox la edad en dias */ #include <stdio.h> int main(void) { int edad, dias; edad = 34; dias = edad *365; printf("llevas viviendo unos:"); Mi segundo programa Curso 2009-10 4Tema 2 – Programación básica en C Comentarios aniosadias.c
  • 5. PROG-I /61PROG-I /* Mi segundo programa Dado los años de una persona, calcula aprox la edad en dias */ #include <stdio.h> int main(void) { int edad, dias; edad = 34; dias = edad *365; printf("llevas viviendo unos:"); Mi segundo programa Curso 2009-10 5Tema 2 – Programación básica en C Prepocesador aniosadias.c Comentarios
  • 6. PROG-I /61PROG-I /* Mi segundo programa Dado los años de una persona, calcula aprox la edad en dias */ #include <stdio.h> int main(void) { int edad, dias; edad = 34; dias = edad *365; printf("llevas viviendo unos:"); Mi segundo programa Curso 2009-10 6Tema 2 – Programación básica en C Función principal aniosadias.c Prepocesador Comentarios
  • 7. PROG-I /61PROG-I /* Mi segundo programa Dado los años de una persona, calcula aprox la edad en dias */ #include <stdio.h> int main(void) { int edad, dias; edad = 34; dias = edad *365; printf("llevas viviendo unos:"); Mi segundo programa Curso 2009-10 7Tema 2 – Programación básica en C Prepocesador Función principal Declaración Variables aniosadias.c Comentarios
  • 8. PROG-I /61PROG-I /* Mi segundo programa Dado los años de una persona, calcula aprox la edad en dias */ #include <stdio.h> int main(void) { int edad, dias; edad = 34; dias = edad *365; printf("llevas viviendo unos:"); Mi segundo programa Curso 2009-10 8Tema 2 – Programación básica en C Prepocesador Función principal Declaración Variables aniosadias.c Sentencias Comentarios
  • 9. PROG-I /61PROG-I /* Mi segundo programa Dado los años de una persona, calcula aprox la edad en dias */ #include <stdio.h> int main(void) { int edad, dias; edad = 34; dias = edad *365; printf("llevas viviendo unos:"); Mi segundo programa Curso 2009-10 9Tema 2 – Programación básica en C aniosadias.c Entradas: edad: número entero Salida: dias: número entero 1. edad ← 34 2. dias ← edad * 365 3. imprime dias
  • 10. PROG-I /61PROG-I Compilación, enlazado y ejecución phaya@robinson:~/docencia/prog1-0910/c/tema2$ cc aniosadias.c phaya@robinson:~/docencia/prog1-0910/c/tema2$ ./a.out llevas viviendo unos:12410 dias Curso 2009-10 10Tema 2 – Programación básica en C phaya@robinson:~/docencia/prog1-0910/c/tema2$ cc aniosadias.c -o aniosadias phaya@robinson:~/docencia/prog1-0910/c/tema2$ ./aniosadias llevas viviendo unos:12410 dias phaya@robinson:~/docencia/prog1-0910/c/tema2$ cc -Wall -ansi -pedantic -o aniosdias aniosadias.c phaya@robinson:~/docencia/prog1-0910/c/tema2$ ./aniosadias llevas viviendo unos:12410 dias  Sin opciones  Indicando el nombre del ejecutable  Activadas advertencias, comprobación código ANSI, nombre del ejecutable
  • 11. PROG-I /61PROG-I /* Mi segundo programa Dado los años de una persona, calcula aprox la edad en dias */ #include <stdio.h> int main(void) { int edad, dias; edad = 34; dias = edad *365; printf("llevas viviendo unos:"); Declaración de Variables Curso 2009-10 11Tema 2 – Programación básica en C aniosadias.c  Permite almacenar datos del programa. El valor de la variable puede cambiar a lo largo del programa.  Cada variables se define con un nombre (identificador) y almacena un valor de un tipo de datos determinado (ej, un número entero, un número real, un cadena de caracteres…).  No se puede cambiar el tipo de una variable.  El compilador reserva memoria para almacenar el valor, y comprueba que los valores que se vayan a guardan coincidan con el tipo de la misma.  La variables que se vayan a emplear deben ser previamente declaradas.
  • 12. PROG-I /61PROG-I 1. /* Mi segundo programa 2. Dado los años de una persona, 3. calcula aprox la edad en dias */ 4. #include <stdio.h> 5. 6. int main(void) 7. { 8. int edad, dias; 9. 10. edad = 34; 11. dias = edad *365; 12. printf("llevas viviendo Simulación de ejecución Curso 2009-10 12Tema 2 – Programación básica en C aniosadias.c ee aniosadias edadedad main diasdias ?? ?? 8. int edad, dias;
  • 13. PROG-I /61PROG-I 1. /* Mi segundo programa 2. Dado los años de una persona, 3. calcula aprox la edad en dias */ 4. #include <stdio.h> 5. 6. int main(void) 7. { 8. int edad, dias; 9. 10. edad = 34; 11. dias = edad *365; 12. printf("llevas viviendo Simulación de ejecución Curso 2009-10 13Tema 2 – Programación básica en C aniosadias.c ee aniosadias edadedad main diasdias 3434 ?? 10. edad = 34;
  • 14. PROG-I /61PROG-I 1. /* Mi segundo programa 2. Dado los años de una persona, 3. calcula aprox la edad en dias */ 4. #include <stdio.h> 5. 6. int main(void) 7. { 8. int edad, dias; 9. 10. edad = 34; 11. dias = edad *365; 12. printf("llevas viviendo Simulación de ejecución Curso 2009-10 14Tema 2 – Programación básica en C aniosadias.c ee aniosadias edadedad main diasdias 3434 1241012410 11. dias = edad *365;
  • 15. PROG-I /61PROG-I 1. /* Mi segundo programa 2. Dado los años de una persona, 3. calcula aprox la edad en dias */ 4. #include <stdio.h> 5. 6. int main(void) 7. { 8. int edad, dias; 9. 10. edad = 34; 11. dias = edad *365; 12. printf("llevas viviendo Simulación de ejecución Curso 2009-10 15Tema 2 – Programación básica en C aniosadias.c ee aniosadias edadedad main diasdias 3434 1241012410 12. printf("llevas viviendo unos:");
  • 16. PROG-I /61PROG-I 1. /* Mi segundo programa 2. Dado los años de una persona, 3. calcula aprox la edad en dias */ 4. #include <stdio.h> 5. 6. int main(void) 7. { 8. int edad, dias; 9. 10. edad = 34; 11. dias = edad *365; 12. printf("llevas viviendo Simulación de ejecución Curso 2009-10 16Tema 2 – Programación básica en C aniosadias.c ee aniosadias edadedad main diasdias 3434 1241012410 13. printf("%d diasn", dias);
  • 17. PROG-I /61PROG-I 1. /* Mi segundo programa 2. Dado los años de una persona, 3. calcula aprox la edad en dias */ 4. #include <stdio.h> 5. 6. int main(void) 7. { 8. int edad, dias; 9. 10. edad = 34; 11. dias = edad *365; 12. printf("llevas viviendo Simulación de ejecución Curso 2009-10 17Tema 2 – Programación básica en C aniosadias.c ee aniosadias edadedad main diasdias 3434 1241012410 14. return 0;
  • 18. PROG-I /61PROG-I Identificadores  Identificador: Un identificador es un nombre simbólico definido por el programador para denominar diferentes elementos del lenguaje (ej. una variable o una función.) identificador: ( carácter | '_' ) { carácter | '_' | dígito} carácter: ‘a’..’z’| ‘A’..’Z’ dígito: ‘0’|‘1’| ‘2’| ‘3’| ‘4’| ‘5’| ‘6’| ‘7’| ‘8’| ‘9’ Observaciones  Sólo se pueden utilizar caracteres del alfabeto anglosajón. ¡No valen ñ ó acentos!  Es sensible a mayúsculas y minúsculas:  Case-sensitive: los identificadores distinguen mayúsculas de minúsculas (ej, C, java)  Case-insensitive: no distinguen (ej. Pascal)  Un identificador no puede ser una palabra reservada, aunque sea válido sintácticamente.  Palabras reservadas (keywords): double, register, signed, if…  ABC, sección 2.4 Keywords, pag. 77 Curso 2009-10 18Tema 2 – Programación básica en C
  • 19. PROG-I /61 Ejemplo identificadores  Correcto  Odisea2001  Holamundo  anio  primos_2  hola_mundo  Incorrecto  2001odisea  2_primos  hola mundo  hola-mundo  año  $valor  valor$  pablo!  p.a.b.l.o  continue  Identificadores distintos  PrecioProducto ≠ Precioproducto ≠ precioproducto ≠ PRECIOproducto ≠ productoPRECIO … No puede empezar por un dígito ‘-’ no válido espacio no válido ‘!’ no válido ‘$’ no válido ‘ñ’ no válido ‘.’ no válido palabra reservada Curso 2009-10 19Tema 2 – Programación básica en C
  • 20. PROG-I /61PROG-I Declaración de variables  Se especifica el tipo y el nombre de la variable.  Se puede declarar e inicializar una variable a la par.  Se pueden declarar nuevas variables dentro de un bloque, al principio del mismo. El ámbito de la variables se restringe a las dos llaves.  Sintaxis variada. Curso 2009-10 20Tema 2 – Programación básica en C int main(void) { int edad; int dias; ... int main(void) { int edad = 32, dias; ... int main(void) { int edad=32; int dias; ... int main(void) { int edad, dias ; ... int main(void) { int edad,dias; ... int main(void) { int edad, dias; ... int main(void) { int edad dias; ...
  • 21. PROG-I /61PROG-I Tipos de datos  Tipos de datos básicos  char: un único byte que puede almacenar un carácter siguiendo la codificación interna local.  int: un número entero.  float: número real en coma flotante como precisión simple  double: número real en coma flotante como precisión doble simple  Modificadores de signo (cambian la interpretación)  unsigned  signed  Modificadores de cantidad (cambia el tamaño en memoria)  short  long Curso 2009-10 21Tema 2 – Programación básica en C
  • 22. PROG-I /61PROG-I Tipos int  Permiten representar magnitudes numéricas enteras.  La capacidad de representación siempre será limitada y finita.  Se aplican los modificadores unsigned, signed, short y long Curso 2009-10 22Tema 2 – Programación básica en C int main(void) { int a; signed int b; unsigned int c; short int d; signed short int e; unsigned short int f; long int g; signed long int h; unsigned long int i; ... int main(void) { int a; unsigned c; short d; unsigned short f; long g; unsigned long i; ...
  • 23. PROG-I /61PROG-I Rango de representación TIPO Nº BYTES RANGO short 2 -32768..32767 unsigned short 2 0..65535 int 4 -2.147.483.648..2.147.483.647 unsigned int 4 0..4.294.967.295 long 4 -2147483648..2147483647 unsigned long 4 0..4.294.967.295 long long 8 -9.223.372.036.854.775.808.. 9.223.372.036.854.775.807 unsigned long long 8 0..18.446.744.073.709.551.615  Cada compilador es libre de elegir el tamaño adecuado a la hardware asociado, sujeto a las siguientes restricciones: short e ints al menos 2 bytes, longs al menos 32, y short no puede ser mayor que int, el cual no puede superar a long. Máximos y mínimos en <limits.h> y <float.h>  sizeof: ABC, sección 3.8, pag. 122  Desbordamiento: véase ejercicio 6 y ABC ejercicio 6, pag. 140Curso 2009-10 23Tema 2 – Programación básica en C
  • 24. PROG-I /61PROG-I Tipo Char  Almacena un byte.  Tabla ASCII (man ascii)  No imprimibles: 0..31 y el 127  Imprimibles  Un carácter en C se representa entrecomillado (comilla simple)  Los caracteres especiales se representan:  Usando el número correspondiente de la tabla ASCII  Caracteres especiales: 'n', 'r', 't'…  Véase ABC, sección 3.3, pag. 113  Modificadores  char  signed char: -128..127  unsigned char: 0..255  Véase ABC, ejercicio 10, pag. 141 #include <stdio.h> int main(void) { char inicial = 'M'; char primeraLetra = 'A'; char ultimoLetra = 'z'; char c1 = '7'; char c2 = 7; char c3 = 'n'; printf("%c %dn", c1, c1); printf("%c %dn", c2, c2); printf("%c %dn", c3, c3); c1 = c1 + 1; printf("%c %dn", c1, c1); return 0; } Curso 2009-10 24Tema 2 – Programación básica en C
  • 25. PROG-I /61PROG-I Tipo reales  Permiten representar magnitudes reales.  float, double, long double  Tamaños depende del compilador  <limits.h> y<float.h>  Notación decimal y con exponente  Imp:  No se pueden representar todos los número reales  Las operaciones pueden no ser exactas  Precisión y rango #include <stdio.h> int main(void) { float x = 12.0; float y = 0.125e5; /* 0.125 * 105 */ float z = 87.35E+10; double dx = +0.3; double dy = -0.1; double dz = 5e-3; ... } Curso 2009-10 25Tema 2 – Programación básica en C TIPO Nº BYTES DIGITOS REPRESENTA BLES RANGO float 4 6 1.17549*10-38 .. 3.40282*10-38 double 8 15 2.22507*10-308 ..1.79769*10308
  • 26. PROG-I /61PROG-I Constantes Curso 2009-10 26Tema 2 – Programación básica en C #include <stdio.h> #define DIAS_ANIO 365 int main(void) { int edad, dias; edad = 34; dias = edad *DIAS_ANIO; printf("llevas viviendo unos:"); printf("%d diasn", dias); return 0; }  Valor constante: El valor se mantiene inalterable durante la ejecución del programa  const tipo variable  const double NA = 6.02214179E23  Empleando preprocesador  macro #define #define INTERES 4.35 #define NA 6.02214179E23 /*Numero de Avogrado*/ #define PI 3.14159265 #define DIST_TIERRA_LUNA 384400 #define RADIO_LUNA 3474.8 #define MASA_LUNA 7.349E22 #define INICIAL_NOMBRE 'P' #define MENSAJE "Cuidado" #define VOLUMEN_LUNA 4*PI*RADIO_LUNA*RADIO_LUNA*RADIO_LUNA/3
  • 27. PROG-I /61PROG-I Cadena de caracteres  char nombre[longitud_maxima] = "cadena de caracteres";  No se pueden asignar una constante  msg1 = "No voy"; /* NO funciona */  Acceder a caracteres individuales  printf("%c", msg1[2]); #include <stdio.h> int main(void) { char msg1[20] = "Voy "; char msg2[] = "a realizar "; const char msg3[] = "los ejercicios de PROG I"; printf("%s%s%sn", msg1, msg2, msg3); printf("Voy a realizar los ejercicios de PROG In"); return 0; } Curso 2009-10 27Tema 2 – Programación básica en C
  • 28. PROG-I /61PROG-I Errores sintácticos  Programa con errores Curso 2009-10 28Tema 2 – Programación básica en C 1. #include <stdio.h> 2. int main(void) 3. { 4. int edad, dias 5. 6. edad = 34; 7. dia = edad *365; 8. printf("llevas viviendo unos:"); 9. printf(%d diasn", dias); 10. return 0; 11. }
  • 29. PROG-I /61PROG-I Errores sintácticos phaya@robinson:~/docencia/prog1-0910/c/tema2$ cc –Wall –ansi –pedantic errores.c errores.c: In function 'main': errores.c:7: error: syntax error before 'edad' errores.c:8: error: 'dia' undeclared (first use in this function) errores.c:8: error: (Each undeclared identifier is reported only once errores.c:8: error: for each function it appears in.) errores.c:10: error: syntax error before '%' token errores.c:10: error: stray '' in program errores.c:10: error: missing terminating " character errores.c:7: warning: unused variable 'dias' errores.c:12: warning: control reaches end of non-void function Curso 2009-10 29Tema 2 – Programación básica en C
  • 30. PROG-I /61PROG-I Errores en tiempo de ejecución #include <stdio.h> int main(void) { int x = 1, y = 0, z; z = x / y; printf("%dn", z); return 0; } Curso 2009-10 30Tema 2 – Programación básica en C
  • 31. PROG-I /61PROG-I Errores semánticos #include <stdio.h> int main(void) { short edad, dias, horas, minutos, segundos; edad = 34; dias= edad*365; horas= dias*24; minutos= horas*60; segundos= minutos*60; printf("llevas viviendo unos:%d seg.", segundos); return 0; } Curso 2009-10 31Tema 2 – Programación básica en C
  • 32. PROG-I /61PROG-I Tipo definidos: enumerado  anónimos: otra forma de definir constante  enum {valores}  nombre: un nuevo tipo de dato  enum nombre {valores} enum {CASADA, SEPARADA, DIVORCIADA, VIUDA, SOLTERA}; enum palo {OROS, COPAS, ESPADAS, BASTOS}; enum boolean {FALSE, TRUE}; enum months {JAN = 1, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC }; enum escapes {BELL = 'a', BACKSPACE = 'b', TAB = 't', NEWLINE = 'n', VTAB = 'v', RETURN = 'r' }; int main(void) { int estadocivil = SOLTERA; enum months mes = SEP; enum palo p = OROS; ... Curso 2009-10 32Tema 2 – Programación básica en C
  • 33. PROG-I /61PROG-I Funciones  Permiten organizar los programas de forma modular, tal que cada función se pueda construir y depurar por separado.  Abstracción  Modularización  Reutilización calVolCilindrocalVolCilindro calAreaCircul o calAreaCircul o calAreaConocalAreaCono Curso 2009-10 33Tema 2 – Programación básica en C
  • 34. PROG-I /61PROG-I ¿Qué es una función?  Funciones: son bloques que procesan datos y devuelven un resultado.  Una función se define como:  nombre: identificador de la función  parámetros formales: lista de parámetros que precisa la función. Cada parámetro tiene un tipo particular.  tipo: del resultado devuelto por la función float altura float radio float 20.5 10 6440.26 Parámetros formales tipo devuelto calculaVolCilindro nombre definición calculaVolCilindro(20.5, 10) invocación Curso 2009-10 34Tema 2 – Programación básica en C
  • 35. PROG-I /61PROG-I Funciones  Partes de una función  Prototipo, cabecera ó interfaz  float calculaVolCilindro(float altura, float radio);  tipo nombre(lista parametros);  Implementación  Sección de declaraciones  Cuerpo de la función  Ej:  double sqrt (double x);  ¡No es necesario conocer la implementación de la función para poder emplear!  Todos los lenguajes de programación proveen de un conjunto de funciones/procedimientos predefinidos  Librería estándar de C (ABC, Apéndice A, pag. 641) Curso 2009-10 35Tema 2 – Programación básica en C
  • 36. PROG-I /61PROG-I Invocación  Parámetros actuales: valores concretos que toman los parámetros formales en cada invocación  Deben coincidir en  número  orden  tipo.  Posibilidades:  Literal  Variable  Expresión  Otra función  Ej:  double pow(double x, double y); 1. #include <stdio.h> 2. #include <math.h> 3. 4. int main(void) 5. { 6. float res; 7. 8. res = pow(2,2); 9. printf("%.0fn",res); 10. res = pow(res, 2); 11. printf("%.0fn",res); 12. printf("%.0fn", pow(res*2,2)); 13. printf("%.0fn", pow(pow(res,2),2)); 14. return 0; 15. } Curso 2009-10 36Tema 2 – Programación básica en C
  • 37. PROG-I /61PROG-I 1. #include <stdio.h> 2. #include <math.h> 3. 4. int main(void) 5. { 6. float res; 7. 8. res = pow(2,2); 9. printf("%.0fn",res); 10. res = pow(res, 2); 11. printf("%.0fn",res); 12. printf("%.0fn", pow(res*2,2)); 13. printf("%.0fn", pow(pow(res,2),2)); 14. return 0; 15. } Simulación de ejecución Curso 2009-10 37Tema 2 – Programación básica en C ejpow.c ee ejpow.c main resres ?? 6. float res;
  • 38. PROG-I /61PROG-I 1. #include <stdio.h> 2. #include <math.h> 3. 4. int main(void) 5. { 6. float res; 7. 8. res = pow(2,2); 9. printf("%.0fn",res); 10. res = pow(res, 2); 11. printf("%.0fn",res); 12. printf("%.0fn", pow(res*2,2)); 13. printf("%.0fn", pow(pow(res,2),2)); 14. return 0; 15. } Simulación de ejecución Curso 2009-10 38Tema 2 – Programación básica en C ejpow.c ee ejpow.c main resres 4.04.0 8. res = pow(2,2);
  • 39. PROG-I /61PROG-I 1. #include <stdio.h> 2. #include <math.h> 3. 4. int main(void) 5. { 6. float res; 7. 8. res = pow(2,2); 9. printf("%.0fn",res); 10. res = pow(res, 2); 11. printf("%.0fn",res); 12. printf("%.0fn", pow(res*2,2)); 13. printf("%.0fn", pow(pow(res,2),2)); 14. return 0; 15. } Simulación de ejecución Curso 2009-10 39Tema 2 – Programación básica en C ejpow.c ee ejpow.c main resres 4.04.0 9. printf("%.0fn",res);
  • 40. PROG-I /61PROG-I 1. #include <stdio.h> 2. #include <math.h> 3. 4. int main(void) 5. { 6. float res; 7. 8. res = pow(2,2); 9. printf("%.0fn",res); 10. res = pow(res, 2); 11. printf("%.0fn",res); 12. printf("%.0fn", pow(res*2,2)); 13. printf("%.0fn", pow(pow(res,2),2)); 14. return 0; 15. } Simulación de ejecución Curso 2009-10 40Tema 2 – Programación básica en C ejpow.c ee ejpow.c main resres 16.016.0 10. res = pow(res, 2);
  • 41. PROG-I /61PROG-I 1. #include <stdio.h> 2. #include <math.h> 3. 4. int main(void) 5. { 6. float res; 7. 8. res = pow(2,2); 9. printf("%.0fn",res); 10. res = pow(res, 2); 11. printf("%.0fn",res); 12. printf("%.0fn", pow(res*2,2)); 13. printf("%.0fn", pow(pow(res,2),2)); 14. return 0; 15. } Simulación de ejecución Curso 2009-10 41Tema 2 – Programación básica en C ejpow.c ee ejpow.c main resres 16.016.0 11. printf("%.0fn",res);
  • 42. PROG-I /61PROG-I 1. #include <stdio.h> 2. #include <math.h> 3. 4. int main(void) 5. { 6. float res; 7. 8. res = pow(2,2); 9. printf("%.0fn",res); 10. res = pow(res, 2); 11. printf("%.0fn",res); 12. printf("%.0fn", pow(res*2,2)); 13. printf("%.0fn", pow(pow(res,2),2)); 14. return 0; 15. } Simulación de ejecución Curso 2009-10 42Tema 2 – Programación básica en C ejpow.c ee ejpow.c main resres 16.016.0 12. printf("%.0fn", pow(res*2,2)); Salida:1024
  • 43. PROG-I /61PROG-I 1. #include <stdio.h> 2. #include <math.h> 3. 4. int main(void) 5. { 6. float res; 7. 8. res = pow(2,2); 9. printf("%.0fn",res); 10. res = pow(res, 2); 11. printf("%.0fn",res); 12. printf("%.0fn", pow(res*2,2)); 13. printf("%.0fn", pow(pow(res,2),2)); 14. return 0; 15. } Simulación de ejecución Curso 2009-10 43Tema 2 – Programación básica en C ejpow.c ee ejpow.c main resres 16.016.0 13. printf("%.0fn", pow(pow(res,2),2)); Salida:65536
  • 44. PROG-I /61PROG-I Ejemplo declaración #define PI 3.14159265 /* calculaVolCilindro – */ /* Esta función calculo el volumen de un cilindro */ /* en función de su altura y el radio de la base */ /* Entrada: */ /* altura: real, altura del cilindro */ /* radio: real, radio de la base */ *) /*Salida: */ /* real que representa el área del cilindro */ float calculaVolCilindro (float altura, float radio); #include "volumenes.h" float calculaVolCilindro (float altura, float radio) { return altura * PI *radio *radio; } volumenes.h volumenes.c Curso 2009-10 44Tema 2 – Programación básica en C
  • 45. PROG-I /61PROG-I Ejemplo de uso #include <stdio.h> #include "volumenes.h" int main(void) { float a, r; scanf("%f %f", a, r); printf("Area: %fn", calculaVolCilindro(a, r)); } volumenes.c Curso 2009-10 45Tema 2 – Programación básica en C
  • 46. PROG-I /61PROG-I Ejemplo de uso #include <stdio.h> #define PI 3.14159265 float calculaVolCilindro (float altura, float radio) { return altura * PI *sqr(radio); } int main(void) { float a, r; scanf("%f %f", a, r); printf("Area: %f", calculaVolCilindro(a, r)); } No es obligatorio que coincidan nombre de variable con nombre de parámetros formales Curso 2009-10 46Tema 2 – Programación básica en C
  • 47. PROG-I /61 1 Prototipo – N implementaciones int cubo(int d) { return d * d * d; } int cubo(int d); { return pow(d,3); } int cubo(int d) { int i, res; res = 1; for (i=1; i <=3; i++) res *= d; return res; } int cubo(int d); { int i, tmp, res; tmp = 0; for (i = 1; i<d; i++) tmp += d; res = 0; for (i = 1; i<tmp; i++) res += d; return res; } Curso 2009-10 47Tema 2 – Programación básica en C
  • 48. PROG-I /61 Paso de parámetros (por valor) d h α h = sen( )α cos( )α d en radianes!!α 1. #include <stdio.h> 2. #define PI 3.14159265 3. 4. double altura(double dist, double angulo) 5. { 6. double tg; 7. angulo = angulo*PI/180; 8. tg = sin(angulo)/cos(angulo); 9. return dist*tg; 10. } 11. 12. int main(void) 13. { 14. double a; 15. a = 30; 16. printf("%f",(altura(100,a)); 17. return 0; 18. } alturatri.c Curso 2009-10 48Tema 2 – Programación básica en C
  • 49. PROG-I /61 Paso de parámetros (por valor) Curso 2009-10Tema 2 – Programación básica en C 49Curso 2009-10 49 ee alturatri.c main aa ?? 14. double a;
  • 50. PROG-I /61 Paso de parámetros (por valor) Curso 2009-10Tema 2 – Programación básica en C 50Curso 2009-10 50 ee alturatri.c main aa 30.030.0 15. a = 30;
  • 51. PROG-I /61 Paso de parámetros (por valor) Curso 2009-10Tema 2 – Programación básica en C 51Curso 2009-10 51 ee alturatri.c main aa 30.030.0 16. printf("%f",(altura(100,a));
  • 52. PROG-I /61 Paso de parámetros (por valor) Curso 2009-10Tema 2 – Programación básica en C 52Curso 2009-10 52 ee alturatri.c main aa 30.030.0 16. printf("%f",(altura(100,a)); distdist 100.0100.0 anguloangulo 30.030.0 altura copia del valor copia del valor copiadelvalorcopiadelvalor
  • 53. PROG-I /61 Ejecución (Invocación de la función altura) Curso 2009-10Tema 2 – Programación básica en C 53Curso 2009-10 53 ee alturatri.c main aa 30.030.0 6. double tg; distdist 100.0100.0 anguloangulo 30.030.0 altura tgtg ??
  • 54. PROG-I /61 Ejecución (Invocación de la función altura) Curso 2009-10Tema 2 – Programación básica en C 54Curso 2009-10 54 ee alturatri.c main aa 30.030.0 7. angulo = angulo*PI/180; distdist 100.0100.0 anguloangulo 0.5235990.523599 altura tgtg ??
  • 55. PROG-I /61 Ejecución (Invocación de la función altura) Curso 2009-10Tema 2 – Programación básica en C 55Curso 2009-10 55 ee alturatri.c main aa 30.030.0 8. tg = sin(angulo)/cos(angulo); distdist 100.0100.0 anguloangulo 0.5235990.523599 altura tgtg 0.5773500.577350
  • 56. PROG-I /61 Ejecución (Invocación de la función altura) Curso 2009-10Tema 2 – Programación básica en C 56Curso 2009-10 56 ee alturatri.c main aa 30.030.0 9. return dist*tg; distdist 100.0100.0 anguloangulo 0.5235990.523599 altura tgtg 0.5773500.577350
  • 57. PROG-I /61 Ejecución (Invocación de la función altura) Curso 2009-10Tema 2 – Programación básica en C 57Curso 2009-10 57 ee alturatri.c main aa 30.030.0 16. printf("%f", 57.735027);
  • 58. PROG-I /61PROG-I Visibilidad de variables  Variables globales vs. Variables locales  La variables definidas dentro de una función no son visibles fuera de esta. #include <stdio.h> #define PI 3.14159265 double area_circulo(double diametro) { double radio; radio = diametro / 2; return PI * radio * radio; } int main(void) { double d = 5; printf("El area es %fn", area_circulo(d)); printf("El radio es %fn", radio); return 0; } Curso 2009-10 58Tema 2 – Programación básica en C
  • 59. PROG-I /61PROG-I Visibilidad de variables (II)  Variables globales son visibles desde que se declaran en adelante. #include <stdio.h> #define PI 3.14159265 double radio; double area_circulo(double diametro) { radio = diametro / 2; return PI * radio * radio; } int main(void) { double d = 5; printf("El area es %fn", area_circulo(d)); printf("El radio es %fn", radio); return 0; }  Se prohíbe modificar/utilizar una variable global desde una función. Dentro de una función sólo se pueden modificar/utilizar variables locales, o parámetros. Curso 2009-10 59Tema 2 – Programación básica en C
  • 60. PROG-I /61 Ejecución (Variables globales) Curso 2009-10Tema 2 – Programación básica en C 60Curso 2009-10 60 ee alturatri.c main dd 5.05.0 9. double d = 5; radioradio ??
  • 61. PROG-I /61PROG-I Ejercicio de Ámbito int main() { ... } /* no puede utilizar int a */ int a = 20; /* visible desde aquí en adelante */ void func1() { ... } /* Utiliza XXX a */ void func2(void){ float a; /* variable local a diferente a la anterior */ { char a; /* de nuevo otra variable a diferente */ ... /* Utiliza XXX a */ } ... /* reaparece XXX a */ } /* reaparece XXX a */ void func3() { ... } /* Utiliza XXX a */ Curso 2009-10 61Tema 2 – Programación básica en C

Notas del editor

  1. C es ampliamente utilizado Ej.: UNIX y sucedaneos C++ y java C es potente C es medio nivel
  2. REALIZAR LA TABLA EXPUESTA EN EL TEMA 1
  3. PASAR EL AÑO QUE VIENE COMO EJERCICIO
  4. HACER EL PRIMERO SEGUIR CON EL SIGUIENTE
  5. ¿POR QUÉ LAS DOS SENTENCIAS TIENEN EL MISMO RESULTADO? ¿QUÉ PASA SI
  6. Abstracción Encapsulamiento Reutilización
  7. REALIZAR LA TABLA EXPUESTA EN EL TEMA 1
  8. REALIZAR LA TABLA EXPUESTA EN EL TEMA 1
  9. REALIZAR LA TABLA EXPUESTA EN EL TEMA 1
  10. REALIZAR LA TABLA EXPUESTA EN EL TEMA 1
  11. REALIZAR LA TABLA EXPUESTA EN EL TEMA 1
  12. REALIZAR LA TABLA EXPUESTA EN EL TEMA 1
  13. REALIZAR LA TABLA EXPUESTA EN EL TEMA 1