Anda di halaman 1dari 14

UNIVERSIDAD DE EL SALVADOR

FACULTAD DE INGENIERA Y ARQUITECTURA


ESCUELA DE INGENIERA ELCTRICA
INTRODUCCIN A LA INFORMTICA
G U A No. 5
ANSI C:
PEQUEO PERO ROBUSTO
Profesores: Ing. Walter Zelaya y Carlos Pocasangre
Gua No. 5 UES CICLO I 2014 1/14
Introduccin.
El lenguaje C es uno de los ms rpidos y potentes que hay hoy en da. Algunos dicen que est desfasado y que
el futuro es Java. No se si tendr futuro pero est claro que presente si tiene. No hay ms que decir que el
sistema operativo Linux est desarrollado en C en su prctica totalidad. As que creo que no slo no perdemos
nada aprendindolo sino que ganamos mucho. Para empezar nos servir como base para aprender C++ e
introducirnos en el mundo de la programacin Windows. Si optamos por Linux existe una biblioteca llamada
gtk (o librera, como prefieras) que permite desarrollas aplicaciones estilo Windows con C.
No debemos confundir C con C++, que no son lo mismo. Se podra decir que C++ es una extensin de C. Para
empezar en C++ conviene tener una slida base de C.
Objetivos.
Conocer algunos detalles de los orgenes de C as como sus caractersticas mas notables que lo hace uno
de los lenguajes ms potentes y eficiente.
Escribir algunos pequeos programas que permitan evaluar los comandos y directivas necesarias para la
correcta compilacin y ejecucin de cdigos.
Referencia terica.
Caractersticas del lenguaje
El C se encuentra en la jerarqua de lenguajes en un nivel intermedio entre Pascal y el Ensamblador. Pretende
ser un lenguaje de alto nivel con la versatilidad del bajo nivel.
Se dise junto con el sistema operativo UNIX y est muy orientado a trabajar en su entorno. En su desarrollo
se siguieron una serie de lneas generales tales como:
El compilador debe ser lo ms pequeo y eficiente posible. Pocas palabras reservadas, esto es, un conjunto
reducido de sentencias. No existe anidamiento de procedimientos.
La entrada/salida no se considera parte del lenguaje en s, sino que se suministra a travs de funciones de
librera. La misma poltica se sigue con cualquier otro tipo complejo de instrucciones.
Para escribir un programa se debe poder escribir poco texto. Para lograr esto se reduce el nmero de palabras
claves.
Con ello se lleg a un compilador con un poderoso juego de instrucciones, que permite aumentar la
productividad/da de los programadores.
A pesar de ello el C es un lenguaje rpido de aprender, que deriva en compiladores sencillos de disear,
robustos, y que generan objetos pequeos y eficientes.
Gua No. 5 UES CICLO I 2014 2/14
Una de las caractersticas ms apreciadas de C es su gran portabilidad, gracias a que deja en manos de libreras
las funciones dependientes de la mquina, y todo ello sin restringir el acceso a dicha mquina!
Estas y otras caractersticas lo hacen adecuado para la programacin en reas tales como:
programacin de sistemas
estructuras de datos y sistemas de bases de datos
aplicaciones cientficas
software grfico
anlisis numrico
En la siguiente tabla se muestra la sintaxis de algunas expresiones algebraicas, por supuesto que de igual
importancia son las operaciones lgicas, de asignacin, etc., de las cuales tambin debemos conocer su sintaxis.
No se debe olvidar que existe un orden de prioridades sobre las operaciones aritmticas. La siguiente tabla lo
muestra.
Gua No. 5 UES CICLO I 2014 3/14
Operador(es) Operacin(es) Orden de evaluacin (procedencia)
* Multiplicacin
Se evalan primero. Si hay muchas, se evalan
de izquierda a derecha
/ Divisin
% Mdulo
+ Suma
Resta
Se evalan despus. Si hay muchas, se evalan
de izquierda a derecha
Operacin en C
Operador
aritmtico
Expresin Algebraica Expresin en C
Suma + f + 7 f + 7
Resta p c p c
Multiplicacin * bm b * m
Divisin / x / y o
x
y
o xy x / y
Mdulo % r mod s r % s
Antecedentes Histricos del C

