Curso Rápido de C: Ejemplos de programas.
Los ejemplos de programas que siguen ilustran características del
lenguaje C. Se trata de programas simples que pueden examinarse como enlaces
en esta página, pero que también pueden ser compilados directamente,
ya que sus archivos se mantienen con extensión .c en el directorio
de esta página.
CAPITULO 1: INTRODUCCION
En este capítulo se introducen rápidamente los fundamentos
de la construcción de programas en C, informalmente y por la vía
del ejemplo.
kyr1-01.c: Primer programa en C: imprime un mensaje.
Muestra estructura general de un programa simple en C: inclusión
de biblioteca stdio.h, función main, comentarios, delimitación
de bloques entre llaves {}, uso de la función de biblioteca printf.
Aritméticos.
kyr1-02a.c: Tabla rudimentaria Fahrenheit-Celsius
Despliega una tabla rudimentaria de conversión de temperatura.
Ilustra declaración y asignación de variables numéricas,
uso de un lazo while para estructura repetitiva, uso de una expresión
matemática, salida con formato para datos numéricos.
kyr1-02b.c: Tabla Fahrenheit-Celsius, punto flotante
Aumenta la precisión usando un tipo de datos float, para números
en punto flotante.
kyr1-02c.c: Tabla Fahrenheit-Celsius, con for
Usa un lazo for en la estructura repetitiva..
kyr1-02d.c: Tabla Fahrenheit-Celsius, con constantes
simbólicas
Fija constantes simbólicas para los extremos de la tabla.
Caracteres.
kyr1-03a.c: Copia entrada en salida
Uso de la funció getchar para capturar datos de la entrada (teclado),
detección del caracter fin de archivo, uso de la función putchar
para mostrar datos en la salida (pantalla)
kyr1-03b.c: Copia entrada en salida, más
compacto
Incluye la función getchar dentro del lazo while, evita el uso
de una variable.
kyr1-04a.c: Cuenta caracteres de la entrada
Operador de incremento nc++ dentro de un lazo while.
kyr1-04b.c: Cuenta caracteres de la entrada, version
2
Incremento del contador nc dentro de un lazo for, uso de la proposición
vacía.
kyr1-05.c: Cuenta lineas
Uso de if para detección del caracter nueva línea.
kyr1-06.c: Cuenta lineas, palabras y caracteres
Uso de constatnes simbólicas para valores de verdad, asignación
múltiple en la inicialización de variables, uso de la estructura
if...else if..else, expresión lógica con OR, detección
de caracteres especiales.
Arreglos.
vgb1-01.c: Cuenta ocurrencias de cada vocal y otros
caracteres
Declaración e inicialización de arreglos, asignación
de valores a elementos de arreglos, incremento de elementos de arreglos; uso
de if..else if..else.
kyr1-07.c: Cuenta digitos, espacios y otros
Uso de arreglos, ilustración de la superposición entero-caracter
en el uso de valores numéricos ASCII para determinar índices
del arreglo.
Funciones.
tim1-01.c: Calcula la media de dos números,
con función
Declaración, definición e invocación de una función
simple.
kyr1-08a.c: Funciones; tabla de potencias
Declaración, definición e invocación de una función
simple; ilustración de invocación por valor al usar el mismo
nombre de variable i dentro y fuera de la función.
kyr1-08b.c: Funciones; tabla de potencias, en long,
por valor
Declaración long como tipo en el valor de retorno de la función;
uso de los parámetros de la función como variables locales,
reafirmando el pasaje por valor.
kyr1-09a.c: Imprime la línea de entrada
más larga
Uso de constantes simbólicas para definir el tamaño de
arreglos, declaración y uso de funciones definidas por el usuario,
uso de expresiones más complejas en for e if.
El archivo kyr1-09a.dat contiene un juego de datos de entrada que puede
usarse para probar el programa y el redireccionamiento de entrada con <:
compilar el programa, y luego invocarlo por el nombre del ejecutable seguido
de <kyr1-09a.dat; el programa tomará su entrada del archivo y no
del teclado (en sistemas operativos UNIX o MSDOS).
kyr1-09b.c: Línea más larga con variables
externas
Definición y uso de variables externas, declaración extern
dentro de funciones.
CAPITULO 2: TIPOS, OPERADORES Y EXPRESIONES.
Este capítulo examina los tipos de datos nativos de C, los operadores,
formación de expresiones, precedencia y cuestiones relacionadas.
tim1-03.c: Largos de tipos predefinidos
Usa la función de biblioteca sizeof para determinar largo de
tipos nativos (predefinidos). Los largos de tipos nativos son dependientes
de implantación, y deben ser verificados en las distintas plataformas.
tim1-02.c: Caracteres y enteros
Muestra la posibilidad de interpretar un entero como caracter, de imprimir
caracteres dando sus valores enteros, de guardar un caracter en un número
entero.
vgb2-02.c: Prueba de números aleatorios
Uso de la función de biblioteca rand y el tipo unsigned char
para obtener números aleatorios.
CAPITULO 3. ESTRUCTURAS DE CONTROL.
Este capítulo describe las estructuras de control alternativas y
repetitivas usadas en C, varias de las cuales se vieron en ejemplos anteriores.
CAPITULO 4. FUNCIONES.
Este capítulo describe el uso de funciones, el uso de archivos de
encabezado y la compilación de un programa que abarque varios archivos.
vgb4-01.c: Factorial, programa recursivo
Invocación recursiva de una rutina factorial(), que calcula el
factorial de un número entero.
vgb4-02.c: Cuenta invocaciones de una rutina.
Uso de una variable estática, que conserva el valor de una invocación
a otra, para contar el número de invocaciones que ha recibido una función.
Calculadora en notación polaca inversa. (en subdirectorio
kyr4-04).
Recibe una línea de operandos y operadores correspondientes a
una expresión en notación polaca inversa. Muestra el uso de
varios archivos para un mismo programa; comprende un archivo de encabezados
propio y varios archivos de funciones.
- calc.h - archivo de encabezados
- Declaraciones y funciones de uso común en el proyecto (grupo
de archivos del programa).
- main.c - Programa principal
- Declaraciones y funciones de uso común en el proyecto (grupo
de archivos del programa). Uso de switch. Uso de las rutinas de manejo de
estructura de pila para calcular las expresiones en notación polaca
inversa.
- getch.c - obtención de un caracter
de la entrada
- Lectura caracter a caracter para reunir los caracteres que forman un
número (función getch); devolución al buffer de entrada
del primer caracter leído que no pertenezca al número para su
posterior procesamiento (función ungetch). Declaración static
de variables que no son accesibles fuera de este archivo.
- getop.c - obtención de operador u operando
- Obtiene el siguiente operando invocando las funciones getch y ungetch;
cuando se trata de un operador, lo devuelve para su posterior procesamiento.
- stack.c - rutinas para manejo de la pila
- Rutinas pop y push para extraer y colocar en la pila.
CAPITULO 5: PUNTEROS.
Este capítulo examina el uso de punteros a variables, la relación
entre arreglos y punteros, el pasaje de punteros como parámetros, la
devolución de valores puntero como retorno de funciones, el uso de
punteros a funciones para procesamientos alternativos.
vgb5-01.c: Punteros, asignacion, derreferencia,
arreglos
Declaración de variables tipo puntero, carga de una dirección
en variable puntero, interrogación del contenido de una dirección
(indirección o derreferencia), carga de un valor en una dirección
de memoria apuntada por una variable tipo puntero, referencia a elementos
de un arreglo usando punteros.
kyr5-03a.c: strlen, longitud de cadena
Pasaje de una cadena a la función strlen de varios modos: directamente,
por medio de un arreglo, por un puntero.
kyr5-03b.c: strlen, longitud de cadena; resta de
punteros
La aritmética de punteros hace que la resta de punteros sea permitida
en algunos casos y permita, por ejemplo, obtener la cantidad de elementos
de un arreglo.
kyr5-05.c: strcpy, copia cadenas de caracteres,
varias versiones
Varias versiones de la función strcpy, que copia una cadena origen
en una cadena destino: con subíndices de un arreglo, y otras tres
versiones usando punteros.
tim2-03.c: Inversión de cadena de caracteres
Uso de punteros para invertir una cadena de caracteres..
kyr5-07.c: Ordena líneas de texto, con arreglo
de punteros
Usa un arreglo de punteros para mantener líneas de texto. La
función leelineas genera arreglos de caracteres de largo variable a
los que apuntará un elemento del arreglo de punteros que retiene las
líneas; usa malloc para obtener un espacio de memoria suficiente. La
función getline lee una línea de la entrada y devuelve su longitud.
La función qsort implementa el algoritmo de ordenación quicksort
sobre el arreglo de punteros que contiene las líneas. Una versión
especializada de swap intercambia elementos del arreglo indicando sus índices.
kyr5-08.c: Conversiones mes-día, día
del año
Arreglos multidimendionales (2 dimensiones) para retener cantidad de
días de cada mes en años normales y bisiestos. Pasaje de parámetros
por referencia usando punteros en la función mes_dia.
kyr5-09.c: Nombres de los meses, arreglo de punteros
Arreglo de punteros a arreglos de caracteres que contienen los meses
del año. La función nombre_mes recibe un número de mes
y devuelve un tipo puntero al arreglo de caracteres que contiene su nombre.
kyr5-10a.c: Eco de argumentos en línea de
comandos
Uso de argc, cantidad de argumentos en línea de comandos, y argv[],
arreglo de esos argumentos, con argv[0] como nombre del programa.
kyr5-10b.c: Eco de argumentos, moviendo puntero
argv
Eco de los argumentos en línea de comandos incrementando el puntero
a argv.
kyr5-13.c: Ordena líneas de texto o números,
con puntero a función
Ordenamiento de líneas en ordenación alfabética
(código ASCII) o en ordenación numérica (interpretando
los caracteres como números), según un argumento en línea
de comandos. Es una versión simplificada del sort de UNIX, con su parámetro
-n para ordenación numérica. Usa un puntero a función
para determinar la función de comparación: numcmp para números,
strcmp para alfabético. La función numcmp convierte las cadenas
a números antes de comparar.
CAPITULO 6: ESTRUCTURAS.
Este capítulo analiza la definición de estructuras de datos
de diversos tipos agrupados bajo un nombre común, la definición
de tipos de datos estructurados por parte del usuario, el pasaje de estructuras
como parámetros, el uso de punteros a estructuras.
vgb6-01.c: Estructura de punto: definición,
asignación
Definición de una estructura (punto geomértrico), asignación
de valores a los miembros.
vgb6-02a.c: Estructura de rectangulo en base a
punto
Anidamiento de estructuras: la estructura rectángulo se define
con estructuras de punto como miembros.
vgb6-02b.c: Estructura rectángulo, función
área
Pasaje de una estructura como parámetro: la función de
cálculo de área recibe como parámetro la estructura rectángulo.
vgb6-02c.c: Rectángulo, funciones, área
y perímetro con punteros
Pasaje de un puntero a estructura como parámetro. Notación
p-> para referenciar los miembros de la estructura.
vgb6-03.c: Estructura de libro: definicion, asignacion
Definición de tipo, función que recibe un parámetro
de tipo definido por el usuario.
vgb6-04.c: Arreglo de estructura de libro
Definición de tipo, arreglo de tipo definido por el usuario,
pasaje de parámetros tipo puntero a estructura definida por el usuario.
kyr6-03.c: Frecuencia de palabras en la entrada,
árbol binario
Definición de una estructura autorreferenciada: el árbol
binario.Rutinas para recorrido del árbol al imprimir, para buscar un
nodo o determinar que no existe, y para el agregado de nodos; usa malloc para
obtener espacio de memoria para cada nodo nuevo. Rutinas adicionales para
separar palabras, duplicar cadenas, obtener y devolver caracteres.
vgb6-05.c: Estructura de bits para manejo de llaves
0,1
Definición de una estructura de campos de bits, para manejo de
llaves o estados 0,1; asignación, interrogación.
kyr6-05.c: Estructura union
Definición de una estructura unión; superpone distintos
tipos de datos sobre una misma área de almacenamiento. Asignación
de valores a los miembros, función de impresión que actúa
selectivamente según el tipo de dato.
CAPITULO 7: ENTRADA / SALIDA.
Este capítulo muestra muy brevemente la forma de abrir archivos
en diversos modos para operaciones de entrada y salida.
vgb7-01.c: Acceso a archivos; escritura, agregado
y lectura de líneas
Abre un archivo en modo crear, agrega líneas de texto; abre el
archivo en modo lectura, recupera las líneas de texto. Luego abre
el archivo en modo agregar y adjunta líneas de texto; vuelve a abrir
en modo lectura para comprobar el agregado de líneas.
Curso Rápido de C; Ejemplos. / Ing. Sist. Victor A. González
Barbone / Ver. 1.0/Abril 1998.
E-mail: vagonbar@fing.edu.uy