1.- CONCEPTOS BÁSICOS DE C

1.1 EL CONJUNTO DE CARACTERES DE C

En la elaboración de programas en C se pueden utilizar para formar los elementos básicos (constantes, variables, operadores, expresiones) las letras mayúsculas de la A a la Z, las minúsculas de la a a la z , los dígitos del 0 al 9 y ciertos caracteres especiales:

!           *            +            \            "            <
#          (            =            |            {            >
%         )            ~            ;            }            /
^           -            _            [            :           '
?          &            .            ]            (blanco)

 1.2 IDENTIFICADORES Y PALABRAS CLAVE

Los identificadores son nombres que se les da a varios elementos de un programa, como variables, constantes, funciones.
Un identificador está formado por letras y dígitos, en cualquier orden, excepto el primer carácter, que debe ser una letra.
Se pueden utilizar mayúsculas y minúsculas (no acentuadas), aunque no se pueden intercambiar, esto es, una letra mayúscula no es equivalente a su correspondiente minúscula.
El carácter de subrayado se puede incluir también y se suele utilizar en la mitad de los identificadores.
No se limita la longitud de los identificadores aunque el compilador sólo reconoce los 31 primeros caracteres.
Hay ciertas palabras reservadas, denominadas palabras clave, que tienen en C un significado estándar y por tanto no pueden ser utilizadas como identificadores definidos por el programador.
Las palabras clave están en minúsculas.

 1.3 TIPOS DE DATOS

int    : Cantidad entera            
char
   : Carácter
float  : Número de coma flotante (con punto decimal y/o exponente)
double : Número de coma flotante de doble precisión (más cifras significativas y mayor valor posible del exponente)

 Existen una serie de calificadores: short, long, signed y unsigned que sirven para ampliar o reducir el rango de los diferentes tipos de datos.

1.4 CONSTANTES

Las constantes son datos, referenciados a través de un identificador, cuyo valor no varía a lo largo de toda la ejecución de un programa.

Constantes enteras

Una constante entera es un número con un valor entero que se puede escribir en tres sistemas numéricos: decimal, octal o hexadecimal
Una constante entera octal puede estar formada por cualquier combinación de dígitos del 0 al 7, teniendo que ser el primero un 0.
Una constante entera hexadecimal debe comenzar por 0x o 0X. Después puede aparecer cualquier combinación de dígitos del 0 al 9 y letras de la a a la f.
El valor máximo de una constante entera varía de una computadora a otra pero en la mayoría es 32767.

 Constantes de coma flotante

Una constante de coma  flotante es un número en base 10 que contiene un punto decimal y/o un exponente. 

Constantes de carácter

Una constante de carácter es un solo carácter encerrado con comillas simples.
Ciertos caracteres no imprimibles se pueden expresar en términos de secuencias de escape. Una secuencia de escape siempre comienza por una barra \ y siempre representa un solo carácter.

Carácter

Secuencia de escape

sonido

\a

tabulador

 \t

nueva línea

\n

comillas

 \"

apóstrofo

 \'

backslash

\\

Constantes de cadena de caracteres

Una constante de cadena de caracteres consta de cualquier número de caracteres consecutivos encerrados entre comillas. En las cadenas de caracteres se pueden incluir caracteres no imprimibles si se representan en términos de sus correspondientes secuencias de escape.

1.5 VARIABLES

Una variable es un identificador que se utiliza para representar cierto tipo de información dentro del programa. En algún punto del programa se le asigna a la variable un valor que después se puede recuperar en cualquier momento sin más que hacer referencia la nombre de la variable.

Declaraciones

Una declaración asocia un tipo de datos determinado a un grupo de variables.
Una declaración consiste en un tipo de datos, seguido de uno o más nombres de variables, finalizando con un punto y coma.
Todas las variables deben ser declaradas antes de ser utilizadas.

Ejemplos:             int a,b,c;              float r1,r2;             char d;

Se le pueden asignar valores iniciales a las variables dentro de la declaración de tipo:  int a = 3;

 1.6 EXPRESIONES

Una expresión representa una unidad de datos simple, tal como un número o un carácter. Puede consistir en una constante, una variable o una combinación de ellas mediante operadores.

 1.7 SENTENCIAS

