Sunteți pe pagina 1din 33

Facultad de Ingeniera, UNAM Laboratorio de Multimedia e Internet

Lenguaje de programacin C
Objetivo:
Que el alumno conozca y aprenda a utilizar el lenguaje C, desde sintaxis, variables, preprocesador, funciones, apuntadores, estructuras.

Historia de C:
El lenguaje C es un lenguaje de propsito general y se caracteriza por: 1. 2. 3. 4. 5. 6. 7. Programacin estructurada o por mdulos Abundancia de operadores y tipos de datos Codificacin en alto y bajo nivel simultneamente Utilizacin natural de las funciones primitivas del sistema Produce cdigo objeto altamente optimizado Es fcil de aprender El programador es la principal figura ya que lo que pida si su sintaxis es correcta se hace

El lenguaje C est basado en BCPL, escrito por Martin Richards, y del B escrito por Ken Thompson en 1970 para el primer sistema UNIX. Estos son lenguajes sin tipos, al contrario que el C que proporciona varios tipos de datos. Los tipos que ofrece son caracteres, nmeros enteros y en coma flotante, de varios tamaos. Adems se pueden crear tipos derivados mediante la utilizacin de punteros, vectores, registros y uniones. El primer compilador de C fue escrito por Dennis Ritchie para un DEC PDP-11 y escribi el propio sistema operativo en C. En 1983 ANSI establece el comit X3J11 para que desarrolle una definicin moderna y comprensible del C; el estndar est basado en el manual de referencia original de 1972 y se desarrolla con el mismo espritu de sus creadores originales. La primera versin de estndar se public en 1988 y actualmente todos los compiladores utilizan la nueva definicin. Una aportacin muy importante de ANSI consiste en la definicin de un conjunto de libreras que acompaan al compilador y de las funciones contenidas en ellas. Muchas de las operaciones comunes con el sistema operativo se realizan a travs de estas funciones. Una coleccin de ficheros de encabezamiento, headers, en los que se definen los tipos de datos y funciones incluidas en cada librera. Los programas que utilizan estas bibliotecas para interactuar con el sistema operativo obtendrn un comportamiento equivalente en otro sistema.

Laboratorio de Multimedia e Internet, Facultad de Ingeniera. UNAM 2009-2010

Estructura Bsica de un programa en C:


Lo inicial para un programa es colocar el main as como las llaves que limitan al programa esta es la parte ms importante de este. Cuidar mucho que llave que se abre inmediatamente cerrarla. main ( ) { ....... } Ahora como ya comentamos el lenguaje C est orientado a lo que es la programacin de funciones lo cual veremos ms adelante ahora otro dato importante dentro de la estructura de un programa ya un poco ms en forma seria de la siguiente manera: Libreras: es un conjunto de recursos (algoritmos) prefabricados, que pueden ser utilizados por el programador para realizar determinadas operaciones, Las declaraciones de las funciones utilizadas en estas libreras, junto con algunas macros y constantes predefinidas que facilitan su utilizacin, se agrupan en ficheros de nombres conocidos que suelen encontrarse en sitios predefinidos. Libreras de C: assert.h La librera assert o en espaol asercin, contiene operaciones para detectar errores de lgica y depuracin. complex.h Esta librera complex contiene un conjunto de funciones dedicadas al tratamiento de nmeros complejos. ctype.h Esta librera posee funciones para el tratamiento de cadenas alfanumricas. errno.h Verifica los cdigos de error devueltos por las funciones de cada librera. fenv.hEsta librera se dedica a controlar nmeros en coma flotante. float.h Con esta librera se modifica y controla caractersticas para la librera de coma flotante. inttypes.h Conversin entre variables y constantes de precisin entre tipos de nmeros enteros. iso646.h Conjuntos de caracteres ISO 646. limits.h Propiedades de los nmeros de tipo enteros, contiene las constantes para modificar sus parmetros.
Laboratorio de Multimedia e Internet, Facultad de Ingeniera. UNAM 2009-2010

locale.h Bsicamente se utiliza para la funcin que contiene, setlocale() y sus constantes. Con esta se realiza la configuracin regional. math.h Esta librera contiene funciones matemticas. setjmp.h Con esta librera se declara las macros setjmp y longjmp para saltos de flujo de control de programa no locales. signal.h Esta librera est dedicada a controlar algunas situaciones poco comunes como la divisin por cero. stdarg.h Posibilita el acceso a una cantidad variable de argumentos pasados a una funcin. stdbool.h lgebra de Boole. stdint.h Define varios tipos de variables enteras. stddef.h Define varios tipos de macros de utilidad. stdio.h Esta funcin tal vez la ms utilizada, sirve para operaciones de entrada y salida mediante los diferentes puertos, entrada/salida del lenguaje C, entre las funciones ms comunes printf y scanf. stdlib.h Dentro de las finalidades de esta librera podemos encontrar conversin de tipos, generacin de nmeros pseudo-aleatorios, gestin de memoria dinmica, control de procesos, funciones de entorno, de ordenacin y bsqueda. string.h Esta librera sirve para el manejo de cadenas de caracteres alfanumricos. tgmath.h Esta librera contiene funcionalidades matemticas de tipo genrico. time.h Manejo de formatos y conversiones de fecha y hora. wchar.h Controla y maneja el flujo de datos grandes y varias clases de cadenas de caracteres anchos las cuales suelen ser mayores a 2 o ms bytes por cada carcter, sirve para controlar caracteres de idiomas diferentes. wctype.h Esta librera est destinada a clasificar caracteres anchos. De todas las libreras anteriores las ms comunes son stdio.h, stlib.h y math.h /***Comentarios del programa a realizar***/ #include <stdio.h> /*declaracin de funciones C standar de entrada y salida*/

