• No se han encontrado resultados

PARTE I. DE LA PROGRAMACIÓN

Capítulo 2. Fundamentos de programación

3.12. Entradas y salidas

3.13.

Resumen.

3.14.

Ejercicios.

Una vez

se le ha enseñado a crear sus propios programas, vamos a analizar

los fundamentos del lenguaje de programación

Este capitulo comienza con

un repaso de los conceptos teóricos y

relativos a la estructura de un

programa enunciados en capítulos anteriores, dada su

importancia en el

desarrollo de aplicaciones, incluyendo

los siguientes

creación de un programa;

elementos básicos

componen un programa;

tipos de datos en C y cómo se declaran;

concepto de constantes y su declaración;

concepto y declaración de variables;

tiempo de vida o duración de variables;

operaciones básicas de

CONCEPTOS CLAVE

Archivo de cabecera.

Código ejecutable.

Comentarios.

Constantes.

char.

Directiva #include.

Flujos.

Función

int.

Preprocesador.

grfntf

scanf

Variables.

73

Programación en Metodología, algoritmos y estructura de datos

3.1. ESTRUCTURA GENERAL DE UN PROGRAMA EN C

En esta sección repasamos los elementos constituyentes de un programa escrito en C, fijando ideas y

describiendo ideas nuevas relativas a la mencionada estructura de un programa en

Un programa en C se compone de una o más funciones. Una de las funciones debe ser obligatoria- mente main. Una función en C es un grupo de instrucciones que realizan una o más acciones. Asimismo, un programa contendrá una serie de directivas #include que permitirán incluir en el mismo archivos de cabecera que a su vez constarán de funciones y datos predefinidos en ellos.

#include archivo de cabecera s tdi o. h

int cabecera defunción

nombre de

. . .

sentencias

#include D i r e c t i v a s d e l p r e p r o c e s a d o r

#define Macros del procesador

I I Declaraciones globales O prototipos de funciones O variables Función principal ma in main d e c l a r a c i o n e s l o c a l e s sent en c i a s de otras funciones

. . .

. . .

El lenguaje C: elementos básicos

De un modo más explícito, un programa C puede incluir: directivas de preprocesador;

declaraciones globales; la función main

funciones definidas por el usuario;

comentarios del programa (utilizados en su totalidad).

La estructura típica completa de un programa C se muestra en la Figura 3.1. Un ejemplo de un

/*Listado Programa de saludo * /

programa sencillo en

#include

/ * Este programa imprime: Bienvenido a la programación en C * / int

a la programación

return O ;

La directiva # include de la primera línea es necesaria para que el programa tenga salida. Se refiere a un archivo externo denominado s tdio

.

h en el que se proporciona la información relativa a la función printf . Obsérvese que los ángulos y no son parte del nombre del archivo; se utilizan para indicar que el archivo es un archivo de la biblioteca estándar

La segunda línea es un comentario, identificado por los caracteres y */. Los comentarios se incluyen en programas que proporcionan explicaciones a los lectores de los mismos. Son ignorados por el compilador.

La tercera línea contiene la cabecera de la función main , obligatoria en cada programa Indica el comienzo del programa y requieren los paréntesis a continuación de main

.

La cuarta y séptima línea contienen sólo las llaves y que encierran el cuerpo de la función main y son necesarias en todos los programas

La quinta línea contiene la sentencia

a la programación en

que indica al sistema que escriba el mensaje "Bienvenido a la programación en . La salida será

p r i n t es la función más utilizada para dar salida de datos por el dispositivo estándar, la pantalla.

Bienvenido a la programación en C

El símbolo es el símbolo de nueva línea. Poniendo este símbolo al final de la cadena entre comillas, indica al sistema que comience una nueva línea después de imprimir los caracteres precedentes, terminando, por consiguiente, la línea actual.

La sexta línea contiene la sentencia return Esta sentencia termina la ejecución del programa y devuelve el control al sistema operativo de la computadora. El número O se utiliza para señalar que el programa ha terminado correctamente (con éxito).

