HERRAMIENTAS COMPUTACIONALES. Operadores para Lenguaje C.

Estándar

Introducción.

En las siguientes líneas, trataré de introducir los elementos principales de la programación en lenguaje C. Intentaré, cubrir parte de las características del lenguaje así como algunas funciones de las bibliotecas estándares, al final y a manera de conclusión, crearemos un sencillo programa en C.

Características del lenguaje C:

· Orientado a la programación de sistemas.

· Es altamente transportable.

· Es muy flexible.

· Genera código muy eficiente.

· Es muy expresivo (se pueden realizar muchas funciones escribiendo pocas líneas de código).

· Es muy poco modular.

· Hace pocas comprobaciones.

· Da poca disciplina al programador.

· Es difícil leer código escrito por otras personas.

Etapas del desarrollo de programas en C.

Veamos primero, algunos conceptos:

El preprocesador.

Transforma el programa fuente, convirtiéndolo en otro archivo fuente “predigerido”. Las transformaciones incluyen: 

· Eliminar los comentarios.

· Incluir en el fuente el contenido de los ficheros declarados con #include <fichero> (a estos ficheros se les suele llamar cabeceras).

· Sustituir en el fuente las macros declaradas con #define (ej. #define CIEN 100).

El compilador.

Convierte el programa fuente entregado por el preprocesador en un archivo en lenguaje máquina: fichero objeto. 

Algunos compiladores pasan por una fase intermedia en lenguaje ensamblador. 

El enlazador.

Un fichero objeto es código máquina, pero no se puede ejecutar, porque le falta un código que se encuentra en otros archivos binarios. 

El enlazador genera el ejecutable binario, a partir del contenido de los ficheros objetos y de las bibliotecas

Las bibliotecas contienen el código de funciones precompiladas, a las que el archivo fuente llama (por ejemplo printf).

Las etapas para el desarrollo de un programa en C son las siguientes:

1. Creación del programa:

Crear un archivo que contenga el programa completo, utilizando un editor de textos ordinario como “emacs” o “vi”. Por convención el programa debe terminar con “.c”, por ejemplo “intento1.c”. El contenido debe obedecer la sintaxis de C.

2. Compilación:

Para compilar un programa simplemente se debe utilizar el comando “cc”. El comando debe estar seguido por el nombre del archivo que contiene al programa en C que se desea compilar. Existen varias opciones para el compilador que se pueden utilizar para modificar la forma en que se realiza este proceso.El comando básico para compilar es:

gcc intento1.c

 Donde intento1.c es el nombre del archivo que contiene al programa.

Si hay errores de sintaxis en el programa, el compilador los detectará y los reportará. Puede haber errores lógicos que no sean detectados por el compilador y que generarán una operación incorrecta del programa.

Cuando el compilador ha generado exitosamente el programa ejecutable, la versión compilada, o ejecutable, se dejará en un archivo con el nombre a.out, o se le puede especificar un nombre que se le haya indicado si se usó la opción -o. 

gcc intento1.c -o ejecutable

3. Ejecución del programa:

Para ejecutarlo, se debe teclear el nombre del archivo ejecutable:

./ejecutable

Esto ejecuta el programa e imprime cualquier resultado en la pantalla. En esta etapa se pueden presentar errores, tales como la división por cero, o puede resultar evidente que la salida es incorrecta. Si algo está incorrecto, se deberá volver a editar el programa y repetir todo el proceso descrito.

Bibliotecas estándares.

El lenguaje C es muy simple. Carece de tipos y servicios que forman parte de otros lenguajes. No tiene tipo booleano, ni manejo de cadenas, ni manejo de memoria dinámica. 

No obstante, el estándar de C define un conjunto de bibliotecas de funciones, que necesariamente vienen con todo entorno de compilación de C y que satisfacen estos servicios elementales. 

Las interfaces de estos servicios vienen definidas en unos ficheros cabeceras (header files). El nombre de estos ficheros suele terminar en .h.

Un fichero fuente en lenguaje C tendrá esta estructura típica: 

#include <biblioteca1.h>

#include <biblioteca2.h>

… declaraciones de funciones … 

… definiciones (cuerpos de funciones) … 

… declaraciones de variables globales … 

main()

{

… cuerpo del main … 

}

… otras definiciones de funciones … 

Las declaraciones y definiciones se pueden hacer en cualquier orden, aunque es preferible declarar las funciones al principio del programa (por legibilidad). 

main es simplemente una función más del programa, con la particularidad de que es el punto de entrada al programa. 

Algunos de los servicios proporcionados por las bibliotecas estándares son: 