#include< libreria.h> /*otras libreras necesarias para el funcionamiento del programa*/ #define ALGO valor /*declaracin de constantes*/

Laboratorio de Multimedia e Internet, Facultad de Ingeniera. UNAM 2009-2010

funcionDentroDelProg(); /*declaracin de funciones que se utilizaran dentro del programa*/ En donde se declara esta funcin antes o despus del main no importa pero si la tienes que mandar llamar antes de que se ejecute el programa

main() /*declaracin de la funcin principal del programa*/{ int a,b,c; /*declaracin de variables locales del programa*/ /*cuerpo del programa en general*/ } Ahora bien va a haber muchos programas donde no es necesario el tener varias funciones y estarlas llamando pero para una buena programacin y poder reutilizar cdigos es bueno separar pedazos de acciones del sistema.

Checar el programa anexo 1prograCurso.c posible tarea es manipular ese cdigo para que quede centrado, cambiar el lema, etc.

Vamos a analizar cada parte del programa por separado: Directrices del procesador: su finalidad es facilitar el desarrollo, compilacin y el mantenimiento de un programa. Se caracterizan porque empiezan con el carcter # como son #include o #define estas lo que hacen es ser procesadas por el preprocesador de C que trabaja al momento de mandarlo compilar el programa y crear un ejecutable. Definiciones y declaraciones: en estas son como las subrutinas que habamos platicado con anterioridad y estas al estar separadas pueden ser reutilizadas ms adelante en otros programas y es importante que antes de que corra el programa sean llamadas ya que de no hacerlo ocurrira un error al no saber cmo sera posible trabajar, posteriormente se desarrolla el proceso como cualquier programa con main pero al final queda bien especificado con la palabra reservada return que va a devolver como resultado esta funcin. Pero este puede regresar o no ciertos valores su sintaxis cuando regresa y admite datos (ejemplos de paso por argumentos) es la siguiente: nombreDeLaFuncion(tipoDato NombreDeVariable)

Laboratorio de Multimedia e Internet, Facultad de Ingeniera. UNAM 2009-2010

Su sintaxis es igual que la de las funciones main pero con el extra de que al ser llamada por la funcin principal se le llama como fue declarada y al final se le coloca un ; Funcin main: esta funcin seria como la portada de un libro y es en esta parte donde todo se va a tratar, manipular, etc. etc., y el desarrollo de la funcin esta ya visto que va encerrado entre llaves. Manipulacin de datos para subrutinas o funciones dentro de main: en la declaracin de funciones tambin dentro de los argumentos su sintaxis va a ser la siguiente: tipoDeResultadoaRegresar nombreFuncion (lista de parmetros con su tipo); Esto es de suma importancia ya que sobre esta plantilla vamos a trabajar lo que sera pasar argumentos a funcin.

Paso de argumentos por funcin: primero que nada al tener ya definida la subrutina (si recibe datos desde afuera o no) podemos pasar por argumento lo que sera de forma de parmetro (miFuncion (int x, float y)) y meter directamente los valores programndolo o ya dentro de la subrutina hacer una igualdad y manipular lo que serian las copias de estos datos: Esto realiza una copia pero no cambia los valores inciales de x e Y. int x; float y; miFuncion() { a=x; b=y; ... return(0); } Revisar el programa 6progC.c para ver ejemplo de lo de arriba Paso por referencia: esto realiza una funcin similar a la de paso por argumento pero con la diferencia que aqu si se alteran los contenidos originales ya que lo que ocurre
Laboratorio de Multimedia e Internet, Facultad de Ingeniera. UNAM 2009-2010

en esta ocasin es que en la funcin se pasa la direccin de cada argumento y no el contenido del mismo. Como pudimos ver existen dos formas de declarar una funcin (implcita main(), explicita int main(int) ), para el caso de la implcita C por omisin supone una funcin como int para el resultado forzando a que el valor de retorno sea del mismo tipo ocasionando un error comn dentro de la programacin y es por ello que ponemos al final el return(0) y dependiendo el sistema operativo donde se compilen los programas es el error que nos marcara que falta un valor de retorno y generalmente son enteros ya que como trabaja en lenguaje binario (0,1) siendo 0 la opcin de que se ejecuto bien el programa y 1 que tuvo errores.

Esto es algo parecido a los apuntadores que veremos ms adelante.

Revisar el programa 6progC2.c para ver ejemplo de lo de arriba

Tipos de Datos:

Dentro de nuestro lenguaje de programacin van a existir varios tipos de datos bsicos como son: Tipos enteros: Char (carcter tamao=1 byte): este tipo de dato se utiliza para almacenar un valor entero del rango -128 a 127 donde los valores del 0 al 127 son valores a un carcter del cdigo ASCII Short (entero de formato corto tamao=2 bytes): este tipo de dato proporciona un entero en el rango de los valores -215 a (215 -1) Int ( entero tamao=2 o 4 bytes): este tipo de dato es un numero sin punto decimal y su tamao vara dependiendo del procesador de la maquina (16, o 32 bits) Long ( entero de formato largo tamao=4 u 8 bytes): este tipo de dato trabaja igual que el shor o int pero con la condicin que es para nmeros muy grandes Enum: este tipo de dato trata de una lista de valores que pueden ser tomados como una variable de ese tipo y se utilizaran con un identificador algo similar a una estructura Tipos reales: Float (reales de precisin simple tamao=4 bytes): estos datos contienen nmeros con punto decimal y est comprendido en un rango de -1.7976E+38 a -2.22507E-38 para negativos y de 1.175494E-38 a 3.402823E+38 para nmeros positivos cuidando que solo tenga hasta 7 cifras despus del punto decimal Double (reales de precisin doble tamao=8 bytes): este tipo de dato trabaja de la misma forma que el float pero tiene un rango ms extendido de -1.7976E+308 a -