Obsérvese el punto y coma ( ) al final de la quinta y sexta línea. C requiere que cada sentencia termine con un punto y coma. No es necesario que esté al final de una línea. Se pueden poner varias sentencias en la misma línea y se puede hacer que una sentencia se extienda sobre varias líneas.

El programa

corto

de es

el

«programa que no hace nada. advertencia

si

se omite.

#include "nombre del

76 Programación en Metodología, algoritmos y estructura de datos

3.1

Directivas del preprocesador

El preprocesador en un programa C se puede considerar como un editor de texto inteligente que consta de directivas (instrucciones al compilador antes de que se compile el programa principal). Las dos directivas más usuales son #include y #define.

Todas las directivas del preprocesador comienzan con el signo de libro o «almohadilla>> que indica al compilador que lea las directivas antes de compilar la parte (función) principal del programa. Las directivas son instrucciones al compilador. Las directivas no son generalmente sentencias -obsérvese que su línea no termina en punto y coma-, sino instrucciones que se dan al compilador antes de que el programa se compile. Aunque las directivas pueden definir macros, nombres de constantes, archivos fuente adicionales, etc., su uso más frecuente en C es la inclusión de archivos de cabecera.

Existen archivos de cabecera estándar que se utilizan ampliamente, tales como S T D I O . H, STDLIB

.

H, MATH. STRING. H y se utilizarán otros archivos de cabecera definidos por el usuario

para diseño estructurado.

La directiva #include indica al compilador que lea el archivo fuente que viene a continuación de ella y su contenido lo inserte en la posición donde se encuentra dicha directiva. Estos archivos se denominan archivos de cubecera o archivos de inclusión.

Los archivos de cabecera (archivos con extensión

.

h contienen código fuente C) se sitúan en un programa C mediante la directiva del preprocesador #include con una instrucción que tiene el siguiente formato :

#include O bien #include

nombrearch debe ser un archivo de texto ASCII (su archivo fuente) que reside en su disco. En realidad, la directiva del preprocesador mezcla un archivo de disco en su programa fuente.

La mayoría de los programadores C sitúan las directivas del preprocesador al principio del programa, aunque esta posición no es obligatoria.

Además de los archivos de código fuente diseñados por el usuario, # include se utiliza para incluir archivos de sistemas especiales (también denominados archivos de cabecera) que residen en su compilador Cuando se instala el compilador, estos archivos de cabecera se almacenarán automáticamente en su disco, en el directorio de inclusión (include) del sistema. Sus nombres de archivo siempre tienen la extensión

.

El archivo de cabecera más frecuente es STDIO

.

Este archivo proporciona al compilador C la información necesaria sobre las funciones de biblioteca que realizan operaciones de entrada y salida.

Como casi todos los programas que escriba imprimirán información en pantalla y leerán datos de teclado, necesitarán incluir scanf y print en los mismos.

Para ello será preciso que cada programa contenga la línea siguiente: #include

De igual modo es muy frecuente el uso de funciones de cadena, especialmente s t por esta razón, se requiere el uso del archivo de cabecera denominado string

.

Por consiguiente, será muy usual que deba incluir en sus programas las líneas:

#include #include

El orden de sus archivos de inclusión no importan con tal que se incluyan antes de que se utilicen las funciones correspondientes. La mayoría de los programas C incluyen todos los archivos de cabecera necesarios antes de la primera función del archivo.

La directiva #include puede adoptar uno de los siguientes formatos:

El lenguaje C: elementos básicos

Dos ejemplos típicos son: ( a ) #include

( b ) #include "pruebas.

El formato ( a ) (el nombre del archivo entre ángulos) significa que los archivos se encuentran en el directorio por defecto include. El formato significa que el archivo está en el directorio actual. Los dos métodos no son excluyentes y pueden existir en el mismo programa archivos de cabecera estándar utilizando ángulos y otros archivos de cabecera utilizando comillas. Si desea utilizar un archivo de cabecera que se creó y no está en el directorio por defecto, se encierra el archivo de cabecera y el camino entre comillas, tal como