· entrada y salida de datos (stdio.h).

· manejo de cadenas (string.h).

· memoria dinámica (stdlib.h).

· rutinas matemáticas (math.h).

Componentes del lenguaje C.

Podemos resumirlo de como la programación estructurada: 

Algoritmos+estructuras de datos = programas.

Estructuras de datos.

· literales.

· tipos básicos (todos numéricos).

· tipos enumerados.

· tipos estructurados (struct, union).

· punteros y vectores.

Construcciones algorítmicas.

· construcciones condicionales (if,switch)

· construcciones iterativas(while,for,do…while)

· subrutinas (funciones)

Además de lo anterior, el C tiene otros elementos: 

· comentarios

· inclusión de ficheros

· macros

· compilación condicional

El preprocesador es quien normalmente se encarga de interpretar estas construcciones. 

Tipos de datos.

Los datos en C han de tener un tipo. Las variables contienen datos, y se han de declarar del tipo adecuado a los valores que van a contener. 

El lenguaje C dispone de estos tipos básicos: 

int

enteros (números enteros positivos y negativos) 

char

caracteres (letras) 

float

números en coma flotante (números reales) 

double

números en coma flotante de doble precisión 

void

no-tipo (se emplea con punteros) 

Todos estos tipos -salvo void- son tipos numéricos. Incluso el tipo char.

Se pueden construir tipos de datos más elaborados a partir de estos tipos básicos: 

· Vectores y matrices.

· Punteros.

· Tipos estructurados (registros).

Declaraciones de variables.

Las variables se utilizan para guardar datos dentro del programa. Hay que declarar las variables antes de usarlas. Cada variable tiene un tipo.

Ejemplo:

int pepe;

Las variables globales se declaran justo antes de main(). Una variable en C se declara de la siguiente forma:

tipo  lista de variables;

inti,j,k;

floatx,y,z;

char  letra;

Inicialización de variables

Es posible inicializar las variables con un valor utilizando el operador de asignación =.

float suma   = 0.0;

intmaximo =  -1;

char  letra  = ‘A’;

main () {

    }

 

float suma;

intmaximo;

char  letra;

main () {

        suma = 0.0;

maximo = -1;

char letra = ‘A’;

    }

 

También es posible inicializar múltiples variables con un mismo valor en una sola línea si las variables son del mismo tipo:

int a=b=c=d=0;

Nombres de variables (identificadores).

Un identificador es un nombre que define a una variable, una función o un tipo de datos. Un identificador válido ha de empezar por una letra o por el carácter de subrayado _, seguido de cualquier cantidad de letras, dígitos o subrayados. 

OJO: Se distinguen mayúsculas de minúsculas. 

No se pueden utilizar palabras reservadas como intchar o while.

Muchos compiladores no permiten letras acentuadas o eñes.

Ejemplos válidos:

                        char letra;

                        int Letra;

                        float CHAR;

                        int variable;

                        int cantidad_envases;

                        double precio123;

                        int __;

Ejemplos no válidos:

                        int 123var;                  /* Empieza por dígitos */

                        char int;                      /* Palabra reservada */

                        int una sola;    /* Contiene espacios */

                        int US$;                                  /* Contiene $

  • /

     

                            int var.nueva;  /* Contiene el punto /

                            int eñe;                                   /* Puede no

funcionar */

 

Tipos definidos por el usuario.

Se pueden definir nuevos tipos a partir de otros utilizando la sentencia typedef.

typedef real float;

typedef letra char;

   /* Declaración de variables con el nuevo tipo */

   real suma=0.0;

   letra   a=’A’;

Constantes.

Una constante es una expresión cuyo valor no cambia durante toda la ejecución del programa. Las constantes son útiles para definir parámetros de un problema o constantes matemáticas o físicas: PI,e,g,etc.

La palabra reservada const se usa para declarar constantes:

doubleconst PI = 3.1415;

constfloat g = 9.8;

Otra forma común de declarar constantes es utilizando la directiva #define

Es frecuente el uso de constantes para declarar los parámetros de una función cuyos argumentos no cambian en su interior.

Expresiones.

Los datos se manipulan mediante expresiones, que sirven para calcular valores. En C hay varios operadores para construir expresiones. 

Estos son los operadores elementales sobre números: 

Operador

Significado

+

suma

resta

*

producto

/

división

%

módulo (resto de la división) 

Una expresión combina varias operaciones y devuelve un valor. Los operadores */ y % tienen precedencia sobre la suma y la resta. Se pueden utilizar paréntesis para agrupar subexpresiones. 

