Tema 2 - Programación básica en C
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
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
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
C es ampliamente utilizado
Ej.: UNIX y sucedaneos
C++ y java
C es potente
C es medio nivel
REALIZAR LA TABLA EXPUESTA EN EL TEMA 1
PASAR EL AÑO QUE VIENE COMO EJERCICIO
HACER EL PRIMERO SEGUIR CON EL SIGUIENTE
¿POR QUÉ LAS DOS SENTENCIAS TIENEN EL MISMO RESULTADO?
¿QUÉ PASA SI