Laboratorio de Multimedia e Internet, Facultad de Ingeniera. UNAM 2009-2010

2.22507E-308 para nmeros negativos y de 1.175494E-38 a 3.402823E+38 para nmeros positivos. Este tipo de dato puede contener hasta 16digitos despus del punto decimal Long Double (reales de precisin doble formato largo tamao=10 bytes): Estos datos son igualmente derivados de los float pero con un rango mayor as como las cifras significativas despus del punto decimal para este caso son 19 y comprende de 1.189731E+4932 a -3.362103E-4932 para nmeros negativos y 3.362103E-4932 a 1.189731E+4932 para nmeros positivos Otros: Void: este tipo de dato especfica que es un conjunto vacio de valores no se ocupa para declarar variables como cualquiera de los anteriores pero indica que: la funcin no acepta argumentos declara funciones las cuales no regresan ningn valor declarar un apuntador genrico.

Constantes:

Este tipo de datos son fijados previamente por el programador antes de compilar el programa y nunca cambian durante la ejecucin del mismo; estos tipos de datos pueden ser de cualquier tipo (real, entero, carcter, etc.) su sintaxis es: #define NombreDeTuConstante ValorComportamiento Existen distintos tipos de datos como float as como entero ya que con esto la computadora al compilar y ver los tipos de datos declarados que son de cierto tamao ya les da la memoria suficiente con la cual va a estar trabajando el ejecutable y esto ayuda a que los recursos de la computadora si se estn utilizando en varias aplicaciones no tenga un problema de pantalla azul. Actualmente por la capacidad de las maquinas ya se pueden trabajar muy fcilmente este tipo de programas pero cuando apenas iniciaba este tipo de implementaciones si consuma sino toda la memoria gran parte de ella. Variables:

Estas son los tipos de datos que ms se trabajan en la programacin y se declaran de la siguiente forma: tipodeDato variableCualquiera; int x, y, z; char aux; Para inicializar una variable solo basta con hacer una igualdad despus de hacer su declaracin o incluso antes de utilizarla como veremos ms adelante ejemplo: /*aqu son 3 variables distintas pero todas son enteros*/

Laboratorio de Multimedia e Internet, Facultad de Ingeniera. UNAM 2009-2010

int x=12, y=0, z; z=345; Variables Globales: existe y tiene un valor desde el inicio hasta el final de la ejecucin del programa y son del mismo carcter global todas las funciones Variables Locales estas existen y tienen un valor desde el momento de ser declarados hasta que termina el bloque donde fue declarado Checar y explicar el programa 6progC2.c y explicar las variables locales y globales Identificadores: Esto nos indica que son como vamos a llamar a las funciones o subrutinas de nuestro programa y en lenguaje C toma como cosas distintas lo que es maysculas de minsculas y solamente acepta letras y nmeros: No se puede empezar un identificador con nmeros ni puedes dejar espacios en blanco

Suma,

SumaPares,

Conversion_celsiosAfarenheit,

sintonia1

Palabras reservadas: Estas palabras son identificadores preestablecidos para el lenguaje C y nunca los podemos ocupar estos son los siguientes: Auto break Case Char const continue default Do double else enum extern float for goto if Comentarios: int long register return short signed sizeof static struct switch typedef union unsigned void volatile while

Laboratorio de Multimedia e Internet, Facultad de Ingeniera. UNAM 2009-2010

Estos son de mucha ayuda cuando se est trabajando con distintas personas en un mismo programa y as poder ir documentando que se realiza en cada paso o que es lo que se pretenda hacer y se pueden colocar en cualquier parte del programa; su sintaxis es: /* Espacio para poner comentario */ Tambin existen otros tipos de datos pero estos parten de los ya mencionados exceptuando lo que serian estructuras, apuntadores, y funciones que veremos a profundidad ms adelante en el curso. Con el programa 2progC.c poner de tarea que manipulen varias cosas como son las cadenas y varios cambios tomando como base este programa.

Funciones de librera: Putchar: esta funcin es similar al printf pero solo trabaja para oraciones y no puede meter argumentos como son los datos y su sintaxis es putchar('cualquier cosa como el primer ejemplo de printf'); putchar(variablecualquiera); Printf: esta funcin escribe en pantalla series de caracteres, valores, etc. pero dependiendo de su sintaxis es lo que mostrara en pantalla:

printf(Escribir dentro de las comillas y sale tal cual en pantalla); printf(%especificaion de formato, variable donde se guarda el valor); C identifica un carcter en base a una comparacin dentro de sus registros ya que para cada tecla o combinacin de teclas tiene asignado un numero ya sea en hexadecimal o binario con el cual compara y si esta dentro del rango de los registros validos los acepta y guarda esto basado en la tabla de caracteres ASCII Scanf: esta funcin recibe y guarda datos dentro de variables previamente identificadas (int, char, float, etc.) cuidando la sintaxis como sigue:

scanf(%especificaion de formato,&variable donde se guardara); Getch o Getchar: esta funcin es similar al scanf pero con la diferencia que solamente admite un carcter introducido por el teclado sin mostrarlo nuevamente en la pantalla, comnmente esta funcin le da una pausa al programa para que nos deje visualizar el resultado del programa.

getch();

Laboratorio de Multimedia e Internet, Facultad de Ingeniera. UNAM 2009-2010

Especificadores de formato para printf y scanf:

d, i U O X,x f, e, E, g, G C S N P Secuencias de escape de C:

(int) Enteros con signo, decimal (int) Enteros sin signo, decimal (int) Entero sin signo, octal (int) Enteros sin signo, hexadecimal (double) valores con signo con hasta 6 cifras decimales Un solo carcter Cadena de caracteres terminada con el smbolo \0 Apuntador a un entero y almacena el dato en el buffer Puntero apuntado a void

