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

LUIS FAJARDO

TUTORIAL DEL LENGUAJE C INTRODUCCION AL LENGUAJE C

2011

Creado entre 1970 y 1972 por Brian Kernighan y Dennis Ritchie para escribir el cdigo del sistema operativo UNIX. Se conoce como un lenguaje de medio nivel, pues podramos situarlo entre los lenguajes de bajo nivel o de mquina (ensamblador) y los de alto nivel como el PASCAL, por ejemplo. Un lenguaje de medio nivel nos ofrece un conjunto bsico de sentencias de control y de manipulacin de datos que nos permitir construir sentencias y estructuras de nivel ms altenla actualidad existen numerosos compiladores de C. CARACTERSTICAS DEL LENGUAJE C Suministra una visin de conjunto Orientado a la programacin de sistemas Es altamente transportable Es muy flexible Genera cdigo muy eficiente Es muy expresivo (se pueden realizar muchas funciones escribiendo pocas lneas de cdigo) Es muy poco modular Hace pocas comprobaciones Da poca disciplina al programador Es difcil leer cdigo escrito por otras personas Se basa en el estndar ANSI C Es de nivel medio No est ligado a ningn Sistema Operativo 1

LENGUAJE C

LUIS FAJARDO
Utiliza un compilador, un preprocesador, punteros. Podemos utilizar datos relacionales

2011