Ejemplos de expresiones:

            1.

            2+2.

            4 + 6/2.

            (4+6) / 2.

            (3*5 + 12) % 7.

Asignaciones.

La forma de dar valor a una variable es:

variable expresión

Y se le llama asignación.

También se puede dar valor a una variable en el mismo momento en que se declara (inicialización).

tipo variable expresión 

Una variable que se declara sin inicializar contiene un valor indeterminado. 

Ejemplo:

            int valor1 = 0;  /* variable inicializada a cero */

            int valor2;                    /* variable no inicializada */

            main()

            {

                        valor1 = 4 + 3;            /* asignación */

                        valor2 = 5;                  /* otra asignación */

Una asignación es una expresión. Esto quiere decir que: a) devuelve un valor y, b) una asignación puede incrustarse dentro de una expresión más compleja. 

El valor devuelto por la asignación a=b es el resultado de evaluar b.

Ejemplo:

 C =  20 – ( B = 2*(A=5)+4 ) ;

A valdrá 5 (por la expresión A=5) 

B valdrá 2*(5)+4= 14

C valdrá 20-(14)= 6

En consecuencia, una asignación se puede colocar en cualquier sitio donde se puede emplear una expresión. 

Operadores.

Hay operadores para evaluar condiciones. En C no existe tipo booleano, así que el resultado de la expresión utiliza números enteros: si la condición es cierta, estas expresiones devuelven un 1; si no es cierta, devuelven un cero. 

Tipo

Operador

Operación

Ejemplo

Aritmético

+

suma

b=4+a;

Aritmético

resta

b=4-a;

Aritmético

*

producto

b=4*a;

Aritmético

/

división

b=4/a;

Aritmético

++

preincremento

b=++a;

Aritmético

++

posincremento

b=a++;

Aritmético

predecremento

b=–a;

Aritmético

posdecremento

b=a–;

Aritmético

%

módulo

b=a%c;

     

 

Asignación

=

asignación simple

b=4;

Asignación

+=

suma y asigna

b+=4;

Asignación

-=

resta y asigna

b-=4;

Asignación

*=

multiplica y asigna

b*=4;

Asignación

/=

divide y asigna

b/=4;

     

 

Comparación

 

 

igualdad

ba;

Comparación

menor que

b<a;

Comparación

mayor que

b>a;

Comparación

<=

menor que o igual

b<=a;

Comparación

>=

mayor que o igual

b>=a;

Comparación

?:

si ? entonces : de lo contrario

c=(a<b)?a:b;

     

 

Lógicos

&&

AND lógico

a && b;

Lógicos

||

OR lógico

a || b;

Lógicos

!

NOT lógico

!a;

Lógicos

&

AND sobre bits

a & b;

Lógicos

|

OR sobre bits

a | b;

Lógicos

^

XOR sobre bits

a ^ b;

Lógicos

~

NOT sobre bits

~a;

Lógicos

&=

AND sobre bits con asignación

a &= b;

Lógicos

|=

OR sobre bits con asignación

a |= b;

Lógicos

^=

XOR sobre bits con asignación

a ^= b;

     

 

Apuntadores

*

Resuelve apuntador

a = *b;

Apuntadores

->

Resuelve apuntador sobre estructura

a = b->c;

Apuntadores

 ?

Elemento de un arreglo

a = b1?;

Apuntadores

( )

Llamada a función

a = fun ( );

Construcciones algorítmicas.

En C existen estas construcciones para implementar algoritmos: 

· Sentencias simples y sentencias compuestas (con las llaves).

· Construcciones condicionales:

if ( expresiónsentencia [ else sentencia ]

switch ( expresión) { caso1 caso2 … casoN }

· Construcciones iterativas:

while ( expresiónsentencia

do sentencia while ( expresión);

for ( expresiónexpresiónexpresión ) sentencia

· Instrucciones de control de flujo: break, continue y goto.

· Subprogramas: funciones.

Programación modular.

Una aplicación escrita en C puede estar compuesta de múltiples módulos, cada uno encargado de una función (manejo de archivos, gestión de errores, visualización de datos, interfaz de usuario, etc.).

Un módulo es un conjunto de funciones, tipos de datos, variables, etc., en definitiva, recursos que pueden utilizar otros módulos. Cada módulo es un fichero fuente de extensión .c que se compila por separado.

La interfaz de un módulo es el conjunto de funciones, variables, tipos de datos y constantes que se hacen públicas al resto de los módulos. 

Por cada módulo fichero.c existirá un fichero cabecera fichero.h, el cual contendrá la declaración de la interfaz de ese módulo. 

Las funciones, variables, etc. que son de uso interno del módulo no se declaran en el fichero cabecera. 

Los módulos que vayan a utilizar recursos de un módulo llamado mod.c tendrían que incluir su fichero cabecera con:

#include ” mod.h

Con lo que se incluyen las declaraciones públicas de ese módulo. 

Ejemplo de programación. (Disculpen la simplicidad).

Vamos a crear un programa en lenguaje C, que va a consistir en escribir por pantalla la frase “Hola Mundo”; para ello, vamos a utilizar el entorno de programación Dev-C.

Lo primero que hay que hacer es crear un nuevo proyecto, para ello vamos al menú File/New/Project:

http://recursostic.educacion.es/observatorio/web/images/upload/ccam0040/introc/image001.jpg

Debemos indicar el tipo de proyecto que queremos crear, el nombre del proyecto y el lenguaje de programación que se va a utilizar. En nuestro caso le indicamos que el proyecto sea Console Application, el nombre del proyecto “Hola Mundo” y marcamos la opción de C Project:

http://recursostic.educacion.es/observatorio/web/images/upload/ccam0040/introc/image002.jpg

Por defecto, el entorno de programación Dev-C crea el archivo main con los parámetros necesarios. Por así decirlo, crea una ayuda para el programador. Borramos todo lo que aparece en archivomain.c y nos quedará la pantalla siguiente:

http://recursostic.educacion.es/observatorio/web/images/upload/ccam0040/introc/image003.jpg

Ahora vamos a escribir el código de nuestro programa:

Como ya sabemos, un programa escrito en C debe seguir una estructura. Lo primero que debe aparecer en nuestro código es la definición de las librerías de funciones. En nuestro caso, solo necesitamos la declaración de la librería stdio.h. Esta librería es la biblioteca estándar del lenguaje C. En ella se definen las macros, las contantes, las declaraciones de funciones y la definición de tipos usados por varias operaciones estándar de entrada y salida.

Para mostrar por pantalla en texto que deseamos, necesitamos la función printf() definida en la librería stdio.h. Entre los paréntesis escribimos el mensaje que queremos que se muestre entre comillas dobles (” “). Esto debe ir dentro del programa principal, main, descrito anteriormente. El código de nuestro programa debe tener el siguiente aspecto:

http://recursostic.educacion.es/observatorio/web/images/upload/ccam0040/introc/image004.jpg

Una vez que está escrito nuestro código, hay que compilarlo. Al compilar lo que hacemos es traducir nuestro código a un lenguaje entendible por el ordenador.

Para ello hacemos click en el siguiente botón:

http://recursostic.educacion.es/observatorio/web/images/upload/ccam0040/introc/image005.jpg

Al pulsar en este botón, nos saldrá la siguiente pantalla indicándonos el progreso de la compilación.

http://recursostic.educacion.es/observatorio/web/images/upload/ccam0040/introc/image006.jpg

Si en algún momento da error, es porque no hemos escrito nuestro código de la manera correcta. En este caso, Dev-C nos indicará la línea donde esta nuestro error. Un ejemplo es el siguiente:

Vamos a borrar en la línea donde escribimos por pantalla el “;”. La pantalla de error será la siguiente:

http://recursostic.educacion.es/observatorio/web/images/upload/ccam0040/introc/image007.jpg

Nos indica que hay un error de sintaxis antes de “}” y está en la línea 9. Solucionamos el error y volvemos a compilar. Una vez compilado guardamos nuestro archivo main.c en la carpeta del proyecto que creamos al principio.

http://recursostic.educacion.es/observatorio/web/images/upload/ccam0040/introc/image008.jpg

Para ejecutar el programa que hemos creado vamos a: Inicio\Ejecutar\cmd y navegamos hasta la carpeta de nuestro proyecto. Para ejecutar nuestro programa hay que escribir lo siguiente: nombre_proyecto.exe, que en nuestro caso sería “Hola Mundo.exe”

http://recursostic.educacion.es/observatorio/web/images/upload/ccam0040/introc/image009.jpg

Como vemos se ha escrito por pantalla la frase: “Hola Mundo”.

Fuentes de información:

~ Instituto Nacional de Tecnologías Educativas y de Formación del Profesorado. Observatorio Tecnológico. Gobierno de España.

~ Introducción al lenguaje C. José Miguel Santos Espino. Universidad de la Palmas de Gran Canaria. España.

~ www.fciencias.unam.mx.

~ Essential C.Parlante, N. Stanford CS Education Library, USA. (2003).

Understanding C. Townsend, C. 2a. ed. USA: Howard W. Sams & Company. (1988).

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s