Sei sulla pagina 1di 14

Definiciones

Se denomina algoritmo a una secuencia de instrucciones que permiten obtener


un resultado en particular. No necesariamente son programas de computadora,
una receta de cocina, o las instrucciones para cambiar un neumtico son
ejemplos de algoritmos de la vida real.

Los lenguajes de programacin son el medio de comunicacin entre el


programador y una computadora. El programador escribe en algn lenguaje de
programacin y utiliza las herramientas provistas por ese lenguaje para
transformarlo en lenguaje de mquina.

Finalmente, denominamos programa a una secuencia de rdenes a ser


ejecutadas por una computadora. Un programa debe estar escrito en algn
lenguaje de programacin, y puede incluir uno o ms algoritmos.

Enteros
Los enteros son el tipo de dato ms primitivo en C. Se usan para representar nmeros
enteros. Pero siempre se pueden encontrar otras aplicaciones para los nmeros enteros.
En general se pueden usar para representar cualquier variable discreta.

Los tipos de datos enteros son: short, int, long y long long.

Es decir que para el lenguaje C existen diferentes tamaos de nmeros enteros que,
segn el compilador y la plataforma de hardware, pueden tener desde 1 byte hasta 8
bytes (para ms detalles busca en la referencia).

Adems, el lenguaje C hace la distincin de si el entero es con signo o sin signo


(signed o unsigned). La forma de declarar un entero es con uno de los tipos de datos
que sean enteros segn el tamao que se quiera. En caso de que no se declare si es con
signo o sin signo, se toma con signo.

Algunos ejemplos de declaraciones de enteros:

int a;
unsigned int a;
signed long a;
signed long long a = 10000000;

Todos los nmeros son representados en memoria mediante una cadena de bits. En el
caso de los nmeros con signo, el bit ms significativo es el que se usa para representar
el signo. La representacin de los nmeros negativos se realiza mediante el
complemento a dos, que es una tcnica que permite operar con los nmeros negativos
de forma lgica.

Slo a modo de ejemplo, la representacin en memoria de un -8 en una variable de 2


bytes, entera, con signo sera la siguiente:

1000000000001000
Flotantes
Se denomina flotantes a los tipos de datos que representan a los nmeros reales, ya que
utilizan un sistema de representacin basado en la tcnica de coma flotante, que
permite operar con nmeros reales de diversas magnitudes, mediante un nmero
decimal llamado mantisa y un exponente que indica el orden de magnitud.

El tipo de dato flotante en lenguaje C slo tiene dos tamaos: el float y el double, que
son 4 bytes y 8 bytes respectivamente. Se los puede utilizar tanto para representar
nmeros decimales, como para represantar nmeros enteros con un orden de magnitud
muy grande.

La forma de declarar una variable flotante es escribiendo en una lnea uno de los tipos
de datos flotantes y a continuacin el nombre de la variable y tal vez algn valor que se
les quiera dar.

Algunos ejemplos:

float a;
double a = 1e23;
double a = 3.1416;
float a = 4e-9;
double a = -78;

Hay que tener en cuenta que aunque los valores flotantes son ms convenientes para
algunas aplicaciones, hay casos en los que se prefieren los enteros. Esto se debe a que
los nmeros flotantes no necesariamente tienen soporte de hardware, en particular en las
plataformas integradas. Una alternativa que se utiliza en estas situaciones es interpretar
los enteros como decimales de forma que 150 se interprete como 1.5 y 2345 como
23.45.

Para el caso de los flotantes de 4 bytes, se utiliza 1 bit para el signo, 8 bits para el
exponente y 23 bits para el valor del nmero. El procedimiento para almacenar un
nmero en una variable flotante es el siguiente:

1. Se convierte a binario la parte entera.


2. Se coloca el signo en el bit ms significativo de la misma manera que en los
enteros (1 para el - y 0 para el +).
3. Se mueve la coma (en la representacin binaria de la parte entera) hasta que est
a la derecha del primer uno y ste se descarta (el uno ms significativo). El valor
del exponente ser el nmero de posiciones que se movi la coma. El exponente
usa la representacin de un entero con complemento a dos.
4. Se convierte en binario la parte decimal del nmero. Esto usando el peso de los
bits. el bit decimal ms significativo vale 1/2, el siguiente vale 1/4, el otro 1/8, el
otro 1/16 y as hasta completar lo que falta para los 23bits del valor.
5. Se concatena todo y ese es el valor flotante representado en memoria.
Caracteres
Los caracteres se representan utilizando el tipo char, que tiene slo 1 byte de tamao.
Este tipo se utiliza para representar los 255 caracteres de la tabla de caracteres del
sistema. El tipo char es tambin un tipo entero, ya que puede tomar valores de 0 a 255.

En cuanto a la forma de declarar variables de tipo char es la misma forma que con los
otros tipos.

