Вы находитесь на странице: 1из 14

Un lenguaje estructurado En un lenguaje estructurado como C, el programa se organiza en una serie de bloques de cdigo independientes que se llaman los

unos a los otros. Este mtodo de programacin soluciona algunos de los problemas ms recurrentes que se le pueden plantear al programador: en vez de tener que seguir atentamente el flujo de ejecucin a lo largo de un inmenso programa, se puede controlar la ejecucin en el bloque principal, que va llamando a los otros bloques para tareas secundarias o repetitivas. En este aspecto, C es similar a otros muchos lenguajes como Pascal, Ada, Modula, etc. sin embargo, estrictamente hablando, C no es un lenguaje estructurado en bloques. El motivo es que no se puede declarar una funcin local a otra funcin, es decir que no se puede definir una funcin que slo se pueda llamar desde el interior de otra. Por otro lado, los lenguajes de alto nivel ofrecen un gran nmero de construcciones condicionales y bucles. En estos lenguajes se limita o se elimina el uso de goto y de las etiquetas correspondientes, lo que era posible en programas anteriores, como por ejemplo, en Pascal. De hecho, en aquellos lenguajes que lo permiten, como C, el uso de goto est muy mal visto; ste es uno de los criterios que se usan habitualmente para juzgar si un cdigo est bien estructurado o no. En efecto, el uso de saltos con goto tiene tendencia a producir un cdigo espaghetti, que es difcil de leer y de mantener. Por el contrario, en los lenguajes estructurados se usan construcciones ms funcionales como if y bucles for y while, que clarifican la estructura del programa. El Lenguaje C y el Sistema UNIX. Como fue mencionado al principio, el lenguaje C se desarroll para tener un lenguaje de alto nivel en el que se pudiera programar el Sistema Operativo UNIX. Por lo mismo, los programas en C constan de uno o ms ficheros con procedimientos y declaraciones. Estos ficheros se pueden compilar por separado, generndose ficheros objeto independientes, que el montador (o linker) de enlaces ha de combinar para generar el programa ejecutable. La automatizacin de este proceso se realiza mediante una herramienta que depender del sistema en el que se realice la aplicacin. En UNIX, esta herramienta es (make). Los ficheros de las aplicaciones codificadas en C se dividen en dos tipos, segn su nombre acabe en: c o en .h. Los ficheros .c contienen la implementacin del mdulo y los .h (cabeceras o header) contienen la informacin sintctica y semntica sobre el uso de la interfase del mdulo. Los ficheros .h pueden ser dependientes de la aplicacin o propios del sistema operativo. Contienen un bloque de comentarios, sentencias de inclusin de otros ficheros .h, definiciones de constantes y tipos, y declaraciones de funciones. Debe recordarse eso si de que no se permite declarar variables en un fichero .h. En toda aplicacin existe adems un mdulo principal, que es el que define la funcin main. En este sistema existen varias funciones main, debido a que cada una se corresponde con la ejecucin de un programa, es decir, un proceso del sistema. Ligado a lo anterior, se corresponder ahora a explicar el funcionamiento del compilador de C en UNIX, el cual es utilizado para la obtencin de los ficheros ejecutables necesarios para el funcionamiento de la parte prctica del sistema. La funcin de este compilador no es slo traducir programas en lenguajes de alto nivel a cdigo mquina para que sean ejecutados en una computadora especfica. Este compilador adems proporciona un entorno de ejecucin adecuado en el que se pueden llevar acabo operaciones de entrada/salida, acceso a ficheros y a otras interfaces del sistema operativo. En el sistema operativo UNIX, el comando utilizado para compilar programas en C es cc. Este proceso de compilacin consta de 5 fases: 1)Preprocesamiento: es realizado por el programa cpp (preprocesador de C). Maneja definiciones de constantes, inclusin de ficheros, gestin de macros, compilacin condicional, etc.

2)Compilacin: tomando como entrada los resultados de la fase anterior, el programa ccom realiza chequeos sintcticos, el parsing, y la generacin del cdigo ensamblador. 3)Optimizacin: es opcional. Proporciona al generador de cdigo una mayor velocidad. 4)Ensamblado: el programa ensamblador asm se utiliza para crear un fichero objeto que contiene cdigo binario y genera la informacin que va a ser utilizada por el linker/cargador. 5)Cargado: el programa de cargado constituye un linker/cargador. Combina todos los ficheros objetos y enlaza (o linca)ste a todas las subrutinas de libreras necesarias para producir un programa ejecutable. El comando cc se encarga de tomar un fichero .c como entrada, generando el correspondiente fichero .o (objeto). A partir de un fichero .s o ensamblado, se produce este fichero .o. luego, este fichero .o se convierte en un fichero ejecutable. Si esta compilacin se realiza en un solo paso, entonces el fichero .o se borra automticamente.

