practi01 Introducción a la Programación

43
Curso 02-0 3. Práctic 1 INTRODUCCIÓN A LA PROGRAMACIÓN 1 Departamento de Lenguajes y Sistemas Informáticos Curso 2002/2003

Transcript of practi01 Introducción a la Programación

Page 1: practi01 Introducción a la Programación

Curso 02-03. Práctica 1

1

INTRODUCCIÓN A LA PROGRAMACIÓN 1

Departamento de Lenguajes y Sistemas Informáticos

Curso 2002/2003

Page 2: practi01 Introducción a la Programación

Curso 02-03. Práctica 1

2

Práctica 1: Entorno de trabajo / Introducción al lenguaje CPráctica 2: Estructuras de control selectivasPráctica 3: Estructuras de control repetitivasPráctica 4: Funciones (I)Práctica 5: Funciones (II)Práctica 6: MódulosPráctica 7: Tablas Práctica 8: Cadenas de caracteresPráctica 9: EstructurasPráctica 10: Ficheros de textoPráctica 11: Ficheros binarios

Prácticas de LaboratorioTemario

Page 3: practi01 Introducción a la Programación

Curso 02-03. Práctica 1

3

•Entornos de programación•Edición, compilación, ejecución y depuración

•Entorno Microsoft Visual C++•Edición,Compilación y Ejecución•Ejecución paso a paso.•Guardar

Entorno de Trabajo

Page 4: practi01 Introducción a la Programación

Curso 02-03. Práctica 1

4

Entorno de Trabajo

(IX86, Pentium 4, Alpha, ...)

MS-DOS

WINDOWS 3.x, 95 y 98

EDITORES DE TEXTO (Edit, Bloc de Notas, Word, Latex)

ENTORNOS OFIMATICOS (Office, Lotus, WordPerfect...)

ENTORNOS DE PROGRAMACION (Visual C++, Turbo C, Visual Basic, etc)

APLICACIONES DE RED (TELNET, FTP, H323...)

NAVEGADORES (Netscape, Explorer)

UNIX, NT, LINUX, Windows 2000, XP

HARDWARE

SISTEMAS OPERATIVOS

APLICACIONESPROGRAMAS(Propietarios y

Multiplataforma)

Page 5: practi01 Introducción a la Programación

Curso 02-03. Práctica 1

5

Fases de la Compilación en General

Programa Ejecutable

Bibliotecas de terceros

Ficheros Fuentes

COMPILADOR

Bibliotecas estándar

Page 6: practi01 Introducción a la Programación

Curso 02-03. Práctica 1

6

Fuente Compilador

EnlazadoCompilaciónPrecompilación

Fases de la Compilación en C

*.C

*.H*.C” *.OBJ

*. EXE

Programa

*.LIB

*.LIB

Biblioteca estándar

Ficheros intermedios

Page 7: practi01 Introducción a la Programación

Curso 02-03. Práctica 1

7

INTRODUCCIÓN AL LENGUAJE C

1. Introducción

2. Descripción general del lenguaje

3. Estructura general de un programa

4. Declaración de importaciones

5. Definición de constantes

6. Declaración de variables

7. Definición de tipos

8. Expresiones

9. Asignación

10. Entrada y Salida

Page 8: practi01 Introducción a la Programación

Curso 02-03. Práctica 1

8

OBJETIVOS

• Estudiar los elementos básicos del lenguaje C: constantes, variables, tipos, expresiones y operadores, asignación, entrada y salida

• Realizar los primeros programas en lenguaje C

INTRODUCCIÓN AL LENGUAJE C

Page 9: practi01 Introducción a la Programación

Curso 02-03. Práctica 1

9

INTRODUCCIÓN AL LENGUAJE C

1. Introducción

El lenguaje C fue diseñado por Brian Kernighan y Dennis Ritchie en la segunda mitad de los años 70. C es un lenguaje de alto nivel que posee muchas de las facilidades propias de los lenguajes de bajo nivel.

El lenguaje C que estudiaremos será el estándar ANSI (American National Standard Institute).

Page 10: practi01 Introducción a la Programación

Curso 02-03. Práctica 1

10

INTRODUCCIÓN AL LENGUAJE C

