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.
73Programació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ándarLa 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 esel
«programa que no hace nada. advertenciasi
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 usuariopara 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
main3.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 sentenciases un
devuelve un
únicovalor, 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 #includeEs 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 cabeceraen
C tienen normalmente una extensión.
hy
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