char a;
char a = 's';
char a = 48;

Como puedes ver, se le puede asignar un nmero a una variable char, ya que se trata de
un tipo entero. En algunas situaciones particulares se utiliza el tipo char para
contadores, porque permite que ocupen slo un byte en memoria.

Es importante notar que con la llegada de la codificacin UTF-8, los caracteres de los
diversos idiomas pueden ocupar 1, 2, 3 o 4 bytes, de modo que el tipo char ya no
alcanza para la representacin de todos los caracteres. Por ello, el estndar C99
introduce el tipo wchar que puede ocupar ms de 1 byte, segn sea necesario para la
codificacin utilizada por el sistema.

Operadores Precedencia

Operadores Precedencia
* / Izq. a Der.
+ - Izq. a Der.
= Der. a Izq.

Empezando por las ltimas preguntas, el operador de asignacin s crea una expresin,
como los operadores de suma, resta, multiplicacin y divisin, y esa expresin tiene un
resultado, que es el valor que obtiene el lado izquierdo al realizar la operacin. En
cuanto a saber qu se debe ejecutar primero, el ordenador tiene una lista de precedencia,
segn la cual siempre ejecuta primero las multiplicaciones y divisiones, de izquierda a
derecha, a continuacin las sumas y restas, de izquierda a derecha, y a continuacin las
asignaciones, de derecha a izquierda.

Estructura bsica de un programa en C

La mejor forma de aprender un lenguaje es programando con l. El programa ms sencillo que


se puede escribir en C es el siguiente:

main( )

{}

Como nos podemos imaginar, este programa no hace nada, pero contiene la parte ms
importante de cualquier programa C y adems, es el ms pequeo que se puede escribir y que
se compile correctamente. En el se define la funcin main, que es la que ejecuta el sistema
operativo al llamar a un programa C. El nombre de una funcin C siempre va seguida de
parntesis, tanto si tiene argumentos como si no. La definicin de la funcin est formada por
un bloque de sentencias, que esta encerrado entre llaves {}.

Un programa algo ms complicado es el siguiente:

#include <stdio.h>

main( )

printf("Hola amigos!\n");

Con el visualizamos el mensaje Hola amigos! en el terminal. En la primera lnea indica que se
tengan en cuenta las funciones y tipos definidos en la librera stdio (standard input/output).
Estas definiciones se encuentran en el fichero header stdio.h. Ahora, en la funcin main se
incluye una nica sentencia que llama a la funcin printf. Esta toma como argumento una
cadena de caracteres, que se imprimen van encerradas entre dobles comillas " ". El smbolo \n
indica un cambio de lnea.

Hay un grupo de smbolos, que son tratados como caracteres individuales, que especifican
algunos caracteres especiales del cdigo ASCII. Los ms importantes son:

\a Alerta

\b Espacio atrs

\f Salto de pgina

\n Salto de lnea

\r Retorno de carro

\t Tabulacin horizontal

\v Tabulacin vertical

\\ Barra invertida

\' Comilla simple


\" Comillas dobles

\OOO Visualiza un carcter cuyo cdigo ASCII es OOO en octal

\xHHH Visualiza un carcter cuyo cdigo ASCII es HHH en hexadecimal

Un programa C puede estar formado por diferentes mdulos o fuentes. Es conveniente


mantener los fuentes de un tamao no muy grande, para que la compilacin sea rpida.
Tambin, al dividirse un programa en partes, puede facilitar la legibilidad del programa y su
estructuracin. Los diferentes fuentes son compilados de forma separada, nicamente los
fuentes que han sido modificados desde la ltima compilacin, y despus combinados con las
libreras necesarias para formar el programa en su versin ejecutable.

Tipos bsicos y variables

Los tipos de datos bsicos definidos por C son caracteres, nmeros enteros y nmeros en
coma flotante. Los caracteres son representados por char, los enteros por short, int, long y los
nmeros en coma flotante por float y double. Los tipos bsicos disponibles y su tamao son:

Char Carcter (normalmente 8 bits)

Short Entero corto con signo (normalmente 16 bits)

Int Entero con signo (depende de la implementacin)

Unsigned Entero sin signo (depende de la implementacin)

Long Entero largo con signo (normalmente 32 bits)

Float Flotante simple (normalmente 32 bits)

Double Flotante doble (normalmente 64 bits)

La palabra unsigned en realidad es un modificador aplicable a tipos enteros, aunque si no se


especifica un tipo se supone int. Un modificador es una palabra clave de C que indica que una
variable, o funcin, no se comporta de la forma normal. Hay tambin un modificador signed,
pero como los tipos son por defecto con signo, casi no se utiliza.

Las variables son definidas utilizando un identificador de tipo seguido del nombre de la variable.
Veamos el siguiente programa:
#include <stdio.h>

main()

float cels, farh;