2. Descripción general del lenguaje2.1. Características generalesCuando se diseñó este lenguaje, se pretendía realizar un lenguaje de

propósito general que produjese un código:

• portable• rápido• eficiente• compacto

Page 11: practi01 Introducción a la Programación

Curso 02-03. Práctica 1

11

INTRODUCCIÓN AL LENGUAJE C

2.2. Elementos sintácticosPalabras clave: aquellas que tienen un significado especial para el

compilador.

¡¡Sólo son 32!!Identificadores: nombres que referencian a los diferentes elementos de un programa que no son palabras clave.

Un identificador debe comenzar por una letra o el carácter subrayado (_) y puede ir seguido por dígitos, letras o el carácter subrayado.

¡Se distingue entre mayúsculas y minúsculas.!

auto double int struct break else long switchcase enum register typedef char extern return unionconst float short unsigned continue for signed voiddefault goto sizeof volatiledo if static while

auto double int struct break else long switchcase enum register typedef char extern return unionconst float short unsigned continue for signed voiddefault goto sizeof volatiledo if static while

Page 12: practi01 Introducción a la Programación

Curso 02-03. Práctica 1

12

INTRODUCCIÓN AL LENGUAJE C

Delimitadores: signos especiales que permiten al compilador separar y reconocer las diferentes unidades sintácticas del lenguaje. Los principales signos delimitadores son:

; se considera el terminador, que es necesario cuando finaliza cada una de las sentencias o declaraciones.

, separa dos elementos consecutivos de una lista.

( ) enmarca una lista de parámetros.

[ ] enmarca la dimensión o el subíndice de una tabla.

{} enmarca un bloque de instrucciones o una lista de valores iniciales.

Page 13: practi01 Introducción a la Programación

Curso 02-03. Práctica 1

13

INTRODUCCIÓN AL LENGUAJE C

Conviene utilizar espacios y/o paréntesis adecuadamente con objeto de hacer más legible el código fuente de los programas. Por ejemplo, las dos expresiones:

x = y/7-34*temp; x = (y/7)-(34*temp);

son equivalentes, siendo la segunda mucho más legible.

Page 14: practi01 Introducción a la Programación

Curso 02-03. Práctica 1

14

INTRODUCCIÓN AL LENGUAJE C

Los comentarios en C van entre los caracteres '/* ' y '*/'; por ejemplo,

/* Este es un comentario de una línea *//* Este es un comentario de dos líneas */

Los comentarios no deben anidarse unos en otros, pues los compiladores antiguos no los interpretan correctamente:

/* aquí hay un comentario/* anidado */ que es incorrecto */

Page 15: practi01 Introducción a la Programación

Curso 02-03. Práctica 1

15

INTRODUCCIÓN AL LENGUAJE C

3. Estructura general de un programa

declaración de importacionesdefinición de constantesdefinición de tiposdeclaración de prototiposvoid main (void){ declaración de variables instrucciones}

definición de funciones

Ejemplo#include <stdio.h> void main (void) { int a, b; printf ("\nIntroduzca dos números: "); scanf ("%d%d", &a, &b); printf ("\n\nEl producto es: %d", a*b); }

Ejemplo#include <stdio.h> void main (void) { int a, b; printf ("\nIntroduzca dos números: "); scanf ("%d%d", &a, &b); printf ("\n\nEl producto es: %d", a*b); }

Page 16: practi01 Introducción a la Programación

Curso 02-03. Práctica 1

16

INTRODUCCIÓN AL LENGUAJE C

4. Declaración de importaciones Se utilizan para comunicar al compilador dónde está la información

necesaria para interpretar correctamente las funciones, constantes y tipos utilizados en el programa. Esta información se almacena en un fichero de

extensión .h (fichero de cabecera, header file) que se importa mediante:

#include <nombre_fichero_cabecera.h>

El fichero de cabecera puede corresponderse con el uso de :• Biblioteca estándar (el más frecuente)

• stdio.h (funciones de entrada y salida)

• math.h (funciones matemáticas) • Otros módulos del mismo programa (Práctica 6)• Bibliotecas de terceros (Práctica 6)

Page 17: practi01 Introducción a la Programación

