3.1- Definiciones:
- Variable: Valor utilizado en un programa que puede cambiar durante su ejecución.
- Constante: Valor utilizado en un programa que no puede cambiar durante su ejecución.
- Identificador: Nombre que recibe una variable, una constante o cualquier otro elemento que pueda contener valor para poder trabajar con él.
3.2- Identificadores
Como vimos con “nombres” que les damos a los valores que vayamos a utilizar en un programa. Para verlo más claro. Pensemos en PI, este número es siempre 3,1416…, entonces es una constante con el identificador “PI”. Ahora pasemos a la clásica x, esta puede tomar cualquier valor, con lo que es una variable de identificador ‘x’. Espero que lo hayan entendido.
En el lenguaje C no se puede poner cualquier identificador, sólo se pueden usar letras mayúsculas, minúsculas, los números y el guión bajo; no se pueden usar ni la ñ o la Ñ, ni espacios, ni tildes. Además, un identificador no puede empezar nunca por un número ni puede ser igual a cualquiera de las palabras reservadas de C. A la hora de poner identificadores recuerden que C es un lenguaje Case sensitive, es decir, distingue minúsculas y mayúsculas.
· auto · double · int · struct
· break · else · long · switch
· case · enum · register · typedef
· char · extern · return · union
· const · float · short · unsigned
· continue · for · signed · void
· default · goto · sizeof · volatile
· do · if · static · while
Éstas son las palabras reservadas.
Ejemplos de identificadores correctos:
Edad
Coche
mi_edad
Top10
PI
Yo
Tu
Ejemplos de identificadores incorrectos:
10Top
código
niño
el contador
auto
#yo
litros-agua
Bien recordemos que al utilizar un lenguaje Case Sensitive, coche y Coche no serán la misma variable, cada vez que programéis tenedlo en cuenta. En cuanto a la longitud, por si alguien se lo estaba preguntando, en C no hay un límite máximo de caracteres (no por eso vayáis a hacer una de 100 palabra).
Bien, pero ¿cómo sabemos qué identificador usar? Lo lógico es darle a la variable o constante (o lo que sea) una que nos permita reconocer qué vamos a almacenar. Es decir, no le pongan “su_edad” de identificador a una constante que tendrá el número áureo, un poco de criterio, tengan en cuenta que muchas veces ese código lo verá también otra persona (especialmente si os dedicáis a esto) y tiene que entenderlo. Por último, es tradición entre los programadores de C ponerle a las constantes identificadores en mayúsculas y a las variables en minúsculas.
3.3- Tipos de datos
Cuando declaremos en un programa que vamos a usar una variable o constante, debemos especificar qué tipo de valor va a contener ésta (un entero, un carácter, etc.) a continuación veremos los tipos de datos de C.
TIPO / Tamaño / Rango de valores
char / 1 byte / -128 a 127
int / 2 bytes / -32768 a 32767
float / 4 bytes / 3’4 E-38 a 3’4 E+38
double / 8 bytes / 1’7 E-308 a 1’7 E+308
Perdón por la tabla, es que no lograba que salga mejor…
3.3.1- Tipo int
Este tipo indica que usaremos un entero, es decir, un número “sin coma”. Podemos escribirlo en decimal (nomenclatura normal), octal (con un 0 delante: 037, 02, 014) o un hexadecimal (anteponiendo 0x: 0x1AB, 0xA23, 0×13).
3.3.2- Tipos float y double
Estos tipos “tienen coma”, es decir, números con parte fraccionaria. Para darles un valor, lo hacemos así: primero podemos poner un signo (+ o -, el primero se obvia si no se pone), segundo los dígitos enteros, luego un punto (.) para separarlo de la parte fraccionaria y, al final, la parte fraccionaria. Además, podemos agregar un exponente poniendo e o E, el signo del exponente y éste mismo. Tengan en cuenta que no puede empezar por un exponente. No se asusten, no es tan difícil como parece, veamos ejemplo: -3.14, 8.01, 4.78e-3, 7.377E4.
3.3.3- Tipo char
Los valores de tipo char son caracteres escritos entre comillas simples (‘ y ‘). Estos pueden ser cualquiera de los que haya en el código ASCII y van desde letras minúsculas y mayúsculas hasta números y signos de puntuación. Como supongo, espero, que sepan, a cada carácter de este código le corresponde un número, así 65 corresponde a ‘A’ y ‘A’ se corresponde a 65. Por eso no debemos intentar sumar el carácter ’2′ al carácter ’6′, ya que esto no nos dará el carácter ’8′, porque estos son símbolos y no valores, el valor es su número en el juego de caracteres ASCII.
Hay algunos caracteres que están formados por dos símbolos:
CÓDIGO ASCII / CARÁCTER / SIGNIFICADO7 / \a / Alarma (Beep)
8 / \b / Retroceso (BS)
9 / \t / Tabulador Horizontal (HT)
10 / \n / Nueva Línea (LF)
11 / \v / Tabulador Vertical (VT)
12 / \f / Nueva Página (FF)
13 / \r / Retorno
34 / \” / Comillas Dobles
39 / \’ / Comillas Simples
92 / \\ / Barra Invertida
Me pasó lo mismo que con la otra tabla…
3.3.4- Tipo void
Void significa sin valor, es decir, nada. Ya sé que puede sonar raro en un principio, pero más adelante lo usaremos seguido.
3.3.5- Modificadores long y short.
Cuando declaremos un int podemos decirle, antes de apuntar el tipo, que sea “long” o “short”, si tenemos un long int, éste nos da más posibles números, si en cambio tenemos un short int, entonces le daremos menos rango de números. Además, podemos agregar un long al tipo double (double float).
3.3.6- Modificadores signed y unsigned
Con unsigned le damos a los tipos de datos que tengan valores numéricas la cualidad de no aceptar negativos y con signed, que viene por defecto así que no debemos ocuparnos en ponerlo por lo general, lo decimos que vamos a usar valores que pueden ser negativos o positivos.
3.4- Declaración de variables
3.4.1- Declaración de variables
Para usar una variable debemos avisarle al programa que vamos a usarla, es decir, declararla. Para eso debemos escribir su tipo de dato, su identificador y punto y coma (
, por ejemplo:
int numero_manzanas
Y ahora en una función main:
int main (void){
int numero_manzanas;
char letra;
float recorrido;
}
Si, por ejemplo, queremos declarar tres variables del mismo tipos, en vez de:
int main (void){
int numero_manzanas;
int numero_peras;
int numero_platanos;
}
Podemos hacer:
int main (void){
int numero_manzanas, numero_peras, numero_platanos; }
Mientras te encargues de escribir código claro, cualquiera de estos métodos da igual.
3.4.2- Declaración de constantes
Podemos hacerlo o bien con la palabra reservada const o con la directiva #define. Aso sí, recuerda que se suelen escribir los identificadores de las constantes con todas mayúsculas.
3.4.2.1- Const
Para declararlas utilizando const, usaremos un método similar al de las variables. Escribimos const, el tipo de dato, su identificador, un igual y su valor (no olvidarse del punto y coma). Les damos un valor al declararlas ya que éste será siempre el mismo durante todo el código y deben inicializarse con uno, veamos ejemplo:
int main (void){
const float PI = 3,1416;
const int LADOS = 10;
const char PRIMERA_CONSONANTE = 'b';
}
3.4.2.2- #define
Mediante #define también podemos declarar constantes, a las que llamaremos macros. Para hacerlo, sólo debemos poner: #define, su identificador y su valor. No hace falta usar ni el signo igual, ni declarar el tipo de dato ni poner punto y coma. ¿Pero cuándo hace falta poner punto y coma?, cuando declaremos una sentencia, es simple ¿verdad?
Veamos un ejemplo:
#define MENSAJE "Hola"
#define PI 3,1416
#define PRIMERA:VOCAL 'b'
int main (void){
}
Como podemos ver, así podemos incluir cadenas de caracteres (van entre ” y “). Tengan en cuenta que así no estamos diciendo al programa: “Guarda memoria para esta constante y ponle su valor”, sino que le decimos AL COMPILADOR: “Cada vez que veas este identificador cámbialo por su valor”.
3.5- Inicialización
Cuando declaremos una variable, ésta no tiene un valor inicial. Por eso, si queremos operar con ella, debemos darle uno, sino nuestro programa podría devolver errores. Para evitarlo, es posible darles un valor en el momento en que la declaremos, pero esto no es obligatorio (al contrario que con las constantes). Veamos ejemplo, que es muy simple, sólo se pone = y es valor que le queremos dar:
int main (void){
int numero_manzanas = 3;
char letra = 'g';
float recorrido = 4,76;
}
Ahora ya podemos operar con variables libremente (cuando aprendamos a hacerlo)
.
3.6- Ejercicios
1- Verdadero o Falso
a) Una constante puede cambiar de valor a lo largo del programa.
b) El tipo int permite sistema octal.
c) Double tiene más precisión de decimales que float.
d) El tipo void es para carateres.
e) Declarando constantes con #define, estás reservando memoria para ellas.
f) Depués de declarar un variable siempre se pone punto y coma.
2- Di qué identificadores son incorrectos.
a) _pulsacion
b) año
c) auto
d) Tuyo
e) YaYo
f) num_camiones
g) #numero
h) mi_edad
i) 19registro
j) cod soft
EL RETO
No se me ocurría qué poner, así que me decidí porque le hechen una mano a Juanito.
Juanito está aprendiendo a programar en C. Para eso sigue el curso de un usuario de ogame con graves desequilibrios psicológicos llamado Thylzos. En estos momentos está estancado en el sexto capítulo (“Control de flujo”) y ha hecho uno de los ejercicios que propone en el que le pedían que haga un programa. Él lo hizo, pero su compilador le marcó un error y no lo linkeó, lo revisó y no encontró ningún error, así que le preguntó a un amigo suyo que es Ingeniero en Informática, y que le dije que era un problema de edad. Juanito se iluminó y, entendiendo su problema, decidió esperar unos años, hasta ser mayor y poder usar el programa. Pero pasaron cuatro años y saguía sin poder usar el progrma. Pero esta vez algo cambió, encontró un error, lo solucionó y compiló (¡Por fin!), sin embargo el programa no hacía lo que él quería. Finalmente, desesperado, recurrió a mí.
Y yo recurro a vosotros. Miren, acá les dejo el código fuente del programa después de que Juanito corrija el error:
#include <stdio.h> #define MAYORIA_EDAD 18; int main (void){ int Edad_Juanito, Edad_Novia_Juanito; char opc; printf ("¿Cuántos años tiene Juanito?"); scanf ("%d", &Edad_Juanito); printf ("¿Y su novia?"); scanf ("%d", &Edad_Novia_Juanito); if (Edad_Juanito >= MAYORIA_EDAD){ printf("Juanito es mayor de edad");} While ("mundo" == "mundo"){ printf ("¿Ha pasado un año? (S/N)"); scanf ("%c", &opc); if (opc == 'S'){ int edad_Juanito ++; Edad_Novia_Juanito ++; } } }Esto es lo que deben hacer:
a) Explica cómo funciona y qué hace (no hace falta que expliquen sentencia por sentencia, hay muchas cosas que no vimos).
b) Encuentra un error que no vio Juanito.
c) Encuentra el error que sí vio Juanito, explica en qué se equivocó en la correción (poruqe se equivocó) y cómo solucionarías tú el error.