farh = 35.0;

cels = 5.0 * ( farh - 32.0 ) / 9.0;

printf("-> %f F son %f C\n", farh, cels );

En el programa anterior se definen dos variables float, se asigna un valor a la primera y se


calcula la segunda mediante una expresin aritmtica. Las asignaciones en C tambin son una
expresin, por lo que se pueden utilizar como parte de otra expresin, pero segn que prcticas
de este tipo no son muy recomendables ya que reducen la legibilidad del programa. En la
instruccin printf, el smbolo %f indica que se imprime un nmero en coma flotante.

Hay un tipo muy importante que se representa por void que puede significar dos cosas
distintas, segn su utilizacin. Puede significar nada, o sea que si una funcin devuelve un
valor de tipo void no devuelve ningn resultado, o puede significar cualquier cosa, como puede
ser un puntero a void es un puntero genrico a cualquier tipo de dato. Ms adelante veremos
su utilizacin.

Expresiones y operadores

Los distintos operadores permiten formar expresiones tanto aritmticas como lgicas. Los
operadores aritmticos y lgicos son:

+, - suma, resta

++, -- incremento, decremento

*, /, % multiplicacin, divisin, mdulo

>>, << rotacin de bits a la derecha, izquierda.

& AND booleano

| OR booleano
^ EXOR booleano

~ complemento a 1

! complemento a 2, NOT lgico

==, != igualdad, desigualdad

&&, || AND, OR lgico

<, <= menor, menor o igual

>, >= mayor, mayor o igual


*****************************************************************

2. Estructura general de un programa en C.

#include <stdio.h>
Declaracin
main ( ) de objetos

