El lenguaje de programación C - Programación UPB

Anuncio
Unidad III
El lenguaje de programación C
1. Introducción.
2. Breve historia del C.
3. Lenguajes de programación de alto nivel, bajo
nivel y nivel medio.
4. Compiladores e intérpretes.
5. Compilación, enlace y generación de un
programa ejecutable.
6. Instalación de un compilador de C.
7. Estructura básica de un programa en C y
programa “Hola mundo”.
8. Transformación de un algoritmo en un programa
ejecutable.
Página 1
Unidad II
El lenguaje de programación C
En este capítulo se hablará de programas y lenguajes de programación. Cuando se habla de un
programa es importante tener en cuenta que se hace referencia a un programa informático y
básicamente es una secuencia de instrucciones finitas que son ejecutadas por la computadora.
Para aprovechar la velocidad de cálculo de las primeras computadoras era necesario alimentarlas
con programas. Esta tarea se realizaba directamente por medio de series de instrucciones que
estaban formadas por secuencias de ceros y unos, por ejemplo, 0100011010011101 representaba
una instrucción. Con varias de estas instrucciones se implementaba un programa para que sea
ejecutado por la computadora. Esta primera forma de especificar programas para una computadora
se la denomina lenguaje máquina ó lenguaje binario y era una tarea muy difícil de realizar y
altamente sensible a los errores.
La necesidad de recordar secuencias de programación para las acciones usuales llevó al desarrollo
de neumónicos que dispongan nombres fáciles de memorizar y asociar: ADD (sumar), SUB (restar),
MUL (multiplicar), CALL (ejecutar subrutina), etc. Los neumónicos eran las instrucciones y este
conjunto de instrucciones para especificar un programa se denominó lenguaje ensamblador.
Posteriormente aparecieron diferentes lenguajes de programación de alto nivel y de medio nivel.
Reciben esta denominación porque son más cercanos a los lenguajes naturales de los humanos y
tienen una estructura sintáctica similar.
1. Introducción
C es un lenguaje de programación estructurado, débilmente tipado y relativamente minimalista.
Uno de los objetivos de diseño de este lenguaje fue que sólo fueran necesarias unas pocas
instrucciones en lenguaje de máquina para traducir cada elemento del lenguaje, sin que hiciera
falta un soporte intenso en tiempo de ejecución. Es muy posible escribir C a bajo nivel de
abstracción; de hecho, C se usó como intermediario entre diferentes lenguajes.
En parte, a causa de ser relativamente de bajo nivel y de tener un modesto conjunto de
características, se pueden desarrollar compiladores de C fácilmente. En consecuencia, el lenguaje C
está disponible en un amplio abanico de plataformas (seguramente más que cualquier otro
lenguaje). Además, a pesar de su naturaleza de bajo nivel, el lenguaje se desarrolló para incentivar
la programación independiente de las máquinas. Un programa escrito cumpliendo los estándares e
intentando que sea portable puede compilarse en varias computadoras de diferentes tipos
(microcomputadoras, minicomputadoras, mainframes, etc.).
C se desarrolló originalmente por programadores para programadores. Sin embargo, ha alcanzado
una popularidad enorme y se ha usado en contextos muy alejados de la programación de sistemas
para la que se diseñó originalmente. En la actualidad es empleado por los programadores de élite a
nivel mundial.
Página 2
Computación para Ingenierías I
Ing. Franz Mercado Lorberg
2. Breve historia del C
C es un lenguaje de programación que fue creado en 1972 por Dennis Ritchie y Ken Thompson en
los laboratorios Bell (AT&T) en una minicomputadora DEC PDP-11 y es el resultado de la evolución
del lenguaje B (B a su vez deriva del BCPL). Fue ampliamente usado en el desarrollo de sistemas
operativos, concretamente UNIX.
Durante muchos años el estándar del lenguaje C era el que venía proporcionado en la versión V del
sistema operativo UNIX. Pero con la creciente popularidad de las microcomputadoras empezaron a
aparecer muchas variantes del lenguaje C. El problema principal fue que comenzaron a aparecer
discrepancias entre las diferentes versiones del C. Para remediar esta situación, el Instituto
Nacional de Estándares Americano (ANSI – American National Standarts Institute) estableció un
comité que se encargó de crear un estándar que definiera de una vez por todas el lenguaje C
(denominado ANSI C ó C89). En 1999 salió a la luz el último estándar de C vigente y se conoce
como C99.
3. Lenguajes de programación de alto nivel, bajo nivel y nivel medio
Los humanos nos expresamos por medio del lenguaje natural, pero las computadoras comprenden
las instrucciones en lenguaje binario. Para subsanar este hecho, se han creado diferentes lenguajes
de programación que pueden ser de diferentes niveles y sirven como lenguaje intermedio entre el
lenguaje natural y el binario.
Lenguaje natural (Español)
Lenguajes alto nivel
(Pascal, Basic, ADA, COBOL, FORTRAN)
Lenguajes de nivel medio
(C, C++, FORTH)
Lenguajes de bajo nivel
(Assembler)
Lenguaje binario
Los lenguajes de alto nivel son lentos pero más fáciles de aprender. Los lenguajes de bajo nivel son
muy rápidos pero tienen un alto grado de complejidad.
Lenguajes de alto nivel
Son más cercanos al lenguaje natural que empleamos los humanos. Están compuestos por
construcciones similares al inglés (parecidos al pseudocódigo de la unidad 2 vista anteriormente).
Página 3
Unidad II
El lenguaje de programación C
Ej. En lenguaje Pascal:
if ( Contador = 5 ) then
writeln('La suma de los primeros 5 enteros es: ', Sumatoria);
else
writeln('No se ha podido calcular el resultado');
En este ejemplo las instrucciones dicen: “Si el contador es igual a 5 mostrar en la pantalla La suma
de los primeros 5 enteros es: (el contenido de Sumatoria), sino mostrar en la pantalla No se ha
podido calcular el resultado”.
Lenguajes de bajo nivel
Son más cercanos al lenguaje binario que emplea la computadora. Las instrucciones hacen
referencia a los componentes internos de la computadora (registros del microprocesador,
direcciones de memoria).
Ej. En lenguaje Assembler:
MOV AX, 0F79
ADD AX, 1
MOV DS, AX
En este ejemplo las instrucciones dicen: “Cargar el registro AX con el valor contenido en la dirección
0F79 (AX es el registro del acumulador donde se realizan las operaciones aritméticas). Adicionar 1
al contenido del registro AX. Mover el contenido del registro AX al registro DS (Data Segment)”.
Como puede apreciar, Assembler es difícil de entender porque se deben conocer: La estructura
interna del microprocesador, la manera como se acceden a los datos, la forma como se almacenan
los datos en la memoria. Otra gran desventaja del Assembler es que el código es dependiente de la
plataforma para la cual se desarrolla el programa.
Lenguajes de medio nivel
C es un lenguaje de nivel medio pero esto no significa que sea mediocre. En realidad significa que
aprovecha las características de los lenguajes de alto nivel (similares al lenguaje natural) y también
las características del bajo nivel (acceso a direcciones de memoria, manejo de datos a nivel de
bits), entonces el lenguaje C aplica lo mejor de ambos mundos.
Ej. En lenguaje C:
Contador = 1;
printf("La tabla del 7 es:\n");
while( Contador <= 10 )
{
printf("%i por %i es %i", 7, Contador, 7 * Contador );
Contador = Contador + 1;
}
En este ejemplo las instrucciones dicen: “Asignar 1 a Contador. Mostrar en la pantalla La tabla del 7
es:. Mientras el Contador sea menor o igual a 10 repetir: Mostrar en la pantalla 7 por (el contenido
de Contador) es (calcular 7 * el contenido de Contador)”. Incrementar el contador en 1 unidad.
Página 4
Computación para Ingenierías I
Ing. Franz Mercado Lorberg
4. Compiladores e intérpretes
Un compilador (compiler) es un programa especial que se encarga de traducir el código fuente
escrito en un lenguaje de programación y convertirlo en código binario para la computadora. El
proceso de compilación en dos etapas se encarga de revisar todo el código fuente y revisa que no
contenga errores léxicos, sintácticos ni semánticos. Si todo se encuentra en orden genera un código
intermedio que se denomina código objeto que aún no es ejecutable.
Un intérprete (interpreter) es otro programa que tiene el mismo propósito que el compilador:
Traducir las instrucciones escritas en un lenguaje de programación a binario. El intérprete va
interpretando cada instrucción a medida que se la va introduciendo y no requiere de dos etapas,
sin embargo es más lento que el compilador en la generación del ejecutable.
5. Compilación, enlace y generación de un programa ejecutable
Después de compilar el código fuente se obtiene un producto intermedio que es el código objeto.
En este punto es necesario realizar una etapa más para generar el programa ejecutable y este paso
lo lleva adelante el enlazador.
Un enlazador (linker) es un programa que se encarga de unir el código objeto generado por el
compilador con las librerías ó bibliotecas del lenguaje de programación. El resultado de este enlace
es el programa ejecutable.
Las librerías ó bibliotecas de un lenguaje de programación son funciones y procedimientos que se
pueden emplear para desarrollar los programas más rápidamente. Por lo general contienen
instrucciones que permiten realizar las tareas más comunes de programación (introducir datos
desde teclado, mostrar datos en la pantalla, realizar cálculos por medio de funciones, etc.).
6. Instalación de un compilador de C
En este curso se desarrollarán las habilidades básicas e intermedias de programación con el
lenguaje C. No es necesario que se utilice un compilador de C específico, puede emplear cualquier
compilador de C que pueda conseguir.
Importante: Acceda al sitio www.programacionupb.freeservers.com y descargue de la
página Principal el compilador Turbo C++ y el Tutorial de instalación del Turbo C++. Siga
las instrucciones del tutorial para instalar este pequeño pero potente entorno de desarrollo
integrado (IDE).
Página 5
Unidad II
El lenguaje de programación C
7. Estructura básica de un programa en C y programa “Hola mundo”
El programa “Hola mundo” es el código fuente mínimo que se aprende para empezar a programar y
se utiliza para entender cuáles son los elementos fundamentales para escribir un programa básico.
#include <stdio.h>
int main( )
{
printf("Hola mundo…");
return 0;
}
Recuerde que para empezar a desarrollar un programa en C se requiere de una ó más funciones,
siendo obligatoria la función denominada main( ). La llave de apertura significa inicio y la llave de
cierre significa fin.
int main( )
{
}
Es posible que vea diferentes variaciones en la manera en la que se escribe la función main( ),
el significado real de estas variaciones se discutirá en la próxima unidad:
Ej. Variantes de main( ):
void main( )
{
}
int main( )
{
return 0;
}
int main( int argc, char *argv[] )
{
return 0;
}
La función printf( ) se emplea para mostrar un texto en la pantalla. El texto debe estar entre
comillas dobles. Para utilizar printf( ) es necesario incluir el archivo de cabecera stdio.h que se
encargará de enlazarse con la biblioteca correspondiente.
Página 6
Computación para Ingenierías I
Ing. Franz Mercado Lorberg
8. Transformación de un algoritmo en un programa ejecutable
El proceso completo para la creación de un programa ejecutable se puede resumir en la siguiente
imagen que consta de una serie de etapas:
Problema Algoritmo Flujograma Pseudocódigo Lenguaje de programación Código fuente Compilación (compiler) Código objeto Bibliotecas Enlace (linker) Programa ejecutable Al igual que en los flujogramas y pseudocódigos, el lenguaje de programación C tiene palabras
reservadas que se encargan de controlar el flujo de los datos. También consta de un conjunto de
funciones para introducir datos dentro de variables, mostrar el contenido de las variables, mostrar
textos. Ejecutar operaciones aritméticas, lógicas y de comparación. Por lo tanto, es posible migrar
los algoritmos desarrollados en la unidad 2 y transformarlos en código fuente. Este código fuente
después de ser compilado y enlazado producirá un programa ejecutable.
Página 7
Descargar