Curso 02-03. Práctica 1

17

INTRODUCCIÓN AL LENGUAJE C

5. Definición de constantes

Pueden ser de varios tipos de datos. En el caso de constantes de tipo carácter, éstas irán encerradas entre comillas simples, utilizándose las comillas dobles en el caso de cadenas de caracteres. El formato de uso es:

#define identificador_constante valor_constante

Ejemplos:#define PI 3.14159#define MAXIMO 999#define ULTIMALETRA 'Z'#define MENSAJE "Introduzca su edad:“

En la precompilación se sustituyen los identificadores con su valor real.

(Se sustituye el identificador_constante por valor_constante)

Page 18: practi01 Introducción a la Programación

Curso 02-03. Práctica 1

18

INTRODUCCIÓN AL LENGUAJE C

6. Declaración de variables

Permiten recuperar y almacenar valores de un tipo determinado a través de un identificador.

• Los Identificadores son alfanuméricos (incluido el ‘_’) y deben comenzar por una letra. Ejemplos:

suma Suma_total contador1 NotaMaxima

• La longitud máxima del identificador es de 32 caracteres.

• Deben declararse antes de su utilización.

Page 19: practi01 Introducción a la Programación

Curso 02-03. Práctica 1

19

INTRODUCCIÓN AL LENGUAJE C

Los tipos básicos de variables son:

• char, que representa un carácter

• int / long, que representa un número entero

• float / double, que representa un número real

Equivalencia con lostipos de datos de LEA:

TIPOS DE DATOS

LEA C

carácter char

entero int / long

real float / double

Page 20: practi01 Introducción a la Programación

Curso 02-03. Práctica 1

20

INTRODUCCIÓN AL LENGUAJE C

También existe el tipo void, que representa la ausencia de tipo.

La declaración de las variables se hace de acuerdo con el siguiente formato:

tipo lista_de_identificadores;

Ejemplos.-

char c;int i, j;long potencia;double radio, longitud;

Page 21: practi01 Introducción a la Programación

Curso 02-03. Práctica 1

21

INTRODUCCIÓN AL LENGUAJE C

Variables tipo carácter y códigos ASCII.

Las constantes y variables de tipo char se almacenan en un byte, por tanto pueden almacenar 28=256 valores diferentes (no todos tienen grafía).

La correspondencia entre un carácter y el lugar que ocupa dentro de los 256 no es única. La más habitual en los PC’s es conocida como codificación ASCII (American Standard Code for Information Interchange).

Primero los números después las mayúsculas y después las minúsculas.

'0': 48 '1': 49 '2': 50 ... '9': 57

'A': 65 'B': 66 'C': 67 ... 'Z': 90

'a': 97 'b': 98 'c': 99 ... 'z': 112

Page 22: practi01 Introducción a la Programación

Curso 02-03. Práctica 1

22

INTRODUCCIÓN AL LENGUAJE C

No hay una relación especial entre el valor del carácter constante que

representa un dígito y el valor entero intrínseco del dígito; es decir, el valor de

'3' no es 3. El hecho de que los valores de 'a', 'b', 'c', etc. sean correlativos es

importante, pues simplifica la clasificación de caracteres y palabras en orden

alfabético.

Algunos caracteres no son imprimibles, y se representan de una forma

especial, por ejemplo, '\n' (nueva línea), '\r' (retorno de carro) y '\0'

(carácter nulo) se conocen como Secuencias de Escape

Page 23: practi01 Introducción a la Programación

Curso 02-03. Práctica 1

23

INTRODUCCIÓN AL LENGUAJE C

7. Tipos definidos por el usuarioSimplifican la escritura de programas reales (‘los de verdad’), pues permiten que el programador pueda utilizar tipos de datos cercanos al problema a tratar. La instrucción para definir un nuevo tipo es:

typedef tipo Nombre;Ejemplos:

typedef enum {Falso, Cierto} Logico;typedef int Contador;typedef enum {rojo, verde, azul} Color;

La declaración de variables de tipos de usuario no varía, por ejemplo: Logico encontrado;Contador i, j; Color color_fondo;

Page 24: practi01 Introducción a la Programación

Curso 02-03. Práctica 1

24

