01 - introducción al lenguaje c

47
1 01 – Introducción al lenguaje C Diego Andrés Alvarez Marín Profesor Asociado Universidad Nacional de Colombia Sede Manizales

Upload: diego-andres-alvarez-marin

Post on 12-Jul-2015

119 views

Category:

Software


3 download

TRANSCRIPT

1

01 – Introducción al lenguaje C

Diego Andrés Alvarez MarínProfesor Asociado

Universidad Nacional de ColombiaSede Manizales

Arquitectura de un computador● Procesador (CPU, memoria caché)● Buses de datos (son las flechas en el dibujo)● Memoria (de corto y largo plazo)● Periféricos (entrada, salida)

Sistemas operativos

● Microsoft Windows● GNU/Linux (y su hijo Android)● Mac OS X● iOS● Unix● Solarix● FreeBSD● BlackBerry OS

Estadísticas a Junio 2013 con respecto al uso de sistemas operativos en los 500 computadores

más poderosos del planeta

Fuente: http://top500.org/statistics/list/

GNU/Linux

¿Quiere instalar GNU/Linux?

Si está interesado en instalar GNU/Linux, le recomiendo instalar la distribución Linux Mint (con el escritorio KDE):

http://www.linuxmint.com/

Se recomienda hacerlo inicialmente dentro de una máquina virtual:

https://www.youtube.com/results?search_query=install+linux+mint+14+virtualbox

Bytes

Lenguajes de programación● De máquina: unos y ceros que entiende el

procesador● De bajo nivel: es aquel en el que sus

instrucciones ejercen un control directo sobre el hardware y están condicionados por la estructura física de la computadora que lo soporta.

● De nivel intermedio● De alto nivel: expresan los algoritmos de una

manera adecuada a la capacidad cognitiva humana, en lugar de a la capacidad ejecutora de las máquinas.

Lenguaje de máquina

Lenguaje de máquina del Intel 8088. El código de máquina en hexadecimal se resalta en rojo, el equivalente en lenguaje assembler en magenta, y las direcciones de memoria donde se encuentra el código, en azul. Abajo se ve un texto en hexadecimal y ASCII.

Lenguaje de bajo nivel

Ventajas:

● Máximo aprovechamiento de los recurso de la máquina.

● Máxima velocidad posible.

● Mínima portabilidad (depende de la máquina)

Desventajas:

● Requiere de la máxima atención y de una organización estructurada en base a los planos del hardware y del objetivo del software.

● Largo tiempo de desarrollo

● Difícil encontrar errores

Lenguaje ensamblador

Lenguaje de nivel intermedio

Lenguajes de alto nivel

Ventajas● Genera un código más sencillo y comprensible.● Escribir un código válido para diversas máquinas y,

posiblemente, sistemas operativos.

Inconvenientes● Reducción de velocidad al ceder el trabajo de bajo

nivel a la máquina.● Algunos requieren que la máquina cliente posea una

determinada plataforma.

Lenguaje de alto nivel

Visual Basic for Applications: Alt+F11 en MS EXCEL

Lenguaje C

● Desarrollado por Dennis Ritchie en AT&T Bell Labs entre 1969 y 1973

● Es el lenguaje de programación más utilizado en la actualidad:

http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

● Muy rápido, eficiente, fácil● Permite el acceso de bajo nivel a la máquina

pero permite programación de alto nivel

Dennis Ritchie (1941-2011)

Historia del lenguaje C

1973: invención por Dennis Ritchie

1978: primera especificación (K&R C: Dennis Ritchie and Brian Kernighan)

1989: aparece el ANSI C (standard ANSI C89: el más usado en la actualidad)

1990: ANSI C adoptado por la ISO (standard C90). Nota C89 y C90 son los mismos

1999: standard ISO C99

No está completamente implementado en muchos compiladores

2011: standard ISO C11

Características del lenguaje C● Pocas palabras clave (27+5+5+7)● Utilizado para desarrollar sistemas operativos● Utilizado para programar desde

microcontroladores hasta supercomputadores● Lenguaje compilado● Lenguaje de nivel medio-bajo● Permite el acceso “bajo” a la memoria del

computador

K&R C89 C99 C11

Palabras clave

FUENTE: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

C vs otros lenguajes (Febrero 2014)

Lenguaje C vs otros lenguajes

● Es un subconjunto de C++ y de Objective-C● Influenció: C#, Java, Perl, PHP, Python