{
Asignacin
int a, b; de valores

int c;
Funcin Principal
a = 5;

b = 3;
Sentencias
c = a + b; (Cuerpo del
programa)
printf (%d + %d = %d, a,
b, c);

En C, todas las sentencias van seguidas de `;' (excepto las funciones). Adems, todos los
objetos han de ser declarados previamente, ya sean variables, funciones, constantes, etc.

La instruccin printf, imprime una cadena formateada. La cual va entrecomillada y en la


que se pueden escribir tanto letras y nmeros como formatos para los datos de una
variable que se quiere mostrar, como secuencias de escape. Los formatos para los datos
de las variables se abordarn en el apartado 1.4. Tipos de datos, mientras que las
secuencias de escape se revisarn en el apartado 1.5 Secuencias de escape.

3. Identificadores

Los nombres que pueden recibir los objetos son cadenas alfanumricas que no
comiencen por un nmero, si bien, dependiendo del compilador, solo diferenciarn unos
objetos de otros los primeros `m' caracteres de la cadena. As podemos encontrar
compiladores que usan desde 8 hasta 32 caracteres en los nombres de objetos.

Tampoco es posible usar caracteres especiales (`,,/,\,*, etc.) para dar nombre a un
objeto; as como tampoco pueden usarse los nombres reservados de C: tanto funciones
como tipos de datos, etc. Y, al igual que las mquinas Unix, el lenguaje C diferencia
entre maysculas y minsculas, por lo que para l no ser lo mismo el objeto `aux', que
el objeto `aUx'

4. Tipos de Datos.

La siguiente tabla muestra un resumen de los tipos de dato disponibles en C y el rango


de nmeros que abarca cada uno de ellos.

Tipo de Dato Significado Rango

int Entero -32.768 a 32.767

unsigned int entero sin signo 0 a 65.535

short int entero corto -32.768 a 32.767

unsigned short int entero corto sin signo 0 a 65.535

long int entero largo -2.147.483.648 a 2.147.483.647

unsigned long int entero largo sin signo 0 a 4.294.967.295

float Real 3,4E +/- 38 (7 dgitos)

double real de doble precisin 1,7E +/- 308 (15 dgitos)

real de doble precisin


long double 1,7E +/- 4932 (15 dgitos)
largo

char Carcter -128 a 127

Los enteros suelen tener un tamao de 2 bytes, es decir, 16 bits lo que posibilita poder
almacenar 216 nmeros o lo que es lo mismo un rango que va desde 0 a 65535. Si bien
los enteros largos suelen ser el doble de grandes que los enteros, as si para una
mquina el entero es de 2 bytes, el entero largo ser de 4, lo que posibilitar un rango de
0 a 4.294.967.295. Es posible, dependiendo de la mquina que el entero tenga un
tamao de 4 bytes, en cuyo caso el entero largo tendr un tamao de 8 bytes.

La modificacin de cualquiera de estos por la palabra unsigned hace que los rango sean
estrictamente positivos; en su ausencia, estos rangos estn particionados en mitad de
positivos y mitad de negativos.

Los reales son tipos de datos que sirven para representar nmeros decimales y en coma
flotante. En C los tenemos de simple y doble precisin, que nicamente varan en la
cantidad de decimales que pueden almacenar.
Por su parte el tipo carcter es un tipo de dato muy especial en C. Sirve para almacenar
un nico carcter, si bien C lo almacena en memoria como su correspondiente ASCII,
de modo que dependiendo del formato de salida que le demos al dato as podremos
obtener una letra u un nmero. (A65, B66, C67, $36, a97, b98, f102, etc.)

Cabe sealar que en C no existe un tipo de dato cadena especfico. C almacena las
cadenas como vectores de caracteres y su tratamiento requiere de funciones especficas
que nos permitan asignar una cadena a un variable en tiempo de compilacin.

A la hora de formatear la salida de una variable para su correspondiente visionado por el


terminal se utilizan los especificadores de formato de tipos, que pueden usarse tanto con
la instruccin printf como la intruccin scanf.

Cracter Argumento Salida resultante

d entero Entero con signo en base decimal.

i entero Entero con signo en base decimal.

o entero Entero sin signo en case octal.

u entero Entero sin signo en base decimal.

Entero sin signo en base hexadecimal usando


x entero
letras minsculas.

Entero sin signo en base hexadecimal usando


X entero
letras maysculas.

f real Nmero real con signo.

e real Nmero real con signo usando notacin e.

E real Nmero real con signo usando notacin E.

Nmero real con signo en formato e f, pero de


g real
tamao corto

Nmero real con signo en formato E f, pero de


G real
tamao corto

c carcter Un carcter individual.

S cadena de caracteres Imprime cadena de caracteres.


% ninguno Imprime el smbolo %

05. Secuencias de escape:

Las secuencias de escape son cdigos utilizados a la hora de formatear una cedana de
texto. Se utilizan para aadir lineas en blanco, para desplazar la posicin de puntero en
la pantalla, para hacer que `pite' la mquina, etc. Las ms comunes son las siguientes:

Cracter Argumento

\n nueva lnea

\t tabulador (aproximadamente 5 caracteres)

\b retroceso (un solo carcter)

\r retorno de carro (hasta comienzo de lnea)

\f alimentacion de impresin

\\ back slash coloca una barra de este tipo `\'

\' coloca un signo de comilla

\ddd secuencias nmericas, combinaciones en binario

\007 hace pitar sonar un pitido

6. Operadores:

En C existen una gran varieadad de operadores que permiten realizar desde una simple
asignacin hasta un conjunto considerable de operaciones aritmtico - lgicas.

6.1Operadores aritmticos:

+ suma

- resta

* producto
divisin entera (si int /int o divisin real
/ si int/float,doublefloat double o si
float,double/intfloat, double)

mdulo (resto de una divisin entera).


%
Puede ser int%int o char %int.

Por ejemplo:

Float a

a=5/2 da un int, porque la divisin es entera, lo asignes a lo que lo asignes.

a=-a

6.2.Operadores lgicos:

< menor que

> mayor que

>= mayor o igual que

<= menor o igual que

== equivalencia o comparacin

!= diferente

&& y

|| o

! no

6.3.Operadores de incremento y decremento.

++ incremento

-- decremento

a++ es lo mismo que a +1


a-- es lo mismo que a -1

b=++2 No es lo mismo: a=a+1 (1 se incrementa)

b=a++ b=a (2 se asigna)

b=a (1 se asigna)

a=a+1(2 se incrementa.

Aunque a++ y ++a son iguales.

6.4. Jerarqua de operaciones.

6.5.Operadores de asignacin compuesta:

+=
Estos operadores funcionan de la
siguiente forma:
-=
suma +=i es igual que poner
*= suma=suma+i

/= E igual para todas las dems


operaciones.
%=

7.Jerarqua de datos.

char < int < long < float < double

int/float (float)
int/float float.

Esta jerarqua, se pude alterar usando un:

casting : altera la jerarqua, para que nos devuelva un tipo de dato determinado.

int a;

float x;

a=2

x=3.15

a=x; asignamos un float a un entero. Dependiendo del margen de error, dar un error y
otro; no dar error si damos un cast a un entero (int),

a=(int)x; (que x, un float, se reduzca hasta el tamao de un entero, truncando, y luego


asigne)

x= a/(int)x; divide un entero entre otro entero (un float truncado que se reduce hasa un
entero), que dar un entero, en este caso y con los valores anteriores de a y x, dar 0.

x= (float)(a/(int)x); dara 0 (aunque lo pongamos como un float)

x=(float)a/(int)x; float/int = float(0. )

Hay conversines que no se pueden hacer,

a=2;

x=1003+20;

Si hacemos a=x; o da un error, o al ejecutar el programa no podr representarlo, y si l


hace un cast por su cuenta, no resultar lo que desebamos.

Se puede promocionar de menor a mayor, pero no de mayor a menor.

Potrebbero piacerti anche