SU ESTRUCTURA Un programa C est formado exclusivamente por funciones independientes. A diferencia de lenguajes como PASCAL, en C no se puede crear una funcin dentro de otra funcin. El cdigo de un programa C suele distribuirse entre varios ficheros fuente (con extensin .c), denominados mdulos. As habitualmente un programa de cierto tamao constar de un mdulo que contiene el programa principal (ubicado en una funcin especial denominada main() Y de otros mdulos con el cdigo de diversas funciones agrupadas segn algn criterio, o con denticiones de tipos utilizados. Adems, todos los compiladores ponen a disposicin del programador una enorme cantidad de funciones, accesibles por medio de libreras. De hecho, si el programa es sucientemente pequeo puede constar de un slo mdulo, el principal, que haga uso de las libreras. El preprocesador Transforma el programa fuente, convirtindolo en otro archivo fuente pre digerido. Las transformaciones incluyen:

Eliminar los comentarios. Incluir en el fuente el contenido de los ficheros declarados con #include <fichero> (a estos ficheros se les suele llamar cabeceras) 2

LENGUAJE C

LUIS FAJARDO

2011

Sustituir en el fuente las macros declaradas con #define (ej. #define CIEN 100)

El compilador Convierte la fuente entregado por el preprocesador en un archivo en lenguaje mquina, fichero objeto. Algunos compiladores pasan por una fase intermedia en lenguaje ensamblador.

El enlazador Un fichero objeto es cdigo mquina, pero no se puede ejecutar, porque le falta cdigo que se encuentra en otros archivos binarios. El enlazador genera el ejecutable binario, a partir del contenido de los ficheros objetos y de las bibliotecas. Las bibliotecas contienen el cdigo de funciones pre compiladas, a las que el archivo fuente llama (por ejemplo printf nos indica lo que la maquina va imprimir en la pantalla). Ejemplo: (es un tpico ejemplo el Hola mundo) #include <stdio.h> main() { /* Escribe un mensaje */ printf (Hola, mundo\n); } ELEMENTOS DEL LENGUAJE C

LENGUAJE C

LUIS FAJARDO
Comentarios Los comentarios son textos que no son procesados por el compilador. Sirven como informacin al programador. Para que un texto sea comentario debe estar entre los smbolos /* (marca el comienzo) y */ (marca el final de comentario).

2011

Identificadores

Se usan para referenciar las variables, las funciones, las etiquetas y otros objetos definidos por el usuario. La longitud del identificador puede variar entre uno o varios caracteres (se recomienda no ms de 31 y si el identificador est envuelto en el proceso de enlazado al menos los seis primeros deben ser significativos). El primer carcter debe ser una letra o un smbolo subrayado y los caracteres siguientes pueden ser letras, nmeros o smbolos de subrayado. Las minsculas y las maysculas se tratan como distintas. Un identificador no puede ser igual a una palabra clave de C y no debe tener el mismo nombre que una funcin ya escrita o que se encuentre en la biblioteca de C. Constantes Las constantes son expresiones con un significado invariable. La representacin ms simple de un concepto de este lenguaje son las constantes. Al contrario que las variables, las constantes mantienen su valor a lo largo de todo el programa. Para indicar al compilador que se trata de una constante, usaremos la directiva #define #define <identificador> <valor> Observa que no se indica el punto y coma de final de sentencia ni tampoco el tipo de dato. La directiva #define no slo nos permite sustituir un nombre por un valor

LENGUAJE C

LUIS FAJARDO
numrico, sino tambin por una cadena de caracteres. El valor de una constante no puede ser modificado de ninguna manera. /* Uso de las constantes */ #include <stdio.h> #define pi 3.1416 #define escribe printf main() /* Calcula el perimetro */ { int r; escribe("Introduce el radio: "); scanf("%d",&r); escribe("El perimetro es: %f",2*pi*r); }

2011

Variables

Una variable es una posicin de memoria con nombre que se usa para mantener un valor que puede ser modificado en el programa. Todas las variables deben ser declaradas antes de poder usarlas.

Operadores

Los operadores son palabras o smbolos que hacen que un programa acte sobre las variables. En C existen diversos tipos de operadores. Aritmticos, relacionales, de asignacin, lgico.

Sentencias

Una sentencia es una expresin en C donde se esperan unas consecuencias, normalmente son las instrucciones, cada sentencia finaliza con un punto y coma. OPERADORES EN LENGUAJE C Operadores aritmticos. Los operadores aritmticos que se pueden utilizar en C++ son: Operaci on x++ ++x 5 Accion Postincreme nto Preincrement o

LENGUAJE C

LUIS FAJARDO
x---x +x -x x*y x/y x%y x+y x-y Postdecreme nto Predecremen to + unario - unario Multiplicacio n Division Modulo Suma Resta

2011

Los operadores incremento y decremento proporcionan una forma breve de sumar o restar 1 a una variable. Usados como prefijo, como ++i, el valor de la variable se incrementa (decrementa) antes de que la variable sea usada; usada como sufijo, como i++ el valor de la variable se incrementa (decrementa) despus de su utilizacion. Operadores relacionales Los operadores relacionales comparan sus operandos y devuelven el valor 1 si la relacion es cierta, y 0 si no lo es. Son: Operador < <= > >= == != Operadores logicos Los operadores logicos que se pueden utilizar en C++ son: Operad Accion or Negacion ! logica << Y logico || O logico Proposito Menor que Menor o igual que Mayor que Mayor o igual que Igual No igual

LENGUAJE C

LUIS FAJARDO

2011

Los valores logicos en C++ estan representados por enteros: 0 es falso y un valor no cero es verdadero. Por ejemplo, el operador ! toma un operando numrico y devuelve int 1 para un operando cero y int 0 en caso contrario. El operador << devuelve 1 si los dos operandos son valores no cero, y 0 en cualquier otro caso. El operador || devuelve 1 si cualquiera de los dos operandos es no cero, y 0 en otro caso. Los operadores << y || evalan primero el operando de su izquierda, y no evalan el operando de la derecha si no es necesario. Por ejemplo, si y es cero, la expresion y << x/y da 0 y no realiza la division por 0. Operadores de asignacion. Un operador de asignacion altera el valor de un objeto si alterar su tipo. El operador usual de asignacion (=), copia el valor del operando de la derecha en el operando de la izquierda, aplicando las conversiones de tipo suales cuando es necesario. En C++ existen ademas los siguientes operadores de asignacion: += *= %= ^= -= /= > >= |=

<<= &=

En cada caso, para una variable a de un tipo predefinido en C++, op = expr equivale a a = a op(expr) . As, por ejemplo, a+=5 equivale a a = a +5 Precedencia de operadores. La interpretacion de cualquier expresion en C++ esta determinada por la precedencia y asociatividad de los operadores en dicha expresion. Cada operador tiene una precedencia, y los operadores en una expresion se evalan en orden de mayor a menor precedencia. La evaluacion de operadores con la misma precedencia viene determinada por su asociatividad. Y, al igual que en matematicas, los parntesis anulan las reglas de precedencia. En la siguiente tabla se listan los operadores en C++, su precedencia y su asociatividad. Los operadores se listan en orden de prioridad decreciente (los situados mas arriba tienen mayor prioridad). Los operadores en la misma lnea horizontal tienen la misma precedencia. Operador :: :: -> . [] 7 Proposito Scope (unario) Scope (binario) Seleccion de miembros ndices Asociatividad De derecha a izquierda De izquierda a derecha De izquierda a derecha De izquierda a derecha

LENGUAJE C

LUIS FAJARDO
() ++ -sizeof ++ -*&+-!~ new delete () ->* .* */% +<< >> < > <= >= == != & ^ | && || ?: = *= /= += -= >*gt;= &= ^= |= %= <<= , Llamada a funcion Postincremento Postdecremento Tamao de un objeto Preincremento Predecremento Operadores unarios Crea un objeto Borra un objeto Puntero a un miembro Operadores multiplicativos Operadores aditivos Operadores bitwise Operadores de relacion Operadores de igualdad Y bitwise bitwise O exclusivo bitwise O inclusivo Y logico O logico Operador condicional Operadores de asignacion Operador coma

2011

De izquierda a derecha De izquierda a derecha De izquierda a derecha De derecha a izquierda De derecha a izquierda De derecha a izquierda De derecha a izquierda De derecha a izquierda De derecha a izquierda De izquierda a derecha De izquierda a derecha De izquierda a derecha De izquierda a derecha De izquierda a derecha De izquierda a derecha De izquierda a derecha De izquierda a derecha De izquierda a derecha De izquierda a derecha De izquierda a derecha De derecha a izquierda De derecha a izquierda De derecha a izquierda

Conversion de tipo (type cast) De derecha a izquierda

En C++ las reglas de precedencia y asociatividad de operadores corresponden a las reglas matematicas. Sin embargo, esto no funcionara, por ejemplo, con los operadores bitwise. Para tales operadores, se debe utilizar la tabla anterior, o bien parntesis.

El operador :: El operador :: (scope) es una caracterstica nueva, puesto que no existe nada similar en C. Permite el acceso a una variable global aunque exista una variable local con el mismo nombre. El uso de :: delante del nombre de la variable, 8

LENGUAJE C

LUIS FAJARDO

2011

indica al compilador que debe utilizar la variable global, en lugar de la local. Ejemplo: #include <iostream.h> int indice = 13; main() { float indice = 3.2567; cout <<'El valor de la variable local es:'<< indice << '\n'; cout <<'El valor de la variable global es:'<< ::indice << '\n'; ::indice = indice + 7; cout <<'El valor de la variable local es:'<< indice << '\n'; cout <<'El valor de la variable global es:'<< ::indice << '\n'; } La salida de este programa es: El valor de la variable local es:3.2567 El valor de la variable global es: 13 El valor de la variable local es:3.2567 El valor de la variable global es: 10 Se recomienda no abusar del uso del operador ::. Es mejor utilizar diferentes nombres para las variables.

FUNCIONES

LENGUAJE C

LUIS FAJARDO

2011

Las funciones se declaran y se definen exactamente igual que en C, y, al igual que en ste, se puede utilizar prototipo (prototype). Prototipos La declaracion de una funcion es el prototipo. El prototipo da un modelo de la interface a la funcion. Veamos un ejemplo: # include <iostream.h> void haz_algo (int alas, float pies, char ojos); main() { int ala = 2; float pie = 1000.0; char ojo = 2; haz_algo (3, 12.0, 4); haz_algo (ala, pie, ojo); } void haz_algo (int alas, float pies, char ojos) { cout << 'Hay ' << alas << 'alas.' << '\n'; cout << 'Hay ' << pies << 'pies. ' << '\n'; cout << 'Hay ' << int(ojos) << 'ojos.' << '\n'; } La salida de este programa sera: Hay 3 alas. Hay 12 pies. Hay 4 ojos. Hay 2 alas. Hay 1000 pies. 10

LENGUAJE C

LUIS FAJARDO
Hay 2 ojos. Cada llamada a la funcion haz_algo() debe verificar: El nmero de parametros debe ser exactamente tres. Los tipos deben ser compatibles con los de la declaracion.

2011

Notese que cuando llamamos a la funcion, la comprobacion de tipo la hace el compilador basandose en el prototipo (en la declaracion) puesto que la funcion todava no ha sido definida. Los nombres de variables que aparecen en el prototipo son opcionales y actan casi como comentarios al lector del programa, ya que son completamente ignorados por el compilador. Tipos compatibles Son compatibles cualquiera de los tipos simples (definidos en C++) que pueden ser convertidos de uno a otro de manera significativa. Por ejemplo, si llamamos con un entero a una funcion que esta esperando un nmero real como parametro, el sistema lo convertira automaticamente, sin mencionarlo al usuario. Esto tambin es cierto de float a char, o de char a int. En cambio, si pasamos un puntero a un entero a una funcion que estaba esperando un entero, no habra conversion de tipo, ya que son dos variables completamente distintas. De la misma forma, un tipo definido por el usuario (estructura o clase) no puede ser convertido automaticamente a un long float, a un array o incluso a otra estructura o clase diferente, porque son tipos incompatibles y no puede realizarse la conversion de manera significativa. Sin embargo, el tipo devuelto por la funcion, void en el ejemplo anterior, debe ser compatible con el tipo que se espera que devuelva en la funcion de llamada, o el compilador dara un warning. El uso de prototipos no supone coste alguno en tiempo ni en velocidad de ejecucion. El prototipo se verifica durante la compilacion. 11

LENGUAJE C

LUIS FAJARDO
Funciones con void como argumento. Una funcion sin lista de argumentos como void func (); significa en C que no se ha declarado el tipo de la lista de argumentos que

2011

recibe la funcion, por lo que el compilador no producira errores respecto al uso impropio de los argumentos. Cuando en C se declara una funcion que no tiene argumentos se utiliza el tipo void: void func (void); En C++, ambas expresiones son equivalentes Pasar punteros a funciones.(paso por valor y por referencia) Cuando se llama a una funcion, todos los parametros con los que la llamamos son copiados y pasados a la funcion (paso por valor). Esto significa que si la funcion cambia el valor de los parametros, solo lo hace dentro del ambito de la funcion. Por ejemplo: #include <iostream.h> void change_values(int a,int b) { a=4; b=5; } main() { int a, b; a=1; b=2; change_values(a,b); 12

LENGUAJE C

LUIS FAJARDO
cout << 'A is ' << a <<',B is' << b <<'\n'; } La salida de programa es: A is 1, B is 2

