7/30/2019 Introd. a la Algoritmia - Tema 3
1/35
Introduccin a la Algoritmia
Leccin 3Lenguaje C
Pontificia Universidad Catlica Madre y Maestra
Vicerrectora Acadmica
Facultad Ciencias de las Ingenieras
Ingeniera en Sistemas y Computacin - ISC
16-ene-13
Santiago, Rep. Dom.
7/30/2019 Introd. a la Algoritmia - Tema 3
2/35
Lenguaje C
Qu es el Lenguaje C?
Es un lenguaje de programacin creado en el 1972 por Dennis M. Ritchie en los
laboratorios Bell como evolucin del anterior lenguaje B (de Ken Thomson), a su
vez basado en BCPL (de Martin Richards).
Sali al pblico de manera oficial a travs de la publicacin de The C
Programming Language, de Brian Kernighan y Dennis Ritchie.
Definicin y Caractersticas
7/30/2019 Introd. a la Algoritmia - Tema 3
3/35
Lenguaje C
Definicin y Caractersticas
Ncleo del lenguaje simple, compatible conbibliotecas.
Es muy flexible y porttil.
Opera con un sistema de tipos para evitaroperaciones sin sentido.
Utiliza un lenguaje de preprocesado, para las macrosy constantes.
Acceso de memoria a bajo nivel a travs de punteros.
Caractersticas del Lenguaje C
7/30/2019 Introd. a la Algoritmia - Tema 3
4/35
Lenguaje C
Definicin y Caractersticas
Tiene un conjunto reducido de palabrasclave.
El paso de parmetros entre funciones se
realiza por defecto por valor. Tipos de datos agregados (struct) para
agrupan un conjunto de datos relacionados.
Caractersticas del Lenguaje C
7/30/2019 Introd. a la Algoritmia - Tema 3
5/35
Lenguaje C
Traductores de lenguaje
Los traductores de lenguaje son programas que traducen a su vez los programas
fuente escritos en lenguaje de alto nivel a cdigo mquina.
Se dividen en:
* Compiladores:
Es un programa que traduce los programas fuente escritos en lenguajes de
alto nivel a lenguaje mquina en archivos objeto para que el montador los enlace.
* Intrpretes:
Traductor que toma un programa fuente, lo traduce y a continuacin lo
ejecuta.
Intrpretes y Compiladores
7/30/2019 Introd. a la Algoritmia - Tema 3
6/35
Lenguaje C
Compilacin
La compilacin es el proceso de traduccin de programas fuente a programas
objeto, el cual ha sido ya traducido a cdigo mquina.
Como parte del proceso de compilacin, viene luego un programa llamado
montador, enlazador o linker, el cual analiza las dependencias con otras libreras
para unirlas con el programa objeto ya compilado y as producir un archivo nico
ejecutable.
Intrpretes y Compiladores
7/30/2019 Introd. a la Algoritmia - Tema 3
7/35
Lenguaje C
Compilacin
Intrpretes y CompiladoresCdigoFuente
Compilador
ProgramaObjeto
Montador
Ejecutable
7/30/2019 Introd. a la Algoritmia - Tema 3
8/35
Lenguaje C
Compilacin
Intrpretes y Compiladores
7/30/2019 Introd. a la Algoritmia - Tema 3
9/35
Lenguaje C
Constantes y Variables
Los programas de computadoras contienen ciertos valores que no deben cambiar
durante la ejecucin del programa. Tales valores se llaman constantes. De igual
forma, existen otros valores que cambiarn durante la ejecucin del programa; a
estos valores se les llama variables.
Una constante es uma partida de datos que permanecen sin cambios durante todo el
desarrollo del algoritmo o durante la ejecucin del programa. El tipo de umaconstante lo define el valor que tienen asignado.
Tipos de Datos
7/30/2019 Introd. a la Algoritmia - Tema 3
10/35
Lenguaje C
Constantes y Variables
Una variable es un objeto o partida de datos cuyo valor puede cambiar durante el
desarrollo del algoritmo o ejecucin del programa.
Una variable que es de un cierto tipo puede tomar nicamente valores de ese tipo.
Una variable caracter, por ejemplo, puede tomar como valor slo caracteres,
mientras que una variable entera puede tomar slo valores enteros. Si se intenta
asignar un valor de un tipo a una variable de otro tipo se producira un error de tipo.
Una variable se identifica por los atributos: nombre y tipo
Tipos de Datos
7/30/2019 Introd. a la Algoritmia - Tema 3
11/35
Lenguaje C
Constantes y Variables
Las variables se clasifican segn su uso en:
De asignacin: son aquellas que guardan resultados de operaciones, valores
iniciales y valores de otra variable.
Contadores: son aquellas que se usan para llevar la secuencia de alguna operacin
que se est realizando. Siempre se debe inicializar esta variable en 0 para no
obtener valores no deseados del conteo.
Ejemplo: Una variable que tenga cuntas lneas se han impreso en un momento
dado. La variable linea se inicializa en cero (linea=0) y cada vez que se imprime
una lnea se incrementa en uno (linea=linea + 1).
Tipos de Datos
7/30/2019 Introd. a la Algoritmia - Tema 3
12/35
Lenguaje C
Constantes y Variables
Acumuladoras: cuando se utilizan para obtener la suma de una serie de valores.
Tambin se deben inicializar en cero.
Ejemplo: Si se quiere saber la sumatoria de un conjunto de nmeros. La variable
total se inicializa en cero. Cuando se captura un valor se acumula en total (total
= total + valor).
Tipos de Datos
7/30/2019 Introd. a la Algoritmia - Tema 3
13/35
Lenguaje C
Constantes y Variables
Sub-ndices: manejan la referencia a una hilera de datos e indica la posicin de los
datos. El valor correspondiente es la posicin donde se encuentra el dato que se est
proesando. Se inicializan de acuerdo a la posicin del valor con que se empezara a
trabajar.
Ejemplo: Si se tiene el conjunto de nmeros 3,7,5,8,9; e iniciamos con el primer
dato, la variable tendra el valor de 0. As, al avanzar al siguiente dato tendra elvalor de 1, y as sucesivamente...
Tipos de Datos
7/30/2019 Introd. a la Algoritmia - Tema 3
14/35
Formatos de Programas en C
El pre-procesador C
El preprocesador es una coleccin de instrucciones especiales,llamadas directivas, las cuales son ejecutadas al principio del procesode compilacin.
El control del preprocesador se realiza mediante determinadas
directivas incluidas en el fuente.
Una directiva es una palabra que interpreta el preprocesador. Siempre vaprecedida por el smbolo # y est situada a principio del cdigo.
Por Ej.
#include#define
Estructuras de Control
7/30/2019 Introd. a la Algoritmia - Tema 3
15/35
Formatos de Programas en C
El pre-procesador C
La directiva #define se utiliza para definir una macro; es deciridentificadores simples que son equivalentes a expresiones oinstrucciones completas. En ese sentido una macro se parece a unafuncin, pero son tratada y definidas de forma diferentes durante el
proceso de compilacin.
Se define de la forma:
#define ID secuencia. Cada ocurrencia de ID en el fuente es sustituida por
secuencia.
#define PI 3.141593 /*constante numrica*/
#define NOMBRE Carlitos /* texto */
Estructuras de Control
7/30/2019 Introd. a la Algoritmia - Tema 3
16/35
Formatos de Programas en CEstructuras de Control
#include #include
#define AREA longitud * altura
int main(int argc, char *argv[])
{
int longitud,altura;
printf("\n Longitud =");
scanf("%d",&longitud);
printf("\n Altura =");
scanf("%d",&altura);
printf("\n Area = %d", AREA);
system("PAUSE");
return 0;
}
La macro AREA representa la expresin
longitud * altura. Cuando el programa es
compilado, la expresin longitud * altura
reemplaz al identificador AREA dentro de
la instruccin printf de tal manera quedicha instruccin quedar:
printf("\n Area = %d", longitud * altura);
7/30/2019 Introd. a la Algoritmia - Tema 3
17/35
Lenguaje C
Tipos de Datos
Existen datos numricos; otros son letras o caracteres. El computador necesita un
sistema para identificar y utilizar todas estas diferentes clases de datos. En C el
sistema consiste en reconocer algunos tipos de datos fundamentales. Si el dato es
una constante, el compilador es capaz, generalmente, de decirnos de qu tipo se
trata simplemente por el aspecto que tiene; por el contrario, las variables necesitan
un anuncio previo de su tipo en la sentencia de declaracin.
C soporta varios tipos diferentes de datos, cada uno de los cuales puede ser
representado de forma diferente dentro de la memoria de la computadora.
Tipos de Datos
7/30/2019 Introd. a la Algoritmia - Tema 3
18/35
Lenguaje C
Tipos de Datos
Tipos de Datos
char
Un caracter (letra)
Ej.: a, z, ?, -
Memoria: 1 byte
Rango: -128..127
short
Cantidad entera pequea
Ej.: -15
Memoria: 2 bytes
Rango: -3276832767
int
Cantidad entera
Ej.: 5, 6, 3872
Memoria: 4 bytes
Rango: -21474836482147483647
unsigned
int
Cantidad entera pequea
Ej.: 4047565324
Memoria: 4 bytes
Rango: 04294967296
7/30/2019 Introd. a la Algoritmia - Tema 3
19/35
Lenguaje C
Tipos de Datos
Tipos de Datos
longCantidad entera grande
Ej.: 15
Memoria: 8 bytes
Rango: -92233720368547758089223372036854775807
floatPunto flotante
Ej.: 5.4, 3.22, 7.6543
Memoria: 4 bytes
Rango: 1.175494351e383.402823466e38
doubleDoble precisin de punto flotante.
Ej.: 6.1e12, 1.7e-19
Memoria: 8 bytes
Rango: 2.2250738585072014e3081.7976931348623158e308
long
doubleDoble precisin de punto flotante.
Ej.: 6.1e12, 1.7e-19
Memoria: 16 bytes
Rango: ?
7/30/2019 Introd. a la Algoritmia - Tema 3
20/35
Lenguaje C
Tipos de Datos
La cantidad de memoria usada o el tamao del dato depende del tamao de palabra
de la mquina para la cual est hecho el compilador en que se trabaje.
Tipos de Datos
7/30/2019 Introd. a la Algoritmia - Tema 3
21/35
Lenguaje C
Tipos de Datos
El tipo int puede tener los prefijos short, long y signed/unsigned.
La interpretacin de estos prefijos vara de un compilador a otro, pero en forma
general:
short: Usa la mitad del tamao de un entero.
long: Usa el doble del tamao de un tipo.
signed: Con signo, del mismo tamao, se asume por defecto.
unsigned: Sin signo. Slo los positivos.
Tipos de Datos
7/30/2019 Introd. a la Algoritmia - Tema 3
22/35
Lenguaje C
En el lenguaje C, se utilizan operadores para representaroperaciones aritmticas.
Por ejemplo, el operador + hace que se sumen los valores situados a su izquierda y
derecha. Si a y b son variables del tipo entero (int) con valores 10 y 3
respectivamente:
Operadores
a+b = 13
Suma
a-b = 7
Resta
a*b = 30
Multiplicacin
a/b=3
Divisin
a%b=1
Mdulo(residuo)
7/30/2019 Introd. a la Algoritmia - Tema 3
23/35
Lenguaje C
Supongamos ahora que v1 y v2 son variables flotantes (float) cuyos valores son
12.5 y 2.0, respectivamente. Veamos los resultados de las siguientes expresiones:
Operadores
v1+v2 =14.5
Suma
v1-v2 =10.5
Resta
v1*v2 =25.0
Multiplicacin
v1/v2=6.25
Divisin
v1%v2=Error!
Mdulo(residuo)
El operador % (mdulo, residuo)
es entre enteros y no est
definido para valores decimales.
7/30/2019 Introd. a la Algoritmia - Tema 3
24/35
Lenguaje C
Aqu, supongamos que c1 y c2 son tipo caracter con los valores P y T,
respectivamente. Veamos los valores de las siguientes operaciones:
Operadores
Fjese que el caracter P tiene el
valor 80 como decimal, segn la
tabla ASCII y T tiene el 84 y
5 tiene el valor 53.
Expresin Valor
c1 80
c1+c2 164
c1+c2+5 169
c1+c2+5 217
c1%c2 80
7/30/2019 Introd. a la Algoritmia - Tema 3
25/35
Lenguaje C
Operadores
En general, el resultado final de una operacin ser expresado en el tipo de dato
de mayor precisin, relacionado con los tipos de datos de los operandos. Las
siguientes reglas aplican para estos casos:
Si ambos operandos son flotantes con diferente precisin, el operando de menorprecisin ser convertido a la del otro y el resultado ser expresado en la mayor
precisin.
Si un operando es flotante y otro es un caracter o un entero, el entero o el caracter
sern convertidos a flotantes y el resultado ser flotante.
Si no hay operandos flotantes, pero uno es long int, entonces el otro ser convertidoa long int y el resultado ser en long int.
Si no hay operandos flotantes ni long int ambos operandos sern convertidos a
enteros y el resultado ser un entero.
7/30/2019 Introd. a la Algoritmia - Tema 3
26/35
Lenguaje C
Supngase que i es un entero cuyo valor es 7, f es un flotante cuyo valor es 5.5 y c
es un caracter que representa el caracter w. Veamos los resultados de las
siguientes expresiones:
Operadores
0 = 48
w = 119
Expresin Valor Tipo
i + f 12.5 float
i + c 126 int
i + c0 78 int
(i + c)(2 * f / 5) 123.8 float
7/30/2019 Introd. a la Algoritmia - Tema 3
27/35
Lenguaje C
El valor de una expresin puede ser convertido a un tipo de dato en especfico si as
se desea. Esto se conoce como conversin de tipo. Simplemente la expresin (o
variable) debe estar precedida por el tipo de dato deseado encerrado entre
parntesis. En algunos casos es obligatorio hacer la conversin de tipo.
Supongamos que i es una variable tipo entero cuyo valor es 7 y f es una variable
flotante con un valor de 8.5.
La expresin: (i + f) % 4 es invlida, porque el primer operando es flotante.
Pero si la expresin fuese ((int) (i+f)) % 4, se est convirtiendo el resultado de (i+f)a entero.
Si queremos hacer una conversin de tipo la forma es: (tipo)expresion.
Operadores
7/30/2019 Introd. a la Algoritmia - Tema 3
28/35
Lenguaje C
Debemos tener claro que al hacer una conversin de tipo los datos se trabajan de
acuerdo al tipo asignado en la conversin.
Si por ejemplo tenemos i como entero con el valor de 2, x como flotante con el
valor de 3.12, al evaluar: i+x tenemos 2+3.12, pero al evaluar i+(int)x tenemos 2+3.
Al evaluar (float)i+x tenemos 2.0+3.12, adems i/x es 2/3.12 = 0 (toma el tipo del
numerador por defecto) y (float)i/x es 2.0 /3.12=0.641025
Operadores
7/30/2019 Introd. a la Algoritmia - Tema 3
29/35
Lenguaje C
Operadores Unarios
Si la variable i es de tipo entero (int) con valor de 5:
Operadores
-i = -5
Cambio deSigno
i++ ++i= 6
Incrementoen uno
i-- --i = 4
Decremendoen uno
++ ypueden ser utilizados prefijo o
posfijo. Si es prefijo, la variable se
incrementa/decrementa primero y luego de
utiliza. En posfijo, se utiliza primero y en la
siguiente sentencia se aplican los cambios.
7/30/2019 Introd. a la Algoritmia - Tema 3
30/35
Lenguaje C
Operadores Relacionales y Lgicos
Operadores
Operador Significado
< Menor que
Mayor que
>= Mayor o igual que
== Igual a
!= Diferente a
! Negacin
&& Y lgico
|| O lgico
En el lenguaje C no existe el tipo
de dato booleano propiamente,
pero C define como verdadero todo
valor diferente de cero y como
falso el valor cero.
7/30/2019 Introd. a la Algoritmia - Tema 3
31/35
Lenguaje C
Supongamos que i, j y k son variables tipo entero con los valores 1, 2 y 3
respectivamente. Veamos los valores de las siguientes expresiones:
Operadores
Expresin Interpretacin Valor
i= k Verdadero 1
(j+k) > (i+5) Falso 0
k != 3 Falso 0
j == 2 Verdadero 1
!(j==2) Falso 0
(i>=5) || (j%3) Verdadero 1
(i
7/30/2019 Introd. a la Algoritmia - Tema 3
32/35
Lenguaje C
Operadores de AsignacinOperadores
Operador Significado
= Asigna el valor de la derecha a la variable que est a la izquierda.
+= Asigna el valor de la variable de la izquierda ms el valor de la
derecha a la variable de la izquierda.
-= Asigna el valor de la variable de la izquierda menos el valor de la
derecha a la variable de la izquierda.
*= Asigna el valor de la variable de la izquierda por el valor de la
derecha a la variable de la izquierda.
/= Asigna el valor de la variable de la izquierda entre el valor de la
derecha a la variable de la izquierda.
%= Asigna el residuo de la divisin de la variable de la izquierda con el
valor de la derecha a la variable de la izquierda.
7/30/2019 Introd. a la Algoritmia - Tema 3
33/35
Lenguaje C
Supongamos que i, j y k son variables tipo entero con los valores 1, 2 y 3
respectivamente. Veamos los valores de las siguientes expresiones:
Operadores
Expresin Valor de k
k = i + j 3
k = ij -1
k += i+j 6
k *= i+j 9
k /= i+j 1
k %= j 1
7/30/2019 Introd. a la Algoritmia - Tema 3
34/35
Lenguaje C
Orden de Precedencia de Evaluacin
(de mayor a menor)
Operadores
Categoras Operadores Asociacin
Unarios - ++ -- ! DI
Multiplicacin, Divisin y Mdulo * / % ID
Suma y Sustraccin + - ID
Relacionales < >= ID
Igualdad == != ID
Y lgico && ID
O lgico || ID
Asignacin = += -= *= /= %= DI
7/30/2019 Introd. a la Algoritmia - Tema 3
35/35
Lenguaje C
Operador Ternario ?:Generalmente se usa con un operador de asignacin, pero se puede usar en otros
casos.
Uso: Expresin ? VERDADERO : FALSE
Si la expresin es verdadera retorna lo que est despus del ? (signo de
interrogacin), y si no, lo que est despus del : (dos puntos).
Operadores
Si i, j y k son enteros con los
valores 5, 6 y 8 respectivamente.
Expresin Valor de k
k = i>5 ? 6 : 4 4
k += i
Top Related