El lenguaje C fue inventado e implementado por primera vez en 1970 en AT&T por Dennis Ritchie en un DEC
PDP-11 usando Unix como Sistema Operativo. C es el resultado de un proceso de desarrollo comenzando con
un lenguaje anteriormente denominado BCPL, que aun hay quien lo usa principalmente en Europa.
Por qu el nombre de C? Por la influencia que tuvo del lenguaje B, BCPL fue desarrollado por Martin Richards
e influenciado por B inventado en Bell Labs. por Ken Thompson. En los aos 70s el lenguaje B llevo al
desarrollo de C.
La versin original de C fue popularizada por el libro clsico "El Lenguaje de Programacin C" por Brian
Kernighan y Dennis Ritchie. Durante muchos aos el Estndar de C fue realmente la versin proporcionada con
la versin 5 del Sistema Operativo Unix. Con la popularidad de las Microcomputadoras se crearon muchas
implementaciones de C, pero en realidad, como no exista ningn estndar aparecieron muchas discrepancias.
Para Remediar la situacin, el Instituto de Estndares Americano (ANSI) estableci un comit a principios del
verano de 1983 para crear el estndar que definiera de una vez por todas al lenguaje C. La definicin resultante,
el estndar ANSI o " ANSI C " que se esperaba fuera aprobada a fines de 1988.
La mayora de las caractersticas del estndar ya se encuentran soportadas por compiladores modernos. Uno de
los propsitos del estndar fue asegurar que la mayora de los programas existentes pudiesen permanecer validos
o, al menos, que las computadoras pudieran producir mensajes de advertencia acerca de nuevos
comportamientos.
Una segunda contribucin significativa del estndar es la definicin de una biblioteca que acompae a C, la cual
especifica funciones para tener acceso al Sistema Operativo (por ejemplo leer archivos, escribir en ellos etc.)
E/S con formato, asignacin de memoria, manipulacin de cadenas y otras actividades semejantes, una
coleccin de headers estndar proporcionan un acceso uniforme a las declaraciones de funciones y tipos de
datos.
La mayor parte de las bibliotecas esta estrechamente modelada con base en la biblioteca estndar del sistema
Unix. BCPL y B son lenguajes "carentes de tipos". En contraste, C proporciona una variedad de tipos de datos.
Los tipos de datos fundamentales son caracteres, enteros y nmeros de punto flotante de varios tamaos.
Adems existe una jerarqua de tipo de datos derivados, creados con apuntadores, arreglos, estructuras y
uniones. Las expresiones se forman a partir de operadores y operandos, cualquier expresin, incluyendo una
asignacin o una llamada a funcin, puede ser una proposicin. Los apuntadores proporcionan una aritmtica de
direcciones independiente de la maquina.

El lenguaje C proporciona las construcciones fundamentales de control de flujo que se requieren en programas
bien estructurados: Agrupacin de proposiciones, toma de decisiones (if-else), seleccin de un caso entre un
conjunto de ellos (switch), iteracin con la condicin de paro en la parte superior (while, for) o en la parte
inferior (do) y terminacin prematura de ciclos (break).
Dentro de los cambios de C, hay uno de relevancia, en New Jersey en 1980, Bjarne Stroustrop desarrollo en Bell
Labs. a C++ o llamado tambin "C con clases", por lo que en 1983 se cambio el nombre por el de C++. Desde
entonces ha experimentado 2 revisiones de importancia, una en 1985 y otra en 1989.
Gua No. 5 UES CICLO I 2014 4/14
El propsito de C++ es extender a C para proporcionar ocultamiento de informacin y un estilo de programacin
que haga nfasis en las clases de objetos.

La compatibilidad con C, la eficiencia y la verificacin estricta en tiempo de compilacin fueron las metas
principales para el diseo de C++.
La compatibilidad con C permite que el cdigo fuente existente en C contine utilizndose. La mayora de las
implementaciones de C++ son incluso "compatibles en ligado " con C, lo cual significa que un cdigo en C++
compilado por separado puede ligarse con acervos en C ya existentes, sin necesidades de compilar de nuevo los
acervos.