Una sentencia o instrucción hace que el ordenador lleve a cabo alguna acción. En C hay tres tipos de sentencias: de expresión, de control y compuestas.
Una sentencia de expresión consiste en una expresión seguida de un punto y coma. Su ejecución hace que se evalúe la expresión:
                         a = 3;                        c = a + b;

Una sentencia compuesta está formada por varias sentencias individuales encerradas entre llaves. Las sentencias individuales pueden ser de cualquiera de los tres tipos mencionados. Las sentencias de control se utilizan para realizar bucles o ramificaciones.

 1.8 OPERADORES Y EXPRESIONES

 Operadores Aritméticos

Precedencia

Operadores Asociatividad

                      1º

-(unario) izda a dcha

                      2º

 *, /, %  izda a dcha

                      3º

+, - izda a dcha

El operador % es el de resto y requiere que los dos operandos sean enteros y el segundo no nulo.
El operador de división requiere que el segundo operando no sea nulo.
La división de dos cantidades enteras da como resultado el cociente entero truncado.

Operadores Relacionales

Precedencia

Operadores Asociatividad

                      1º

>  >=  <  <= izda a dcha

                      2º

==  != izda a dcha

Los operadores relacionales tienen menos precedencia que los aritméticos.

 Operadores Lógicos

Precedencia

Operador Significado Asociatividad

                   1º

NOT dcha a izda

                   2º

 && AND izda a dcha

                   3º

  || OR izda a dcha

 En C no existe un tipo lógico o booleano, y se establece que una expresión lógica es cierta si su valor es distinto de 0 y falsa si su valor es 0.

 Operador Moldeado o Ahormado

 Se puede forzar la conversión explícita de una expresión a un tipo determinado, y se realiza anteponiendo a la expresión el nombre del tipo requerido entre paréntesis. Este operador es unario.