Tipos de Datos. En C hay dos clases de tipos de datos: 1)Tipos de Datos Bsicos. Hay varios tipos bsicos de datos. Los ficheros de cabeceras limits.h y float.h especifican los valores mximos y mnimos para cada tipo. Se pueden clasificar en: Tipos Enteros: char, short, int, long y enum. Tipos Reales: float, double y long double Otros: void El tipo booleano no existe, para representarlo se utilizan los enteros, asignndole 0 a falso y cualquier otro valor a verdadero. (a)El Tipo Entero Cada tipo int pude ser calificado por las palabras claves signed o unsigned, lo que da lugar a tener disponibles los siguientes tipos extras: signed char, unsigned char signed short, unsigned short signed int, unsigned int signed long, unsigned long Un entero calificado signed es un entero con signo, esto es, un nmero entero positivo o negativo. Un nmero entero calificado unsigned es un nmero entero sin signo, el cual es manipulado como un nmero entero positivo. Si los calificadores signed y unsigned se utilizan sin un tipo especfico, se asume el tipo int. Por este motivo son equivalentes son: signed x; y signed int x; unsigned x; y unsigned int x; Tipo char

El tipo char se define generalmente en unidades de memoria de 1 byte (8 bits), que resultan ms que suficiente para trabajar con el cdigo ASCII estndar. El tipo char es utilizado para almacenar un valor entero en el rango -128 a 127, correspondiente a un carcter del cdigo ASCII. Solamente los valores 0 a 127 son equivalentes a un carcter. De forma similar el tipo unsigned char puede almacenar valores en el rango de 0 a 255. Valores correspondientes a los nmeros ordinales de los 256 caracteres ASCII. Ejemplo: char letra; /* Declara una variable de tipo char*/ letra = A; /* Asigna el valor A a la variable letra */ letra = 65; /* Cdigo correspondiente al caracter '*/ letra = A; /* Error. Piensa que A es una variable */ letra = "A "; /* Error. Piensa que "A " es una tira de caracteres */ Tipo int El tipo int puede calificarse con los adjetivos: int = 2 bytes. Su rango es de -32768 a + 32767. unsigned int = Los enteros sin signo van de 0 a 65535. short int = 2 bytes. Rango es de -32768 a 32767. unsigned short = Rango es de 0 a 65535. long int = 4 bytes. Rango es de -2147483648 a 2147483647. unsigned long = Rango es de 0 a 4294967295. Tipo enum Crear una enumeracin es definir un nuevo tipo de dato, denominado tipo enumerado y declarar una variable de este tipo. La sintaxis es la siguiente: enum tipo_enumerado { definicin de nombres de constantes enteras }; tipo_enumerado es un identificador que nombra al nmero tipo definido. Despus de definir un tipo enumerado, se puede declarar una o ms variables de ese tipo, de la forma: enum tipo_enumerado [variable[, variable]...]; Ejemplo: enum colores; { azul, amarillo, rojo, verde, blanco, negro; }; enum colores color; Este ejemplo declara una variable color del tipo enumerado colores, la cual puede tomar cualquier valor de los especificados en la lista. Por ejemplo: color = azul; Cada identificador, de la lista de constantes enteras en una enumeracin, tiene un valor. Por defecto, el primer identificador tiene asociado el valor 0, el siguiente es el valor 1, y as sucesivamente. color= verde; es equivalente a color = 3. A cualquier identificador de la lista, se le puede asignar un valor inicial por medio de una expresin constante. Los identificadores sucesivos tomarn valores correlativos a partir de ste. Por ejemplo:

enum colores { azul, amarillo, rojo, verde = 0, blanco, negro } color; Este ejemplo define un tipo enumerado llamado colores y declara una variable color de ese tipo. Los valores asociados a los identificadores son los siguientes: azul = 0, amarillo = 1, rojo = 2, verde = 0, blanco = 1 y negro = 2. A los miembros de una enumeracin se les aplica las siguientes reglas:

Dos o ms miembros pueden tener un mismo valor. Un identificador no puede tener ms de un tipo. Desafortunadamente, no es posible leer o escribir directamente un valor de un tipo enumerado.
(b)Tipo Real Las variables de tipo real son diferentes de las variables de tipo entero ya que se almacenan en memoria divididas en dos partes, en lugar de una. Las dos partes son: mantisa : la mantisa es el valor del nmero. exponente : la potencia a la que est elevado el nmero real en cuestin. Tipo float El tipo float necesita 4 bytes para ser almacenado: uno para el exponente y tres para el valor del nmero. Un real ensimple precisin es un nmero que puede tener un punto decimal y que puede estar comprendido en el rango de: -3.402823E+38 a -1.175494E-38 para nmeros negativos. 1.175494E-38 a 3.402823E+38 para nmeros positivos. Un nmero real en simple precisin no tiene ms de 7 dgitos significativos. Ejemplo: float a = 3.14159; Tipo double El tipo double utiliza 32 bytes para almacenar un nmero en punto flotante. De ellos, se usan 8 bits para expresar el valor del exponente y su signo, y 24 bits para representar la parte no exponencial. Un real en doble precisin es un nmero que puede tener un punto decimal y que puede estar comprendido en el rango de: -1.79769E+308 a -2.22507E-308 para nmeros negativos 2.22507E-308 a 1.79769E+308 para nmeros positivos Un nmero real en double precisin tiene hasta 16 dgitos significativos. Esto da lugar a clculos ms exactos que en simple precisin. Ejemplo: double a = 3.1415926; Tipo long double El tipo long double utiliza 10 bytes para almacenar un nmero en punto flotante.

Los valores para este tipo estn comprendidos en el rango de: -1.189731E+4932 a -3.362103E-4932 para nmeros negativos 3.362103E-4932 a 1.189731E+4932 para nmeros positivos Un nmero real en double precisin formato largo no tiene ms 19 dgitos significativos. Esto da lugar a clculos ms exactos que en double precisin. Ejemplo: double a = 3.17e+425; (c)Tipo void El tipo void se utiliza para declarar funciones que no retornan un valor o para declarar un puntero a un tipo no especificado. Si void aparece entre parntesis a continuacin del nombre de una funcin, no es interpretado como un tipo. En este caso indica que la funcin no acepta argumentos. Ejemplo: double fx(void); void fy(void); *p; Este ejemplo declara la funcin denominada fx como una funcin sin argumentos que devuelve un valor de tipo real de doble precisin; la funcin fy, como una funcin sin argumentos que no devuelve valor alguno; y un puntero p a un objeto de un tipo no especificado. 2)Tipo de Datos Compuestos Este apartado describe los mecanismos de formacin de tipos de datos ms complejos: vectores, registros (struct),registros variantes (union) y punteros. (a)Vectores Los vectores son conjuntos de elementos del mismo tipo. En C, todos los vectores empiezan en el elemento 0. La declaracin: int vt[MAX_PROCESS]; Declara un vector, vt, de enteros, con MAX_PROCESS (constante) posiciones. A estas posiciones se hace referencia como vt[0] a vt[MAX_PROCESS-1]. Existen vectores de dos, tres y ms dimensiones. Adems pueden ser de cualquier tipo. (b)Registros Los registros son conjuntos de variables, generalmente de tipos diferentes. La declaracin: typedef struct { char hostname[LONG_HOST]; int port; } type_address; Declara a type_address como un registro con dos campos, el vector de caracteres hostname y el entero port. Para asignar el valor 1001 al campo port, se indica: type_address.port = 1001;

