1. Introducción a laIntroducción a la
ProgramaciónProgramación
Objetivos
Al finalizar la asignatura el alumno debe conocer los aspectos fundamentales
de los lenguajes de programación, siendo capaz de reconocer los elementos
léxicos y sintácticos de un lenguaje. Así mismo, debe conocer los principios
básicos de programación: Funcional y Concurrente, pudiendo resolver
pequeños problemas siguiendo los principios básicos de programación.
2. Introducción a laIntroducción a la
ProgramaciónProgramación
Fundamentos y Estructuras deFundamentos y Estructuras de
ControlControl
3. Lenguaje C: Estructura de un ProgramaLenguaje C: Estructura de un Programa
#include <stdio.h>
#include <stdlib.h>
# …
# …
… /* Otras definiciones */
int main(int argc, char *argv[])
{
… /* Zona de */
… /* declaración */
… /* de variables */
… /* Zona de */
… /* instrucciones del */
… /* programa principal */
system("PAUSE");
return 0;
}
Cabecera de
Programa: ficheros
cabecera y otras
definiciones
Función main: cuerpo
principal del programa
NORMALMENTE LA FUNCIÓN MAIN
SE ENCUENTRA EN UN FICHERO
LLAMADO “main.c”
4. Lenguaje C: CaracterísticasLenguaje C: Características
• Algunas características son:
• El Lenguaje C es sensible al uso de mayúsculas y minúsculas.
• Las sentencias (instrucciones) terminan con el símbolo punto y
coma ‘;’ y se componen de palabras reservadas o palabras clave,
identificadores, constantes, operadores y separadores.
• Se pueden establecer bloques de instrucciones mediante el uso
de llaves: los símbolos abre-llave ‘{’ y cierra-llave ‘}’.
• Los programas se componen de:
• Palabras reservadas o palabras clave.
• Variables y funciones de la librería estándar.
• Variables y funciones definidas por el programador.
5. Lenguaje C: CaracterísticasLenguaje C: Características
• Palabras reservadas o palabras clave
auto double int struct
break else long switch
case enum register typedef
char extern return union
const float short unsigned
continue for signed void
default goto sizeof volatile
do if static while
6. Lenguaje C: IdentificadoresLenguaje C: Identificadores
• Un identificador permite identificar (nombrar) una variable o una
función dentro de un programa. Siguen las siguientes reglas:
1. Se forma de una secuencia de símbolos pertenecientes SÓLO
al conjunto de símbolos:
{‘a’, …, ‘n’, ‘o’, …, ‘z’, ‘A’, …, ‘N’, ‘O’, …, ‘Z’, ‘0’, …, ‘9’, ‘_’}.
2. El primer carácter o símbolo del identificador NO PUEDE SER
un dígito numérico.
3. Se distinguen las letras mayúsculas de las minúsculas, así, el
identificador “suma” de los identificadores “SUMA”, “Suma”,
“sUMa”, etc.
4. Se pueden definir identificadores de hasta 31 símbolos de
longitud.
7. Lenguaje C: IdentificadoresLenguaje C: Identificadores
• Ejemplos de identificadores válidos son:
tiempo, modulo, distancia_total,
suma10,_el_producto_, Tiempo, Modulo,
Distancia_Total, laSumaDeTodo,
elProducto,miVariable, Tu_Variable, estaFuncion,
_el_Identificador_
• Ejemplos de identificadores no válidos son:
10_segundos, el-modulo, la distancia total,
$dolares, %porciento,6seis6,
este-no-es-un-identificador-valido, módulo,
estaFunción
8. Lenguaje C: ConstantesLenguaje C: Constantes
• Las constantes en C pueden ser de los siguientes tipos:
1. Constantes numéricas: son valores numéricos, o bien, enteros o
en notación científica (punto flotante).
2. Constantes carácter: cualquier símbolo o carácter
alfanumérico encerrado entre apóstrofos (Ejs.: ‘a’, ‘:’, ‘Z’, ‘+’,
…).
3. Cadenas de caracteres: cualquier secuencia de símbolo o
caracteres encerrado entre comillas (Ejs.: “esto es una
cadena de caracteres”, “Hola Mundo!n”, …).
4. Constantes simbólicas: son constantes que se identifican con
un identificador.
9. Lenguaje C: OperadoresLenguaje C: Operadores
• Los operadores son símbolos que indican operaciones cuyos
operandos son normalmente variables, y/o constantes, así como
también funciones. En C hay diferentes tipos de operadores:
1. Aritméticos: { +, -, /, *, %, ++, --}.
2. De asignación: { =, +=, -=, *=, /= }.
3. Relacionales: { ==, <, >, <=, >=, !=}.
4. Lógicos: { &&, ||, ! }.
5. Otros: { &, |, ^, <<, >>, …}
10. Lenguaje C: Separadores y ComentariosLenguaje C: Separadores y Comentarios
• Los separadores permiten que los programas sean legibles al
permitir separar los diferentes elementos que aparecen en el
programas (identificadores, sentencias, …). Los separadores son los
llamados símbolos de formato: el espacio en blanco, el tabulador, y
el salto de línea.
• En el código fuente de un programa el programador puede introducir
comentarios para dar mayor legibilidad al mismo. Los comentarios en
Lenguaje C deben estar entre los dos pares de símbolos siguientes:
• /*: indica comienzo de comentario
• */: indica final de comentario
• //: indica que el resto de la línea es un comentario
Ejemplos:
a=b+c; /* aquí se calcula la suma */
printf(“a=%dn”,a); // aquí se imprime la suma
11. Lenguaje C: VariablesLenguaje C: Variables
• Tipos de datos fundamentales en C
Tipo
Base
Modificador
signed unsigned short long
Tipo
Carácter
char
(signed)
char
unsigned char ---- ----
Tipo
Entero
int
(signed)
int
unsigned int
short
(int)
long (int)
Tipo Real
float ---- ---- ---- ----
double ---- ---- ---- long double
12. Lenguaje C: VariablesLenguaje C: Variables
• Variables Tipo Carácter
Ejemplos:
char identificador1 = ‘c’;
char identificador2, identificador3;
• Contienen un único símbolo o carácter ASCII.
• Almacenan un byte de información.
1 byte = 8 bits 2
8
=256 números binarios diferentes
13. Lenguaje C: VariablesLenguaje C: Variables
• Variables Tipo Entero
Ejemplos:
short identificador1 = 345;
int identificador2 = -2345;
long identificador3= -4352359;
• Almacenan números enteros.
• Tienen diferentes tamaños:
• Entero corto short (<=4 bytes)
• Entero normal int (>=4 bytes)
• Entero largo long (>= 4 bytes)
• Pueden aceptar los siguientes modificadores:
• Entero con signo signed
• Entero sin signo unsigned
14. Lenguaje C: VariablesLenguaje C: Variables
• Variables Tipo Real
Ejemplos:
float identificador1 = -4.4567;
double identificador2,identificador3;
long double identificador4= 6.19e+23;
• Almacenan números reales.
• Tienen diferentes tamaños:
• Simple precisión float (4 bytes)
• Doble precisión double (8 bytes)
• Cuadruple precisión long double (16 bytes)
15. Lenguaje C: ConstantesLenguaje C: Constantes
• Constantes Enteras
Ejemplos:
8797 // constante int o short
0x3ae5 // constante int o short
06573 // constante int o short
7890L // constante long
97987UL // constante unsigned long
• Constantes Reales
Ejemplos:
1.23 // constante float o double
3.87e-3 // constante float o double
-9.005768e-12 // constante float o double
20. Lenguaje C: OperadoresLenguaje C: Operadores
• Operadores Asignación
• Asignación: =
• Suma y asignación: +=
• Resta y asignación: -=
• Multiplicación y asignación: *=
• División y asignación: /=
Ejemplos:
t=a*s*s+b*s+c;
b+=1; // equivalente a b=b+1;
c-=1; // equivalente a c=c-1;
d*=k; // equivalente a d=d*k;
e/=m; // equivalente a e=e/m;
21. Lenguaje C: OperadoresLenguaje C: Operadores
• Operadores Incrementales
• Incremento: ++
• Decremento: --
Sólo se pueden utilizar con variables de tipo entero o puntero.
Ejemplos:
i++; // equivalente a i=i+1; o a i+=1;
j--; // equivalente a j=j-1; o a j-=1;
a= (i++) + k; // operador de post-incremento
b= (++i) + k; // operador de pre-incremento
22. Lenguaje C: OperadoresLenguaje C: Operadores
• Operadores Relacionales: expresan condiciones lógicas
• Igual que: ==
• Menor que: <
• Mayor que: >
• Menor o igual que: <=
• Mayor o igual que: =>
• Distinto que: !=
Ejemplos:
(a<b) // ¿a es menor que b? Depende de a y b
(r!=8) // ¿r es diferente de 8? Depende de r
SI LA CONDICIÓN ES VERDADERA SE EVALÚA COMO 1, SI ES FALSA
SE EVALÚA COMO 0.
23. Lenguaje C: OperadoresLenguaje C: Operadores
• Operadores Lógicos: expresan condiciones lógicas compuestas
• Y lógico: &&
• O lógico: ||
• NO lógico: !
Ejemplos:
(a<b) && (k!=l) // ¿a es menor que b Y
// k es diferente de 1?
// Depende de a, b, k y l
(m>=n) || !(q==j) // ¿m es mayor o igual que n O
// q no es igual a j? Depende
de
// m, n, q y j
SI LA CONDICIÓN COMPUESTA ES VERDADERA SE EVALÚA COMO
1, SI ES FALSA SE EVALÚA COMO 0.
24. Lenguaje C: OperadoresLenguaje C: Operadores
• Otros operadores:
• Más unario: + (indica que una variable es positiva)
• Menos unario: - (cambia el signo a una variable numérica)
• sizeof (indica el tamaño en bytes de una variable)
• Operador coma: ,(permite realizar varias sentencias en una sóla
línea)
• Operador Dirección: & (permite obtener la dirección de memoria
donde se almacena una variable)
• Operador Indirección: * (permite acceder a la memoria apuntada
por una dirección de memoria)
Ejemplos:
a=-b;
r=sizeof(k);
26. Lenguaje C: Precedencia de OperadoresLenguaje C: Precedencia de Operadores
Precedencia Asociatividad
() [] -> . izda. a dcha.
++ -- ! sizeof() (tipo)
+ (unario) –(unario)
*(indirección) &(dirección)
dcha. a izda.
* / % izda. a dcha.
+ - izda. a dcha.
< <= > >= izda. a dcha.
== != izda. a dcha.
&& izda. a dcha.
|| izda. a dcha.
?: dcha. a izda.
= += -= *= /= dcha. a izda.
, (operador coma) izda. a dcha.
27. Lenguaje C: Entrada/Salida BásicaLenguaje C: Entrada/Salida Básica
• Función printf:
…
printf(“cadena_formato”,expresion1,expresion2,…);
…
La función printf permite escribir texto por pantalla. La cadena_formato
indica qué es lo que se va a escribir por pantalla en cada utilización de
printf. Es posible incluir en cadena_formato referencias a expresiones
que tras ser evaluadas deben incluirse en el texto que se imprimirá por
pantalla.
Ejemplo: …
int a=3;
float x=23.0;
char c=‘A’;
printf(“Hola mundo!!n”);
printf(“Un entero %dn”,a);
printf(“Un real %f ny un char %cn”,x,c);
…
28. Lenguaje C: Entrada/Salida BásicaLenguaje C: Entrada/Salida Básica
• Función printf: Formato
Cadena Formato Tipo de Expresión Resultado Impreso
%d %i short, int
número entero
%ld %li long
%u
unsigned short, unsigned
int número entero sin signo
%lu unsigned long
%o
[unsigned] short,
[unsigned] int número entero octal sin signo
%lo [unsigned] long
%x %X
[unsigned] short,
[unsigned] int número entero hexadecimal sin signo
%lx %lX [unsigned] long
%f
float, double,
long double
número real en coma fija
%e %E %g %G
float, double,
long double
número real en notación científica
%c char, unsigned char se imprime un símbolo ASCII
%s char* se imprime una cadena de símbolos
%p void* se imprime el valor de un puntero
29. Lenguaje C: Entrada/Salida BásicaLenguaje C: Entrada/Salida Básica
• Función scanf:
…
scanf(“cadena_formato”,expresion1,expresion2,…);
…
La función scanf permite leer texto desde teclado. La cadena_formato
indica qué es lo que se va a leer por teclado en cada utilización de scanf.
Es posible incluir en cadena_formato referencias a expresiones que tras
ser evaluadas deben incluirse en el texto que se imprimirá por pantalla.
Ejemplo:
…
int a;
float x;
char c;
scanf(“%d”,&a); /* Lee un entero y lo
almacena en a */
scanf(“%f %c”,&x,&c); /* Lee x y c */
…
30. Lenguaje C: Entrada/Salida BásicaLenguaje C: Entrada/Salida Básica
• Función scanf: Formato
Cadena Formato Tipo de Expresión Resultado Impreso
%hd %hi short
se lee un número entero%d %i int
%ld %li long
%hu unsigned short
se lee número entero sin signo%u unsigned int
%lu unsigned long
%ho Short
se lee un número entero en octal%o int
%lo long
%hx %hX Short
se lee un número entero en hexadecimal%x %X int
%lx %lX long
%f %e %E %g %G float
se lee un número real%lf %le %lE %lg %lG double
%Lf %Le %LE %Lg %LG long double
%c char se lee un símbolo ASCII
%s char* se lee una cadena de símbolos
31. Lenguaje C: SentenciasLenguaje C: Sentencias
• Una sentencia de un programa en Lenguaje C es una instrucción de un
programa. Hay tres tipos de sentencias:
• Sentencias Generales
float espacio,espacio_inicial,tiempo,velocidad;
Scanf(%f,espacio,%f,espacio_inicial…..)
…
espacio=espacio_inicial+velocidad*tiempo;
printf(“Espacio recorrido =%fn”,espacio);
• Sentencia Vacía o Nula
; // sentencia vacía o nula
• Sentencias Compuestas o Bloques
…
{
int i,j,k,m;
…
i=j+k*m
}
…
32. Lenguaje C: Estructuras de ControlLenguaje C: Estructuras de Control
• Las estructuras o sentencias de control de flujo en C son las siguientes:
• Sentencias Condicionales
• if, if-else
• switch-case
• Operador Condicional ?
• Sentencias Iterativas o Bucles
• while
• do-while
• for
• Sentencias de Salto Incondicional
• continue
• break
• goto
33. Lenguaje C: Sentencias CondicionalesLenguaje C: Sentencias Condicionales
• Sentencia Condicional if:
…
if(expresion_logica)
sentencia;
…
Si expresion_logica se evalúa como verdadera (1) entonces se ejecuta
sentencia. Si expresion_logica se evalúa como falsa (0) entonces
sentencia no se ejecuta y el programa continua ejecutándose en la
siguiente línea.
Ejemplos:
…
if(a>b)
mayor=a;
…
…
if(a>b)
{ // sentencia compuesta
mayor=a;
printf(“mayor=%dn”,mayor);
}
…
34. Lenguaje C: Sentencias CondicionalesLenguaje C: Sentencias Condicionales
• Sentencia Condicional if-else:
…
if(expresion_logica)
sentencia_1;
else
sentencia_2;
…
Si expresion_logica se evalúa como verdadera (1) entonces se ejecuta
sentencia_1. Si expresion_logica se evalúa como falsa (0) entonces
se ejecuta sentencia_2.
Ejemplos:
…
if(a>b)
mayor=a;
else
mayor_o_igual=b;
…
…
if(a>b)
{ // sentencia compuesta
mayor=a;
printf(“mayor=%dn”,mayor);
}
else
{ // sentencia compuesta
mayor_o_igual=b;
printf(“mayor o igual=%dn”,mayor_o_igual);
}
…
36. Lenguaje C: Sentencias CondicionalesLenguaje C: Sentencias Condicionales
• Sentencia Condicional switch:
…
switch(expresion_entera)
{
case expresion_cte_1:
sentencia_1;
[break;]
case expresion_cte_2:
sentencia_2;
[break;]
…
case expresion_cte_n:
sentencia_3;
[break;]
[default:
sentencia_default;]
}
…
• Si expresion_entera es igual a
alguna de la expresiones constantes
{expresion_cte_1, …,
expresion_cte_n} entonces se
ejecuta la sentencia correspondiente
de entre las sentencias
{sentencia_1, …, sentencia_n}.
• Si expresión_entera no coincide con
ninguna de las expresiones
constantes {expresion_cte_1, …,
expresion_cte_n} se ejecuta la
sentencia sentencia_default
asociada con la sentencia default.
• Las sentencias break saltan el resto
de la sentencia condicional switch.
37. Lenguaje C: Sentencias CondicionalesLenguaje C: Sentencias Condicionales
• Sentencia Condicional switch:
Ejemplo:
…
printf (“Introduzca opción?:”);ç
scanf(“%d”,&opcion);
switch(opcion)
{
case 1: a=b+c; break;
case 2: a=b-c; break;
case 3: a=b*c; break;
case 4: a=b/c; break;
case 5: a=b%c; break;
default:
printf(“Error: opción %d no válida.n”,opcion);
}
…
38. Lenguaje C: Sentencias CondicionalesLenguaje C: Sentencias Condicionales
• Operador condicional ?:
…
(expresion_logica)? expresion_1: expresion_2;
…
Si expresion_logica se evalúa como verdadera (1) entonces se evalua
expresion_1. Si expresion_logica se evalúa como falsa (0) entonces
se evalúa expresion_2.
Ejemplo:
…
a=(a<0)? a+b: a-b;
…
…
// sentencia if-else equivalente
if(a<0) a=a+b;
else a=a-b;
…
39. Lenguaje C: Sentencias Iterativas o BuclesLenguaje C: Sentencias Iterativas o Bucles
• Sentencia iterativa while:
…
while(expresion_logica)
sentencia;
…
Mientras expresion_logica se evalúe como verdadera (1) se ejecuta
sentencia repetidamente. Cuando expresion_logica se evalúe como
falsa (0) entonces la ejecución continua en la siguiente sentencia de
programa.
Ejemplos: …
a=0;
while(a<b)
a++;
…
…
a=0;
while(a<b)
{ // sentencia compuesta
a++;
printf(“a=%dn”,a);
}
…
40. Lenguaje C: Sentencias Iterativas o BuclesLenguaje C: Sentencias Iterativas o Bucles
• Sentencia iterativa do-while:
…
do
sentencia;
while(expresion_logica);
…
Inicialmente se ejecuta sentencia una vez.Luego mientras
expresion_logica se evalúe como verdadera (1) sentencia se
ejecuta repetidamente. Cuando expresion_logica se evalúe como falsa
(0) entonces la ejecución continua en la siguiente sentencia de programa.
Ejemplos:
…
a=-1;
do
a++;
while(a<b);
…
…
a=-1;
do
{ // sentencia compuesta
a++;
printf(“a=%dn”,a);
} while(a<b);
…
41. Lenguaje C: Sentencias Iterativas o BuclesLenguaje C: Sentencias Iterativas o Bucles
• Sentencia iterativa for:
…
for(sentencia_inicializacion;
expresion_logica;
sentencia_actualizacion)
sentencia;
…
Inicialmente se ejecuta sentencia_inicializacion. A continuación
se evalúa expresion_logica. Si se evalúa como verdadera (1) se
ejecuta sentencia, y luego sentencia_actualizacion. Luego se
vuelve a evaluar expresion_logica y si es verdadera se vuelve a
ejecutar sentencia, y luego sentencia_actualizacio. Esto se hará
repetidamente hasta que expresion_logica se evalúe como falsa (0), en
ese punto el bucle finaliza y la ejecución continua en la siguiente sentencia
de programa.
43. Lenguaje C: Sentencias de Salto IncondicionalLenguaje C: Sentencias de Salto Incondicional
• Sentencia continue:
…
continue;
…
Se utiliza dentro de sentencias repetitivas o bucles para obligar a la
finalización de la iteración actual y reevaluación de la expresión lógica que
controla la duración del bucle.
Ejemplo: …
// sumando
for(i=-n, suma=0; i<n; i++)
{
if(n<0) continue;
printf(“Sumando %dn”,a);
suma=suma+i;
}
…
…
// sentencia while equivalente
i=-n; suma=0;
while(i<n)
{ // sentencia compuesta
if(n<0) continue;
printf(“Sumando %dn”,a);
suma=suma+i;
i++;
}
…
44. Lenguaje C: Sentencias de Salto IncondicionalLenguaje C: Sentencias de Salto Incondicional
• Sentencia break:
…
break;
…
Se utiliza dentro de la sentencia condicional switch, así como en
sentencias repetitivas o bucles para obligar a la finalización de la sentencia
y continuación del programa en la siguiente sentencia de programa.
Ejemplo:
…
// sumando
for(i=0; i<n; i++)
{
if(i==2) break;
printf(“Sumando %dn”,i);
suma=suma+i;
}
…
…
// sentencia while equivalente
i=0; suma=0;
while(i<n)
{ // sentencia compuesta
if(i==2) break;
printf(“Sumando %dn”,i);
suma=suma+i;
i++;
}
…
45. Lenguaje C: Sentencias de Salto IncondicionalLenguaje C: Sentencias de Salto Incondicional
• Sentencia goto:
…
goto etiqueta;
…
etiqueta: sentencia;
…
La instrucción goto hace saltar la ejecución del programa a la sentencia
sentencia etiquetada con la etiqueta etiqueta.
Ejemplo:
…
// contando
i=0;
inicio_bucle:
prinft(“i=%dn”,i);
i++;
if(i<n)
goto inicio_bucle;
…
…
// sentencia while equivalente
i=0;
while(i<n)
{ // sentencia compuesta
printf(“i=%dn”,i);
i++;
}
…