\n \t \v \b \r \f \a \' \ \\ \ddd \xdd

Salto de lnea y regresa al inicio de la misma Tabulador horizontal Tabulador vertical (solo para las impresoras) Retroceso (backspace) Retorno de carro pero sin saltar de lnea Alimentacin de pagina (solo impresoras) Alerta, pitido Comilla simple Comilla doble Barra invertida (backlash) Caracter ASCII de forma octal Caracter ASCII de forma hexadecimal

Operadores: Estos son smbolos que indican cmo se van a manipular los datos y los dividiremos en:

Laboratorio de Multimedia e Internet, Facultad de Ingeniera. UNAM 2009-2010

+ * / %

Aritmticos: Estos operadores son utilizados al realizar operaciones matemticas y son los siguientes: Suma, aplicable a enteros y reales Resta, aplicable a enteros y reales Multiplicacin, aplicable a enteros y reales Divisin, aplicable a enteros y reales pero solo dividiendo dos reales el resultado da otro real en otros casos siempre da un real Modulo o resto de una divisin entera, aplicable solo a operadores enteros.

Lgicos: Este operador solamente trabaja con las operaciones AND, OR NOT devolviendo siempre un valor verdadero o falso (0,1) y son: AND. Da como resultado un valor lgico 1 si ambos operandos son distintos a 0 si uno de ellos es 0 devuelve siempre un 0 OR. El resultado es 0 cuando los dos operandos dan igual a cero NOT. Regresa como resultado el contrario del operando 0->1 y 1->0

&& || !

Lgicos para manejo de Bits: Para manejo de bits podemos realizar operaciones AND, OR, XOR y desplazamientos bit por bit de los operandos. & | ^ Operacin AND a nivel de bits Operacin OR a nivel de bits Operacin XOR a nivel de bits

<< Desplazamiento a la izquierda >> Desplazamiento a la derecha

Relacin: El resultado de las operaciones de relacin nos da un valor verdadero o falso (1,0) Primer operando menor que el segundo Primer operando mayor que el segundo Primer operando menor o igual que el segundo Primer operando mayor o igual que el segundo Primer operando distinto que el segundo

< > <= >= !=

= = Primer operando igual que el segundo

Laboratorio de Multimedia e Internet, Facultad de Ingeniera. UNAM 2009-2010

Asignacin: para estos operadores el resultado de una operacin de asignacin es el valor de almacenado en el operando izquierdo, lgicamente despus de que la asignacin se ha realizado y este valor es convertido al tipo de dato del operando de la izquierda: Incremento Decremento Asignacin simple Multiplicacin mas asignacin Divisin mas asignacin Modulo mas asignacin Suma ms asignacin Resta mas asignacin Desplazamiento a izquierda mas asignacin Desplazamiento a derecha ms asignacin Operacin AND sobre bits mas asignacin Operacin OR sobre bits mas asignacin Operacin XOR sobre bits mas asignacin

++ -= *= /= %= += -= <<= >>= &= |= ^=

Direccin-de: el operador & (direccin-de) da la direccin de su operando: int a=7; /*a tiene el valor 7 y lo veremos el valor y su direccin de memoria*/ printf(direccin de memoria=%d, Dato=%d, &a, a);

Checar el programa 7progC.c para ver cmo funciona este operador Indireccin: este tipo de operador va muy ligado a lo que es apuntadores, y es * y lo que realiza es guardar en una variable la direccin de memoria de un dato, y al mandarlo llamar devuelve directamente el dato no la direccin de donde est. (se retomara con ms ejemplos al ver los apuntadores) Sizeof: este operador nos devuelve lo que sera el tamao en bytes de su operando, se utiliza principalmente en el manejo de memoria dinmica

Prioridad y orden de evaluacin de operadores ( ) [] . -> sizeof Izquierda a derecha

Laboratorio de Multimedia e Internet, Facultad de Ingeniera. UNAM 2009-2010

- ~ ! * & ++ -- (tipo) */% +<< >> < <= > >= == != & ^ | && || ?: = *= /= %= += -= <<= >>= &= |= ^= ,

Derecha a izquierda Izquierda a derecha Izquierda a derecha Izquierda a derecha Izquierda a derecha Izquierda a derecha Izquierda a derecha Izquierda a derecha Izquierda a derecha Izquierda a derecha Izquierda a derecha Derecha a izquierda Derecha a izquierda Izquierda a derecha

Conversin de Tipos:
Este tipo de situacin es muy frecuente cuando dentro de las subrutinas al estar trabajando con variables de distintos tipos y regresarlas a la funcin original los necesitamos en otro tipo de dato y para realizar estos cambios con los puros operadores se rige por las siguientes reglas: 1. 2. 3. 4. 5. 6. Si un operando es de tipo double, el otro es convertido a double. Si un operando es de tipo float, el otro es convertido a float. Si un operando es de tipo unsigned long, el otro es convertido a unsigned long. Si un operando es de tipo long, el otro es convertido a long. Si un operando es de tipo unsigned, el otro es convertido a unsigned. Si no, los operandos son de tipo int.

Pero tambin es posible realizar estas conversiones pero de manera explcita siguiendo la sintaxis: (tipodedato a comportarse) variableAcambiar; float a, c; int b; c=a+(float)b; Checar el programa 6progC.c con el que se realiza un cast de entero a float

Laboratorio de Multimedia e Internet, Facultad de Ingeniera. UNAM 2009-2010

Sentencias de control:
Dentro del mbito de la programacin como ya vimos un poco en lo que son diagramas de flujo podemos apreciar varios tipos de secuencias con las cuales vamos a modelar ya dentro de un programa pero primero vamos a definir a cada tipo de sentencia y son: Secuencia: Ejecucin sucesiva de una o ms operaciones. Seleccin: Se realiza una u otra operacin, dependiendo de una condicin.