2011

La llamada a la funcion no ha cambiado el valor de las variables que se le han pasado. La funcion cambia las copias de lo que se le ha pasado. Si queremos pasar parametros por referencia hay que pasar punteros a los datos. Para hacer esto, utilizamos el operador &, que da la direccion de una variable: #include <iostream.h> void change_values(int *a,int *b) { *a=4; *b=5; } main() { int a, b; a=1; b=2; change_values(&a,&b); cout << 'A is ' << a <<',B is' << b <<'\n'; } Ahora la salida del programa es: A is 4, B is 5 La funcion main pasa la direccion de a y b, por lo que a la funcion change_values se le pasa una copia de las direcciones. Utilizando las direcciones de a y b, la funcion puede acceder a los datos directamente. Polimorfismo 13

LENGUAJE C

LUIS FAJARDO
En C++ es posible declarar dos funciones diferentes que tengan el mismo nombre. Las funciones deben diferir en la lista de argumentos, bien en el

2011

nmero de variables que se pasan a la funcion, bien en el tipo de argumentos que recibe. As, por ejemplo, se puede definir una funcion que trabaje, bien con enteros, bien con strings; solo hay que definir dos funciones separadas con el mismo nombre: #include <iostream.h> void show(int val) { cout <<' Es un entero :'<< val << '\n'; } void show(char *val) { cout <<'Es un caracter: '<< val << '\n'; } main() { show (42); show ('A'); show (452.2); } En la primera llamada a la funcion show, se le pasa un entero, por tanto se llama a la primera copia de la funcion show. La segunda vez, el argumento es un caracter, por tanto se utiliza la segunda definicin, aquella que utiliza un carcter. Ahora bien, la tercera llamada utiliza un nmero real, y no existe una definicin de la funcin para este caso. El compilador utiliza la primera definicin. La salida del programa es: Es un entero: 42 Es un carcter: A

14

LENGUAJE C

LUIS FAJARDO
Es un entero: 452 Comentarios sobre la sobrecarga de funciones:

2011

El uso de ms de una funcin con el mismo nombre pero acciones diferentes debe ser evitado. En el ejemplo anterior, las funciones show () estn relacionadas: imprimen informacin en la pantalla. C++ no permite que varias funciones difieran solo en su valor devuelto. Dos funciones de este tipo no podran ser distinguidas por el compilador. JUSTIFICACION Este lenguaje C, como ya he dicho con ella podremos realizar ejercicios

15

LENGUAJE C

Вам также может понравиться