Variables: Conceptos Básicos

Introducción

El lenguaje C maneja datos tanto numéricos (enteros y reales) como de tipo carácter. En este último caso hay que diferenciar entre los caracteres tratados de manera individual, y las cadenas de estos. En la siguiente tabla podemos ver un ejemplo de lo expuesto (las comillas que aparecen en los tipo carácter y cadenas son necesarias al usar este tipo de datos en C).

Enteros

 19    -152

Reales

 1.4    -156.2     19.13e+12

Carácter

 `a`    `3`       `\n`

Cadenas

 "Hola Mundo"     "Adiós\n"

 

Tipos de datos

Los tipos de datos básicos en el lenaguaje C son:

 

Declaración de variables

En el lenguaje C todas las variables han de ser declaradas antes de ser usadas. La sintaxis que se sigue es:

tipo nombre_variable [,nombre_variable...];

A la hora de identificar a una variable (darle nombre) hay que tener en cuenta las siguientes reglas muy simples:

En la declaración se puede inicializar (darle valor inicial) a una variable de la siguiente manera:

tipo nombre_variable=valor [,nombre_variable...];

 

Conversión de tipo (casting)

Cuando en una expresión aritmética se mezclan variables de distintos tipos, el compilador de C realiza una conversión implícita al tipo de mayor longitud/rango, siguiendo la siguiente jerarquía:

char < unsigned char < short < unsigned short < int < unsigned int < long < unsigned long < float < double.

Por ejemplo si multiplicamos un entero por un real, el compilador realizará una conversión de tipo entero a real, y la multiplicación se realizará entre dos cantidades reales. Lo mismo ocurre si el resultado de una expresión es de un tipo, y la asignación ser realiza a una variable de tipo distinto. Sin embargo, el resultado de estas conversiones implícitas no siempre es el deseado, por eso es aconsejable que sea el propio programador el que realice, en casos como los comentados, la conversión de manera explícita. Para esto existe el operador de cambio de tipo. La sintaxis es la siguiente:

(nuevo_tipo) expresión/variable.

Ejemplo:

int a=78;
float b=456.9, c;
c = b + (float) a;

 

Ejemplos

Ejemplo_Var_1. Uso de variables. Mediante un editor escribe el siguiente código, compílale y ejecútale

/* Primera aproximación al uso de variables  */

#include <stdio.h>

int main( void )

{

/* Ejemplo de declaración de variable sin asignación */

int a, b, UnEntero1;

char c;

unsigned long x;

float f;

 

/* Declaración y asignación */

int d=-52;

unsigned char UnaLetra=‘a’;

double Grande=-141.255e+7;

 

/* Ejemplo de asignación de valor a variables */

a=23;

c=’s’;

f=3.78;

printf ("valor asignado a la variable a: %d  a c: %c  a f: %f y a Grande: %lf\n", a, c, f, Grande);

printf ("Valor en decimal de la variable UnaLetra: %d. Valor interpretada como carácter: %c\n", UnaLetra, UnaLetra);

 

/* Ejemplo de asignación en otros sistemas de numeración */

a=0x050; /* Constante en hexadecimal */

b=0311; /* Constante en octal */

printf ("Valor de a en hexadecimal: %x y en decimal: %d. Valor de b en octal: %o y en decimal: %d\n", a, a, b, b);

 

return 0;

}

Responde a las siguientes preguntas:

  1. ¿Cuál es la función de la letra que está a continuación del símbolo "%" en printf?
  2. Viendo lo mostrado por el segundo printf (el que muestra la variable "UnaLetra", ¿Cuál es el valor ASCII en decimal del carácter ‘a’?
  3. Añade una línea que, usando la función printf, muestra por pantalla el carácter correspondiente al valor ASCII en hexadecimal 50 (último valor de la variable a).

 

Ejemplo_Var_2. Al compilar el siguiente programa dará error.  Contiene otro error típico en programas C. Buscar y corregir el error.

/* Programa con error */

#include <stdio.h>

int main( void )

{

/* Ejemplo de declaración de variable sin asignación */

int a, b, UnEntero1;

Char c;

unsigned long x;

float f;

a=23;

c=’s’;

f=3.78;

printf ("valor asignado a la variable a: %d  a c: %c  a f: %f y a Grande: %lf\n", a, c, f, Grande);

return 0;

}

 

Ejemplo_Var_3. El siguiente programa sirve para ver el problema que puede surgir si se deja la conversión de tipo al compilador:

/* Ejemplo de conversión implícita/explícita de tipo*/

#include <stdio.h>

int main( void )

{

int a=5, b=3;

float f1, f2;

 

f1 = a / b; /* el resultado del cociente es un entero, que es convertido a float en la asignación a f1 */

f2 = (float) a / (float) b;  /* el cociente se realiza entre números reales */

printf("Resultado conversion implicita: %f     Resultado conversion explicita: %f\n",f1, f2);

return 0;

}