curso de lenguaje c prev

17

Upload: jtk1

Post on 11-Jul-2015

240 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Curso de lenguaje c prev
Page 2: Curso de lenguaje c prev

PRE SE NT AC ION

Esta publicación recoge la documentación que se entrega en el Curso de Lenguaje "C"impartido por el Centro de Cálculo de la Universidad de Zaragoza.

Contiene una reproducción de todas las transparencias que usa el profesor en susexposiciones.

No es un manual de referencia, sino un material didáctico dirigido a facilitar lacomprensión de los conceptos, elementos y reglas de la construcción de programas conlenguaje "C".

En el curso, se explica el lenguaje desde el principio, en términos que presuponenconocimientos básicos sobre la progamación de computadores. Se estudian, presentandoabundantes ejemplos, todos los aspectos del lenguaje: tipos de datos, clases dealmacenamiento, operadores, expresiones, sentencias de control, funciones, bibliotecasestándar.

Hay una Introducción donde se exponen algunos datos históricos y característicasgenerales del lenguaje.

En la lección 1, se presenta un panorama general de la estructura de un programaescrito en C sin profundizar, con el fin de adquirir desde el principio familiaridad conalgunos aspectos importantes. Se habla del formato de escritura, de los comentarios, de lassentencias para el preprocesador, de la definición de funciones, de las reglas de alcance, delas expresiones, de la sentencias "if-else" y "for", de las funciones "scanf" y "printf".

En la lección 2 se tratan los elementos que forman el programa desde el punto devista léxico: caracteres, identificadores, palabras reservadas, constantes, cadenas,operadores, separadores.

La lección 3 es muy breve. Se trata únicamente el operador de asignación para explicarla semántica de las expresiones de asignación.

En la lección 4 se presentan los tipos de datos predefinidos sin entrar a fondo.También se trata de las clases de almacenamiento y de la inicialización de variables en lasdeclaraciones.

En la lección 5 se estudian los tipos fundamentales a fondo y los operadores másafines.

La lección 6 se dedica a mostrar todas las sentencias de control.

Page 3: Curso de lenguaje c prev

La lección 7 está dedicada a las funciones. Se estudian todos los aspectos relacionadoscon la definición y uso de las funciones. Se explican las reglas de alcance, las clases dealmacenamiento.

En la lección 8 se muestra un panorama general de los tipos estructuradospredefinidos sin entrar a fondo.

En la lección 9 se estudian a fondo el tipo "array", las cadenas y la relación con lospunteros. Se presentan algunas funciones de biblioteca para manejar cadenas de caracteres.

La lección 10 se dedica explicar el tipo "struct", los campos de "bits", las uniones ylos tipos definidos por el usuario.

En la lección 11 se presentan algunas funciones de biblioteca para leer y escribir enficheros: abrir y cerrar fichero, posicionar, leer y escribir un carácter, leer y escribir unacadena, leer y escribir en binario, leer y escribir con formato.

En la lección 12 se explican las bases para construir y manejar estructuras de datosdinámicas. Se estudia el caso de una lista encadenada con disciplina FIFO.

Page 4: Curso de lenguaje c prev

C.00.01

C ONT E NIDO

INT RODUC C ION

E ST RUC T URA Y FORM AT O DE L PROG RAM A.PANORAM A G E NE RAL .

EL E M ENT OS L E XIC OS.

E XPRE SIONE S Y SE NT E NC IAS. E XPRE SIONE S DEASIG NAC ION.

L OS T IPOS DE DAT OS. V ISION G E NE RAL .

L OS T IPOS DE DAT OS FUNDAM E NT AL E S.

L AS SENT ENC IAS DE C ONT ROL .

L AS FUNC IONE S.

L OS T IPOS DE DAT OS E ST RUC T URADOS. V ISION GENERAL .

" ARRAY S" , C ADE NAS Y PUNT E ROS.