Donde el operador "." indica que se ha seleccionado un miembro del registro. (c)Registros Variantes (unin) Los registros variantes estn formados tambin por varios miembros, pero slo pueden contener el valor de uno de ellos en cada momento. La declaracin: union type_mess { int m3; int m4[MAX_PROCESS]; }; Indica que type_mess puede contener un entero o un vector de enteros, pero no ambos. Los compiladores deben reservar espacio suficiente para que los registros variantes puedan contener la variante que ocupe ms espacio en memoria. (d)Punteros En C, los punteros se utilizan para almacenar direcciones de mquina. Su uso es muy frecuente. La declaracin: int i, *pi, a[10], *b[10], **ppi; Declara un entero i; un puntero a un entero, pi; un vector de 10 elementos, a; un vector de 10 punteros a enteros, b; y un puntero a un puntero a un entero, ppi. Las reglas exactas de sintaxis de declaraciones complejas que combinen vectores, punteros y otros tipos son bastante complicadas. Por ejemplo, la declaracin: typedef struct ptr_group { int group; int components; int view; struct ptr_group *p_group; ptr_process *p_process; } ptr_group; Las siguientes expresiones: ptr_group *p;ptr_group g; declaran que p es un puntero a un registro de tipo ptr_group, y que g es un registro de ese tipo. Para hacer que p apunte a g, se hara: p = & g; donde el smbolo "\&" representa el operador unario que hace referencia a la direccin de la variable que le sigue. Para copiar la variable enteragroup_num, el valor del miembro group, se escribe: group_num = p-group; Ntese el empleo de la flecha para acceder a los miembros de un registro por medio de un puntero. Una forma equivalente es la siguiente: group_num = *(p.group); Donde "*" es el operador unario de indireccin, mediante el cual se accede al contenido de la direccin que se pone a continuacin. Conversin de Tipos.

En C se pueden realizar variadas conversiones entre tipos. En muchas ocasiones es necesario forzar explcitamente el tipo resultante de la conversin. Esto puede conseguirse especificando el tipo deseado entre parntesis delante de la expresin que se ha de convertir, por ejemplo: marshall_long(packet, (long)i); Convertira el entero i a tipo long antes de pasarlo como parmetro al procedimiento marshall_long, que esperar a su entrada una variable de tipo long. Sentencias de Control. En C los procedimientos contienen declaraciones e instrucciones. Ya hemos examinado las declaraciones, as que es el momento de centrar la atencin en las instrucciones. Las instrucciones if, while y las de asignacin son igual de importantes que las de otros lenguajes.Lo nico que vale la pena destacar es que se utilizan llaves para agrupar instrucciones compuestas, y que la instruccin while tiene dos formas, la normal, y el do while, equivalente al repeat de Pascal. 1)Sentencia if Toma una decisin referente a la accin a ejecutar en un programa, basndose en el resultado (verdadero o falso) de una expresin. if (expresin) sentencia1; [ else sentencia2]; expresin:debe ser una expresin numrica, relacional o lgica. El resultado que se obtiene al evaluar la expresin esverdadero (no cero) o falso (cero). sentencia1/2: Representan una sentencia simple o compuesta. Cada sentencia simple debe estar separada de la anterior por un punto y coma. La ejecucin de la sentencia if sucede as:

Si el resultado de la expresin es verdadero, se ejecutar lo indicado por la sentencia1. Si el resultado de la expresin es falso, se ejecutar lo indicado por la sentencia2. Si el resultado de la expresin es falso, y la clusula else se ha omitido, la sentencia1 se ignora.
2)Sentencia while Ejecuta una sentencia, simple o compuesta, cero o ms veces, dependiendo del valor de una expresin. while (expresin) sentencia; Expresin: es cualquier expresin numrica, relacional o lgica. Sentencia: es una sentencia simple o compuesta. La ejecucin de la sentencia while sucede as:

Se evala la expresin.

Si el resultado de la expresin es cero (falso), la sentencia no se ejecuta y se pasa a ejecutar la siguiente sentencia en el programa. Si el resultado de la expresin es distinto de cero (verdadero), se ejecuta la sentencia y el proceso se repite comenzando en el punto 1.
3)Sentencia do-while Ejecuta una sentencia, simple o compuesta, una o ms veces, dependiendo del valor de una expresin. do sentencia; while (expresin); Expresin: es cualquier expresin numrica, relacional o lgica. Sentencia: es una sentencia simple o compuesta. La ejecucin de la sentencia do-while sucede de la siguiente forma:

Se ejecuta la sentencia o cuerpo de la sentencia do. Se evala la expresin. Si el resultado de la expresin es cero (falso), se pasa a ejecutar la siguiente sentencia en el programa. Si el resultado de la expresin es distinto de cero (verdadero), el proceso se repite comenzando en el punto 1.
4)Sentencia for Cuando se desea ejecutar una sentencia simple o compuesta, repetidamente un nmero de veces conocido, la construccin adecuada es la sentencia for. Su forma es la siguiente: for (inicializador; condicin; progresin) sentencia; Inicializador: representa la variable o las variables que sern inicializadas a un valor determinado. Condicin: es una expresin Boole (operados unidos por operadores relacionales y/o lgicos). Si se omite, se supone siempre que es verdadera. Progresin: es una expresin cuyo valor evoluciona en el sentido de que se d la condicin para finalizar la ejecucin de la sentencia for. Sentencia: es una sentencia simple o compuesta. La ejecucin de la sentencia for sucede de la siguiente forma:

Se inicializan la o las variables de inicializacin. Se evala la condicin. Si el resultado es distinto de cero (verdadero), se ejecuta la sentencia, se evala la expresin que da lugar a laprogresin de la condicin y se vuelve al punto 2.

Si el resultado de 2 es cero (falso), la ejecucin de la sentencia for se da por finalizada y se contina en la siguiente sentencia del programa.
5)Sentencia switch La sentencia switch permite ejecutar una de varias acciones, en funcin del valor de una expresin. La ejecucin de la sentencia switch sucede de la siguiente forma:

La sentencia switch evala la expresin entre parntesis y compara su valor con las constantes de cada case. La ejecucin de las sentencias del cuerpo de la sentencia switch, comienza en el case cuya constante coincida con el valor de la expr-test y contina hasta el final del cuerpo o hasta una sentencia que transfiera el control fuera del cuerpo (por ejemplo break). Si no existe un valor igual al valor de la expr-test, entonces se ejecutan las sentencias a continuacin de default, si esta clusula ha sido especificada. La clusula puede colocarse en cualquier parte del cuerpo y no necesariamente al final.
6)Sentencia break La sentencia break finaliza la ejecucin de una sentencia do, for, switch, o while en la cual aparece. Cuando estas sentencias estn anidadas, la sentencia break solamente finaliza la ejecucin de la sentencia donde est incluida. Expresiones. 1)Expresiones Numricas Las expresiones son secuencias de operandos y operadores. Los operadores ms comunes son: Operador Funcin () [] . -> ! -++ & * llamada a funcin Subndice de un arreglo Punto . acceso a miembro de una estructura. Flecha. Apunta a miembro " " " Inversor Lgico Resta Decrementar en uno Incrementar en uno Obtener la direccin de memoria Obtiene la indireccin (contenido de)

/ % + < > <= >= == != && || ?: = ,

Divisin modulo (resto de la divisin) suma menor que mayor que menor igual mayor igual igualdad de comparacin desigualdad operador lgico AND operador lgico OR condicional evala dos expresiones asignacin simple separador de variables, constantes y expresiones dentro de funciones, estructuras de control, etc. Determina el tamao de una variable o una estructura.

sizeof

Operadores de Asignacin: Operador Significado *= /= %= += -= multiplicado por dividido por modulo de aadir a sustraer desde

2)Expresiones Condicionales C Tiene un operador ternario (?:), que se utiliza en expresiones condicionales, las cuales tienen la forma: operando 1 ? operando2 : operando3 La expresin operando1 debe ser de tipo entero, real o puntero. La evaluacin se realiza de la siguiente forma:

Si el resultado de la evaluacin de operando1 es distinta de 0, el resultado de la expresin condicional es operando2. Si el resultado de la evaluacin de operando1 es 0, el resultado de la expresin condicional es operando3. Realizacin de un programa en C. Un programa en C est compuesto por un conjunto de procedimientos (que aunque no devuelvan un valor suelen denominarse funciones). Estos procedimientos contienen declaraciones, instrucciones y otros elementos que indican al ordenador sobre el que se trabaja, que es lo que tiene que hacer. Los pasos a seguir en la realizacin de un programa en lenguaje C son:

Se editan los ficheros fuentes ( fichero1.c, fichero2.c). Se compilan los ficheros fuentes obtenindose los ficheros objeto (fichero1.obj, fichero2.obj.) Los ficheros objeto son enlazados entre ellos y adems con otros ficheros objetos ( fichero.obj) , con librera propias (fichero4.lib) y del sistema ( .lib) dando lugar a un nico fichero ejecutable ( fichero.exe).
Para ejecutar el fichero ( fichero.exe) resultante, se escribe el nombre de dicho fichero (fichero), y se debe pulsar ENTER: fichero Archivos. Muchas aplicaciones requieren leer informacin de un perifrico auxiliar de almace-namiento. Tal informacin se almacena en el perifrico en la forma de un archivo de datos. Por lo tanto, los archivos de datos permiten almacenar informacin de modo permanente, para ser accedida o alterada cuando sea necesario. En C existe existen un conjunto extenso de funciones de biblioteca para crear y procesar archivos de datos. A diferencia de otros lenguajes de programacin, en C no se distingue entre archivos secuenciales y de acceso directo (acceso aleatorio). Pero existen dos tipos distintos de archivos de datos, llamados archivos secuenciales de datos (o estndar) y archivos orientados a sistema (o de bajo nivel). Generalmente es ms fcil trabajar con archivos de datos secuenciales que con los orientados a sistema. Apertura y Cierre de un archivo: Cuando se trabaja con archivos secuenciales de datos, el primer paso es establecer un rea de buffer, donde la informacin se almacena temporalmente mientras se est transfiriendo entre la memoria de la computadora y el archivo de datos. Este buffer permite leer y escribir informacin del archivo ms rpidamente de lo que sera posible de otra manera. El rea de buffer se establece escribiendo: FILE *ptvar; donde FILE (se requieren letras maysculas) es un tipo especial de estructura que establece el rea de buffer y ptvar la variable puntero indica el inicio de esta rea. El tipo de estructura de FILE est definido en el sistema de archivos include, tpicamente en stdio.h. El puntero ptvar se refiere a menudo a un archivo secuencial. Para abrir un archivo se utiliza la funcin de biblioteca fopen. Se escribe como: ptvar = fopen(nombre_archivo, tipo_archivo); donde nombre_archivo y tipo_archivo son cadenas que presentan, respectivamente, el nombre del archivo y la manera en la que el archivo ser utilizado. El nombre_archivo debe ser consistente con la manera en que se nombran los archivos en el sistema operativo

utilizado, y tipo_archivo est compuesto por una o varias de las cadenas que aparecen en la siguiente tabla: Tipo_Archivo "r" Significado Abrir un archivo existente solo para lectura. Abrir un nuevo solo para escritura. Si existe un archivo con el nombre_archivo especificado, ser destruido y creado uno nuevo en su lugar. Abrir un archivo existente para aadir (aadir informacin nueva al final del archivo). Se crear un archivo nuevo si no existe un archivo con el nombrenombre_archivo especificado. Abre un archivo existente para lectura y escritura. Abre un archivo nuevo para lectura y escritura. Si existe un archivo con el nombre_archivo especificado, ser destruido y creado uno nuevo en su lugar. Abrir un archivo existente para leer y aadir. Se crear un archivo nuevo si no existe un archivo con el nombre nombre_archivo especificado.

"w"

"a"

"r+"

"w+"

"a+"

Se retorna un valor NULL si no se puede abrir el archivo, por ejemplo si un archivo existente no se encuentra. Finalmente un archivo de datos debe cerrarse al final del programa. Esto puede realizarse con la funcin de biblioteca fclose, aunque la mayora de los compiladores de C cerrarn automticamente todos los archivos de una sesin. Edicin de un Programa Para editar un programa, primeramente se debe llamar, para su ejecucin, al programa editor o procesador de textos que se vaya a utilizar. Se puede utilizar el procesador de textos suministrado con el compilador o un propio procesador. El nombre del fichero para salvar el programa en el disco, debe tener como extensin .c. El paso siguiente es escribir el texto correspondiente al programa fuente. Cada sentencia del lenguaje C finaliza con un punto y coma y cada lnea del programa se finaliza pulsando la tecla Enter. Los comentarios comienzan con el smbolo /* y acaban con */, y pueden extenderse a varias lneas. A continuacin se presenta el siguiente ejemplo con lo dicho hasta ahora. /*********************Saludo*********************/ # include stdio.h # include stdlib.h main() { char *mensaje1 = "Bienvenido a C "; char *mensaje2 = "esto es un ejemplo "; system("cls "); printf(" Escriba su nombre: ");