(nombre de tipo) expresión                            ej: n= (int) ((9.8+2.5)/2.1 + (int) (19.5/5.5)

 Operadores Incremento y Decremento

           ++ (incremento)               -- (decremento)

Son operadores unarios. Sólo pueden ser aplicados a variables, no a expresiones.
Pueden ser prefijos o sufijos, según incrementen antes o después de utilizar la variable.

Operadores de Asignación

Se utilizan para formar expresiones de asignación en las que se asigna el valor de una expresión a un identificador.
El más usado es el operador =. Una expresión de asignación recibe el nombre de sentencia de asignación y es de la forma:      identificador = expresión
Donde identificador representa generalmente una variable y expresión una constante, una variable o una expresión más compleja.
Si los dos operandos de una sentencia de asignación son de diferente tipo, el valor de la expresión de la derecha se convierte automáticamente al tipo del identificador de la izquierda. Hay casos en que esta conversión conlleva una alteración:

Un valor en coma flotante se trunca si se asigna a un identificador entero.
Un valor en doble precisión se redondea si se asigna a un identificador de coma flotante.
En C están permitidas asignaciones múltiples de la forma

identificador 1 =...= identificador n = expresión

C posee además los siguientes cinco operadores de asignación: +=, -=, *=, /= y %=.

 i +=5    equivale a  i = i + 5


2.- ENTRADA Y SALIDA DE DATOS

2.1 ENTRADA DE UN CARÁCTER. FUNCIÓN getchar

Mediante esta función se puede conseguir la entrada de caracteres uno a uno. Esta función es parte de la biblioteca de C de entrada/salida standard. Devuelve un carácter leído del dispositivo de entrada standard (típicamente el teclado).
En general una referencia a esta función se escribe:   variable_de_carácter = getchar();

 2.2 SALIDA DE UN CARÁCTER. FUNCIÓN putchar

Se puede visualizar un carácter utilizando esta función de biblioteca. Transmite un carácter al dispositivo de salida standard (típicamente el monitor).
En general una referencia a esta función se escribe:   putchar(variable de carácter);

2.3 INTRODUCCIÓN DE DATOS. FUNCIÓN scanf

Esta función se puede utilizar para la introducción de cualquier combinación de valores numéricos o caracteres.
En términos generales la función scanf se escribe:  
                       scanf(cadena de control, arg1,arg2,...,argn);

Donde cadena de control hace referencia a una cadena de caracteres que contiene cierta información sobre el formato de los datos y arg1,arg2,...,argn son argumentos que representan los datos. (En realidad los argumentos representan punteros que indican las direcciones de memoria en donde se encuentran los datos. Esto se verá más adelante).

En la cadena de control se incluyen grupos de caracteres, uno por cada dato de entrada. Cada grupo debe comenzar con el signo de porcentaje, que irá seguido, en su forma más sencilla, de un carácter de conversión que indica el tipo de dato correspondiente.

Carácter de conversión

Significado

c

El dato es un carácter.

d

El dato es un entero decimal.

e

El dato es un valor en coma flotante.

f

El dato es un valor en coma flotante.

g

El dato es un valor en coma flotante.

h

El dato es un entero corto.

i

El dato es un entero decimal, octal o hexadecimal.

o

El dato es un entero octal.

s

El dato es una cadena de caracteres.

u

El dato es un entero decimal sin signo.

x

El dato es un entero hexadecimal.

 [...]

El dato es una cadena de caracteres  que puede incluir caracteres de espaciado.

Cada nombre de variable debe ir precedido por un ampersand (&).
Los datos que se introducen deben corresponderse en tipo y orden con los argumentos de la función scanf. 
Ejemplo de utilización de scanf:

                       int i;
                       float j;
                       scanf("%d %f",&i,&j);

Al introducir dos o más datos, éstos deben ir separados por caracteres de espaciado (el carácter de nueva línea se considera como un carácter de espaciado).
Los caracteres consecutivos que no sean de espaciado componen un dato. Es posible limitar el número de los caracteres especificando una longitud máxima para ese dato. El dato puede estar compuesto por menos caracteres de los que especifique la longitud y no se leerán los caracteres que estén más allá de dicha longitud. Hay que tener en cuenta que en este caso los caracteres sobrantes pueden ser interpretados de manera errónea para el siguiente dato.

Ejemplos:                     scanf("%3d %3d %3d",&a,&b,&c);

Si los datos se introducen: 1 2 3 las asignaciones que se llevan a cabo son:  a=1, b=2, c=3
Si se introducen 123 456 789 las asignaciones son:  a=123, b=456, c=789
Si se introduce 123456789 las asignaciones son:      a=123, b=456, c=789
Si se introduce 1234 5678 9 las asignaciones son:    a=123, b=4, c=567  y  los  otros  dos  dígitos restantes (8 y 9) se ignoran, a no ser que se lean a continuación en otra  sentencia scanf.

La mayoría de las versiones de C permiten que ciertos caracteres de conversión en la cadena de control sean precedidos por un prefijo de una sola letra. Así, una l se utiliza para indicar un argumento entero largo con o sin signo. Una h se utiliza para indicar un argumento entero corto con o sin signo

2.4 ESCRITURA DE DATOS. FUNCIÓN printf

Se pueden escribir datos en el dispositivo de salida standard utilizando la función de biblioteca printf. Es análoga a la función scanf, con la diferencia que su propósito es visualizar datos en vez de introducirlos.
En general la función printf se escribe:   
                       printf(cadena de control, arg1,arg2,...,argn);

En contraste con la función scanf los argumentos en la función printf no representan direcciones de memoria y por tanto no van precedidos de ampersands.
Se puede especificar una longitud mínima anteponiendo al carácter de conversión un entero sin signo. Si el número de caracteres del dato correspondiente es menor que la longitud especificada, entonces el dato será precedido por los espacios en blanco necesarios para que se consiga la longitud especificada. Si el número de caracteres del dato excede la longitud especificada, se visualizará el dato completo. Esto es justo lo contrario al comportamiento del indicador de longitud en la función scanf, que especifica una longitud máxima. También es posible especificar el máximo número de cifras decimales para un valor de coma flotante. Esta especificación se denomina precisión. La precisión es un entero sin signo que siempre es precedido por un punto decimal. Un número en coma flotante se redondeará si se debe recortar para ajustarse a la precisión especificada.


Indice

Ejercicios del Bloque 1

Inicio