INTRODUCCIÓN AL LENGUAJE C

8. Expresiones

Permiten expresar diversos tipos de operaciones entre los elementos de un programa (constantes, variables y funciones).

8.1. Operadores aritméticosOperan sobre datos de tipo numérico, y son los siguientes:

- resta (menos unario) * producto % módulo+ suma / división -- decremento

++ incrementoEjemplos de expresiones aritméticas:

(votos/electores)*100 a*x*x + b*x + choras*3600+minutos*60+segundos (alto-bajo)/2

Page 25: practi01 Introducción a la Programación

Curso 02-03. Práctica 1

25

INTRODUCCIÓN AL LENGUAJE C

8.2. Operadores relacionales

Operan sobre elementos de diferentes tipos y evalúan un tipo lógico:> mayor que< menor que>= mayor o igual que<= menor o igual que== igual que!= distinto de

Ejemplos de expresiones relacionales:x >= (y+z)contador < MAXIMOnumero%2 == 0ordenado != Cierto

Page 26: practi01 Introducción a la Programación

Curso 02-03. Práctica 1

26

INTRODUCCIÓN AL LENGUAJE C

8.3. Operadores lógicos

Estos operadores operan sobre tipos lógicos, evaluando un tipo lógico:

&& Y

|| O

! NO

Ejemplos de expresiones lógicas:

(opcion < MINIMO) || (opcion > MAXIMO)

(opcion >= MINIMO) && (opcion <= MAXIMO)

! encontrado

La evaluación de los operadores lógicos en C es perezosa.

Page 27: practi01 Introducción a la Programación

Curso 02-03. Práctica 1

27

INTRODUCCIÓN AL LENGUAJE C

8.4. Conversión de tipo en las expresiones

Cuando en una expresión se mezclan constantes y/o variables de distintos tipos, estos se convierten a un tipo único. El compilador de C convierte todos los operandos hacia el tipo del operando de mayor tamaño. Esto se hace operación a operación.

Ejemplos:

int i; double d; i + d es del tipo double.

int i= 100, j= 3; float f; f= i/j; ¿qué se almacena en f?

Page 28: practi01 Introducción a la Programación

Curso 02-03. Práctica 1

28

INTRODUCCIÓN AL LENGUAJE C

8.5. Precedencia y asociatividad de operadores¿Cómo resuelve el compilador la expresión ‘Res= 4 + 6 / 3 * 2?

• Reglas de precedencia. Establecen prioridad entre los operadores. Los paréntesis pueden alterar el orden de ejecución de las operaciones, ya que las expresiones que están dentro de los paréntesis se evalúan en primer lugar.

• Reglas de asociatividad. Resuelven la ambigüedad entre operadores de la misma prioridad. ea ahora la expresión

La expresión anterior es equivalente, pues, a la siguiente: 4 + ((6 / 3) * 2)

Page 29: practi01 Introducción a la Programación

Curso 02-03. Práctica 1

29

INTRODUCCIÓN AL LENGUAJE C

O perador A sociativ idad

! ++ -- - (unario) derecha a izquierda

* / % izquierda a derecha

+ - izquierda a derecha

< <= > >= izquierda a derecha

== != izquierda a derecha

& & izquierda a derecha

|| izquierda a derecha

Page 30: practi01 Introducción a la Programación

Curso 02-03. Práctica 1

30

INTRODUCCIÓN AL LENGUAJE C

8.6. FuncionesEn una expresión pueden intervenir funciones. En las expresiones aritméticas suelen utilizarse funciones matemáticas cuyo código se encuentra en la biblioteca estándar del compilador. Para utilizar dicha biblioteca será necesario importar el fichero de cabecera math.h:

sin (x) seno de xcos (x) coseno de xtan (x) tangente de xexp (x) función exponencial ex

log (x) logaritmo natural ln(x), x>0pow (x, y) potencia xy

sqrt (x) raíz cuadrada de xfabs (x) valor absoluto |x|

Los ángulos para las funciones trigonométricas están expresados en radianes y se utiliza el tipo double para su representación

Los ángulos para las funciones trigonométricas están expresados en radianes y se utiliza el tipo double para su representación

Page 31: practi01 Introducción a la Programación

