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).

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