Iteracin: Repeticin de una o varias operaciones mientras se cumpla una condicin.

Dicho esto analizaremos cada uno con su sintaxis y un ejemplo: Sentencia if (seleccin): esta es muy sencilla y como su nombre lo dice va a realizar cierta accin al cumplirse una condicin sintaxis pseudocdigo: if (expresin o condicin) sentencia sintaxis en C: if (expresin o condicin) { sentencia 1; sentencia 2;

Laboratorio de Multimedia e Internet, Facultad de Ingeniera. UNAM 2009-2010

sentencia n; }

Sentencia if-else (seleccin):esta sentencia trabaja exactamente igual que la if anterior pero con la nica diferencia que al encontrar otra respuesta distinta a la de la condicin realiza otro proceso: sintaxis pseudocdigo:

if (expresin o condicin) sentencia 1 else sentencia 2

sintaxis en C: if (expresin) { sentencia 1;

Laboratorio de Multimedia e Internet, Facultad de Ingeniera. UNAM 2009-2010

sentencia 2; sentencia n; } else { sentencia 1; sentencia 2; sentencia n; }

Checar el programa 3progC_IF.c como ejemplo Sentencia switch (seleccin): en esta sentencia dependiendo de la expresin o condicin dada lo que va a realizar lo va a tener delimitado en ciertos casos dentro de los cuales contempla todos los posibles as como uno para cualquier cosa no considerada: Ejemplificar que tipo de expresiones o condiciones son aceptadas, porque solo acepta nmeros o letras(ASCII code)

Laboratorio de Multimedia e Internet, Facultad de Ingeniera. UNAM 2009-2010

Las expresiones que acepta como condiciones de los case solo pueden ser nmeros enteros o letras ya que dentro de la compilacin del programa al comparar el cdigo ASCII de cada una de las expresiones de condicin las conforma de manera ms sencilla. sintaxis pseudocdigo: switch (expresin o condicin) caso expresin 1: sentencia1 break caso expresin 2: sentencia 2 break caso expresin n: sentencia n break default: sentencia default sintaxis en C: switch (expresin o condicin) { caso expresin 1: sentencia 1; break; caso expresin 2: sentencia 2; break; caso expresin n:

Laboratorio de Multimedia e Internet, Facultad de Ingeniera. UNAM 2009-2010

sentencia n; break; default: sentencia default; }

Al termino de cada caso se pone un break con lo cual se termina la instruccin de ese bloque de no colocarlo entra en un ciclo infinito y comete error La sentencia break se ver ms a fondo adelante junto con continue.

La checar el programa 4progC_CASE.c como ejemplo Sentencia for (ciclo): en esta sentencia se delimitan un inicio, una condicin y cuanto va a estar aumentando en cada vuelta la variable de inicio; para que con esto mientras se cumpla la condicin se repite el proceso a su trmino continua con las dems instrucciones del programa: sintaxis pseudocdigo:

Laboratorio de Multimedia e Internet, Facultad de Ingeniera. UNAM 2009-2010

for(variable inicio; expresin o condicin; aumento de variable inicio) sentencia sintaxis en C: for (variable inicio; expresion;aumento de variable inicio) { sentencia 1; sentencia 2; sentencia n; }

La checar el programa 8progC_FOR.c como ejemplo

Sentencia while (ciclo): esta sentencia trabaja de forma similar al for pero con la diferencia que en la expresin no se manejan tanta sintaxis sino mas bien su sintaxis en la expresin es similar al if y el aumento de la variable contador se hace dentro del cuerpo del while: sintaxis pseudocdigo:

Laboratorio de Multimedia e Internet, Facultad de Ingeniera. UNAM 2009-2010

while (expresin o condicin) sentencia sintaxis en C: while (expresin) { sentencia 1; sentencia 2; sentencia n; aumento o decremento de expresin; }

La checar el programa 9progC_WHILE.ccomo ejemplo

Sentencia do-while (ciclo): esta sentencia realiza exactamente lo mismo que la while pero con la nica diferencia que esta sentencia valida o invalida la expresin despus de haber corrido una sola vez las sentencias del ciclo: sintaxis pseudocdigo:

Laboratorio de Multimedia e Internet, Facultad de Ingeniera. UNAM 2009-2010

do sentencia; while (expresin o condicin) sintaxis en C do { sentencia 1; sentencia 2; sentencia n; } while (expresin);

Se pueden ir combinando cada una de las sentencias de expresin que es lo que se llama anidamiento con lo cual vas a seguir haciendo ciclos o secuencias para lo cual ah que checar todo lo que es sintaxis y cerrar cada una de las llaves de cada sentencia de control

Sentencia break: esta sentencia se utiliza para terminar una sentencia de ciclo como puede ser las switch, while, do o for. Ves que se coloca no importa que este anidada una
Laboratorio de Multimedia e Internet, Facultad de Ingeniera. UNAM 2009-2010

sentencia dentro de la otra ya que esta sentencia termina solo el ciclo en el cual este contenido. La checar el programa 13progC_BREAK.c como ejemplo Sentencia continue: esta sentencia es similar a la de break pero esta no detiene la sentencia de ciclo sino que limita gracias a una condicin a donde va a seguir ejecutando los ciclos, igualmente dentro de las iteraciones de ciclos termina y continua el ciclo donde este contenido La checar el programa 12progC_CONTINUE.c como ejemplo

Control de flujo:
Esta funcin es como un complemento con lo cual podemos ir teniendo una bitcora dentro de la ejecucin del programa ya que al trmino de cada ciclo, sentencia de control, subrutina, etc. que nos regresa un cierto valor cuando todo lo que se tena que ejecutar lo realiza de forma correcta. Esto se logra colocando al final de cada subrutina la palabra return y entre parntesis un valor o expresin con lo cual podemos saber que se realizo de forma correcta. La mayora de los programas tienen ese return solo es cosa que le pongan atencin

