Foto tomas de freedigitalphotos.net |
En éste tercer apartado vamos a relatar todos los tipos de variables que
existen en C, también veremos todos los tipos de operadores que pueden usarse,
y seguidamente veremos las directivas, definiremos la función <stdio.h>
al completo y veremos el concepto de constante.
Variables en C
Ya sabemos que las variables son espacios de memoria del computador donde
se almacenan valores que son susceptibles de ser modificados a lo largo de la
ejecución del programa. También sabemos que las variables deben ser declaradas
obligatoriamente para poder usarlas y que para declararlas tenemos que definir
el tipo de dato que van a almacenar, esto es importante porque debemos tener
muy claro que será capaz de almacenar una variable y no cometer errores
operando, no se puede declarar una variable de tipo numérica entera e intentar
almacenar valores alfanuméricos o de coma flotante.
Para poder abarcar todas las posibilidades, en C existen multitud de tipos
de variables tanto numéricas como booleanas como alfanuméricas, además existen
variables que almacenan direcciones de memoria o de medición del espacio lógico
ocupado. Veamos un cuadro explicativo.
Tipo
|
Explicación
|
Char
|
Carácter, almacena un carácter perteneciente a un código concreto (como
el ASCII)
|
short
short int signed short signed short int |
Numérico, va desde el –32.768 a 32.767
|
int
signed int |
Tipo de dato numérico entero, 16 bits.
|
unsigned
unsigned int |
Lo mismo que int pero sin signo.
|
long
long int signed long signed long int |
Tipo de dato numérico entero, 32 bits.
|
unsigned long
unsigned long int |
Lo mismo que long pero sin signo.
|
long long
long long int signed long long signed long long int |
Tipo de dato numérico entero, 64 bits.
|
unsigned long long
unsigned long long int |
Lo mismo que long long pero sin signo
|
float
|
Tipo de dato numérico de coma flotante, 32 bits.
|
Double
|
Tipo de dato numérico de coma flotante, 64 bits.
|
long double
|
Tipo de dato numérico de coma flotante, 128 bits.
|
Char []
|
Arrays de caracteres de tipo char, se usa para manejar cadenas completas
o Strings
|
Enum
|
Se utiliza para almacenar un conjunto reducido de valores que no se cubre
con tipos de datos básicos.
|
&
|
Usado para definir punteros a memoria de tipos de datos
|
*
|
Usado para definir punteros a memoria de tipos de datos
|
El tipo de dato booleano (true, false) no está definido en C para
declararlo como variable, no obstante se usan booleanos en las expresiones
comparativas, si deseamos operar con variables siguiendo esa lógica podemos
definir una variable de tipo int y que almacene 0 o 1 (esto lo controla el
programador).
Como podemos comprobar hay una gran cantidad de tipos de datos en C,
gracias a esto nos será posible operar como mejor veamos, lo cual nos lleva a
ver de nuevo el apartado de operadores.
Nosotros nos quedaremos para el curso con los tipos de datos más comunes y
usaremos los de tipo int para representar variables booleanas, a modo de
resumen éste sería el cuadro explicativo de los tipos de datos que usaremos:
Tipo
|
Rango
|
Bytes
|
char
|
-128 ... 127 (ASCII)
|
1
|
int
|
-32.768 ... 32.767
|
2
|
long
|
-2.147.483.648 ... 2.147.483.647
|
4
|
float
|
3.4*10^-38 ... 3.4*10^38
|
4
|
double
|
1.7*10^-308 ... 1.7*10^308
|
8
|
void
|
Valor nulo
|
nulo
|
El tipo de dato void es el de valor nulo, representa una celda de memoria
donde no hay ningún dato almacenado, cuando hablamos en los lenguajes de
programación de un valor nulo, null, nil o void, queremos representar y
trabajar con una variable o expresión vacía en valor.
Operadores en C
Como en el anterior capítulo hemos visto los operadores más comunes vamos a
incluir otra tabla de igual forma que con las variables con el fin de resumir
todos los operadores entre variables y expresiones.
Operadores aritméticos:
Operador
|
Símbolo
|
Ejemplo
|
Significado
|
Suma
|
+
|
a + b
|
a más b
|
Resta
|
-
|
a - b
|
a menos b
|
Multiplicación
|
*
|
a * b
|
a por b
|
División
|
/
|
a / b
|
a dividido b
|
Residuo
|
%
|
a % b
|
a residuo de b
|
Signo (negativo)
|
-
|
-a
|
a negativo
|
Operadores relacionales:
Operador
|
Símbolo
|
Ejemplo
|
Significado
|
Igual
|
==
|
x == y
|
x es igual a y
|
Diferente
|
!=
|
x != y
|
x es diferente de y
|
Mayor que
|
>
|
x > y
|
x es mayor que y
|
Mayor o igual que
|
>=
|
x >= y
|
x es mayor o igual que y
|
Menor que
|
<
|
x < y
|
x es menor que y
|
Menor o igual que
|
<=
|
x <= y
|
x es menor o igual que y
|
Operadores lógicos (booleanos):
Operador
|
Símbolo
|
Ejemplo
|
Significado
|
Y (AND)
|
&&
|
(a>b) && (c<d)
|
a es mayor que b y c es menor que d
|
O (OR)
|
||
|
(a>b) || (c<d)
|
a es mayor que b o c es menor que d
|
NEGACION (NOT)
|
!
|
!(a>b)
|
a no es mayor que b
|
Operadores de incremento o decremento:
Ejemplo
|
Significado
|
Variable++
|
El valor de la variable incrementa después de una
operación
|
++Variable
|
El valor de la variable incrementa antes de una
operación
|
Variable--
|
El valor de la variable disminuye después de una
operación
|
--Variable
|
El valor de la variable disminuye antes de una operación
|
Tanto en éste curso como en el resto de programas que
realicemos utilizaremos siempre esta clase de operadores, aunque es posible que
debido a características específicas del lenguaje que utilicemos algunos
operadores no los usemos o los usemos con distinta representación.
Una vez realizado éste repaso entremos en un nuevo
concepto muy importante en la programación en C, las constantes.
Constantes.
Las constantes son espacios de memoria que almacenan
valores cuyo valor NO se puede alterar a
lo largo de la ejecución del programa.
A efectos de tratamiento en programación son idénticos a
las variables, salvo que como no se puede alterar su valor los operadores donde
las constantes reciban un valor no están permitidos.
Ejemplos de constantes son por ejemplo la fuerza de la
gravedad, el número Pi o la velocidad de la luz. También se pueden añadir
constantes en nuestro programa datos como el número máximo de alumnos de una
clase, el stock máximo de una tienda, etc.
Las constantes son invariables a lo largo de todo el
programa y para declarar una constante tenemos dos posibilidades:
1 - Con la palabra reservada const seguida del tipo de
dato y el nombre de la constante y su valor:
const
float pi = 3.14;
2 – Con la directiva #define (ver siguiente apartado, las
directivas).
#define PI 3.14
Veamos un ejemplo de uso de constantes en los dos casos:
1 –
#include <stdio.h>
int main(void)
{
const float pi = 3.14;
float a;
a=pi;
return 0;
}
2 –
#define PI 3.14
int main(void)
{
int numero;
numero = PI;
return 0;
}
Directivas #include y #define
Como hemos dicho en el anterior apartado, para poder trabajar con una
constante es necesario hacer uso de la directiva #define.
Una directiva son palabras que empiezan por el carácter especial # y es
completamente invisible al compilador, es decir, no lo tendrá en cuenta.
¿Qué quiere decir eso? Pues quiere decir que el compilador hará como en los
comentarios, no tenerlos en cuenta, no obstante es otra de las partes implicadas
en la compilación y construcción de un programa la que se encarga de
manejarlas, éste es el preprocesador.
El preprocesador es un programa independiente, el cual hace que interprete
esas palabras especiales y realice funciones específicas dependiendo de la
palabra que sea, en el caso del #include lo que hace es sustituir esa palabra
por la librería al completo dentro de nuestro programa, de esa forma no es
necesario escribirlo todo de nuevo.
#define
Como hemos comentado, la directiva #define se encarga de definir las
constantes que se utilizarán dentro del programa, éstas son invariables y no se
pueden modificar.
#include
La directiva include se encarga de importar una librería concreta a nuestro
programa, de ésta forma podremos trabajar con funciones ya creadas sin
necesidad de tener que importarlas.
C cuenta con una biblioteca estándar de ficheros donde podemos encontrar
herramientas para la gestión de la pantalla, de funciones matemáticas extra,
comparación de cadenas, análisis de errores o tratamiento de formatos de fecha
y hora. A continuación os pongo las librerías estándares de C.
<assert.h>
<complex.h>
<cstring>
<ctype.h>
<errno.h>
<fenv.h>
<float.h>
<inttypes.h>
<iso646.h>
<limits.h>
<locale.h>
<math.h>
<setjmp.h>
<signal.h>
<stdarg.h>
<stdbool.h>
<stdint.h>
<stddef.h>
<stdio.h>
<stdlib.h>
<string.h>
<tgmath.h>
<time.h>
<wchar.h>
<wctype.h>
Evidentemente con el paso del tiempo y los nuevos IDEs se han ido añadiendo
muchas más, pero éstas son las más básicas. De momento nosotros usaremos la
librería <stdio.h>.
<stdio.h>
Como hemos definido en el capítulo anterior, stdio.h es la librería
perteneciente a la biblioteca estándar de C y se encarga de todo lo referente a
operaciones de entrada y salida, es necesaria incluirla mediante la directiva
#include para poder usar funciones como printf o scanf para escritura y lectura
de datos.
Algunas de las funciones que trae son las siguientes:
Funciones para el tratamiento de ficheros:
Nombre
|
Descripción
|
fclose
|
Cierra un fichero.
|
fopen,freopen,fdopen
|
Abre un fichero.
|
remove
|
Elimina un fichero.
|
rename
|
Cambia el nombre del fichero.
|
rewind
|
Coloca el indicador de posición de fichero al comienzo.
|
tmpfile
|
Crea y abre un fichero temporal.
|
Para el tratamiento de entrada y salida de datos algunas de las funciones
son las siguientes:
Nombre
|
Descripción
|
clearerr
|
Despeja los indicadores de final y posición de fichero.
|
feof
|
Comprueba el final del fichero.
|
ferror
|
Comprueba los errores.
|
fflush
|
Envía cualquier dato aún sin escribir al entorno local o a ser escrito en
el fichero.
|
fgetpos
|
Posición actual del fichero.
|
fgetc
|
Devuelve un carácter de un fichero.
|
fgets
|
Devuelve una cadena de caracteres de un fichero.
|
fputc
|
Escribe un carácter en un fichero.
|
fputs
|
Escribe una cadena de caracteres en un fichero.
|
getc
|
Devuelve un carácter desde un fichero.
|
getchar
|
Similar a getc.
|
printf,fprintf,sprintf
snprintf |
Imprimir datos.
|
putc
|
Devuelve un carácter de un fichero.
|
putchar,fputchar
|
Igual que putc(stdout).
|
scanf,fscanf,sscanf
|
Utilizado para introducir entradas.
|
vfscanf,vscanf,vsscanf
|
También utilizado para introducir entradas.
|
puts
|
Imprime una de cadena de caracteres.
|
Ejemplos de uso de la librería stdio.h:
#include <stdio.h>
int main ( void )
{
int numero=22;
printf("En
la clase hay %d alumnos \n", numero);
return 0;
}
#include <stdio.h>
int main ( void )
{
int numero;
printf ("Introduce el número de alumnos de la
clase ");
scanf ("%d",&numero);
printf("En
la clase hay %d alumnos \n", numero);
return 0;
}
Conclusiones
Ya tenemos lo básico para poder construir perfectamente un programa en C,
conocemos los elementos básicos que estructuran un programa y podemos ir
realizando operaciones, solicitando y escribiendo datos, trabajar con variables
y constantes, incluir librerías y manejar distintos tipos de datos.
En la próxima entrega se entrará de lleno en las estructuras de control de
flujo de ejecución, veremos las estructuras selectivas (if, else, case, etc.) y
las estructuras iterativas (while, for, do...while, etc.) con el fin de poder
realizar programas que controlen valores o que hagan acciones repetidas.
¿Qué os parece va pareciendo el curso?