#include

#define. La directiva #define indica al preprocesador que defina un item de datos u operación para el programa Por ejemplo, la directiva

#define 65

sustituirá TAM-LINEA por el valor 65 cada vez que aparezca en el programa.

3.1.2. Declaraciones globales

Las declaraciones globales indican ai compilador que las funciones definidas por el usuario o variables así declaradas son comunes a todas las funciones de su programa. Las declaraciones globales se sitúan antes de la función main . Si se declara global una variable Grado-clase del tipo

Grado-clase;

cualquier función de su programa, incluyendo main , puede acceder a la variable Grado-clase. de declaraciones de función. Las declaraciones de función se denominan prototipos

La zona de declaraciones globales de un programa puede incluir declaraciones de variables además

int a, ;

El siguiente programa es una estructura modelo que incluye declaraciones globales. / * Programa * / #include / * Definición de macros * / #define 0.50 #define 0.75 / * Declaraciones globales * / int Calificaciones ;

I

main

3.1.3. Función main

78 Programación en Metodología, algoritmos y estructura de datos

main

Las sentencias incluidas entre las llaves

. . .

se denominan bloque. Un programa debe tener sólo una función main

.

Si se intenta hacer dos funciones main se produce un error. Además de la función main , un programa C consta de una colección de funciones.

. .

.

bloque de sentencias

es un

devuelve un

único

valor, un c

En un programa corto, el programa completo puede incluirse totalmente en la función main

.

Un programa largo, sin embargo, tiene demasiados códigos para incluirlo en esta función. La función main en un programa largo consta prácticamente de llamadas a las funciones definidas por el usuario. El programa siguiente se compone de tres funciones: obtenerdatos , alfabetizar y verpalabras que se invocan sucesivamente.

int

obtenerdatos ;

verpalabras ;

return O ;

Las variables y constantes globules se declaran y definen fuera de definición de las funciones, generalmente en la cabecera del programa, antes de main , mientras que las variables y constantes locales se declaran y definen en la cabecera del cuerpo o bloque de la función principal, o en la cabecera de cualquier bloque. Las sentencias situadas en el interior del cuerpo de la función main , o cualquier otra función, deben terminar en punto y coma.

3.1.4. Funciones definidas por el usuario

Un programa C es una colección de funciones. Todos los programas se construyen a partir de una o más funciones que se integran para crear una aplicación. Todas las funciones contienen una o más sentencias C y se crean generalmente para realizar una única tarea, tales como imprimir la pantalla, escribir un archivo o cambiar el color de la pantalla. Se pueden declarar y ejecutar un número de funciones casi ilimitado en un programa

Las funciones definidas por el usuario se invocan por su nombre y los parámetros opcionales que puedan tener. Después de que la función es llamada, el código asociado con la función se ejecuta y, a continuación, se retorna a la función llamadora.

Todas las funciones tienen nombre y una lista de valores que reciben. Se puede asignar cualquier nombre a su función, pero normalmente se procura que dicho nombre describa el propósito de la función. En C, las funciones requieren una o prototipo en el programa:

El lenguaje C: elementos básicos

Una declaración de función indica al cornpilador el nombre de la función por el que ésta será invocada en el programa. Si la función no se define, el cornpilador informa de un error. La palabra reservada void significa que la función no devuelve un valor.

void caracter);

La definición de una función es la estructura de la misma:

t ipo- re t orn o nombre- f un ci s t ráme t r o s principio de la

sen t en ci as cuerpo de la función

return; retorno de lafunción

de

t ipo- re t Es el tipo de valor, o void, devuelto por la función

nombre- f un Nombre de la función

1 Lista de parámetros, o void, pasados a la función. Se conoce también como de la función o argumentos formales.

C proporciona también funciones predefinidas que se denominan funciones de biblioteca. Las funciones de biblioteca son funciones listas para ejecutar que vienen con el lenguaje Requieren la inclusión del archivo de cabecera estándar, tal como S T D I O

