Programación estructurada (Introducción a lenguaje C) M. en C. Sergio Luis Pérez Pérez UAM CUAJIMALPA, MÉXICO, D. F. Trimestre 15-I Sergio Luis Pérez (UAM CUAJIMALPA) Curso de programación estructurada 1 / 19
Breve historia del lenguaje C Breve historia del lenguaje C 1 Breve historia del lenguaje C 2 Manual de referencia Sergio Luis Pérez (UAM CUAJIMALPA) Curso de programación estructurada 2 / 19
Breve historia del lenguaje C Breve historia del lenguaje C I El lenguaje de programación C fue creado en 1972 por Dennis MacAlistair Ritchie (9 de septiembre de 1941-12 de octubre de 2011, premio Turing de 1983) en los Laboratorios Bell como evolución del anterior lenguaje B, a su vez basado en BCPL. Es un lenguaje orientado a la implementación de Sistemas Operativos, en particular Unix. C maneja tipos de datos estáticos y es débilmente tipificado. C es considerado un lenguaje de medio nivel pero con muchas características de bajo nivel. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de programación estructurada 3 / 19
Breve historia del lenguaje C Breve historia del lenguaje C II También dispone de las estructuras típicas de los lenguajes de alto nivel. Los compiladores suelen ofrecer extensiones al lenguaje que posibilitan mezclar código en ensamblador con código C o acceder directamente a memoria o dispositivos periféricos. La primera estandarización de C fue en ANSI, con el estándar X3.159-1989, conocido como ANSI C. En 1990, fue ratificado como estándar ISO (ISO/IEC 9899:1990). La adopción del estándar ISO es muy amplia por lo que, si los programas creados lo siguen, el código es portátil entre plataformas y/o arquitecturas. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de programación estructurada 4 / 19
Breve historia del lenguaje C Breve historia del lenguaje C III Las principales propiedades de C son: Un núcleo del lenguaje simple con un conjunto de funcionalidades añadidas mediante bibliotecas estándar. Permite programar de manera estructurada. Maneja un sistema de tipos que impide operaciones sin sentido. Usa un lenguaje de preprocesado, el preprocesador de C, que permite definir macros e incluir múltiples archivos de código fuente. Permite el acceso a memoria de bajo nivel mediante el uso de apuntadores. Permite interrupciones al procesador con uniones. Utiliza un conjunto reducido de palabras reservadas. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de programación estructurada 5 / 19
Breve historia del lenguaje C Breve historia del lenguaje C IV El paso de parámetros a una función, por defecto, se realiza por valor. El paso por referencia se consigue pasando explícitamente las direcciones de memoria de dichos parámetros. Permite apuntadores a funciones y a variables estáticas, siendo una forma rudimentaria de encapsulado y polimorfismo. Tipos de datos agregados mediante struct que permite relacionar datos. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de programación estructurada 6 / 19
Manual de referencia Manual de referencia 1 Breve historia del lenguaje C 2 Manual de referencia Sergio Luis Pérez (UAM CUAJIMALPA) Curso de programación estructurada 7 / 19
Manual de referencia 1 Breve historia del lenguaje C 2 Manual de referencia Constantes Sergio Luis Pérez (UAM CUAJIMALPA) Curso de programación estructurada 8 / 19
Manual de referencia I La siguiente tabla presenta a los identificadores utilizados como palabras reservadas. 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 auto. Es un modificador que indica que una variable se crea al inicio de la ejecución de una función y se destruye al final. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de programación estructurada 9 / 19
Manual de referencia II extern. Permite declarar variables que podrán ser utilizadas en el resto de un archivo pero sin definirlas. Dichas variables deben haber sido definidas en algún otro lado. /*estas instrucciones definen variables*/ int primo = 2; double valores[100]; /*estas instrucciones las declaran*/ extern int primo; extern double valores[]; goto. Es una instrucción de salto que permite saltos en el flujo del programa alterando drásticamente el flujo de control del mismo. register. Es un modificador que se aplica únicamente a variables locales e indica al compilador que dicha variable debe ser almacenada preferentemente en un registro del procesador. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de programación estructurada 10 / 19
Manual de referencia III int cuadrados(const int n) register int cont, suma = 0; for(cont = 1; cont <= n; cont++) suma += cont*cont; return suma; } static. Es un modificador que indica que una variable se vuelve local a una función y su valor no se destruye al finalizar dicha función donde fue declarada. int avanza() static int cont = 0; cont++; return cont; } Sergio Luis Pérez (UAM CUAJIMALPA) Curso de programación estructurada 11 / 19
Manual de referencia IV int i; for(i = 0; i < 10; i++) printf( %d\n, avanza()); Si una variable global es declarada como static entonces sólo será visible en el archivo donde fue declarada por lo que no entrará en conflicto con otras declaradas con el mismo nombre pero en otros archivos. struct. Permite definir colecciones de una o más variables, de tipos posiblemente diferentes, agrupadas bajo un solo nombre. struct point{ int x, y; } punto;... printf( %d %d, punto.x, punto.y); Sergio Luis Pérez (UAM CUAJIMALPA) Curso de programación estructurada 12 / 19
Manual de referencia V Las estructuras se pueden copiar y asignar, pasar a funciones y ser regresadas por funciones. typedef. Permite crear un nuevo nombre para un cierto tipo de dato. typedef long long int entero64; entero64 mivariable; union. Es una variable que puede contener, en diferentes momentos, objetos de diferentes tipos y tamaños. El compilador se encarga del seguimiento del tamaño y alineación. union utag{ int ival; double dval; char *sval; } u; Sergio Luis Pérez (UAM CUAJIMALPA) Curso de programación estructurada 13 / 19
Manual de referencia VI imprime(int tipo){ switch(tipo){ case INT:{ printf( %d, u.ival); }break; case DOUBLE:{ printf( %lf, u.dval); }break; case CADENA:{ printf( %s, u.sval); }break; default:; } Sergio Luis Pérez (UAM CUAJIMALPA) Curso de programación estructurada 14 / 19
Manual de referencia VII void. Es un tipo inexistente que no se puede utilizar en forma alguna, ni se puede realizar la conversión explícita o implícita a tipos no void. Sin embargo si se declara un apuntador a void entonces cualquier apuntador puede ser convertido a tipo void sin pérdida de información. int compara(const void* a, const void* b){ const char *s = (const char*)a, *t = (const char*)b; int i; printf( %s %s, s, t); for(i = 0; s[i]! = \0 && t[i]! = \0 && s[i] == t[i]; i++); return s[i] < t[i]? -1 : (s[i] == t[i]? 0 : 1); } volatile. Es un modificador que indica al compilador que una variable puede cambiar por medios externos al programa. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de programación estructurada 15 / 19
Constantes Manual de referencia Constantes 1 Breve historia del lenguaje C 2 Manual de referencia Constantes Sergio Luis Pérez (UAM CUAJIMALPA) Curso de programación estructurada 16 / 19
Constantes I Manual de referencia Constantes Constantes enteras. Si consiste de una secuencia de dígitos se toma como octal si comienza con 0 y como decimal en otro caso. Si es precedida por 0x o 0X se toma como hexadecimal. Si es precedida de u o U se toma como unsigned. También se pueden utilizar las letras ul, ull, l, ll como sufijos. Si la constante es decimal sin sufijo entonces se toma el primero de estos tipos en el que quepa: int, long int, unsigned long int. Si es octal o hexadecimal entonces se toma el primero de estos: int, unsigned int, long int, unsigned long int. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de programación estructurada 17 / 19
Manual de referencia Constantes Constantes II Constantes de caracter. Es una secuencia de uno o más caracteres encerrados entre apóstrofos. Nueva línea \n Diagonal inversa \\ Tab horizontal \t interrogación \? Tab vertical \v Apóstrofo \ Retroceso \b comillas \ Retorno de carro \r número octal \ooo Avance de forma \f número hexadecimal \xhh Campana \a Constantes flotantes. Se componen de una parte entera, un punto y una parte fraccionaria, mas optativamente un exponente entero signado y un sufijo f o F, l o L. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de programación estructurada 18 / 19
Constantes III Manual de referencia Constantes La parte entera o fraccionaria pueden omitirse pero no ambas. Por defecto son de tipo double. Constantes de enumeración. Constantes de cadena. Se especifican mediante comillas y entran en la categoría de almacenamiento static. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de programación estructurada 19 / 19