Está en la página 1de 18

UNIDAD 3 .

- INTRODUCCIN AL LENGUAJE C
3.1 CARACTERSTICAS GENERALES DEL LENGUAJE C.

El lenguaje C fue desarrollado en 1972 por Dennis Ritchie. El desarrollo se bas en un lenguaje anterior, el B, escrito para el primer sistema operativo Unix, con el objeto de disponer de una herramienta para escribir compiladores. Es adecuado para programacin a bajo nivel (programacin de sistemas), ya que tiene una eficiencia muy cercana a los ensambladores. Es veloz, potente, flexible y produce cdigo compacto y eficiente. Es un lenguaje normalizado (ANSI) muy portable. Tiene un conjunto completo de instrucciones de control y de tipos de datos (y permite al programador modificar la interpretacin de dichos tipos). Distingue entre maysculas y minsculas. Casi todo se escribe en minsculas. Las sentencias terminan en ; (punto y coma). Permite agrupar instrucciones en bloques (Los delimitadores de bloque son las llaves). Utiliza como cdigo de escape la \ (sirve para interpretar lo que va detrs). El espacio en blanco, tabulador, av_pg. y nueva lnea son "separadores" de elementos de un programa. Es compilado, lo que es una ventaja frente a los lenguajes interpretados. Distingue los ficheros por su extensin: .c, .h, .obj, .exe. Incluye un preprocesador cuyas rdenes (llamadas directivas) comienzan por # y no terminan en ; Incluye el concepto de puntero, en el sentido de una variable que contiene la direccin de otra variable. La entrada/salida no forma parte del lenguaje; se proporciona a travs de una biblioteca de funciones. Separacin de un programa en mdulos que admiten compilacin independiente. Proporciona gran cantidad de funciones definidas a base de libreras. El programa principal siempre se llama main(). Tiene la caracterstica distintiva de los lenguajes estructurados: la compartimentalizacin de cdigos y datos. Se trata de la capacidad de un lenguaje de seccionar y esconder del resto del programa toda la informacin y las instrucciones necesarias para llevar a cabo una determinada tarea. Esto se consigue mediante el uso de funciones que empleen variables locales. As slo es necesario conocer que es lo que la funcin hace, no cmo lo hace. En C las funciones son los bloques en los que se desarrolla toda la actividad de los programas. Son las que permiten definir las tareas de un programa y codificarlas por separado, permitiendo as que los programas sean modulares. Los argumentos de las funciones se transfieren por su valor, de modo que cualquier modificacin en el valor de un parmetro dentro de una funcin, no afecta al valor de la variable fuera de la funcin. Admite el uso de comentarios en el cdigo fuente, para documentar el programa. El compilador reconoce como comentario cualquier nmero de caracteres encerrado entre /* y */. En c++ se puede utilizar // para comentarios en la misma lnea. 3.2 TIPOS DE DATOS

Las estructuras de datos son colecciones de datos caracterizados por su organizacin, que pueden ser: Simples: Se utiliza un identificador para cada objeto individual (variable o constante). En C, las estructuras de datos simples pueden ser estndar (pertenecientes al lenguaje y ya definidas) o definidas por el usuario. Existen 5 tipos de datos bsicos en C: carcter, entero, coma flotante, coma flotante de doble precisin y sin valor (char, int, float, double y void, respectivamente). Todos los dems tipos de datos se basan en estos 5. El tamao y el rango de estos tipos de datos varan con
Pgina 1 de 18

cada tipo de procesador y con la implementacin del compilador de C.

Pgina 2 de 18

Estructurados: Estn formadas por un conjunto de datos simples. Usa un identificador para varios objetos individuales, aunque podremos referenciarlos individualmente. Dentro de este grupo tenemos las estticas y las estructuras dinmicas. Estructuras estticas: arrays, registro y ficheros (externas). Estructuras dinmicas: pilas, colas, listas enlazadas, rboles, grafos. Los tipos bsicos de C son: void: Tipo vaco. El dato es nulo y no ocupa memoria. char: Un byte capaz de contener un carcter del juego de caracteres de la instalacin local (se utiliza para almacenar caracteres como letras o smbolos de puntuacin). int : Un entero del tamao de los enteros de la instalacin local. El C ofrece una cierta variedad de tipos enteros. Se diferencian en el rango de valores que pueden soportar, as como en la aceptacin o no de nmeros negativos. El tipo int es un entero con signo, por tanto se trata de un nmero sin decimales que puede ser positivo, negativo o cero. Pero C dispone de otras tres palabras clave que se aplican para modificar el tipo entero bsico: unsigned, long y short: 1. El tipo short int, o abreviadamente short, puede usar menos espacio de almacenamiento que int, lo que permite ahorrar memoria cuando se necesitan solamente nmeros de pequeo tamao. (2 bytes). 2. El tipo long int o long, puede usar mas espacio de almacenamiento que int, permitiendo usar enteros de 4 bytes. 3. El unsigned int, o unsigned desplaza el rango de nmeros que est permitido almacenar. float: Un nmero real en punto flotante de precisin 4 bytes segn la especificacin IEEE ( rango aprox. de 10-38 a 10+38). double: Un nmero real en punto flotante de doble precisin. (8 bytes) segn la especificacin IEEE. El rango aproximado es desde 10-308 a 10+308. Se admite el long double (10 bytes), con un rango desde 10-4932 a 10+4932. Verdadero / Falso: Un valor V es un valor distinto de 0 normalmente 1. Y un valor F es igual a 0. Tipos definidos por el usuario: Redefinicin de tipos: Se usa la instruccin typedef tipoactual nuevotipo; para definir sinnimos de tipos existentes, lo que facilita la lectura de los programas, su portabilidad, crecimiento, etc. Tipos enumerados: Son enteros, pero no pueden llevar unsigned, ya que es una lista de valores, comenzando en el cero, representados por identificadores. Para declarar el tipo enumerado: enum nombre { valor0, valor1, ...} [,variables]; Si se incluyen variables, ya ser definicin. Si no, slo declaracin del tipo (Es decir, no se reserva memoria). Las variables las podremos definir despus como siempre: enum nombre variables; Tipo puntero: Tipo de dato en el que el valor de la variable contiene (apunta a) la direccin de memoria de otra. Es un tipo derivado porque hay que conocer el tipo de dato al que apunta. El contenido de un puntero es una direccin de memoria donde se localiza un objeto de un tipo especificado. Declaracin (y definicin): Tipo * variable; Aqu el * no es el operador de indireccin, sino un recordatorio sintctico de que la variable es un puntero. Cuando * aparezca como operador unario en una expresin, si ser el operador de indireccin, de una variable que ya existe. Los punteros hay que inicializarlos antes de usarlos. Todo puntero tiene dos partes: Direccin a la que apunta, y tipo de dato contenido en esa direccin (le sirve para saber su longitud). Esto permite hacer operaciones aritmticas con los punteros.