Construccin de tipos:
Los tipos de datos que ya estudiamos en captulos anteriores lo nico que se va a hacer es mezclarlos para crear nuevos tipos vamos a manejar 3 principalmente: 1. Arrays 2. Estructuras 3. Uniones 1. Array: Un array es una coleccin ordenada de elementos de un mismo tipo de datos, agrupados de forma consecutiva en memoria. Cada elemento del array tiene asociado un ndice, que no es ms que un nmero natural que lo identifica inequvocamente y permite al programador acceder a l. Su definicin es muy sencilla es similar a una variable cualquiera pero con un cierto tamao:

Laboratorio de Multimedia e Internet, Facultad de Ingeniera. UNAM 2009-2010

tipodeDato nombreDeArray[tamaoDelArray]; int ndice[20]; /*esto es un array de tamao 20 que guarda datos enteros*/ char nombreAlu[20];/*este es un array que guarda 19 caracteres y un terminador de cadena*/ Ahora para obtener, guardar y manipular los datos contenidos en un array primero tenemos que declarar el array, posteriormente darle que capture el dato con las funciones scanf y en el espacio donde declaramos donde va a guardar ese dato colocamos el ndice donde queremos guardarlo como si fuese una variable completamente distinta:

int ndice[20]; printf(dame un valor:); scanf(%d,&indice[0]); /*guarda el valor ingresado en la posicin 0 de ndice*/ ndice[4]=ndice[0] ; /*iguala el valor de ndice 0 y lo coloca en 4*/

printf(el valor ingresado es: %d y su copia es %d, ndice[0], ndice[4]);

Vectores: Este tipo de datos funcionara solo para datos numricos para lo cual vamos a trabajarlo de la misma forma que hacemos un vector en Algebra. Su sintaxis es la siguiente: tipodeDato nombreDeVector [tamaofilas][tamaocolumnas]; int miVector[2][2]; /*Esto nos da un vector de dimensin 2x2*/

Este tipo de arreglo lo vamos a poder acceder de la misma forma que un array y para seguir metiendo datos tendramos que hacerlo lnea por lnea o mandar ciclos for para cada uno de los llenados de fila.

Laboratorio de Multimedia e Internet, Facultad de Ingeniera. UNAM 2009-2010

Checar los programas 10progC_ARRAY.c y 10progC_ARRAY2.c como ejemplos

2. Estructuras: es un tipo de datos compuesto que agrupa un conjunto de tipos de datos (no necesariamente iguales) en un nico tipo, se utiliza principalmente en lo que serian datos de una misma cosa pero en distintas areas.

Para definir una estructura se hace de la siguiente forma: struct nombreEstructura /*Aqu con la palabra reservada struct definir*/ { /*una nueva variable de variables o estructura*/ declaracin de variable1; /*campos a cubrir*/ declaracin de variable2; . declaracin de variableN; }; /*NOTA aqu la estructura se delimita con un ;*/ /*ya que es otra variable*/ Una vez definida esta estructura podremos declarar variables de ese tipo, de la siguiente forma: struct nombreEstructura nombreVariable; A partir de este momento la variable nombreVariable contendr informacin acerca de cada uno de los campos definidos en la estructura. Algo similar a que dentro de este nuevo tipo de variable vamos a declarar otra que trabaje exactamente igual que la estructura declarada anteriormente. Ahora para poder ingresar datos especficos dentro de esta nueva estructura vamos a guardarlo con un operador y sintaxis un poco distinta de la siguiente forma.

Laboratorio de Multimedia e Internet, Facultad de Ingeniera. UNAM 2009-2010

nombreVariable.campo1=10; /*aqu dentro de la estructura se considera que campo1 es un dato de tipo entero*/ nombreVariable.campo2= nombreVariable.campo1 * 3.1415; /*aqu asigna tambin el valor al campo2 por medio de una multiplicacin y lo guarda en un campo2 que sera tipo float*/ Ya por ultimo para mandar llamar algn dato en especifico de la estructura se hace igual que antes con un % tipoDato y al terminar comillas se hace alusin a lo que estamos llamando en este caso el campo de la estructura colocndolo de forma igual a lo que sera para asignar valores junto con un punto

Checar el programa 11progC_STRUCT.c como ejemplo

3. Uniones: este tipo de dato es muy similar a lo que serian las estructuras pero con la diferencia que los datos ingresados son uno a uno y se va perdiendo la informacin al meter nuevos datos. Es por esta razn que solo lo mencionaremos en el curso y no iremos ms all en el tema ya que no son prcticos.

Laboratorio de Multimedia e Internet, Facultad de Ingeniera. UNAM 2009-2010

Apuntadores:
Dentro de C, cada variable de un programa tiene una direccin en la memoria del ordenador. Esta direccin indica la posicin del primer byte que la variable ocupa. En el caso de una estructura es la direccin del primer campo. Actualmente en las computadoras la direccin de inicio se considera la direccin baja de memoria. Como en cualquier caso las variables son almacenadas ordenadamente y de una forma predecible, es posible acceder a estas y manipularlas mediante otras variables que contenga su direccin. A este tipo de variables se les denomina punteros o apuntadores. Una ventaja que obtenemos de los punteros es la posibilidad que nos dan de poder tratar con datos de un tamao arbitrario sin tener que moverlos por la memoria. Esto puede ahorrar un tiempo de computacin (ciclo de reloj) muy importante en algunos tipos de aplicaciones. Tambin permiten que una funcin reciba y cambie el valor de una variable. Recordemos que todas las funciones C nicamente aceptan parmetros por valor. Mediante un puntero a una variable podemos modificarla indirectamente desde una funcin cualquiera. Su forma de ser declarado es: tipodeDato *nombreDeVariable; float *apuntador; Su manipulacin como variable es de la siguiente forma: Se utiliza su nombre; pero para acceder a la variable a la que apunta se le debe preceder de *. Accedemos indirectamente a una variable. Para trabajar con punteros existe un operador, &, que indica 'direccin de'. Con l se puede asignar a un puntero la direccin de una variable, o pasar como parmetro a una funcin.