Curso 02-03. Práctica 1

31

INTRODUCCIÓN AL LENGUAJE C

Ejemplos de expresiones

(-b + sqrt(b*b - 4*a*c))/(2*a)

(x >= MINIMO) && (x <= MAXIMO)

(contador < MAXIMO) && !encontrado

(anyo1 < anyo2) || (anyo1 == anyo2) && (mes1 < mes2)

anyo%4 == 0 && anyo%100 !=0 || anyo%400 == 0

Page 32: practi01 Introducción a la Programación

Curso 02-03. Práctica 1

32

INTRODUCCIÓN AL LENGUAJE C

9. AsignaciónLa operación de asignación consiste en asociar un valor a una variable a través de una expresión. La sintaxis en C es la siguiente:

nombre_de_variable = expresión ;

Primero se evalúa la expresión y luego se almacena el valor obtenido en la variable que aparece a la izquierda del operador de asignación (símbolo =).Por ejemplo, contador = 1;

media = (a + b) / 2.0;i = i + 1;kilometros = 1609 * millas;suma = 0;

Se puede asignar un valor inicial a una variable cuando se declara:int suma = 0;

Page 33: practi01 Introducción a la Programación

Curso 02-03. Práctica 1

33

INTRODUCCIÓN AL LENGUAJE C

Transformación a C de la asignación múltiple de LEA

LEA C

<x1, x2, ..., xn> := <e1, e2, ..., en> x1 = e1;x2 = e2;...xn = en;

Transformación a C del intercambio de variables en LEA

LEA C <x, y> := <y, x> t1 = y;

t2 = x;x = t1;y = t2;

Page 34: practi01 Introducción a la Programación

Curso 02-03. Práctica 1

34

INTRODUCCIÓN AL LENGUAJE C

9.1. Operadores de incremento (++) y decremento (--)

La asignación

i = i + 1;

se puede simplificar utilizando el operador de incremento (++):

i++;El operador de incremento también se puede utilizar dentro de una expresión más compleja, pero no es recomendable hacerlo. Así por ejemplo, la expresión

x = 5 + y++;deberá escribirse como

x = 5 + y;y++;

Uso del ++ / --Sólo a la derecha de la variabley nunca en una expresión

Page 35: practi01 Introducción a la Programación

Curso 02-03. Práctica 1

35

INTRODUCCIÓN AL LENGUAJE C

10. Entrada y salidaNo hay palabras reservadas del lenguaje que realicen tareas de entrada/salida, sino que todas estas operaciones están suministradas por la biblioteca estándar. Para utilizarlas es preciso importar el fichero de cabecera stdio.h

10.1. Entrada y salida de caracteres: funciones getchar y putchargetchar: lee un carácter de la entrada estándar (teclado) y devuelve su valor cuando se pulsa RETORNO. La función putchar escribe un carácter en la salida estándar (pantalla).

char ch;

ch = getchar ();putchar (ch);

lee un carácter del teclado, lo asigna a ch y lo escribe en la pantalla.

Page 36: practi01 Introducción a la Programación

Curso 02-03. Práctica 1

36

INTRODUCCIÓN AL LENGUAJE C

10.2. Entrada y salida de cadenas: funciones gets y puts

La función gets lee una cadena de caracteres de la entrada estándar, mientras que la función puts escribe una cadena de caracteres en la salida estándar, saltando a la línea siguiente.

Ejemplos:puts ("Escriba su nombre:");gets (nombre);

Page 37: practi01 Introducción a la Programación

Curso 02-03. Práctica 1

37

INTRODUCCIÓN AL LENGUAJE C

10.3. Entrada y salida con formato: funciones printf y scanf

La función printf permite escribir una lista de datos con un formato preestablecido. Acepta diferentes tipos de argumentos: carácter, valor numérico entero o real o cadena de caracteres, y los escribe según un formato especificado sobre la salida estándar. La forma de la función printf es:

printf ("formato", arg1, arg2, ..., argn);

donde argi pueden ser constantes, variables o expresiones, y “formato” es una serie de caracteres en la cual se pueden encontrar dos tipos de datos: un mensaje o texto a escribir literalmente, y los símbolos especificadores del formato con el cual se van a escribir las variables dadas como argumentos.

