Tipos de Instrucciones en Lenguaje
Tipos de Instrucciones en Lenguaje
Tipos de Instrucciones en Lenguaje
Una instruccin compuesta siempre alberga, entre llaves ({...}), a un <bloque_de_instrucciones>: { <bloque_de_instrucciones> } Un bloque de instrucciones puede estar compuesto por una o ms instrucciones, que, a su vez, pueden ser instrucciones de expresin, de control y/o compuestas nuevamente. El cuerpo de toda funcin es una instruccin compuesta. Sirva como ejemplo el cuerpo de la funcin main, el cual alberga al bloque de instrucciones principal de un programa escrito en lenguaje C. Las instrucciones de expresin, tambin conocidas como instrucciones simples o elementales, son aquellas que representan a las acciones ms pequeas (elementales) que se pueden ejecutar en un programa, y siempre van seguidas de un carcter punto y coma (;), el cual indica que la instruccin ha terminado: <instruccin_de_expresin>; Una instruccin de expresin es, en s misma, una expresin. De modo que, la accin que se ejecuta es la evaluacin de dicha expresin: <expresin> En cuanto a las instrucciones de control, existen de distintos tipos, y todas sirven para modificar el flujo de control de un programa. Veremos que, algunas de ellas deben ir seguidas del carcter punto y coma (;), pero otras no.
Obsrvese que, el saludo se visualiza justo en la esquina superior izquierda de la pantalla. Ms adelante se estudiar cmo se puede mostrar en otro lugar de la pantalla. En lenguaje C, el cdigo fuente de dicho programa puede ser: #include <stdio.h> int main() { printf( "Hola mundo" ); return 0; } Todas las funciones de la biblioteca estndar de lenguaje C son subprogramas que ya estn compilados, es decir, junto a cualquier compilador de lenguaje C se acompaan los cdigos objeto de todas las funciones de su biblioteca estndar, pero no sus cdigos fuente. Por tanto, aunque no sea posible modificar sus cdigos fuente, s se puede hacer uso de dichas funciones en cualquier programa. Por ejemplo, se puede llamar a la funcin printf para que muestre por pantalla el saludo "Hola mundo". printf( "Hola mundo" ); Dentro de los parntesis "()" de la funcin printf, se debe escribir, entre comillas dobles ("), el mensaje o cadena de caracteres que se desea mostrar por pantalla. Obsrvese que, despus del carcter cerrar parntesis ")" se ha escrito un punto y coma (;), esto implica que la llamada a la funcin printf es considerada como una instruccin de expresin. Del cdigo fuente preprocesado de un programa, el compilador generar un cdigo objeto que se debe unir (enlazar) con los cdigos objeto de las funciones de la biblioteca estndar del lenguaje C que se llamen desde dicho programa. Por ejemplo, el cdigo objeto de nuestro primer programa se debe enlazar con el cdigo objeto del subprograma printf. El enlazador sabe dnde encontrar el cdigo objeto de las funciones de la biblioteca estndar de C que utilice un programa. Sin embargo, para poder utilizar una funcin (sea de la biblioteca estndar de C o no) en un programa, la funcin debe ser declarada previamente, al igual que se tienen que declarar las variables y las constantes que usa un programa. Para que el compilador conozca la declaracin de la funcin printf, hay que utilizar la directiva del preprocesador #include: #include <stdio.h> En este caso, la directiva #include indica, al preprocesador, que debe incluir, antes de la compilacin, en el cdigo fuente del programa, el contenido del archivo <stdio.h> (stdio, Standard Input/Output). En dicho archivo estn escritas las declaraciones de
todas las funciones de entrada y salida estndar de la biblioteca estndar de C, como printf. Si el compilador no sabe quien es printf, no podr generar el cdigo objeto del programa. Las funciones de la biblioteca estndar de C estn clasificadas en base a su funcionalidad, y sus declaraciones se agrupan en archivos con extensin (.h), los cuales son llamados archivos de cabecera. Adems de stdio.h, algunos de los archivos de cabecera ms utilizados en lenguaje C son: math.h, string.h y stdlib.h. En ellos estn escritas, respectivamente, las declaraciones de las funciones matemticas, funciones de cadena y funciones de utilidad de la biblioteca estndar de C. Despus de #include, el nombre del archivo de cabecera se puede escribir entre los caracteres menor y mayor (<stdio.h>), o entre comillas dobles ("stdio.h"). Cuando se escriba entre comillas dobles, el preprocesador buscar dicho archivo en el directorio actual de trabajo, y de no encontrarlo ah, entonces lo buscar en el directorio especificado por el compilador. En el caso de escribirse entre los caracteres menor y mayor, el proceso de bsqueda ser al revs. Adems de la directiva del preprocesador #include, existen otras, pero, ninguna de ellas es una palabra reservada del lenguaje C. El cdigo objeto generado por el compilador de C tendr "huecos" (espacios) en donde ms tarde el enlazador escribir el cdigo objeto correspondiente a las llamadas de las funciones ya compiladas (como printf) y, as, generar el archivo ejecutable. Toda funcin retorna un valor. En nuestro primer programa se ha escrito: return 0; Esto quiere decir que la funcin main devuelve el valor 0. Precediendo a main se ha escrito la palabra reservada int, indicando as, que la funcin retornar un valor de tipo int (entero). int main() En general, la instruccin return suele ser la ltima del bloque de instruccines de la funcin main. Al retornar el valor 0, indica (informa al sistema operativo) que el programa finaliz correctamente, es decir, sin producirse ningn error en su ejecucin. Cuando la funcin main devuelva un valor distinto de cero, esto siginificar que se ha producido algn error en la ejecucin del programa, o que ha ocurrido algo fuera de lo normal. La instruccin return es una de las instrucciones de control que existen en lenguaje C. Por tanto, es una palabra reservada. Despus del valor de retorno (que es una expresin) se debe escribir un punto y coma (;). La sintaxis de la instruccin return es: return <expresin>; Por el momento, se ha visto que la sintaxis "bsica" de un programa escrito en lenguaje C es:
[ <directivas_del_preprocesador> ] int main() { <bloque_de_instrucciones> } Ahora es una buena ocasin para poner en prctica lo aprendido en el apartado Fases de la Puesta a punto de un Programa. Para ello, puede consultar las Guas de Uso de algunos compiladores de C/C++.
Z = { ..., -3, -2, -1, 0, 1, 2, 3, ... } Ejemplo: La edad de una persona y el ao en que naci, son dos datos de tipo entero: Edad...: 29 Ao....: 1976 Z es un conjunto infinito de nmeros enteros, y como el ordenador no puede representarlos todos, un dato de tipo entero slo puede tomar por valor un nmero perteneciente a un subconjunto de Z. Los valores mximo y mnimo de dicho subconjunto varan segn las caractersticas de cada ordenador y del compilador que se utilice.
carcter perteneciente al conjunto de los caracteres que puede representar el ordenador. En lenguaje C, el valor de un dato de tipo carcter se debe representar entre comillas simples ('). Ejemplo: En un examen con preguntas en las que hay que seleccionar la respuesta correcta entre varias opciones dadas (a, b, c, d, e), la respuesta correcta de cada una de las preguntas es un dato de tipo carcter. Respueta correcta a la pregunta 3...: 'c' Datos sin Valor en Lenguaje C (void) Qu es un dato sin valor en C? Un dato sin valor (void en lenguaje C) es un dato que no puede tomar por valor nign valor, es decir, es un dato vaco (nulo).
En lenguaje C, el valor de un dato de tipo cadena se debe representar entre comillas dobles ("). Ejemplo: El ttulo de un libro y el nombre de su autor, son datos de tipo cadena. Ttulo...: "La Odisea" (cadena de 9 caracteres) Autor....: "Homero" (cadena de 6 caracteres) Obsrvese que, en la cadena "La Odisea", el carcter espacio en blanco tambin se cuenta.
Identificadores en Lenguaje C
Qu son los identificadores en C?
Ejemplos de Identificadores vlidos y no vlidos Palabras Reservadas La mayora de los elementos de un programa se diferencian entre s por su nombre. Por ejemplo, los tipos de datos bsicos en lenguaje C se nombran como: char, int, float, double y void Cada uno de ellos es un identificador. Un identificador es el nombre que se le da a un elemento de un algoritmo (o programa). Por ejemplo, el tipo de dato int hace referencia a un tipo de dato que es distinto a todos los dems tipos de datos, es decir, los valores que puede tomar un dato de tipo entero, no son los mismos que los que puede tomar un dato de otro tipo. Los identificadores char, int, float, double y void estn predefinidos, forman parte del lenguaje C. No obstante, en el cdigo de un programa tambin pueden existir identificadores definidos por el programador. Por ejemplo, un programa puede utilizar variables y constantes definidas por el programador. En lenguaje C, a la hora de asignar un nombre a un elemento de un programa, se debe tener en cuenta que todo indenficador debe cumplir las siguientes reglas de sintaxis: 1. Consta de uno o ms caracteres. 2. El primer carcter debe ser una letra o el carcter subrayado (_), mientras que, todos los dems pueden ser letras, dgitos o el carcter subrayado (_). Las letras pueden ser minsculas o maysculas del alfabeto ingls. As pues, no est permitido el uso de las letras '' y ''. 3. No pueden exitir dos identificadores iguales, es decir, dos elementos de un programa no pueden nombrarse de la misma forma. Lo cual no quiere decir que un identificador no pueda aparecer ms de una vez en un programa. De la segunda regla se deduce que un identificador no puede contener caracteres
especiales, salvo el carcter subrayado (_). Es importante resaltar que las vocales no pueden llevar tilde ni diresis.
Variables en Lenguaje C
Cmo se declara una variable en C?
Ejemplos de declaracin de Variables En lenguaje C hay que escribir un punto y coma (;) despus de la declaracin de una o ms variables. As pues, la sintaxis para declarar una variable es: <tipo_de_dato> <variable> [ = <expresin> ]; Y para ms de una variable del mismo tipo se utiliza la sintaxis: <tipo_de_dato> <variable_1> [= <expresin_1>], <variable_2> [= <expresin_2>], ..., <variable_n> [= <expresin_n>]; Una expresin representa a un valor de un tipo de dato. En el apartado Operadores y Expresiones se estudiarn en detalle las expresiones.
Ejemplo 2: Para declarar varias variables del mismo tipo de dato se puede escribir: int edad; int numero_de_hijos; Ejemplo 3: O tambin, en la misma lnea separadas por el carcter coma (,): int edad, numero_de_hijos;
Ejemplo 4: Si se desea declarar una variable para almacenar un nmero entero y que, inicialmente, contenga el valor 35, se debe escribir: int numero = 35;
Ejemplo 5: A continuacin, se muestra la declaracin de una variable para almacenar una letra del alfabeto y que, inicialmente, contenga el valor 'Z': char letra = 'Z'; Ejemplo 6: Para declarar una variable que pueda almacenar el nombre de una persona y que, inicialmente, contenga el valor "Isabel", escribiremos: char nombre[7] = "Isabel"; Un dato de tipo cadena es un dato compuesto (estructurado), debido a que est formado por una agrupacin de caracteres. Pues bien, dicha agrupacin se define por medio de
un array. Un array agrupa, bajo el mismo nombre de variable, a una coleccin de elementos (datos) del mismo tipo. Para declarar un array de caracteres, despus del identificador de la variable, se tiene que escribir, entre corchetes "[]", el nmero de caracteres que se van a almacenar en el array, ms uno. Por tanto, en este caso, puesto que "Isabel" tiene seis caracteres, hay que escribir un 7 entre los corchetes. Se tiene que escribir un nmero ms, porque en la memoria se va a reservar espacio para los seis caracteres de la cadena "Isabel", ms uno, conocido ste como el carcter nulo, el cual se representa mediante una barra invertida y un cero (\0). El sistema se encarga de "poner" dicho carcter, que indica el fin de la cadena. Por consiguiente, en la memoria se almacenarn siete caracteres consecutivos:
Los caracteres del array pueden ser referenciados mediante el identificador del mismo, seguido de un nmero entre corchetes. A dicho nmero, de manera formal, se le llama "ndice", y puede oscilar entre el valor 0 y n-1, siendo n el nmero de caracteres que pueden ser almacenados en memoria en el array, en este caso 7. <nombre_de_la_variable>[<ndice>] Por ejemplo, nombre[3] hace referencia al espacio de memoria donde est el carcter 'b'. Ejemplo 7: Si se declara la variable de tipo cadena: char nombre[7] = "June"; En memoria tendremos:
Fjese que, en esta ocasin, el array de caracteres nombre ha sido inicializado con el valor "June". De manera que, el fin de la cadena se encuentra en nombre[4], y no en el ltimo espacio de memoria reservado para el array, ya que, "June" tiene, solamente, cuatro caracteres.
Constantes en Lenguaje C
Qu tipos de constantes existen en C?
Constantes de Tipo Entero Constantes de Tipo Real Constantes de Tipo Carcter Constantes de Tipo Cadena En lenguaje C, una constante puede ser de tipo entero, real, carcter, de cadena o enumerado. Las contantes de tipo enumerado se van a estudiar ms adelante. En cuanto a las dems, se pueden expresar de dos formas diferentes: 1. Por su valor. 2. Con un nombre (identificador). Ejemplo 1: Las siguientes contantes de tipo entero estn expresadas por su valor: -5 10 Para expresar una constante con un nombre, la constante debe ser declarada previamente. Las constantes que se declaran en un programa escrito en lenguaje C reciben un tratamiento diferente al de la mayora de los lenguajes de programacin. En C, para representar a las constantes, se utilizan constantes simblicas. Una constante simblica representa (sustituye) a una secuencia de caracteres, en vez de representar a un valor (dato almacenado en memoria).
Para declarar una constante simblica, en lenguaje C, se utiliza una nueva directiva del preprocesador: #define <constante> <secuencia_de_caracteres> La directiva #define indica al preprocesador que debe sustituir, en el cdigo fuente del programa, todas las ocurrencias del <nombre_de_la_constante> por la <secuencia_de_caracteres>, antes de la compilacin. Ejemplo 2: Dos constantes muy habituales son: #define PI 3.141592 #define NUMERO_E 2.718281 En programacin es una buena prctica escribir los identificadores de las constantes en maysculas, de esta forma es ms fcil localizarlos en el cdigo de un programa. Ntese que, despus de la declaracin de una constante simblica no se escribe un carcter punto y coma (;), cosa que s se debe hacer al declarar una variable. Por otra parte, no se puede declarar ms de una constante simblica en una misma lnea de cdigo. Ejemplo 3: Para declarar las constantes simblicas PI y NUMERO_E, no se puede escribir: #define PI 3.141592, NUMERO_E 2.718281 Por otra parte, en C, es posible declarar una variable indicando que su valor es inalterable. Para ello, se utiliza el cualificador const. Ejemplo 4: Uso de const: const int temperatura = -5; En el ejemplo, se ha declarado la variable entera temperatura inicializada al valor -5 y, por medio de const, que es una palabra reservada, se ha indicado que su valor no puede cambiar durante la ejecucin del programa. En cierta manera, la variable temperatura est simulando a una constante.
Ya se sabe cmo escribir la declaracin de una constante y de las variables que utilice un programa y, tambin, se conoce el lugar en que se tiene que escribir la directiva del preprocesador #define para declarar la constante.
En cuanto a las variables que utiliza un programa, su declaracin puede escribirse en varios lugares, pero, de momento las vamos a declarar inmediatemente despus del carcter abrir llave ({) de la funcin main. [ <directivas_del_preprocesador> ] int main() { [ <declaraciones_de_variables> ] <lista_de_instrucciones> } Ejemplo 5: Si en un programa se quieren declarar dos variables (area y radio) y una constante (PI), se puede escribir: #define PI 3.141592 int main() { float area, radio; ... }
+1111 Obsrvese que, adems de los caracteres numricos, dgitos del (0) al (9), tambin se puede hacer uso de los caracteres especiales (+) y (-) para indicar el signo de un nmero entero, el cual es positivo por omisin. Sin embargo, en lenguaje C, es incorrecto usar los caracteres coma (,) y/o punto (.) para expresar constantes de tipo entero. Ejemplo 2: Por tanto, es incorrecto escribir: -32.000 0,0 +1,111.00 Ejemplo 3: Otros ejemplos incorrectos de constantes de tipo entero son: ++111 (No se puede duplicar el signo) 38000 (No pertenece al subconjunto de Z representable por el ordenador)
Ejemplo 2: Las siguientes constantes de tipo real estn expresadas correctamente: -77e-3 +1111e+2 2000E+2 3040e2 Una constante de tipo real tambin se puede expresar con el carcter punto (.) y el exponente al mismo tiempo. Ejemplo 3: Algunos ejemplos son: -50.50e-4 400.e-3 +65.65E+2 .7e2 El exponente tiene la funcin de desplazar la posicin del punto decimal hacia la derecha si es positivo o, hacia la izquierda si es negativo. Ejemplo 4: As pues, las siguientes constantes de tipo real representan al mismo valor: 0.004E+3 4. .4e1 +400.00e-2 4000E-3 Ejemplo 5: Algunos ejemplos de constantes de tipo real incorrectas son: -200 (No aparece el punto ni el exponente) -20,0 (No puede aparecer la coma) --111- (No se puede duplicar el signo) -111.. (No se puede duplicar el punto) -111.11. (No puede aparecer ms de un punto)
+22e (Despus del carcter (e) o (E) se debe escribir el exponente) +22ee6 (No se puede duplicar el carcter (e) o (E)) +22e 6 (No se puede escribir el carcter espacio en blanco) 38E-2.2 (El exponente debe ser una cantidad entera)
"Lucerna" "Barcelona 2000" Ejemplo 2: En lenguaje C, para representar el carcter comilla doble (") dentro de una cadena, se debe anteponer el carcter barra invertida (\). #define FIESTA "7 de julio \"San Fermn\""