Los tipos de datos básicos definidos por C son
caracteres, números enteros y números en coma
flotante. Los caracteres son representados por char, los enteros
por short, int, long y los números en coma flotante por
float y double. Los tipos básicos disponibles y su
tamaño son:
Char
Carácter
(normalmente 8 bits)
Short
Entero corto con signo
(normalmente 16 bits)
Int
Entero con signo
(depende de la implementación)
Unsigned
Entero sin signo
(depende de la implementación)
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 función, no se comporta de la forma
normal. Hay también 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 expresión
aritmética. Las asignaciones en C también son una
expresión, por lo que se pueden utilizar como parte de
otra expresión, pero según que prácticas de
este tipo no son muy recomendables ya que reducen la legibilidad
del programa. En la instrucción printf, el símbolo
%f indica que se imprime un número en coma
flotante.
Hay un tipo muy importante que se representa por void
que puede significar dos cosas distintas, según su
utilización. Puede significar nada, o sea que si una
función devuelve un valor de tipo
void no devuelve ningún resultado, o puede significar
cualquier cosa, como puede ser un puntero a void es un puntero
genérico a cualquier tipo de dato. Más adelante
veremos su utilización.
La mejor forma de aprender un lenguaje es programando
con él. El programa
más sencillo que se puede escribir en C es el
siguiente:
main( )
{
}
Como nos podemos imaginar, este programa no hace nada,
pero contiene la parte más importante de cualquier
programa C y además, es el más pequeño que
se puede escribir y que se compile correctamente. En el se define
la función
main, que es la que ejecuta el sistema operativo al llamar a un
programa C. El nombre de una función C siempre va seguida
de paréntesis, tanto si tiene argumentos como si no. La
definición de la función está formada por un
bloque de sentencias, que esta encerrado entre llaves
{}.
Un programa algo más 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 línea indica que se tengan en
cuenta las funciones y tipos definidos en la librería
stdio (standard input/output). Estas definiciones se encuentran
en el fichero header stdio.h. Ahora, en la función main se
incluye una única sentencia que a la función
printf. Esta toma como argumento una cadena de caracteres, que se
imprimen van encerradas entre comillas " ". El
símbolo \n indica un cambio de
línea.
Hay un grupo de
símbolos, que son tratados como
caracteres individuales, que especifican algunos caracteres
especiales del código ASCII. Los
más importantes son:
\a
Alerta
\b
Espacio atrás
\f
Salto de página
\n
Salto de línea
\r
Retorno de
\t
Tabulación horizontal
\v
Tabulación vertical
\\
Barra invertida
\'
Comilla simple
\"
Comillas dobles
\OOO
Visualiza un carácter cuyo código
ASCII es OOO en octal
\xHHH
Visualiza un carácter cuyo código
ASCII
es HHH en hexadecimal
Un programa C puede estar formado por diferentes
módulos o fuentes. Es
conveniente mantener los fuentes de un
tamaño no muy grande, para que la compilación sea
rápida. También, al dividirse un programa en
partes, puede facilitar la legibilidad del programa y su
estructuración. Los diferentes fuentes son compilados de
forma separada, únicamente los fuentes que han sido
modificados desde la última compilación, y
después combinados con las librerías necesarias
para formar el programa en su versión
ejecutable.
#include <iostream.h>
int main (void)
{
double x, y, z;
cout << "Introduzca el primer número" << endl ;
cin >> x;
cout << "Introduzca el segundo número" << endl ;
cin >> y;
z=x+y;
cout << x <<"+"<< y <<"="<< z <<endl;
system("pause");
return 0;
C es un lenguajeprogramación de propósito general que ofrece
economía
sintáctica, control de flujo
y estructuras
sencillas y un buen conjunto de operadores. No es un lenguaje de
muy alto nivel y más bien un lenguaje
pequeño, sencillo y no está especializado
ningún de aplicación. Esto lo hace un lenguaje
potente, con un de aplicación ilimitado y sobre
todo, se aprende rápidamente. En poco tiempo, un
programador puede utilizar la totalidad del lenguaje.
Este lenguaje ha sido estrechamente ligado al sistema operativoUNIX, puesto que
fueron desarrollados conjuntamente. Sin embargo, este lenguaje no
está ligado a ningún sistema operativo
ni a ninguna máquina concreta. Se le suele llamar lenguaje
de de sistemas debido a
su utilidad
escribir compiladores y
operativos, aunque de igual forma se puede desarrollar
cualquier tipo de aplicación.
La base del C proviene del BCPL, escrito por Martin
Richards, y del B escrito por Ken Thompson en 1970 para el primer
en un DEC
PDP-7. Estos son sin tipos, al contrario que el C que
proporciona varios tipos de datos.
Los tipos que ofrece son caracteres, enteros y en
coma flotante, de varios tamaños. Además se pueden
crear tipos derivados mediante la utilización 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.Introducción al lenguaje C
(2).
La base del C proviene del BCPL, escrito por Martin
Richards, y del B escrito por Ken Thompson en 1970 para el primer
sistema UNIX en un DEC PDP-7. Estos son lenguajes sin tipos, al
contrario que el C que proporciona varios tipos de datos. Los tipos
que ofrece son caracteres, números enteros y en coma
flotante, de varios tamaños. Además se pueden crear
tipos derivados mediante la utilización 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.
C trabaja con tipos de datos
que son directamente tratables por el hardware de la
mayoría de computadoras
actuales, como son los caracteres, números y direcciones.
Estos tipos de datos pueden ser
manipulados por las operaciones
aritméticas que proporcionan las computadoras.
No proporciona mecanismos para tratar tipos de datos que no sean
los básicos, debiendo ser el programador el que los
desarrolle. Esto permite que el código
generado sea muy eficiente y de ahí el éxito
que ha tenido como lenguaje de desarrollo de
sistemas. No
proporciona otros mecanismos de almacenamiento de
datos que no sea el estático y no proporciona mecanismos
de entrada ni salida. Ello permite que el lenguaje
sea reducido y los compiladores de
fácil implementación en distintos sistemas. Por
contra, estas carencias se compensan mediante la inclusión
de funciones de
librería para realizar todas estas tareas, que normalmente
dependen del sistema operativo.
Originariamente, el manual de
referencia del lenguaje para el gran público fue el
libro de
Kernighan y Ritchie, escrito en 1977. Es un libro que
explica y justifica totalmente el desarrollo de
aplicaciones en C, aunque en él se utilizaban
construcciones, en la definición de funciones, que
podían provocar confusión y errores de programación que no eran detectados por el
compilador. Como los tiempos cambian y las necesidades
también, en 1983 ANSI establece el comité X3J11
para que desarrolle una definición moderna y comprensible
del C. El estándar está basado en el manual de
referencia original de 1972 y se desarrolla con el mismo
espíritu de sus creadores originales. La primera
versión de estándar se publicó en 1988 y
actualmente todos los compiladores utilizan la nueva
definición. Una aportación muy importante de ANSI
consiste en la definición de un conjunto de
librerías que acompañan al compilador y de las
funciones contenidas en ellas. Muchas de las operaciones
comunes con el sistema operativo se realizan a través de
estas funciones. Una colección de ficheros de
encabezamiento, headers, en los que se definen los tipos de datos
y funciones incluidas en cada librería. Los programas que
utilizan estas bibliotecas para
interactuar con el sistema operativo obtendrán un comportamiento
equivalente en otro sistema.