Por ejemplo: printf ("Esto es un mensaje\n");

Escribe la cadena Esto es un mensaje seguida de un salto de línea (debido al \n)

Page 38: practi01 Introducción a la Programación

Curso 02-03. Práctica 1

38

INTRODUCCIÓN AL LENGUAJE C

Los especificadores de formato deben ir precedidos del signo %. Algunos de ellos son:

%c carácter (char)%d número entero (int) %ld número entero (long)%f número real (float) %lf número real (double)%s cadena de caracteres

Por cada argumento a imprimir debe existir un especificador de formato, que indica el formato en el cual se va a mostrar el dato. Por ejemplo, siendo letra una variable de tipo char con el valor ‘A’, la instrucción

printf (“El código ASCII de %c es %d”, letra, letra);

escribirá

El código ASCII de A es 65

Page 39: practi01 Introducción a la Programación

Curso 02-03. Práctica 1

39

INTRODUCCIÓN AL LENGUAJE C

Otros ejemplos de printf:

printf (“\nEl cuadrado de %f vale %f”, x, x*x);

printf (“\nLa edad de %s es %d años”, “Juan”, edad);

printf (“\nSeno (%lf) = %lf\n”, x, sin(x));

La función printf puede emplearse sin argumentos, en cuyo caso sólo se imprimen los caracteres presentes en la cadena de formato.

Page 40: practi01 Introducción a la Programación

Curso 02-03. Práctica 1

40

INTRODUCCIÓN AL LENGUAJE C

Entre el símbolo "%" y el carácter que especifica la notación a emplear se pueden insertar ciertos caracteres opcionales. Son los siguientes:

• El signo (-) para que el dato se ajuste por la izquierda, en lugar de hacerlo por la derecha, que es lo establecido por defecto.

• Un número que indica la longitud mínima en caracteres que tiene el campo donde se mostrará el dato. Los espacios hacen de caracteres de relleno.

• Un punto decimal (.) seguido de una cifra que indica el número de dígitos tras el punto decimal de un dato real o el número mínimo de dígitos para un entero o el número máximo de caracteres de una cadena que serán impresos

Page 41: practi01 Introducción a la Programación

Curso 02-03. Práctica 1

41

INTRODUCCIÓN AL LENGUAJE C

Por ejemplo,

%8d imprime un número decimal (int) alineado por la derecha y en un campo de al menos ocho caracteres.

%-25s imprime una cadena de caracteres alineada por la izquierda y asegurando una longitud mínima de 25 caracteres (reserva al menos 25 espacios, si la longitud del valor a visualizar es mayor de 25 se visualizan todos).

%.6f imprime un número real (float) con un máximo de 6 cifras significativas en la parte fraccionaria.

Page 42: practi01 Introducción a la Programación

Curso 02-03. Práctica 1

42

INTRODUCCIÓN AL LENGUAJE C

La función scanf permite leer valores desde la entrada estándar y almacenarlos en las variables que se especifican como argumentos. Éstas deben ir normalmente precedidas por el símbolo &. La sintaxis es:

scanf ("formato", arg1, arg2, ..., argn);

donde debe haber tantos especificadores en la cadena de “formato” como variables en la lista de argumentos. Por ejemplo,

int n;double x;scanf ("%d%lf", &n, &x);

para leer un valor de tipo int y otro de tipo double. Los valores se introducirán desde la entrada estándar separándolos por espacios o retornos de carro. En la cadena de formato aparecen especificadores de formato (los mismos que ya se han visto) pero nunca deben aparecer caracteres ordinarios.

Page 43: practi01 Introducción a la Programación

Curso 02-03. Práctica 1

43

INTRODUCCIÓN AL LENGUAJE C

Como ejemplo del uso de printf y scanf, sea un programa que lee dos números del teclado y calcula e imprime la suma de ambos:

/* Programa que lee dos números y los suma */

#include <stdio.h>void main (void){ int a, b, suma; printf ("\nIntroduzca a y b: "); scanf ("%d%d", &a, &b); printf ("\n a vale: %d; b vale %d", a, b); suma = a + b; printf ("\n\nLa suma de a y b vale: %d\n", suma);}