Laboratorio de Multimedia e Internet, Facultad de Ingeniera. UNAM 2009-2010

Existe tambin lo que sera un apuntador de apuntadores el cual es un vector en el cual cada una de las casillas del vector guarda un apuntador y este guarda una direccin de cierta variable: int (*pvector) [2], *p1, *p2; /*aqu estamos creando un vector de apuntadores*/ /*as como 2 apuntadores comunes*/ El colocar el vector de apuntadores con parntesis es simple organizacin ya que no son muy necesarios

Checar 14progC_APUNTADOR.c como ejemplo

Manejo de archivos:
Dentro del mbito de la programacin en C en diversas ocasiones vamos a necesitar guardar los resultados de algn programa pero esto no es fcil ya que el programa una vez terminado de correr sale de la pantalla y ya no puedes guardar la informacin. A menos claro que introduzcamos varios comandos que veremos a continuacin con los cuales vamos a poder abrir, manipular, salvar, cargar, leer, etc. Ahora es importante aclarar que para el manejo de archivos siempre lo vamos a realizar por medio de apuntadores y la manejaremos con la palabra reservada FILE.

Laboratorio de Multimedia e Internet, Facultad de Ingeniera. UNAM 2009-2010

Fopen: Esta funcin abre y crea archivos en el Disco y va a tener dos parmetros al escribir su sintaxis: 1. Nombre: esto ser una cadena de caracteres que contenga el nombre de un archivo valido (existente) y esto puede ser por nombre de tipo direccin relativa o absoluta

Una direccin relativa es el puro nombre del archivo y su extensin (apuntesC.doc, southpark.jpg, etc.) y la direccin absoluta es toda la ruta de acceso para ese archivo (c:\Users\Desktop\apuntes.c, c:\Users\Desktop\southpark.jpg) 2. Modo: esto especifica el tipo de archivo que va a abrir o creara y el tipo de datos que puede contener, (texto o binario) Sintaxis: FILE *fopen(char *nombre, char *modo); FILE *fopen(char *datosAlumnos, char *r); r w a r+ w+ a+ t b El archivo existe, solo lectura Abre archivo para escritura, si existe lo sobrescribe sino lo crea Aade y abre para escritura situando el cursor al final, sino existe lo crea El archivo existe, lectura y escritura Abre archivo para leer y escribir, si existe lo sobrescribe sino lo crea Aade y abre para escritura y lectura situando el cursor al final, sino existe lo crea Tipo de texto Tipo binario

Laboratorio de Multimedia e Internet, Facultad de Ingeniera. UNAM 2009-2010

Si no se especifica la t o la b el programa se asume como que es de texto Fclose: Con esta funcin se va a poder cerrar o finalizar el uso de archivos y guardando la informacin que se le haya hecho Sintaxis: int fclose(FILE *archivo); Fgetc: Esta funcin permite leer un carcter desde un archivo, si no encuentra nada en el archivo nos va a devolver como respuesta EOF Sintaxis: int fgetc(FILE *fichero); int fgetc(FILE *sueldosEmp); El EOF significa que es el terminador de cadena con esto el programa sabe dnde termina una cadena de caracteres EOF= End Of File

Fputc: Esta funcin es como lo contrario de fgetc ya que esta introduce un carcter en el archivo Sintaxis: int fputc(int caracter, FILE *fichero); int fputc(int R, FILE *Pruebas);

Feof: Esta funcin nos proporciona la informacin si se ha alcanzado el final de un archivo, principalmente se ocupa como comparacin para seguir leyendo datos del archivo, si nos regresa un valor distinto a 0 significa que no ha terminado. Sintaxis: int feof(FILE *fichero); int feof(FILE *ListasCurso);

Rewind: esta regresa el cursor al inicio del archivo de almacenado Sintaxis:

Laboratorio de Multimedia e Internet, Facultad de Ingeniera. UNAM 2009-2010

void rewind(FILE *fichero); void rewind(FILE *ListasCurso); Fgets: Esta funcin est diseada para leer cadenas de caracteres, donde leer hasta n-1 caracteres o hasta que lea un regreso de lnea, donde n va a ser el nmero de elementos a entrar Sintaxis: char *fgets(char *cadena, int n, FILE *fichero); char *fgets(char *cadena, int 20, FILE *ListasCurso); Fputs: esta funcin escribe una cadena en un archivo, pero sin el carcter EOF ni el carcter de retorno de lnea Sintaxis: int fputs(const char *cadena, FILE *stream) ; Fread: con esta funcin se trabajan registros de longitud constante, leyendo desde un archivo uno o varios registros de la misma longitud y a partir de una direccin de memoria determinada El usuario es responsable de que asegurarse de que exista espacio suficiente. Sintaxis: size_t fread(void *puntero, size_t tamao, size_t nregistros, FILE *fichero); size_t fread(void *puntero, size_t 30, size_t 12, FILE *ListaCurso); Fwrite: esta funcin escribe dentro de un archivo uno o varios registros de la misma longitud almacenados a partir de una direccin de memoria determinada. Sintaxis: size_t fwrite(void *puntero, size_t tamao, size_t nregistros, FILE *fichero); size_t fwrite(void *puntero, size_t 30, size_t 12, FILE *ListaCurso); Fprintf: esta funcin es exactamente igual que la ya trabajada antes de printf pero con la diferencia que esta trabaja con archivos Sintaxis: int fprintf (FILE *fichero, const char *formato, ...); int fprintf (FILE *ListaCurso, 10 char *formato, ...);