http://en.wikipedia.org/wiki/List_of_C-based_programming_languages

Carece de:● excepciones● chequeo de rangos● colección de basura (garbage collection)● programación orientada a objetos

¿Por qué C yno MATLAB?

Tomado de: http://xkcd.com/409/

Creando código en C

● Se utiliza cualquier editor de texto● Extensión .c para los archivos fuente● Extensión .h para los archivos encabezado

Compiladores

Un compilador es un programa que permite traducir el código fuente de un programa en lenguaje de alto nivel, a otro lenguaje de nivel inferior (típicamente lenguaje de máquina).

De esta manera un programador puede diseñar un programa en un lenguaje mucho más cercano a como piensa un ser humano, para luego compilarlo a un programa más manejable por una computadora.

Compiladores de lenguaje C

● GNU compiler collection: gcc (MinGW, Cygwin)

● Intel C++ compiler● Open Watcom● (Borland) Turbo C● Microsoft Visual C++ (solo soporta el C89)

Y muchos otros:

http://en.wikipedia.org/wiki/Category:C_compilers

Utilizaremos el gcc en el curso

El compilador MinGWhttp://mingw.org/

● Es una versión nativa para Windows del compilador GNU Compiler Collection (GCC)

● Este es el compilador que viene por defecto en el Code::Blocks

● Se debe tener en cuenta que es un compilador de 32 bits

● Su variante para 64 bits es el MinGW-64, el cual se puede descargar de:

http://mingw-w64.sourceforge.net/

Lenguaje interpretado vs

Lenguaje compilado

Los lenguajes compilados son lenguajes de alto nivel en los que el código fuente se traduce a lenguaje de máquina para una ejecución rápida. Ejemplo: Lenguaje C/C++

Un lenguaje interpretado es aquel en el que las instrucciones se traducen o interpretan una a una siendo típicamente unas 10 veces más lentos que los programas compilados: Ejemplo: MATLAB, Python, VisualBasic

Entorno de desarrollo integrado(IDE Integrated Development Environment)

Un IDE es un entorno de programación que ha sido empaquetado como un programa de aplicación; es decir, consiste en:● un editor de código● un compilador● un depurador● un constructor de interfaz gráfica (GUI)

IDEs para C/C++

● Anjuta

● Code::Blocks (utilizaremos este durante el curso)

● CodeLite

● Dev-C++

● Eclipse

● KDevelop

● NetBeans (si usted tiene un Mac, utilizará este durante el curso)

● Visual Studio Express

● wxDev-C++

Anjuta

Dev C++

Code::Blocks

Eclipse

KDevelop

Netbeans

Nuestro primer programa

Compilando y ejecutando...

En Windows se debe agregar “.exe”

Linux/Mac OS:

Windows:

Estructura de un programa en C

Contiene:● Encabezados● Librerias #include● Prototipos de funciones● Declaración de constantes y variables globales● Función main()● Otras funciones

Encabezado

Inclusión de librerías

Prototipos de funciones

Declaración de constantes y variablesglobales

Función main()

Definición de las funciones

Comentarios

Son ignorados por el compilador

Pueden aparecer en cualquier lugar del código

Forma de comentario autorizada en el standard C99

La directiva del compilador #include

Sirve para cargar textualmente el archivo nombrado en el código actual (generalmente un archivo de encabezado .h)

#include <miarchivo> busca ''miarchivo'' en los "include paths" (/usr/include o directiva -L)

#include ”miarchivo” busca ''miarchivo'' en el subdirectorio actual

Se supone que "miarchivo" contiene constantes, funciones, y otras declaraciones

Subdirectorio actualGNU/Linux: /usr/includeWindows: C:\MinGW\include

assert.hcomplex.hcurses.hlimits.hlocale.hmath.hmiarchivo.h

stdio.hstdlib.hstderr.hthread.htime.hunistd.h

miarchivo.h

programa1.c

programa2.c

#include “miarchivo.h”

int main(void){

…….return 0;

}

programa1.c

#include <miarchivo.h>

int main(void){

…….return 0;

}

programa2.c

Observe que ambos archivos están en el mismo subdirectorio

Declaración de variables

Las variables se deben declarar antes de usar:

La función main()

Es el punto de entrada del programa

El standard C permite los siguiente formas de invocar a main():

Bibliografía

http://www.slideshare.net/amraldo/introduction-to-c-programming-7898353