E ST RUC T URAS, UNIONE S Y T IPOS DE FINIDOS PORE L USUARIO.

FUNC IONE S PARA M ANE J O DE FIC HE ROS.

E ST RUC T URAS DINAM IC AS DE DAT OS.

Page 5: Curso de lenguaje c prev

C.00.02

El lenguaje C fue diseñado por Dennis Ritchie, de los L aboratorios Bell,y se instaló en un PDP-11 en 1972.

Se diseñó para ser el lenguaje de los sistemas operativos UNIX.

Se creó para superar las limitaciones del lenguaje B, utilizado por K enThompson para producir la versión original de UNIX en 1970.

E l lenguaje B se basó en BCPL , lenguaje sin tipos desarrollado porM artin Richards, en 1967, para programación de sistemas.

Su definición apareció en 1978:

apéndice "C Reference M anual"del libro "The C programming L anguage"de Brian W. K ernighan y Dennis M . R itchie(Ed. Prentice-Hall)

En 1983, se publicó otro estándar:

"The C Programming L anguage-Reference M anual"(L ab.Bell)escrito por Dennis M . Ritchie

Page 6: Curso de lenguaje c prev

C.00.03

ES UN L ENGUAJ E DE NIVEL M EDIO

Combina elementos de lenguajes de alto nivel (tipos, bloques, ...) con lafuncionalidad de los ensambladores.

Permite manejar los elementos típicos de la programación de sistemas: bits

bytesdirecciones

NO E ST A FUE RT E M E NT E ORIE NT ADO A T IPOS

Tiene cinco tipos de datos básicos, tipos estructurados y admitedefinición de tipos por el usuario.

Pero permite casi todas las conversiones (p.ej. se pueden mezclar los tipos" int" y " char" en casi todas las expresiones).

No hace comprobaciones de error en tiempo de ejecución(desbordamiento de arrays, ...)

"Deja hacer" al programador.

Page 7: Curso de lenguaje c prev

C.00.04

E S UN L E NG UAJ E SE M I-E ST RUC T URADO

No es completamente estructurado en bloques porque no permitedeclarar procedimientos o funciones dentro de otros procedimientos ofunciones.

Pero tiene algunas características propias de los lenguajes estructurados:

• Dos formas de estructuración del código:

Con funciones independientesC on bloques

• Dispone de las sentencias típicas para construir estructuras de control:

whiledo-whilefor

Page 8: Curso de lenguaje c prev

C.00.05

E S UN L E NG UAJ E PARA PROG RAM ADORE S

Algunos otros lenguajes están hechos para no-programadores (BASIC ,C OBOL , ...)

E l lenguaje C está influenciado, diseñado y probado por programadoresprofesionales.

Proporciona:

• Una visión próxima a la máquina• Pocas restricciones• Pocas pegas• Conjunto reducido de palabras clave• Estructuración en bloques• Funciones independientes• Recursos para el encapsulamiento de datos

Permite alcanzar casi la eficiencia del código ensamblador, junto con laestructuración propia de lenguajes como AL GOL , M ODUL A-2.

Se diseñó para la programación de sistemas

L os programas son muy transportables

Actualmente se usa para otros propósitos

Page 9: Curso de lenguaje c prev

C.00.06

BIBLIOGRAFIA

"The C programming language"Brian W Kernighan y Dennis M. RitchieEd. Prentice-Hall, segunda edición, 1988.

"Lenguaje C. Introducción a la programación"Al Kelley e Ira PohlEd. Addison-Wesley, 1987 (edición original, en 1984).

"C estándar. Guía de referencia para programadores"P.J. Plauger y Jim BrodieEd. Anaya Multimedia, 1990 (primera edición en 1989)

"C. Manual de referencia. Segunda edición"Herbert SchildtEd. McGraw-Hill, 1990.

Manual de Referencia de la implementaciónque se use.

Page 10: Curso de lenguaje c prev

C.01.00

- 1 -