Pgina 3 de 18

Por ejemplo: int * p,n; ... p+n; //desplaza p un nmero de bytes igual a n*longitud tipo entero, es decir n*4 posiciones de memoria. Con esta herramienta (el puntero), podemos acceder a un valor guardado en una variable de dos formas: directamente, usando el nombre de la variable, o indirectamente, usando el puntero, es decir, la direccin de la variable. 3.3 IDENTIFICADORES

Se utilizan para nombrar los diferentes objetos del lenguaje: variables, tipos de datos, funciones, etc. El primer carcter debe ser una letra o el smbolo de subrayado (_). En C se distinguen las maysculas de las minsculas (as Suma y suma son identificadores distintos). Ejemplos: contador, _halla_suma, cont1, nota_media. Las palabras clave son los identificadores que tienen un significado predeterminado en el lenguaje. No deben declararse objetos con estos nombres reservados. Ejemplos: int , double , case , switch , sizeof ....... 3.4 CONSTANTES

Las constantes C se refieren a valores fijos que no pueden ser alterados por el programa. Pueden ser de cualquier tipo de datos bsico. La forma en que se represente cada constante depende de su tipo. Constantes enteras: Estn formadas por secuencias de dgitos. si el primer dgito es 0, se toma en base 8, si el primer dgito es 0 y le sigue el carcter 'x' o 'X', se toma en base 16. Ejemplo: 10, 13, 012 (12 octal, 10 decimal), 0xa (a hexadecimal 10 decimal). Por defecto las constantes enteras son positivas; para usarlas como negtivas se emplea el signo - (-10). Constantes reales: Una constante real tiene el siguiente formato:[dgitos][.dgitos][E|e[-|+]dgitos]. El formato comprende: parte entera, parte decimal y exponente. Ejemplos: 12.1, 1.3333E1, -0.34444001,32e2,39e-7. (La E/e equivale a 10 elevado a). Constantes de caracteres: Una constante de un carcter se forma encerrndola entre comillas simples. El carcter puede ser cualquier representacin ASCII o una secuencia especial con la barra invertida. Ejemplos: 'a' (letra a minscula), 'A' (letra A mayscula), '9' (carcter 9), '\n' (carcter de nueva lnea), (espacio en blanco), \\' (barra invertida), '\'' (comilla simple), "' (comilla doble). Constantes de cadenas de caracteres: Una constante de cadenas de caracteres es una secuencia de caracteres encerrados entre comillas dobles. A las cadenas de caracteres el compilador les aade el carcter nulo '\0' al final, y las almacena como un array de caracteres. Ejemplo:"\n\tTeclea un nmero :\n". Ojo, las cadenas de caracteres como tal (string) no existen como tipo de dato en C. Constantes simblicas: Para establecer una constante simblica se utiliza la directiva #define, que sirve para definir un identificador y asociarle un conjunto de caracteres. Cada vez que aparezca el identificador en el programa fuente, se sustituir por la cadena de caracteres asociada. Como es una orden del preprocesador que usa un mecanismo de sustitucin, el compilador realmente slo ve los valores. Por ejemplo: #define MENSAJE printf("**LA VARIABLE VALE 100**") #define SI 'S' #define UNO 1000 #define DOS UNO+UNO

Pgina 4 de 18

3.5

VARIABLES

Una variable es una zona de memoria que puede adquirir cualquier valor de un conjunto de valores. Antes de que se pueda utilizar una variable en C hay que declararla, es decir informar de qu tipo de variable se trata. Nombres de las variables: El nombre de una variable se puede formar con dgitos, letras y un guin inferior, pero siempre debe contener al menos una letra. Pueden ocupar cualquier extensin pero el compilador slo acepta los 8 primeros. En C todas las variables tienen que declararse antes de ser utilizadas. La declaracin tiene el siguiente formato: <clase> <tipo> <lista de identificadores> donde la clase es la forma de almacenamiento de la variable, el tipo es una de las siguientes palabras reservadas: char, int, float, double void; y la lista de identificadores es una secuencia de identificadores separados por comas y finalizando por un punto y coma. Por ejemplo: char car1, car2, car3; int m, n; float x, y; Las variables se pueden declarar en tres sitios diferentes: Dentro de las funciones (variables locales). Fuera de todas las funciones (variables globales). En la definicin de los parmetros de las funciones (parmetros formales que son variables locales con valor inicial igual a los parmetros actuales). Variables locales: Se declaran dentro de un bloque de sentencias. Se crean al comienzo del bloque y se destruyen al salir de l. Las variables que se declaran como argumentos en las funciones tienen las mismas caractersticas que las variables locales. Variables globales: Se declaran fuera de todos los bloques. Se conocen a lo largo de todo el programa y se pueden utilizar desde cualquier sitio. Si dentro de un bloque se repite la declaracin de una variable definida en un bloque exterior, el acceso se referir exclusivamente a la variable dentro del bloque ms interno. Si dentro de un bloque se repite la declaracin de una variable definida en un bloque exterior, el acceso se referir a la variable del bloque ms interno, es decir, se oculta la variable ms externa. Modificadores Permiten controlar el modo en que las variables se modifican en el programa. Son dos: const: Indica que el valor de una variable no puede ser modificado (hace constante el valor de una variable). La variable debe estar inicializada (ya que despus no se podr modificar su valor). Se suele usar en los argumentos de las funciones para evitar que los modifiquen cuando se pasan como parmetros. volatile: Indica al compilador que el valor de una variable puede cambiar de una forma no explicitada por el programa. Es decir, que podr modificarse desde fuera del programa. Se usa, por ejemplo, cuando el programa le pasa esa variable como parmetro a una funcin del sistema, para que la actualice. CLASES DE ALMACENAMIENTO. Todas las variables llevan asociadas una clase de almacenamiento que determina su visibilidad y existencia. Hay cuatro clases de almacenamiento (la clase de almacenamiento se indica en la declaracin de las variable, anteponiendo una de las cuatro palabras reservadas): almacenamiento automtico (auto), alm. externo (extern), alm. esttico (static) y almacenamiento en un registro (register).

