Programacion En C
ciberboy19882 de Septiembre de 2012
11.166 Palabras (45 Páginas)483 Visitas
Cap´ıtulo 1
Introducci´on a C
Hab´ıa un libro junto a Alicia, en la mesa; y mientras permanec´ıa sentada observando al
Rey Blanco [. . . ], pasaba las hojas para ver si encontraba alg´un trozo que poder leer:
((. . . Porque est´a todo en una lengua que no entiendo)), se dijo.
Estaba as´ı:
JERIG ´ONDOR
Cocillaba el d´ıa y las tovas agilimosas
giroscopaban y barrenaban en el larde.
Todo devirables estaban los burgovos,
y silbramaban las alecas rastas.
Durante un rato, estuvo contemplando esto perpleja; pero al final se le ocurri´o una
brillante idea. ¡Ah, ya s´e!, ¡es un libro del Espejo, naturalmente! Si lo pongo delante de
un espejo, las palabras se ver´an otra vez del derecho.
Lewis Carroll, Alicia en el Pa´ıs de las Maravillas.
El lenguaje de programaci´on C es uno de los m´as utilizados (si no el que m´as) en la programaci´on
de sistemas software. Es similar a Python en muchos aspectos fundamentales: presenta las
mismas estructuras de control (selecci´on condicional, iteraci´on), permite trabajar con algunos
tipos de datos similares (enteros, flotantes, secuencias), hace posible definir y usar funciones,
etc. No obstante, en muchas otras cuestiones es un lenguaje muy diferente.
C presenta ciertas caracter´ısticas que permiten ejercer un elevado control sobre la eficiencia
de los programas, tanto en la velocidad de ejecuci´on como en el consumo de memoria, pero
a un precio: tenemos que proporcionar informaci´on expl´ıcita sobre gran cantidad de detalles,
por lo que generalmente resultan programas m´as largos y complicados que sus equivalentes en
Python, aumentando as´ı la probabilidad de que cometamos errores.
En este cap´ıtulo aprenderemos a realizar programas en C del mismo ((nivel)) que los que
sab´ıamos escribir en Python tras estudiar el cap´ıtulo 4 del primer volumen. Aprenderemos,
pues, a usar variables, expresiones, la entrada/salida, funciones definidas en ((m´odulos)) (que
en C se denominan bibliotecas) y estructuras de control. Lo ´unico que dejamos pendiente de
momento es el tratamiento de cadenas en C, que es sensiblemente diferente al que proporciona
Python.
Nada mejor que un ejemplo de programa en los dos lenguajes para que te lleves una primera
impresi´on de cu´an diferentes son Python y C. . . y cu´an semejantes. Estos dos programas, el
primero en Python y el segundo en C, calculan el valor de
Xb
i=a
p
i
para sendos valores enteros de a y b introducidos por el usuario y tales que 0 a b.
Introducci´on a la Programaci´on con C 1
Introducci´on a C 2004/02/10-16:33
sumatorio.py sumatorio.py
1 from math import *
2
3 # Pedir l´ımites inferior y superior.
4 a = int(raw_input(’L´ımite inferior:’))
5 while a < 0:
6 print ’No puede ser negativo’
7 a = int(raw_input(’L´ımite inferior:’))
8
9 b = int(raw_input(’L´ımite superior:’))
10 while b < a:
11 print ’No puede ser menor que %d’ % a
12 b = int(raw_input(’L´ımite superior:’))
13
14 # Calcular el sumatorio de la ra´ız cuadrada de i para i entre a y b.
15 s = 0.0
16 for i in range(a, b+1):
17 s += sqrt(i)
18
19 # Mostrar el resultado.
20 print ’Sumatorio de ra´ıces’,
21 print ’de %d a %d: %f’ % (a, b, s)
sumatorio.c sumatorio.c
1 #include <stdio.h>
2 #include <math.h>
3
4 int main(void)
5 {
6 int a, b, i;
7 float s;
8
9 /* Pedir l´ımites inferior y superior. */
10 printf ("L´ımite inferior:");
11 scanf ("%d", &a);
12 while (a < 0) {
13 printf ("No puede ser negativon");
14 printf ("L´ımite inferior:");
15 scanf ("%d", &a);
16 }
17
18 printf ("L´ımite superior:");
19 scanf ("%d", &b);
20 while (b < a) {
21 printf ("No puede ser menor que %dn", a);
22 printf ("L´ımite superior:");
23 scanf ("%d", &b);
24 }
25
26 /* Calcular el sumatorio de la ra´ız cuadrada de i para i entre a y b. */
27 s = 0.0;
28 for (i = a; i <= b; i++) {
29 s += sqrt(i);
30 }
31
32 /* Mostrar el resultado. */
33 printf ("Sumatorio de ra´ıces ");
34 printf ("de %d a %d: %fn", a, b, s);
35
36 return 0;
37 }
En varios puntos de este cap´ıtulo haremos referencia a estos dos programas. No los pierdas
2 Introducci´on a la Programaci´on con C
c 2003 Andr´es Marzal e Isabel Gracia 1 Introducci´on a C
de vista.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
· 1 Compara los programas sumatorio.py y sumatorio.c. Analiza sus semejanzas y diferencias.
¿Qu´e funci´on desempe˜nan las llaves en sumatorio.c? ¿Qu´e funci´on crees que desempe˜nan
las l´ıneas 6 y 7 del programa C? ¿A qu´e elemento de Python se parecen las dos primeras l´ıneas
de sumatorio.c? ¿Qu´e similitudes y diferencias aprecias entre las estructuras de control de
Python y C? ¿C´omo crees que se interpreta el bucle for del programa C? ¿Por qu´e algunas
l´ıneas de sumatorio.c finalizan en punto y coma y otras no? ¿Qu´e diferencias ves entre los
comentarios Python y los comentarios C?
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Un poco de historia
C ya tiene sus a˜nitos. El nacimiento de C est´a estrechamente vinculado al del sistema operativo
Unix. El investigador Ken Thompson, de AT&T, la compa˜n´ıa telef´onica estadounidense,
se propuso dise˜nar un nuevo sistema operativo a principios de los setenta. Dispon´ıa de un
PDP-7 en el que codific´o una primera versi´on de Unix en lenguaje ensamblador. Pronto se
impuso la conveniencia de desarrollar el sistema en un lenguaje de programaci´on de alto
nivel, pero la escasa memoria del PDP-7 (8K de 18 bits) hizo que ideara el lenguaje de
programaci´on B, una versi´on reducida de un lenguaje ya existente: BCPL. El lenguaje C
apareci´o como un B mejorado, fruto de las demandas impuestas por el desarrollo de Unix.
Dennis Ritchie fue el encargado del dise˜no del lenguaje C y de la implementaci´on de un
compilador para ´el sobre un PDP-11.
C ha sufrido numerosos cambios a lo largo de su historia. La primera versi´on ((estable))
del lenguaje data de 1978 y se conoce como ((K&R C)), es decir, ((C de Kernighan y Ritchie)).
Esta versi´on fue descrita por sus autores en la primera edici´on del libro ((The C Programming
Language)) (un aut´entico ((best-seller)) de la inform´atica). La adopci´on de Unix como sistema
operativo de referencia en las universidades en los a˜nos 80 populariz´o enormemente el
lenguaje de programaci´on C. No obstante, C era atractivo por s´ı mismo y parec´ıa satisfacer
una demanda real de los programadores: disponer de un lenguaje de alto nivel con ciertas
caracter´ısticas propias de los lenguajes de bajo nivel (de ah´ı que a veces se diga que C es
un lenguaje de nivel intermedio).
La experiencia con lenguajes de programaci´on dise˜nados con anterioridad, como Lisp o
Pascal, demuestra que cuando el uso de un lenguaje se extiende es muy probable que proliferen
variedades dialectales y extensiones para aplicaciones muy concretas, lo que dificulta
enormemente el intercambio de programas entre diferentes grupos de programadores. Para
evitar este problema se suele recurrir a la creaci´on de un comit´e de expertos que define la
versi´on oficial del lenguaje. El comit´e ANSI X3J9 (ANSI son las siglas del American National
Standards Institute), creado en 1983, considera la inclusi´on de aquellas extensiones y mejoras
que juzga de suficiente inter´es para la comunidad de programadores. El 14 de diciembre
de 1989 se acord´o qu´e era el ((C est´andar)) y se public´o el documento con la especificaci´on
en la primavera de 1990. El est´andar se divulg´o con la segunda edici´on de ((The C Programming
Language)), de Brian Kernighan y Dennis Ritchie. Un comit´e de la International
Standards Office (ISO) ratific´o el documento del comit´e ANSI en 1992, convirti´endolo as´ı
en un est´andar internacional. Durante mucho tiempo se conoci´o a esta versi´on del lenguaje
como ANSI-C para distinguirla as´ı del K&R C. Ahora se prefiere denominar a esta variante
C89 (o C90) para distinguirla de la revisi´on que se public´o en 1999, la que se conoce por
C99 y que es la versi´on est´andar de C que estudiaremos.
C ha tenido un gran impacto en el dise˜no de otros muchos lenguajes. Ha sido, por
ejemplo, la base para definir
...