E ST RUC T URA Y FORM AT O DE L PROG RAM A.PANORAM A G E NE RAL .

• El formato de escritura• E jemplo de un programa completo• L os comentarios• L as sentencias para el pre-procesador• L as funciones. Definición de una función• L as declaraciones• Reglas de alcance• L as expresiones• L as sentencias• L a sentencia " if-else"• L a sentencia " for"• L a función " printf"• L a función " scanf"

Page 11: Curso de lenguaje c prev

C.01.01

#include <stdio.h>

main ( ){ saludo( ); primer_mensaje( );}

saludo(){ printf ("Buenos dias\n");}

primer_mensaje(){ printf("Un programa esta formado ");

printf("por funciones\n");}

Page 12: Curso de lenguaje c prev

C.01.02

L os programas se construyen con:

Comentarios.

Ordenes para el preprocesadorde macros.

Definiciones de funciones.

Expresiones formadas con constantes, variables,funciones y operadores.

Sentencias.

Page 13: Curso de lenguaje c prev

C.01.03

EL FORMATO DE ESCRITURA ES MUY FLEXIBLE:

Las constantes, identificadores y palabras clave deben separarse; peroello puede hacerse con :

- espacios en blanco- marcas de tabulador- marcas de salto de linea- comentarios

/* ej1.c Indica el menor de dos enteros leidos*/

#include <stdio.h>

void main ( ){

int n1, n2, menor (int, int);printf ("Introducir dos enteros:\n");scanf ("%d%d", &n1, &n2);if ( n1 == n2 )

printf ("Son iguales \n");else

printf ("El menor es: %d\n",menor(n1,n2));}

int menor (int a, int b){

if ( a < b ) return (a );else return ( b );

}

Page 14: Curso de lenguaje c prev

C.01.04

L OS C OM E NT AR IOS

Son lineas que ignora el compilador pero sirven para documentar losprogramas:

Empiezan con: /*

terminan con: */

pueden abarcar varias lineas

no se pueden anidar

/* ej1.c

Indica el menor de dos enteros leidos*/.........scanf(" % d% d" , & n1, & n2); /* aqui se leen dos

valores enteros */......

Page 15: Curso de lenguaje c prev

C.01.05

L AS SE NT E NC IAS PARA E L PRE PROC E SADOR

Son órdenes que el preprocesador interpreta antes de que el códigofuente sea compilado.E l preprocesador produce un programa escrito en C que es lo que secompila después.

Deben empezar con el símbolo " # " en laprimera columna.

# define PI 3.1416# define EQ ==----------# define cuadrado(x) ( (x) * (x) )----------# include <stdio.h># include <math.h>----------# define PRUEBA 1......# if PRUEBAprintf(" prueba: x = % d\n" , x);# endif----------# ifdef UNO......# else......# endif( cc -DUNO fn.c )----------# ifndef----------

Page 16: Curso de lenguaje c prev

C.01.06

LAS FUNCIONES

Un programa esta formado por funciones.

No se pueden definir anidadas.

Desde una función se puede llamar a cualquier otra.

Está permitida la recursividad.

Si no se indica otro tipo, las funciones son de tipo "int" pordefecto

El mecanismo de paso es por valor.

DEVUELVEN UN VALOR.

La función "main"

Todo programa debe contener una función llamada "main".

Es la invocada desde el sistema operativo cuando comienza laejecución del programa.

También devuelve un valor al medio de llamada.

Page 17: Curso de lenguaje c prev

C.01.07

DE FINIC ION DE UNA FUNC ION

Encabezamiento . . . . . . . . . . . . tipo nombre (p1, p2, p3)

Declaración de parámetros . . . . . tipo p1, p2, p3;

{

Cuerpo con: Declaraciones . . . . . . tipo v1, v2, v3;

Sentencias . . . . . . sentencia...sentencia

}

int menor(a, b)int a, b;{

if ( a<b ) return( a ); else return( b );}