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.
Comprimido en un archivo ZIP: curso-c.zip
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