.

MATH. H, etc. Existen centenares de funciones definidas en diversos archivos de cabecera.

/ * ejemplo funciones definidas por el usuario #include void main visualizar j return O ; void printf "primeros

Los programas C constan

main función main

.

p a s o s en

de un conjunto de funciones que normalmente están controladas por la

. . .

obtenerdatos

. . .

alfabetizar

. . .

80 Programación en Metodología, algoritmos y estructura de datos

3.1.5.

Un comentario es cualquier información que se añade a su archivo fuente para proporcionar documenta- ción de cualquier tipo. El compilador ignora los comentarios, no realiza ninguna tarea concreta. El uso de comentarios es totalmente opcional, aunque dicho uso es muy recomendable.

Generalmente, se considera buena práctica de programación comentar su archivo fuente tanto como sea posible, al objeto de que usted mismo y otros programadores puedan leer fácilmente el programa con el paso de tiempo. Es buena práctica de programación comentar su programa en la parte superior de cada archivo fuente. La información que se suele incluir es el nombre del archivo, el nombre del programador, una breve descripción, la fecha en que se creó la versión y la información de la revisión. Los comentarios en C estándar comienzan con la secuencia * y terminan con la secuencia * /. Todo el texto situado entre las dos secuencias es un comentario ignorado por el compilador.

PRUEBA1.C - Primer programa C * /

Si se necesitan varias líneas de programa se puede hacer lo siguiente: / *

Programa : PRUEBA1.C

Programador : Pepe Mortimer

Descripción : Primer programa C

Fecha creación : Septiembre 2000

: Ninguna

También se pueden situar comentarios de la forma siguiente:

scanf , / * sentencia de de un valor entero*/

Ejemplo 3.1

Supongamos que se ha de imprimir su nombre dirección muchas veces en su programa El sistema normal es teclear las líneas de texto cuantas veces sea necesario; sin embargo, el método más rápido sería escribir el códigofuente correspondiente una vez a continuación grabar un archivo

c,

de modo que para incluir el código sólo necesitará incluir en su programa la línea #include

Es decir, teclee las siguientes líneas y grábelas en un archivo denominado C / * archivo * /

printf "Luis Joyanes

printf "Avda de Andalucía, printf "Carchelejo,

printf "Andalucía, El programa siguiente:

nombre del archivo

ilustra el uso de #include

* /

#include int

El lenguaje C: elementos básicos 81

return O ;

equivale a

/ * nombre del archivo

ilustra el de #include * / #include int main print f print f print f printf return "Luis Joyanes ; "Avda de Andalucía, 'Carchelejo, ; "Andalucía, ; Ejemplo

3.2

El siguiente programa copia un mensaje en un array de caracteres lo imprime en la pantalla. Ya que strcpy (una función de cadena) se utilizan, se necesitan sus archivos de cabecera / * nombre del archivo demoinc2.c

* /

#include #include

utiliza dos archivos de cabecera

int m a i n 0 char mensaje