gets(nombre); printf(" n%s %s n%s n ",mensaje1, nombre, mensaje2); } Las dos primeras lneas incluyen las declaraciones necesarias para las funciones que aparecen en el programa. Estas funciones son: system(), printf() y gets(). En la funcin main() lo que se hace es definir las cadenas de caracteresmensaje1 y mensaje2 y tomar del teclado la variable nombre. El despliegue en pantalla ser algo como esto: Bienvenido a C, <nombre que se haya elegido>, esto es un ejemplo. Compilar un Programa El siguiente paso es compilar el programa, esto es, transformar la versin del programa comprensible para el ser humano en la versin comprensible para el ordenador. Utilizando un procesador de textos o un editor, se escriben las lneas del programa, creando el fichero fuente. El compilador entonces utiliza este fichero para generar otro fichero pero escrito ahora en lenguaje mquina. Al compilar un programa, se pueden presentar errores de compilacin, debidos a que el programa escrito no se adapte a la sintaxis y reglas del compilador; pero es posible ir corrigiendo estos errores hasta obtener una compilacin limpia. Enlazar un Programa Enlazar es necesario ya que quiz no se desee compilar todo el programa al mismo tiempo. Por ejemplo, se puede escribir un programa largo, ste puede contener partes ya depuradas y otras pueden estar todava en desarrollo, luego slo se tendr que compilar la o las partes que estn en desarrollo. En base a esto, es necesario enlazar ficheros y libreras de programa que estn previamente compiladas. Este es el trabajo del linker. El linker combina todos los ficheros objeto necesarios, libreras y programas escritos por el usuario, para producir un programa final que sea ejecutable. Ejecutar un Programa Cada vez que se realiza el proceso de compilacin y enlace del programa, C genera automticamente sobre el disco un fichero con extensin.exe. Este fichero puede ser ejecutado directamente desde el DOS, sin el soporte de C, escribiendo el nombre del fichero.exe despus del prompt del DOS y pulsando Enter a continuacin. Al ejecutar el programa, pueden ocurrir errores durante la ejecucin. Por ejemplo, puede darse una divisin por cero. Estos errores solamente pueden ser detectados por C cuando se ejecuta el programa, pero son notificados con el correspondiente mensaje de error. Hay otro tipo de errores que no dan lugar a mensaje alguno. Por ejemplo: un programa que no termine nunca de ejecutarse, debido a que presenta un bucle o loop, donde no se llega a dar la condicin de termino. Para detener la ejecucin se tienen que pulsar las teclas Ctrl + C. Depurar un Programa Un programa una vez ejecutado puede dar lugar a una solucin incorrecta. Este caso exige un anlisis minucioso de cmo se desarrolla el programa en su ejecucin; esto es, entrar en la fase de depuracin del programa. La forma ms sencilla y eficaz para realizar este proceso, es utilizar un programa depurador. Funciones. En el lenguaje C, una funcin es el equivalente a un procedimiento en Pascal o a una subrutina en Fortran. Una funcin proporciona una forma conveniente de encapsular algunos clculos, que se pueden emplear despus sin preocuparse de su implantacin.

Con funciones diseadas adecuadamente, es posible ignorar cmo se realiza un trabajo; es suficiente saber qu se hace. El C hace que el uso de funciones sea fcil, conveniente y eficiente; es comn ver una funcin corta definida y empleada una sola vez, nicamente porque eso esclarece alguna parte del cdigo. Una definicin de funcin tiene la forma siguiente: tipo_de_retorno nombre_de_funcin ([parmetros]) { declaraciones; instrucciones; } Las definiciones de funcin pueden aparecer en cualquier orden y en uno o varios ficheros fuente, pero una funcin no puede separarse en archivos diferentes. Para devolver valores, las funciones ejecutan la instruccin return, que puede tener una expresin que se devuelve como el valor de la funcin. Cuando una funcin devuelve un valor, el tipo del mismo viene especificado antes del nombre de la funcin. Una funcin no tiene necesariamente que regresar un valor. Conclusiones. A pesar de que C fue creado cerca de 1970, su estudio perdura alrededor de todo el mundo; lo que no debe sorprender, ya que este lenguaje presenta bastantes caractersticas en relacin con sus defectos. Entre sus principales beneficios se encuentran: programacin estructurada, economa de las expresiones, abundancia en operadores y tipos de datos, codificacin en alto y bajo nivel simultneamente, reemplaza ventajosamente la programacin en ensamblador o con lenguajes de bajo nivel en general, utilizacin natural de las funciones primitivas del sistema, no est orientado a ninguna rea en especial, produccin de cdigo objeto altamente optimizado, facilidad de aprendizaje, etc. Aparte de esto, C es el lenguaje de eleccin en la implementacin de sistemas en la industria y comercio adems de muchos otros entornos. Se piensa que ser el lenguaje dominante en el comienzo del nuevo siglo as como tambin se piensa que lo fue a finales del siglo pasado. 21