Pgina 5 de 18

Variables automticas: Una variable es de clase automtica si es local a una funcin o a un bloque, es decir su existencia est ligada a esa funcin o bloque. Si no se especifica una clase al declarar una variable, esta siempre es automtica. Es decir, es la clase de almacenamiento por defecto. Variables estticas. Una variable es de clase esttica si existe desde el comienzo hasta el final de la ejecucin del programa. Una variable esttica puede ser global a todo el programa o local a una sola funcin. Todas las variables globales son de clase esttica y accesibles desde todos los mdulos del programa. Una variable de clase esttica y local a una funcin, conserva su valor de una llamada a otra de la funcin. Ejemplo: void func1(void){ static int n; .... //n conserva su valor de una a otra llamada } Variables externas. Estas variables tienen almacenamiento permanente, y por lo tanto, se pueden emplear para pasar informacin entre los diferentes bloques de un programa. Todos las funciones y bloques declarados despus de una variable externa podrn acceder a ella. Una variable es externa a una unidad de compilacin cuando no se ha definido en esa unidad. Por ejemplo: Mdulo 1:PROG1.C int x; void main(void) { func1(); .... } Mdulo 2: PROG2.C extern int x; void func1(void) { .... } Cuando el compilador lee la palabra extern en la declaracin de x, reconoce que ya est definida en otro lugar, que puede ser otro mdulo; por lo tanto no tendr que reservar zona de memoria para ella. Variables de registro. Una variable es de clase registro cuando se desea que resida en uno de los registros de la CPU. El compilador intentar mantener a la variable en uno de los registros de la mquina. Slo se puede utilizar la variable registro con los tipos entero y carcter. El acceso a las variables declaradas as es mas rpido, de ah que se empleen las variables registros para controlar bucles. register int contador; 3.6 OPERADORES

Op. aritmticos: (signo)-, (incremento) ++, (decremento) --, (Suma) +, (resta) -, (producto) * , (cociente) /, (mdulo) %. El operador ++ incrementa el valor de su operando en 1. Puede aparecer delante (prefijo) o detrs de la variable (sufijo), y -- decrementa en uno el valor de la variable. Tienen una precedencia de asociacin muy alta; tan slo son superados por los parntesis. Ejemplos: x=a++; sufijo: a cambia despus de ser usado su valor. y=++b; prefijo: b cambia antes de ser usado su valor. Op. relacionales: > (Mayor ), >= (Mayor o igual), < (Menor ), <= (Menor o igual ), == (Igual a), != (Distinto) Operadores lgicos: Para enteros: ! (Negacin Lgica), && (AND), || (OR). Para bits: ~ (NOT es decir, C-1), << (Desplazamiento a la izquierda de bits), >> (Desplazamiento a la derecha de bits), & (AND para bits), | (OR para bits), ^(XOR es decir, OR exclusivo).

Pgina 6 de 18

Operadores y expresiones de asignacin: Son =,+=, -=, *=, .... Las expresiones como : i=i+2; i=i+c; (contadores o acumuladores) en las que el miembro izquierdo se repite en el derecho pueden escribirse como: i+=2; i+=c; utilizando el operador de asignacin += (y lomismo para el resto: - =, * = ,...). El operador secuencial ,: Este operador se utiliza para concatenar varias expresiones. El lado izquierdo de la coma siempre se evala primero. Por ejemplo, la expresin: m = (n = 30, n++, n*2) asigna 30 a la variable n, despus incrementa n y la multiplica por 2, valor que es asignado a m. El valor de m ser 62. La siguiente expresin invoca a la funcin f1(), luego a f2(), y despus a f3(). Por ltimo, asigna a m el valor que devuelve f3(): m = ( f1(), f2(), f3() ); Si quito los parntesis asigna a m el valor de f1(). En el bucle for podemos incluir ms de una inicializacin o incremento. Por ejemplo: for(a=0,c=2;a<=50;a++,c+=2) printf("%5d %7d\n", a,c); Hay coma en la 1 y 3 expresin. En la 1 "a" se inicializa a 0 y "c" a 2. En la 3 "a" se incrementa en 1 y "c" en 2. El operador condicional ?: Este operador se utiliza para reemplazar estructuras sencillas del tipo if-else. <condicin>?<expresin_v>:<expresin_f> Primero evala la condicin. Si es cierta (!=0) se hace expresin_v y sino (==0) la expresin_f. El operador de tamao: sizeof(operando): Este operador unitario devuelve el tamao en bytes del operando especificado entre parntesis, que puede ser una variable o un especificador de tipo como int, char. Los operadores de punteros * y &: Los operadores unitarios * y & se utilizan con punteros. Cuando se evala el operador unitario &, se obtiene la direccin del operando. El operador unitario * es el complemento del anterior, pues al evaluarse devuelve el valor de la variable a la que apunta el operando; por lo tanto el operando deber ser un puntero. Tambin se utiliza * para declarar una variable de tipo puntero. Ejemplos: int *pvalor, m, n, z; m = 1; n = 2; pvalor = &m; /* pvalor contendr la direccin de la variable m*/ *pvalor = 4; /* m = 4 se asigna el valor 4 al sitio apuntado por pvalor*/ pvalor = &n; /* pvalor contendr la direccin de la variable n*/ z = *pvalor; /*z = 2 se asigna a z el contenido de la direccin apuntada por pvalor */ Los operadores . y ->: Estos operadores se utilizan para acceder a los campos de uniones o de estructuras. Las uniones y estructuras son tipos de datos compuestos que contienen varios elementos. Se puede acceder a cada elemento utilizando el operador punto. Por ejemplo, dada la estructura: struct ALUMNO { char nom[30]; int edad;}; y la variable: struct ALUMNO alum; los elementos de alum se nombran de la siguiente forma: alum.nom, alum.edad, alum.curso. Cuando un puntero apunta a una estructura, se emplea el operador -> para acceder a los campos. Ejemplo: struct ALUMNO *alum; el acceso a sus campos es: alum->nom, alum>edad.

Pgina 7 de 18

Conversin De Tipos: Cuando en una expresin se mezclan constantes y variables de distintos tipos se convierten a un tipo nico. El compilador de C convierte todos los operandos al tipo del mayor operando, lo que se denomina "promocin de tipo". El rango de los tipos de mayor a menor es el siguiente: double, float, long, int, short, char. Los tipos unsigned tienen el mismo rango que el tipo a que estn referidos. En una sentencia de asignacin, el resultado final de los clculos se reconvierte al tipo de la variable a que estn siendo asignados. Operador de moldeado (cast): Es posible forzar a que una expresin sea de un tipo determinado utilizando un molde. La forma general es: (tipo) expresin; donde tipo es uno de los tipos estndar de C MOLDEADO (int ) x (long) x (float) x (char) x (unsigned char) x (char *) x (void *) x SIGNIFICADO Convierte x en un entero Convierte x en un entero largo Convierte x en un real Convierte x en un carcter (en un campo entero que ocupa un byte) Convierte x en un carcter de 8 bits (en un campo entero sin signo, que ocupa un byte) Convierte x en un puntero a caracteres Convierte x en un puntero genrico

Evaluacin De Operadores: La tabla siguiente resume las reglas de precedencia y asociatividad de todos los operadores. Los operadores situados en la misma lnea tienen la misma precedencia. Las filas estn colocadas por orden de precedencia decreciente. Por ejemplo los operadores *, / y % tienen la misma precedencia y esta es mayor que la de + y -. OPERADORES () [] -> . ~ ! ++ -- - (cast) * (punteros) & sizeof() * / % + << >> > >= <= < == != & ^ | && || ?: = += -= *= /= %= >>= <<= &= |= ^= , 3.7 EXPRESIONES Una expresin es cualquier combinacin vlida de operadores, constantes y variables. ASOCIATIVIDAD izq. a drcha. drcha. a izq. izq. a drcha. izq. a drcha. izq. a drcha. izq. a drcha. izq. a drcha. izq. a drcha. izq. a drcha. izq. a drcha. izq. a drcha. izq. a drcha. drcha. a izq. drcha. a izq. izq. a drcha.

Pgina 8 de 18

3.8

SENTENCIAS

Secuencial: Una expresin se convierte en una sentencia o instruccin cuando va seguida por un punto y coma, que utiliza el compilador para separar las distintas sentencias de un programa. Cuando varias sentencias se agrupan entre llaves, forman un bloque, sintcticamente equivalente a una sentencia. Los bloques de sentencias se pueden anidar y pueden llevar declaraciones. Alternativas: Simple y Doble (if ... [else]): if (expresin_lgica_1) sentencia1_v; [else sentencia1_f;] [else if (expresin_lgica_2) sentencia2_v;] [else sentencia2_f;] Mltiple (switch): Compara sucesivamente el valor de una expresin con una lista de constantes enteras o de caracteres. Cuando se encuentra una correspondencia, se ejecutan las sentencias asociadas con la constante. El formato es: switch (expresin_aritmtica){ case constante_1: secuencia de sentencias;[break;] case constante_2: secuencia de sentencias;[break;] ..... [default: // Se ejecuta si no se ha encontrado ninguna correspondencia. secuencia de sentencias;] } Se comprueba el valor de la expresin. Cuando se encuentra una correspondencia se ejecutan las sentencias asociadas con ese case, hasta que se encuentra la sentencia break o hasta el final de la sentencia switch. Repetitivas: for ([inicializacin];[expresin_lgica];[incremento]) sentencia; while (expresin_lgica) sentencia; do{ sentencia; }while (expresin_lgica); Bucles anidados: Se llama bucle anidado a aquel que est encerrado dentro de otro bucle. break: Tiene dos usos: terminar un case en la sentencia switch, y en los bucles (cuando se encuentra la sentencia break en un bucle, el ordenador termina inmediatamente el bucle y el control del programa vuelve a la sentencia siguiente del bucle). continue: Esta sentencia funciona de forma similar a la sentencia break. Sin embargo continue fuerza la siguiente iteracin y salta cualquier cdigo entre medias.

Pgina 9 de 18

La funcin "void exit (int estado)": No es una setencia, sino una funcin. Sirve para salir anticipadamente de un programa. Da lugar a la terminacin inmediata del programa, forzando la vuelta al Sistema Operativo. El valor de estado lo recibe el proceso que realiz la llamada al programa. Normalmente se utiliza el 0 para indicar salida normal y otros valores se usan para especificar errores. 3.9 ESTRUCTURA DE UN PROGRAMA C. Comentario inicial de programa y a lo largo del mismo (slo ocupan espacio en el fuente). Directivas del preprocesador (principalmente include y define). Declaracin de las estructuras de datos que usa el programa y definicin de variables globales. Declaracin de prototipos de funciones de usuario. Definicin de funciones, empezando por el main(), y continuando por el resto de funciones definidas por el usuario (Dentro de cada funcin deben ir primero las declaraciones y despes las sentencias). Adems, en C suelen seguirse una serie de normas de codificacin: Las constantes simblicas y tipos definidos por el usuario se ponen en maysculas. Los nombres de las variables van en minsculas. En los nombres compuestos, las palabras se separan con el _ Se debe usar una lnea para cada sentencia, y una sentencia para cada accin. Para las variables temporales enteras (contadores) se usan las letras i,j,k,m,n. Para las de carcter c,d,e. PROCESO DE CREACIN DE UN PROGRAMA

3.10

Edicin del cdigo fuente. Podemos utilizar cualquier editor y obtendremos los archivos ___.c (y __.h). Preprocesamiento. Expansin del cdigo fuente. El programa CPP (Preprocesador de C) incluye ficheros con declaraciones previas, sustituye smbolos y macros, etc., de manera que completa y prepara el programa para compilarlo. Modifica el cdigo que realmente se compila. Compilacion: Para compilar un programa, pulsamos alt-f9 o con el ratn en la opcin "proyect" y luego compile. Al pulsar alt-f9 aparecer una ventana con las lneas compiladas junto con cualquier advertencia y mensaje de error. Obtenemos el archivo objeto que contiene instrucciones directamente ejecutables por la CPU e instrucciones de referencia a otros ficheros objeto (libreras). Enlazado: Un enlazador (linker) rene los mdulos objetos (con extensines obj) generados por el compilador, en un programa ejecutable (con extensin .exe), que se puede cargar y ejecutar desde el sistema operativo. Se accede mediante la opcin "project" y despus buill all. Librerias de c: C proporciona un conjunto de bibliotecas estndar que pueden ser utilizadas de igual forma que sus propias funciones. Al objeto de poder utilizar una biblioteca, se requiere incluir el archivo de cabecera de la biblioteca, usar sus funciones y enlazar la biblioteca en el programa ejecutable. #include "demo1.h" Busca en el directorio actual y produce un error si el archivo no existe. #include <stdio.h> Busca en una ruta especificada en el entorno (normalmente INCLUDE). Ejecucin: Pulsamos F9 seleccionamos la orden run, se compila y ejecuta el programa (caso de que no tenga errores). Si tenemos errores de ejecucin o de enlace aparecern en la pantalla. Depuracion: En el proceso de compilacin y enlazado suelen solucionarse todos los errores de sintaxis. Para los semnticos (lgica de los programas) debemos ayudarnos del depurador. Para utilizar el depurador nos situamos en la opcin "debug". Si queremos ejecutar paso a paso un programa desde una lnea determinada pulsamos la opcin "run to"; entonces esta lnea aparecer iluminada de color azul, y una flecha a la izquierda. Para finalizar el proceso pulsamos "terminate process". Para ver como va variando una variable a lo largo de la ejecucin del programa seleccionamos la opcin "add watch." aadir expresin, y tecleamos despus el nombre de la variable a realizar el seguimiento. Alternativamente
Pgina 10 de 18

podemos establecer puntos de ruptura en lugares importantes mediante la opcin "add breakpoints". stos detienen la ejecucin del programa en un punto determinado.

Pgina 11 de 18

3.11

FUNCIONES

Un subprograma es un programa dentro de otro. Tiene los mismos componentes que un programa y se ejecuta cuando lo ordena el programa principal. Se considera subprograma interno a aquel que est junto al programa principal de nuestro trabajo, y se llama externo al que no lo est. Normalmente se habla de funciones y de procedimientos. Una funcin es un subprograma que devuelve un nico resultado al programa o subprograma que le llam, pero puede recibir 0 o ms valores del programa que llama. Un procedimiento es un subprograma que realiza una tarea especfica. Puede recibir 0 o ms valores del programa que llama y devolver cero o ms valores a dicho programa llamador. Un subprograma est compuesto de un grupo de sentencias a las que se asigna un nombre (identificador) y constituye una unidad de programa. Los subprogramas en C se implementan como funciones. Una funcin es un conjunto de declaraciones, expresiones y sentencias, que realizan una tarea determinada. Las funciones permiten descomponer un programa en partes. Todos los programas en C consisten en una o ms funciones, siendo la funcin main() la primera que se invoca cuando comienza a ejecutarse un programa. La razn principal de las funciones es evitar tediosas repeticiones de programacin. Como ya hemos visto, podemos escribir todo el programa en la lnea principal pero esto no es muy conveniente ya que no usamos los RECURSOS ABSTRACTOS que es uno los tres conceptos fundamentales de la programacin estructurada. Por otra parte el uso de las funciones ayuda a ahorrar memoria ya que se puede utilizar las mismas secuencias de sentencias con los mismos o diferentes datos. Definicin: En las funciones de C se distingue la declaracin de la definicin. La declaracin es una notificacin al compilador de que esa funcin existe, as como los tipos de datos de los argumentos que recibe y del tipo de datos del valor devuelto por la funcin. La declaracin es una sentencia por si misma, es decir, lleva ; final. La definicin tiene encabezamiento (similar a la declaracin, pero sin ;) y cuerpo: <tipo> <nombrefun>(parmetros formales) /* encabezamiento */ { <bloque de sentencias> /* cuerpo */ } El encabezamiento abarca el tipo de dato que devuelve la funcin, el nombre de la funcin y la lista de parmetros formales encerrados entre parntesis. Aunque una funcin no lleve parmetros, los parntesis son obligatorios. El tipo de funcin queda determinado por el tipo de valor que devuelve, no por el tipo de sus argumentos. Las funciones se suponen de tipo int, a menos que se indique lo contrario. Las llaves delimitan el cuerpo de la funcin, que consiste en un bloque de sentencias con las declaraciones locales y las instrucciones que realizan una tarea determinada. Las funciones terminan y devuelven automticamente al procedimiento que llam cuando se encuentra la ltima llave. Se puede forzar la vuelta antes usando la sentencia return. La sentencia return tiene dos usos importantes: se puede usar para provocar la salida inmediata de la funcin en la que est, y se puede usar para devolver un valor, es decir, si va seguida de un valor o de una expresin encerrada entre parntesis, la funcin devolver ese valor. Parmetros: Los subprogramas nos permiten realizar varias veces una serie de acciones; estas acciones pueden ser ejecutadas siempre sobre los mismos o diferentes datos. Para que un subprograma pueda utilizar diferentes variables, se utilizan los parmetros.Se define como parmetro toda variable que se intercambia entre el programa y el subprograma. Los parmetros o argumentos pueden ser: Argumentos formales: Son los que aparecen en la declaracin y definicin de la funcin. El argumento formal es una variable en el programa que ha sido llamado. Argumentos efectivos, reales o actuales: Son los que aparecen en las llamadas (uso) de la funcin. Deben coincidir en nmero y tipo con los formales. El argumento efectivo es el valor particular asignado a tal variable en el programa de llamada.
Pgina 12 de 18

En general se puede pasar argumentos a funciones de dos formas: LLamada por valor: Este mtodo consiste en copiar el valor de un argumento en el parmetro formal de la funcin. Por tanto los cambios que se hacen a los parmetros de la funcin no tienen efecto en las variables que usa para llamarla. Son aquellos que da el programa para proporcionar informacin al subprograma, y cuyo valor no ser modificado por el subprograma. LLamada por referencia: Este mtodo copia la direccin de un argumento en el parmetro. Dentro de la funcin, la direccin se utiliza para acceder al argumento real usado en la llamada. Esto significa que lo que se hace con el parmetro afectar la variable que se usa para llamar a la funcin. Son aquellos que van a ser modificados por el subprograma y su valor modificado va a ser devuelto al programa. Este sistema es el que utiliza C para implementar los procedimientos (aunque sintacticamente tambin sean funciones). Reglas de visibilidad: En C podemos afirmar que las variables pueden definirse en dos partes distintas: una en nuestro Programa Principal (main( ) ). y en las funciones, de tal manera que las variables definidas en una funcin slo es posible verlas desde esa funcin. Lo mismo ocurre con las variables definidas en el programa principal. Las reglas de mbito de un lenguaje gobiernan si un trozo de cdigo sabe o no, accede o no, a otro trozo de cdigo o datos. El cdigo y los datos que se definen en una funcin no interactuan con el cdigo o los datos que se definen en otra funcin, porque las dos funciones tienen un mbito diferente. Hay tres tipos de variables: variables locales, parmetros formales (siguen las mismas reglas que las locales) y variables globales. Los argumentos argc y argv de main(): Si queremos pasar informacin al programa main() cuando se ejecuta, debemos hacerlo usando los argumentos de la lnea de rdenes, es decir, la informacin que sigue al nombre del programa en la lnea de rdenes del Sistema Operativo. Se usan 2 argumentos especiales predefinidos: argc: es un entero y mantiene el nmero de argumentos de la lnea de rdenes y argv: es un puntero a un a un array de cadenas de caracteres. Cada elemento en este array apunta a un argumento de la lnea de rdenes. Ejemplo: Programa nombre.cpp que recibe un nombre y muestra un saludo para ese nombre. Para ejecutarlo desde el DOS es necesario teclear el nombre del programa seguido de un string que representa el nombre. Por ejemplo: C:\> nombre PEPE La salida del programa ser: Hola PEPE donde: argc =2, argv[0] = "nombre", y argv[1] = "PEPE" void main(int argc, char *argv[]){ if (argc!=2){ printf("\nFalta especificar su nombre.\n"); exit(1); } printf("Hola %s",argv[1]); } 3.12 ARCHIVOS DE CABECERA.

C proporciona un conjunto de funciones de propsito general (se utilizan en muchas situaciones distintas) que enriquecen significativamente la potencia del lenguaje. Casi todas las funciones de la librera contienen parmetros y muchas de ellas devuelven algn valor. Los prototipos de las funciones de librera se declaran en los ficheros de cabecera, cuya extensin es .h. Se deben incluir los ficheros de cabecera correspondiente con la directiva #include. en cualquier archivo que utilice funciones especficas que hagan referencias a ellas.

Pgina 13 de 18

#include: Indica que se incluya en el programa fuente el fichero especificado en la orden. Indican al compilador que incluya en el fichero fuente los ficheros indicados. Si se especifica el nombre de fichero entre comillas dobles, se busca el fichero dentro del directorio en el que se est trabajando. Si se especifica el nombre del fichero entre <> se busca en el directorio especificado en el men. Si se especifica el nombre del fichero con un directorio, se busca slo en ese directorio. stdio.h int printf(Control[,campo1,campo2,....]); Campo1,campo2, etc, son las variables o constantes a imprimir. Pueden ser tambin expresiones. Control es una tira de caracteres (va entre comillas dobles) que describen la manera en que han de imprimirse los campos.La parte de control contiene dos clases distintas de informacin: Caracteres que se han de imprimir y Identificadores de datos (especificaciones de conversin). Dentro del control, el carcter de escape es la \. IDENTIFICAD SALIDA %d Entero decimal. %c Un carcter. %s Tira de caracteres. %e N de punto flotante en notacin %f N de punto flotante en decimal. %g Usa %f o %e, el que sea mas corto. %u Entero decimal sin signo. %o Octal sin signo. %x Hexadecimal sin signo. %p Puntero. Modificadores de especificaciones de conversin: Se colocan entre el smbolo % y el carcter que define el tipo de conversin. Son: - El campo correspondiente se comenzar a escribir en el extremo izquierdo del campo que tenga asignado.Ejemplo: %-10d. n Anchura mnima del campo. Si la cantidad a imprimir no cabe en el lugar asignado, se ampliar automticamente. (%4d) .n En tipos flotantes es la cantidad de cifras que se escribirn a la derecha del punto: %4.2f (2 decimales en un total de 4). l,h El dato correspondiente es de tipo long (short) en vez de int. Ejemplo: %ld. 0 Precede al nmero con un 0. + Precede al nmero con un + o un -. scanf(Control,arg1[,arg2,...]); Esta funcin puede leer todos los tipos de datos que haya y automticamente transformarlos en el formato interno adecuado. Es la inversa de printf(). Esta funcin emplea una tira de caracteres de control y una lista de argumentos. Los argumentos sern punteros a variables. Para leer un valor perteneciente a cualquiera de los tipos bsicos se coloca el nombre de la variable precedido de & (Para leer una variable de tipo tira de caracteres no utilizar &). scanf() considera que dos items de entrada son diferentes cuando estn separados por blancos, tabulados o espacios. Va encajando cada especificador de conversin con su campo correspondiente, ignorando los blancos intermedios. La funcin scanf() emplea un juego de especificadores de conversin muy semejante al de printf(). El control de scanf() slo admite identificadores de datos (no admite texto). int getchar(void); La funcin getchar() lee caracteres del buffer de teclado, termina la lectura cuando se pulsa la tecla ENTER. Devuelve EOF si lee una marca de Fin de Fichero (^C). int putchar(int carcter); La funcin putchar() escribe un carcter en pantalla en la posicin actual del cursor. Devuelve el carcter escrito si no hay errores.

Pgina 14 de 18

int fflush (>canal>); La utilizaremos para borrar el buffer del teclado (es decir, "canal" ser "stdin"), antes de las lecturas. Devuelve 0 si no hay errores y dstinto de cero si los hay. int getc (<canal>); Lee un char del canal indicado en el argumento. Si se ha llegado al final del fichero, devuelve EOF. int kbhit (void); Esta funcin devuelve un valor diferente de cero si se ha pulsado una tecla de la consola. Devuelve cero en caso contrario. Ejemplo: while (!kbhit( )) /* Mientras no pulsemos una tecla... */ int putc (int ch , <canal>); Escribe en el canal especificado el carcter ch. Devuelve el carcter escrito si no hay errores. int cprintf(formato , arg1 , ...); Es similar a printf, pero escribe en el color que hayamos activado con la funcin textcolor sobre el color activado con textbackground. conio.h void clrscr(void): Borra la ventana activa y posiciona el cursor en el ngulo superior izquierdo (1,1). void clreol(void): Borra desde la posicin del cursor hasta el final de la lnea. La posicin del cursor no cambia. void delline(void): Borra la lnea donde se encuentra el cursor. Todas las lneas que hay debajo suben una posicin. void far gotoxy(int x, int y): Lleva el cursor a la posicin x, y. (columna, lnea) void textbackground(int color): Define el color de fondo para una pantalla de texto. void textcolor(int color): Define el color de los caracteres en una pantalla de texto. int wherex(void): Devuelve la columna donde est el cursor, en una pantalla de texto. int wherey(void): Devuelve la fila donde est el cursor, en una pantalla de texto. int getche(void); Devuelve el siguiente carcter ledo de la consola y muestra ese carcter por la pantalla. int getch(void); Devuelve el siguiente carcter ledo de la consola pero no muestra el carcter por la pantalla. stdlib.h int abs (int num); Devuelve el valor absoluto de num. int random (int num); Retorna un valor aleatorio entre 0 y num-1. void randomize (void); Inicializa el generador de nmeros aleatorios. Deberemos llamarlo al inicio de la funcin en que utilicemos el random. Tambin deberemos utilizar el include time.h, ya que randomize hace una llamada a la funcin time, includa en este ltimo archivo. int system(comando); Ejecuta el comando indicado. Esto incluye tanto los comandos del sistema operativo, como cualquier programa que nosotros le indiquemos. Al acabar la ejecucin del comando, volver a la linea de cdigo situada a continuacin de la sentencia system.

Pgina 15 de 18

math.h double fabs (double num); Devuelve el valor absoluto de num. double pow (double base, double exp; Devuelve la base elevada a la potencia exp. double sqrt (double num); Devuelve la raz cuadrada de num. ctype.h int isalnum (int ch); Devuelve un valor distinto de 0 si el argumento es una letra del alfabeto o un dgito. Si no, devuelve cero. int isalpha (int ch); Devuelve un valor distinto de 0 si el argumento es una letra del alfabeto. Si no, devuelve 0. int isascii (int ch); Devuelve un valor distinto de cero si el argumento est entre 0 y 0x7F. Si no, devuelve 0. int iscntrl (int ch); Devuelve un valor distinto de cero si el argumento est entre 0 y 0x1F. Si no, devuelve cero. int isdigit (int ch); Devuelve un valor distinto de cero si el argumento es un dgito. Si no, devuelve cero. int isgraph (int ch); Devuelve un valor distinto de cero si el argumento es un carcter representable y no un espacio (es decir, est entre 0x21 y 0x7F). Si no, devuelve cero. int isprint (int ch); Devuelve un valor distinto de cero si el argumento es un carcter representable incluido el espacio (es decir, est entre 0x20 y 0x7F). Si no, devuelve cero. int ispunct (int ch); Devuelve un valor distinto de cero si el argumento es un carcter de puntuacin o un espacio. Si no, devuelve cero. int islower (int ch); Devuelve un valor distinto de 0 si el argumento es una letra minscula. Si no, devuelve 0. int isupper (int ch); Devuelve un valor distinto de 0 si el argumento es una letra mayscula. Si no, devuelve 0. int isspace (int ch); Devuelve un valor distinto de cero si el argumento es un espacio, un tabulador o un carcter de nueva lnea. Si no, devuelve cero. int isxdigit (int ch); Devuelve un valor distinto de 0 si el argumento es un dgito hexadecimal. Si no, devuelve 0. int tolower (int ch); Devuelve el equivalente en minsculas del argumento, siempre que ste sea una letra. Si no, devuelve lo que le lleg sin cambios. int toupper (int ch); Devuelve el equivalente en maysculas del argumento, siempre que ste sea una letra. Si no, devuelve lo que le lleg sin cambios.

Pgina 16 de 18

3.12

EL ENTORNO INTEGRADO DE DESARROLLO (IDE) BORLAND C++

Elementos: El IDE de Borland C++ consta de los siguientes componentes principales: Marco de ventana: Contiene un ttulo que contiene el nombre de la ventana activa. Se puede redimensionar, mover, maximizar y minimizar. Barra de herramientas: Contiene botones que ofrecen atajos (mtodos rpidos) de rdenes especficas. Barra de estado: Est en la parte inferior de la ventana del IDE. Muestra informacin sobre el estado de los elementos del men y el estado del modo de edicin (insertar - sobreescribir). Sistema de mens: Consta de 10 elementos: File, Edit, Search, View, Project, Debug, Tool, Options, Window y Help. Cada uno de ello conduce a un men desplegable. La seleccin de un men se puede realizar con el ratn o con el taclado (con la tecla ALT, y a continuacin con las flechas de movimiento del cursos y la tecla ENTER, o con la inicial de la opcin de men). Men File: Proporciona opciones para crear un nuevo archivo, abrir algn archivo ya existente, guardar un archivo con el nombre actual y en su misma ubicacin, guardar un archivo con un nombre nuevo o en una ubicacin distinta de la actual, guardar todos los archivos abiertos, imprimir el contenido de una ventana, configurar la impresora y salir del IDE de borland C++. Men Edit: Contiene las opciones tpicas de edicin de un archivo: Cortar, pegar, copiar, borrar, seleccionar todo, deshacer y rehacer. Men Search: Contiene las opciones de buscar texto, buscar y reemplazar, repetir la ltima bsqueda, localizar una funcin, y localizar un smbolo en cualquier ventana que forme parte del proyecto actual. Adems nos permite desplazarnos por los mensajes de la ventana de edicin. Men View: Cambia a la ventana de proyecto o a la ventana de mensajes. Visualiza la jerarqua de clases de C++, as como las variables globales, adems de informacin sobre puntos de ruptura y observacin. Asimismo, informa sobre otra gran variedad de informaciones complementarias. Men proyect: Establece y edita un proyecto (crear uno nuevo, abrir uno existente, cerrar un proyecto, ...). Adems, compila un archivo fuente C o C++ y construye un archivo ejecutable o una biblioteca. Men Debug: Permite depurar cdigos fuente en C y C++. Entre sus opciones estn: ejecutar el programa actual, Ejecucin paso a paso sin traza, ejecucin paso a paso con traza, establacer puntos de ruptura incondicionales, detener un programa, eval.uar expresiones y variables, ... Men Tool: Ejecuta herramientas complementarias instaladas. Men Options: Personaliza el aspecto y comportamiento del IDE, as como personaliza la posicin de los archivos de inclusin y bibliotecas. Especifica opciones para el editor, enlazador, depurador y el bibliotecario. Especifica la lista de herramientas disponibles en el men Tool. Men Window: Gestiona las ventanas del escritorio del IDE. Reduce una vantana a un icono y las restaura de nuevo. Tambin puede organizar las ventanas.
Pgina 17 de 18

Men Help: visualiza una tabla de contenidos para informacin de ayuda en lnea. Busca informacin sobre un tema especfico. Puesta a punto de un programa: El IDE de Borland C++ facilita las etapas de puesta a punto de un programa: Edicin de un programa: El IDE de borland C++ incluye un editor de textos que se puede usar para preparar los archivos fuente de los programas Compilacin, enlace y ejecucin de un programa: Una vez editados los archivos fuente, stos se han de compilar y enlazar para crear un programa ejecutable. En borland C++, el mejor sistema para construir un programa es crear un proyecto. Una vez creado el proyecto, aparecer una ventana de proyecto en donde aparece el proyecto ocmo una estructura en rbol. Para aadir elementos (archivo fuente ______.c y ______.h) seleccionamos Add node. Una vez definido el proyecto, seleccionaremos Make all, para construir el ejecutable (que se encarga de llamar al compilador y al enlazador). Cuando ya est sin errores, se podr ejecutar con la opcin Run. Depurar programas: Los errores de programacin se pueden dividir en errores de sintaxis (se corrigen al compilar) y errores lgicos. stos ltimos se pueden encontrar con el depurador (debugger). El men debug contiene varias rdenes que se pueden usar para controlar la ejecucin de un programa durante su depuracin: - Trace into (Paso a paso): La ejecucin en modo Traza o Paso a paso supone ejecutar una sentencia cada vez (Para avanzar usaremos F7). - Ventana de observacin Watch: La traza de una variable se puede serguir en la vantana Watch situando el cursos en el identificador seleccionado y pulsando Ctrl - F7. Si se pulsa ALT - W y despus W, la parte inferior de la pantalla visualizar la ventana de observacin. - Step over (saltar subrutinas depuradas): La tecla F8 acta de modo similar a F7, salvo que las funciones se las salta, es decir, las ejecuta como una sentencia. F5 restaura la pantalla dividida. - Program reset: Permite reinicializar el programa para otra ejecucin pulsando CTRL - F2 despus de realizar una traza. La ventana Watch se elimina con ALT-D y despus W o R. - Establecer puntos de ruptura (breakpoints): Se hace llevando el cursor a la lnea adecuada del programa y pulsando CRTL - F9. Para ejecutar el programa hasta llegar al punto de ruptura se pulsa CTRL-F9. Para ejecutar un programa hasta el / los puntos de ruptura, pulsamos Ctrl-F9, que ejecutar el programa hasta el siguiente punto de ruptura. Si deseamos eliminar un punto de ruptura nos situamos sobre l y pulsamos Ctrl -F8. Para borrar todos los puntos de ruptura pulsamos ALT-D y a continuacin B o D. - Evaluar y modificar el contenido de una variable: Pulsamos ALT - D (men Debug) , seguido de E (Evaluate - Modify ...). En este campo se especifica el nombre de la variable que se desea cambiar. En el campo New value pondremos su nuevo valor.

Pgina 18 de 18

También podría gustarte