Laboratorio de Multimedia e Internet, Facultad de Ingeniera. UNAM 2009-2010

Fscanf: esta funcin es exactamente igual que la ya trabajada antes de scanf pero con la diferencia que esta trabaja con archivos Sintaxis: int fscanf (FILE *fichero, const char *formato, ...); int fscanf (FILE *ListasCurso, 10 char *formato, ...);

Fflush: esta funcin borra el contenido dentro del buffer y cuando se llena de datos los mete al archivo especificado en el programa y hace esto repetidas ocasiones (similar a cuando dejamos de escribir en office y se guarda solito el documento) Sintaxis: int fflush (FILE *fichero); int fflush (FILE *ListaCurso);

Funciones Especificas de Ficheros Fseek: esta funcin sita el cursor del archivo a leer o escribir en un lugar deseado, regresa un cero si la funcin tuvo xito y un valor distinto a cero si hubo algn error. Cabe denotar quien en origen podemos colocar : 1. SEEK_SET: donde contara el desplazamiento desde el inicio del archivo 2. SEEK_CUR: donde contara el desplazamiento desde la posicin actual del cursor 3. SEEK_END: donde contara el desplazamiento desde el final del archivo Sintaxis: int fseek (FILE *fichero, long int desplazamiento, int origen); int fseek (FILE *ListaCurso, long int 477, int 0); Ftell: esta funcin sirve para que la computadora nos proporcione la posicin actual del cursor, regresndonos la posicin actual del cursor o un -1 si se produjo algn error. Sintaxis: long int ftell (FILE *fichero); long int ftell (FILE *ListaCurso); Checar el programa 15progC_ARCHIVOS.c

Laboratorio de Multimedia e Internet, Facultad de Ingeniera. UNAM 2009-2010

Asignacin Dinmica de Memoria:


Dentro del mbito de la programacin ya digamos un poco ms avanzada se introducen este tipo de cuestiones en las cuales si vamos limitando cunto va a almacenar una estructura y hasta el momento lo nico que conocemos es la asignacin esttica de memoria y en varias ocasiones para que pueda seguir un algoritmo adelante necesita que se le metan un determinado nmero de datos pero el dato a introducir o es muy corto o muy largo y al estar limitado por un cierto tamao no es posible utilizarlo con facilidad y es aqu cuando entran la asignacin dinmica. Asignacin dinmica de memoria: es la asignacin de memoria necesaria para almacenar un objeto durante el tiempo de ejecucin del programa. En este sentido las variables locales estn asociadas a asignaciones de memoria dinmicas, puesto que se crean y destruyen durante la ejecucin del programa. Dentro de este tipo de manejo de memoria dinmica tenemos varias funciones: Malloc: esta funcin nos permite asignar un bloque de memoria de nbytes consecutivos en memoria para almacenar uno o ms objetos de un tipo cualquiera; devuelve un puntero genrico que da la referencia del espacio asignado

Realloc: esta funcin permite volver a cambiar el tamao de un bloque de memoria previamente asignado en la funcin malloc; devuelve un puntero genrico que da la referencia del espacio reasignado

Calloc: esta funcin trabaja exactamente igual que la funcin malloc pero en este caso es para asignar dinmicamente el tamao de matrices

Free: esta funcin es sumamente importante ya que esta indica al cpu que se debe liberar la memoria reservada por malloc, calloc, realloc.

Si no se pone un Free al trmino del programa donde se utilizan funciones de asignacin dinmica de memoria va haciendo ms lenta la respuesta del CPU pues sigue usando siempre la memoria y cuando se corre nuevamente el programa pide ms y ms memoria causando problema de overflow

Laboratorio de Multimedia e Internet, Facultad de Ingeniera. UNAM 2009-2010

Tareas por asignar o Ejercicios


Inserte aqu las tareas o ejercicios a realizar por los estudiantes Tarea 1 1. Crear un programa con el cual despliegue los datos del programador 2. Crear un programa con el que despliegue los datos del programador y del usuario que lo visite 3. Basndote en las directivas de precompilamiento, 4. Hacer un programa que cambie un dato de int a float y viceversa y mostrarlo en pantalla 5. Hacer un programa que utilice un if-else 6. Hacer un programa que utilice un for 7. Hacer un programa que utilice un while 8. Hacer un programa que utilice un switch 9. Hacer un programa que utilice un array 10. Hacer un programa que utilice un struct Tarea 2 1. Hacer un programa que segn lo que quiera un usuario calcule el rea de un triangulo, un cuadrado o un circulo 2. Hacer un programa que convierta de grados Celsius a Fahrenheit y viceversa 3. Hacer 4 programas basndote en los diagramas de flujo que se pidieron como tarea en captulos anteriores (4 de todos los que se hicieron y especificara las opciones en clase) 4. Hacer un programa que calcule 5 valores recibiendo solamente 2 que meta el usuario (suma, multiplicacin, modulo, cuadrado de un numero, un nmero elevado al segundo numero ingresado) 5. Hacer un programa que con el uso de archivos guarde los datos en un de una persona y que al abrir el .txt guarde todos los registros que se ingresen sin perder los datos.

Control de Versin Autor


Autor Ian Priscilla (revisin) Ian

Fecha
dd-mm-aa 14-10-2009 // 16-10-2009

Versin
1.1 1.2 Revisin 2.0

Laboratorio de Multimedia e Internet, Facultad de Ingeniera. UNAM 2009-2010

S-ar putea să vă placă și