Ya se destaco la eficiencia, por la cual no debe de haber ningn problema al usar C++ en lugar de C.
La similitud entre C y C++ es sin embargo engaosa, debido a que C++ requiere un mtodo de programacin
nuevo, un nuevo paradigma llamado "Orientado a Objetos" que da nuevos beneficios con el uso de las clases y
los objetos.
Stroustrup [1986] advierte: "Mientras mas se conoce a C, es mas difcil evitar escribir en C++ con estilo C, y
perder ah algunos beneficios potenciales de C++ ".
Como podr comprobar, una de las razones que motivaron al desarrollo de C++ fue la de permitirle al
programador manejar programas de una complejidad cada vez mas creciente.
Es un hecho que C++ es un superconjunto de C; por lo que la mayora de los programas de C son tambin
implcitamente programas de C++, sin embargo, hay una cuantas diferencias mnimas entre ANSI C y C++ que
impiden que pocos programas de C se puedan compilar mediante un compilador C *.c para C++ *.cpp.
Creando programas
Como en cualquier otro entorno, crear un programa bajo LINUX requiere una serie de pasos que probablemente
sean ya de sobra conocidos por el alumno:
Creacin y edicin del programa o cdigo fuente sobre un archivo de texto, empleando para ello una
herramienta denominada editor. En caso de programar en lenguaje C, el convenio es que dicho archivo
tenga extensin .c.
Compilacin del cdigo fuente mediante otra herramienta denominada compilador, generndose un
archivo objeto, que en LINUX suele tener extensin .o. A veces, en lugar de generarse el archivo
objeto directamente se genera un archivo intermedio en ensamblador (en UNIX tpicamente con
extensin .s) que a continuacin es necesario ensamblar con un ensamblador para obtener el archivo
objeto. Adems, en C existe una etapa previa a la compilacin en la que el archivo fuente pasa por otra
herramienta denominada preprocesador.
Enlazado del archivo objeto con otros archivos objeto necesarios, as como con las bibliotecas que sea
necesario para as obtener el archivo de programa ejecutable. Esta labor es llevada a cabo por un
programa denominado enlazador.
Gua No. 5 UES CICLO I 2014 5/14
Finalmente el programa puede ejecutarse tal cual o en caso de ser necesario puede ser depurado con una
herramienta denominada depurador o debugger. Si se detectan problemas, ser necesario editar el
programa fuente y corregir los fallos, reinicindose el ciclo de desarrollo hasta obtener un programa sin
errores.
El proceso anterior queda ilustrado en el siguiente diagrama:
En un sistema Linux como el empleado en el laboratorio, las herramientas clsicas encargadas de cada etapa son
las siguientes:
Editor: existe gran variedad de ellos, siendo los ms populares emacs, kwrite y vi. En el laboratorio se
recomienda el uso del editor kwrite.
Preprocesador, compilador, ensamblador y enlazador: estas herramientas pueden encontrarse de forma
individual, pero en un sistema Linux tpicamente encontramos la herramienta gcc (el compilador de C
de la y arquitectura de computadores, C++ de GNU, gcc), que se encarga de llamarlas segn se
necesiten. En cualquier caso, y aunque por lo general no las utilizaremos de forma individual, las
herramientas son:
! Preprocesador: cpp
! Compilador: gcc
! Ensamblador: as
! Enlazador: ld
Depurador: el depurador por excelencia en el entorno Linux (y en UNIX en general) es gdb.
Gua No. 5 UES CICLO I 2014 6/14
Edicin del archivo fuente
Si nos valemos del editor gedit, la forma de editar el programa ser:
user@host>> gedit programa.c
El editor vi es mucho ms potente y rpido que los editores tpicos de MS-DOS o Windows, como el Bloc de
Notas o el edit, as como de otros editores de entorno de ventanas, como gedit. Sin embargo, el uso de vi al
principio puede ser un poco frustrante, por lo que si el alumno no conoce el manejo de esta herramienta es
recomendable seguir el tutorial en los apndices de la prctica.
Una opcin muy recomendada es aadir kate (y konsole, en un entorno gnome), con esto puede tener
una visualizacin muy amplia para programadores, pues ah se incluye tanto el editor de texto como una
ventana de la terminal para compilar, enlazar y generar el archivo ejecutable del programa. El
inconveniente es la gran cantidad de recursos de memoria que consume esta aplicacin.
Gua No. 5 UES CICLO I 2014 7/14
rea de edicin de texto
terminal
Compilacin y enlazado
El programa gcc es el encargado de compilar, enlazar y generar el archivo ejecutable a partir del archivo fuente.
La forma ms sencilla de invocarlo es:
user@host>> gcc programa.c
Esta orden preprocesa, compila, ensambla y enlaza, generando el archivo de salida ejecutable a.out. Tpicamente
no queremos que esto sea as, por lo que emplearemos la opcin -o para establecer el nombre del archivo
generado:
user@host>> gcc programa.c o programa
Para ejecutar el programa es necesario invocarlo de la forma siguiente:
user@host>>./programa
Es necesario el empleo del ./ antes del nombre de programa para indicarle al intrprete de rdenes que el
programa reside en el directorio actual de trabajo (.), ya que en caso de no especificarlo, slo se buscara el
programa en aquellos directorios del sistema especificados en la variable de entorno PATH.
user@host>> echo %PATH
/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games
Sin embargo, el programa gcc es muy flexible y soporta un gran cantidad de opciones que le permiten, por
ejemplo, detenerse tras un determinado paso del proceso (por ejemplo, de la compilacin) o aceptar varios
archivos de entrada incluso de diferentes tipos (fuente, objeto o en ensamblador), siendo capaz de procesar cada
uno de ellos de la manera adecuada para generar el archivo de salida que se le pide.
Por ejemplo, la siguiente orden compila el archivo programa.c y el objeto resultante lo enlaza con el objeto
funciones.o, dando como resultado el programa de nombre programa:
user@host>>gcc programa.c funciones.o -o programa
La siguiente orden compila los archivos fuente indicados, generando los archivos objeto de cada uno de ellos
pero no contina con el enlazado y generacin del ejecutable final:
user@host>>gcc -c programa.c funciones.c
Gua No. 5 UES CICLO I 2014 8/14
A continuacin se muestra un resumen de las opciones ms frecuentes con las que se suele invocar gcc:
-E Parar tras el preprocesado.
-S
Parar tras el compilado (no ensamblar)
-c Parar antes de enlazar
-o nombre Especificar el nombre del archivo de salida
-g (-s)
Incluir (eliminar) informacin de depuracin
-Wall Mostrar todos los warnings
-pedantic
Comprobar que el programa es C estndar
-On Optimizacin, desde n=0 (ninguna) a n=3 (mxima)
-D macro[=valor] Definir un macro (#define) y su valor (1 si se omite)
-I directorio
Incluir el directorio al buscar archivos .h
-L directorio Incluir el directorio al buscar bibliotecas
-lbiblioteca Usar la biblioteca biblioteca
-static Enlazar bibliotecas estticamente
Gua No. 5 UES CICLO I 2014 9/14
Procedimiento
Cree un archivo con gedit y nmbrelo suma.c. Una forma de hacerlo es escribiendo en la lnea de comandos:
user@host>> gedit suma.c &
Cuando usted haga esto se abrir el programa gedit, en donde podr ver el numero de lnea, diferentes colores de
texto para comentarios, directivas e instrucciones, etc. Escriba el siguiente cdigo fijndose cuidadosamente:
/* suma.c; Programa de suma */
#include <stdio.h>
/* la funcin main inicia la ejecucin del programa */
int main()
{
int entero1; /* primer nmero introducido por el usuario */
int entero2; /* segundo nmero introducido por el usuario */
int suma; /* variable en la cual se almacena la suma */
printf( "Introduzca el primer entero\n" ); /* indicador */
scanf( "%d", &entero1 ); /* lee un entero */
printf( "Introduzca el segundo entero\n" ); /* indicador */
scanf( "%d", &entero2 ); /* lee un entero */
suma = entero1 + entero2; /* asigna el total a suma */
printf( "La suma es %d\n\n", suma ); /* imprime la suma */
return 0; /* indica que el programa termin con xito */
} /* fin de la funcin main */
Gua No. 5 UES CICLO I 2014 10/14
Una vez terminado proceda a utilizar la lnea de comando de la siguiente manera:
user@host>> gcc suma.c -o suma
En la siguiente captura de pantalla podemos ver como aparece un nuevo archivo con el mismo nombre de
archivo fuente pero sin la extensin c. Este archivo ya sido compilado, ensamblado y esta listo para ejecutarse.
A continuacin podemos ejecutar el programa, empleando ./ antes del nombre de programa para indicarle al
intrprete de rdenes que el programa reside en el directorio actual de trabajo.
Gua No. 5 UES CICLO I 2014 11/14
Siguiendo los mismos pasos, escriba el siguiente cdigo, y luego compile y ejecute. Los resultados podr verlos
en la misma consola.
/* promedio.c; Programa para obtener el promedio de calificaciones de una
clase mediante una repeticin controlada por contador */
#include <stdio.h>
/* la funcin main inicia la ejecucin del programa */
int main()
{
int contador; /* nmero de la calificacin siguiente */
int calificacion; /* valor de la calificacin */
int total; /* suma de las calificaciones introducidas por el usuario */
int promedio; /* promedio de las calificaciones */

/* fase de inicializacin */
total = 0; /* inicializa total */
contador = 1; /* inicializa el contador del ciclo */

/* fase de proceso */
while ( contador <= 10 ) { /* repite 10 veces el ciclo */
printf( "Introduzca la calificacion %d: ",contador );
/* indicador para la entrada */
scanf( "%d", &calificacion ); /* lee la calificacin del usuario */
total = total + calificacion; /* suma la calificacin al total */
contador = contador + 1; /* incrementa el contador */
} /* fin de while */

/* fase de terminacin */
promedio = total / 10; /* divisin entera */
printf( "\n\tEl promedio de la clase es %d\n\n", promedio );
/* despliega el resultado */
return 0; /* indica que el programa termin con xito */
} /* fin de la funcin main */
Gua No. 5 UES CICLO I 2014 12/14
user@host>> gcc o promedio promedio.c
user@host>> ./promedio
En este otro cdigo, con el cual se puede calcular la solucin a una ecuacin cuadrtica para cualquier clase de
coeficientes.
/* cuadratica.c calcular races de una ecuacin de segundo grado */
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
double a,b,c;
double d;
double re,im;
printf("Coeficientes a,b y c de la ecuacion: ");scanf("%lf,%lf,%lf,",&a,&b,&c);
printf("\n");
if(a == 0 && b == 0)
printf("La ecuacion es degenerada\n");
else
if(a == 0)
printf("La unica raiz es: %.3lf\n",-c/b);
else
{
re = -b/(2*a);
d = b*b-4*a*c;
im = sqrt(fabs(d))/(2*a);
if(d >= 0)
{
printf("Raices reales\n");
printf("%0.3lf, %0.3lf\n",re+im,re-im);
}
else
{
printf("Raices complejas\n");
printf("%.3lf + %.3lfi\n",re,fabs(im));
printf("%.3lf - %.3lfi\n",re,fabs(im));
}
}
return 0;
}//fin del MAIN
Gua No. 5 UES CICLO I 2014 13/14
user@host>> gcc lm o cuadratica cuadratica.c
user@host>> ./cuadratica
Asignacin.

1. Por se dice que C es un lenguaje de nivel intermedio?
2. Describa al menos 3 libreras y las funciones incluidas en el lenguaje C.
3. A qu se refiere la expresin programacin orientado a objeto?
4. Investigar las siguientes instrucciones y/o directivas del lenguaje de programacin C, explicar los
parmetros que se pueden usar, y hacer al menos dos ejemplos:
printf
scanf
if
for
fprintf
do
case
switch
include
while
getch
void
5. Escriba una solucin para encontrar los primeros 50 nmeros primos. Que imprima la lista en pantalla
enumerndolos cada uno. No olvide que su programa tenga el menos cdigo posible, pues eso es ser un
programador eficiente: maximiza recursos y reduce costos.
"Escriba el algoritmo narrado.
"Use una grfica representacin de diagramas de cajas y flujograma.
"Escriba el cdigo en C.
"Imprimir todas las pantallas resultantes
6. Escriba un programa que introduzca 5 nmeros y diga cual de ellos es al mayor y cual es el menor; esto
se debe desplegar un pantalla y escribirlo en un archivo.
Gua No. 5 UES CICLO I 2014 14/14

Anda mungkin juga menyukai