strcpy (mensaje, ;

/ * Las dos líneas anteriores también se pueden sustituir por * /

return O ;

char

Los

archivos de cabecera

en

C tienen normalmente una extensión

.

h

y

los archivos fuente, la extensión

.

3.2.

DE UN PROGRAMA

Una vez creado un programa en C como el anterior, se debe ejecutar. realizar esta tarea? Los pasos a dar dependerán del compilador C que utilice. Sin embargo, serán similares a los mostrados en la Figura 3.2. En general, los pasos serían:

82 Programación en Metodología, algoritmos y estructura de datos

Utilizar un editor de texto para escribir el progratna y grabarlo en un archivo. Este archivo constituye el códigofuente de un programa.

Compilar el código fuente. Se traduce el código fuente en un objeto (extensión . ob ) (lenguaje máquina entendible por la computadora). Un archivo objeto contiene instrucciones en lenguaje máquina que se pueden ejecutar por una computadora. Los archivos estándar C y los de cabecera definidos por el usuario son incluidos (#include) en su código fuente por el preprocesador. Los archivos de cabecera contienen información necesaria para la compilación, como es el caso de que contiene información y de

Enlazar el código objeto con las bibliotecas correspondientes. Una biblioteca C contiene código objeto de una colección de rutinas que realizan tareas, como visualizar informaciones en la pantalla o calcular la raíz cuadrada de un número. El enlace del código objeto del programa con el objeto de las funciones utilizadas y cualquier otro código empleado en el enlace, producirá un código ejecutable. Un programa C consta de un número diferente de archivos objeto y archivos biblioteca. fuente I I Compilador Archivo cabecera I I Código objeto Bibliotecas Enlazador I I Código ejecutable I

Figura 3.2. Etapas de creación de un programa

Para crear un programa se utilizan las siguientes etapas: Definir su programa.

2. Definir directivas del preprocesador. 3 . Definición de declaraciones globales. 4. Crear main

.

5 . Crear el cuerpo del programa.

6. Crear sus propias funciones definidas por el usuario. 7. Compilar, enlazar, ejecutar y comprobar su programa.

8. Utilizar comentarios.

3.3. EL PROCESO DE EJECUCIÓN DE UN PROGRAMA E N C

Un programa de computadora escrito en un lenguaje de programación (por ejemplo, C ) tiene forma de un texto ordinario. Se escribe el programa en una hoja de papel y a este programa se le denomina

El lenguaje elementos básicos

83

#include int main()

de circunferencia de radio 5: return O ;

La primera operación en el proceso de ejecución de un programa es introducir las sentencias (instrucciones) del programa con un editor de texto. El editor almacena el texto y debe proporcionarle un nombre tal como area. Si la ventana del editor le muestra un nombre tal como c, es conveniente cambiar dicho nombre (por ejemplo, por area. c). A continuación se debe guardar el texto en disco para su conservación y uso posterior, ya que en caso contrario el editor sólo almacena el texto en memoria central (RAM) y cuando se apague la computadora, o bien ocurra alguna anomalía, se perderá el texto de su programa. Sin embargo, si el texto del programa se almacena en un disquete, en un disco duro, o bien en un CD-ROM, el programa se guardará de modo permanente, incluso después de apagar la computadora y siempre que ésta se vuelva a arrancar.

La Figura 3.3 muestra el método de edición de un programa y la creación del programa en un disco, en un archivo que se denomina archivo de texto (archivo fuente). Con la ayuda de un editor de texto se puede editar el texto fácilmente, es decir, cambiar, mover, cortar, pegar, borrar texto. Se puede ver, normalmente, una parte del texto en la pantalla y se puede marcar partes del texto a editar con ayuda de un ratón o el teclado. El modo de funcionamiento de u n editor de texto y las órdenes de edición asociadas varían de un sistema a otro.

Editor de texto Texto programa archivo fuente I

Figura 3.3. Proceso de edición de un archivo fuente.

Una vez editado un programa, se le proporciona un nombre. Se suele dar una extensión al nombre (normalmente . c, aunque en algunos sistemas puede tener otros sufijos)

.

La siguiente etapa es la de compilación. En ella se traduce el código fuente escrito en lenguaje C a código máquina (entendible por la computadora). El programa que realiza esta traducción se llama cornpilador. Cada compilador se construye para un determinado lenguaje de programación (por ejemplo

C ) ; un compilador puede ser un programa independiente (como suele ser el caso de sistemas operativos como VMS, UNIX, etc.) o bien formar parte de un programa entorno integrado de desarrollo

(EID).

Los programas EID contienen todos los recursos que se necesitan para desarrollar y ejecutar un programa, por ejemplo, editores de texto, compiladores, enlazadores, navegadores y depuradores.

Cada lenguaje de programación tiene unas reglas especiales para la construcción de programas que se denomina sintaxis. El compilador lee el programa del archivo de texto creado anteriormente y

Documento similar