Versión 3.0

800x600 mínimo
En esta lección:

Introducción
-----
Elementos básicos
-----
Visualización numérica
-----
Comentarios
-----


Otras secciones:

Conceptos básicos
-----
Programando en C
-----
Programando en C++
-----
Programando Windows 9x.
-----
Teoría electrónica
-----
Circuitos electrónicos
-----
Actividades adicionales
-----
Hipervínculos
-----


Contácteme:

Dudas y comentarios
-----


Hola mundo

Introducción 

     Para iniciar este curso de programación es necesario establecer unas cuantas bases útiles que se aplicarán a lo largo de todos los temas tratados. En primer lugar veamos como nombrar un identificador, éste es utilizado por cualquier variable, función, definición de datos, etc. En C, un identificador es una combinación de caracteres siendo el primero una letra del alfabeto o un símbolo de subrayado y el resto cualquier letra del alfabeto, cualquier dígito numérico ó símbolo de subrayado. Dos reglas debemos tener en mente cuando les demos nombre a los identificadores:

  1. El tamaño de los caracteres alfabéticos es importante. Usar PRINCIPAL para el nombre de una variable no es lo mismo que usar principal, como tampoco es lo mismo que usar PrInCiPaL. Los tres se refieren a variables diferentes.

  2. De acuerdo al estándar ANSI-C, al darle nombre a un identificador solo serán significativos los primeros 31 caractéres, todo carácter mas allá de este límite será ignorado por cualquier compilador que cumpla la norma ANSI-C

     Un elemento importante es el símbolo de subrayado que puede utilizarse como parte del nombre de una variable, contribuyendo notablemente a la legibilidad del código resultante. Es utilizado por algunos, pero no por todos los programadores C experimentados. Algunos subrayados serán utilizados en este curso a manera de ilustración. Debido a que una gran parte de los escritores de compiladores utilizan el subrayado como primer carácter para los nombres de variables internas de sistema, es aconsejable evitar el uso del subrayado para iniciar un identificador y así evitar la posibilidad de una confusión de nombres en la etapa de compilación, más específico, los identificadores con doble subrayado están reservados para uso del compilador así como los identificadores que empiezan con un subrayado seguido de una letra mayúscula. Esto es importante, respetar ésta sencilla regla nos evitará depurar errores innecesarios.

     La legibilidad de un programa se incrementa notablemente al utilizar nombres descriptivos para las variables y esto puede ser ventajoso para Usted. Programadores de Pascal y Ada tienden a utilizar nombres descriptivos largos, pero la mayoría de los programadores C por lo general utilizan nombres cortos y crípticos. Por esta razón la mayoría de los programas de ejemplo de este curso utilizan nombres muy cortos, pero se usan algunos nombres largos a manera de ilustración. Sin embargo insistimos en la importancia de utilizar nombres descriptivos que a su vez eviten comentarios redundantes.

Palabras clave

     El estándar ANSI-C define un total de 32 palabras clave que están reservadas para uso exclusivo del compilador C. El tutorial de C está organizado de tal manera que se estudian la totalidad de las 32 palabras clave definidas por el estándar ANSI-C, ésta guía dá una definición breve de cada palabra e incluye en caso necesario un hipervínculo hacia la lección que trata dicha palabra. Diversos fabricantes de compiladores C suelen incluir una cantidad variable de palabras reservadas para sus propios compiladores, sin embargo éstas palabras reservadas no están soportadas por el estándar ANSI-C y por lo tanto no se tratan en éste sitio.

     Podemos clasificar las palabras clave del ANSI-C de acuerdo a su función, en primer lugar están las palabras que definen un tipo específico de dato:

  • int: un tipo de dato entero con signo de 16, 32 ó 64 bits, dependiendo del compilador. En sistemas de 16 bits su rango de valores es de -32763 a 32762. Para sistemas de 32 bits el rango se de -2147483648 a 2147483647. En sistemas de 64 bits el rango será de 1.7+/-308. Actualmente son muy pocos los compiladores con capacidad de manejar datos de tipo int de 64 bits, lo usual son sistemas de 16 ó 32 bits.

  • float: Un número real de 32 bits cuyo rango vá de 3.4+/-38. Generalmente su precisión es de 7 dígitos.

  • long: Un número entero de 32 bits de rango igual a -2147483648 a 2147483647.

  • double: Un número de 64 bits y de rango igual a 1.7+/-308 con una precisión en general de 15 dígitos.

  • short: Un número de 16 bits de rango igual a -32763 a 32762.

  • char: Un tipo de dato específico para manejo de caracteres de 8 bits de rango igual a -128 a 127.

  • unsigned: Modificador que se aplica a los tipos de datos enlistados arriba, su efecto es eliminar el signo a el tipo de dato aplicado, por ejemplo, para un tipo de dato int podemos especificar unsigned int en cuyo caso el rango para el tipo de dato int cambia de ser -2147483648 a 2147483647, por éste nuevo rango: 0 a 4294967295.

  • signed: Modificador que forza al compilador a utilizar un tipo de dato con signo si antes se declaró como de tipo unsigned.

  • volatile: Especifica una variable que almacena datos cuyo contenido puede cambiar en cualquier momento sea por la acción del programa ó como reacción de la interacción del usuario con el programa.

  • const: Especifica una variable cuyo contenido no puede cambiar bajo ninguna circunstancia.

  • enum: Especifica un conjunto de variables que toman valores en un orden específico y consecutivo.

  • static: Especifica una variable que sólo puede cambiar por efecto del programa.

  • typedef: Define un tipo de dato para fácil manejo del programador basado en los datos definidos por el compilador. Muy útil cuando se programa en lenguajes diferentes al inglés.

  • sizeof: Función que devuelve el tamaño en bytes del tipo de dato al que se aplica.

     Otro conjunto de palabras clave nos sirve para especificar instrucciones propias de C con carácter de control del flujo de datos:

  • if: Instrucción condicional, véase El enunciado if

  • else: Se utiliza conjuntamente con la instrucción if, véase El enunciado if

  • switch: Estructura condicional, véase La instrucción switch

  • case: Define los elementos de una estructura condicional switch, véase La instrucción switch

  • default: Define las acciones a ejecutar no especificadas por una instrucción case dentro de una estructura condicional switch, véase La instrucción switch

  • break: Obliga a salir de una estructura condicional switch, véase La instrucción switch

  • for: Bucle que se ejecuta tantas veces como se cumplan las condiciones especificadas dentro del paréntesis de la instrucción, véase El bucle for

  • while: Bucle condicional que se ejecuta conforme la condición entre el paréntesis sea cierta, véase El bucle while

  • do: Bucle condicional que se ejecuta en conjunto con la instrucción while, véase El bucle do-while

  • continue: Instrucción para suspender un ciclo de un bucle, véase Las instrucciones break y continue

  • goto: Instrucción que ejecuta un salto a otra parte del código, véase El enunciado goto

     El siguiente conjunto de palabras clave designa una serie de instrucciones que implementan diversas construcciones útiles en C

  • struct: Define una estructura, para mayor información consulte Estructuras en C

  • return: Especifica el dato que devuelve una función.

  • union: Un tipo de dato compuesto de otros datos definidos, consulte Estructuras en C

  • register: Permite almacenar un dato en el registro del sistema.

  • extern: Especifica una variable ó función que se encuentra en un archivo fuente diferente.

  • void: Especifica que una función no devuelve valor alguno.

  • auto: Una de las cuatro clases de almacenamiento de datos, auto es la opción por defecto, las otras tres son register, static y extern.

     Adicionalmente su compilador puede definir algunas palabras clave, mismas que estarán enlistadas en la documentación del mismo. Cada una de las palabras clave arriba mencionadas serán definidas, ilustradas y utilizadas a lo largo de este curso.

Datos y programa.

     Todo programa de computadora tiene dos entidades a considerar: los datos, y el programa en sí. Estos son altamente dependientes uno del otro y una cuidadosa planeación de ambos conducirá a un programa bien escrito. Desgraciadamente no es posible estudiar cualquiera de estos sin un conocimiento en la otra parte, por ésta razón éste curso tratará de mostrar tanto métodos de escritura de programas como métodos de definición de datos. Simplemente siga adelante y Usted tendrá un buen conocimiento de ambos.

     Conforme avance por los programas de ejemplo encontrará que cada uno está completo, por lo que no hay fragmentos que resulten confusos, esto le permitirá ver cada requerimiento necesario para utilizar cualquiera de las características de C conforme se vayan presentando. A lo largo de este curso, las palabras clave, los nombres de variables y los nombres de funciones estarán escritas en negrita y todas ellas serán completamente definidas a lo largo de este curso.

     Cada código presentado en este tutorial ha sido probado utilizando Symantec C++ version 7.5. El resultado de la ejecución de cada programa lo mostramos con una imagen capturada directamente del monitor al momento en que probamos el respectivo código, en otros casos mostraremos el resultado en forma de comentario al final del código fuente una vez que demos la definición de comentario mas adelante. Si Usted piensa que entiende completamente el programa, puede consultar simplemente el resultado de la ejecución, en este caso no es necesario compilar y ejecutar cada programa, sin embargo es aconsejable la compilación de algunos de los programas debido a que diferentes compiladores no producen exactamente los mismos resultados y es necesario que Usted se familiarice con su propio compilador. Además es posible seleccionar el código directamente del navegador, copiarlo y pegarlo en el editor de texto del compilador que Usted utilice. Para probar que su compilador C esté funcionando adecuadamente compile y ejecute el siguiente programa:


# include <stdio.h>
int main ()
{
    int indice;
    for (indice = 0; indice = 7; indice = indice + 1)
    printf ("Primer programa de ejemplo.\n") ;
    return 0 ;
}

     No se preocupe si no entiende que hace este programa, a su debido tiempo lo entenderá completamente.

Volver al principio

Hola mundo

Elementos básicos de un programa C 

     El siguiente código representa el programa mas simple en C:


main ()
{

}

     La palabra main es muy importante y debe aparecer solo una vez en todo programa C. Este es el punto donde inicia la ejecución del programa. Posteriormente veremos que no necesariamente debe ser el primer enunciado del código. Siguiendo a la palabra main esta un par de paréntesis que le indican al compilador la existencia de una función, la explicación de qué es una función la veremos a su debido tiempo, por lo pronto es recomendable simplemente incluir los paréntesis.

     Las llaves que siguen en las líneas 2 y 3 se utilizan para definir los límites del programa. Los diferentes enunciados del programa van colocados dentro de estas llaves. El código que actualmente estamos estudiando representa un programa que no hace absolutamente nada y por lo tanto no tiene ningún enunciado ejecutable, sin embargo es posible compilar y correr este programa, lo importante es que se trata de un programa C válido. Veamos ahora un código mas interesante:


#include <stdio.h>
int main()
{
    printf ("Esta es una línea de texto.");
    return 0;
}

     Este código incluye un enunciado ejecutable además del enunciado obligatorio return. El enunciado ejecutable es una llamada a una función incluida como parte de su librería C, la función se llama printf ( ) y esta definida en el archivo de cabecera stdio.h. Esta función despliega texto en el monitor, para tal fin es necesario colocar la cadena de texto que deseamos mostrar en el monitor entre comillas y dentro del paréntesis que sigue a la palabra printf. Observe que al final del enunciado se ha puesto el símbolo de punto y coma. C utiliza el punto y coma para indicarle al compilador que una línea ejecutable está completa. Al compilar y correr este programa usted verá en la pantalla del monitor la cadena de texto especificada. Los enunciados de las líneas 1 y 6 así como el uso de la palabra int serán explicados mas adelante, mientras es importante ver algunos conceptos básicos adicionales que le presento en el siguiente código:


#include <stdio.h>
int main ()
{
    printf ("Esta es una línea de texto.\n");
    printf ("Y esta es otra ");
    printf ("línea de texto.\n\n");
    printf ("Esta es una tercera línea.\n");
    return 0;
}

     Observe que ahora están incluidos cuatro enunciados ejecutables cada uno iniciando con una llamada a la función printf ( ), la línea superior será ejecutada en primer lugar seguidas de las otras tres líneas ejecutables en el orden en que aparecen, note el carácter cercano al fin de la primera línea ejecutable, la diagonal invertida ( \ ) conocida en inglés como backslash, es utilizada en la función printf ( ) para indicar que sigue un carácter especial de control. En este caso, la "n" indica la petición de una nueva línea de texto, es una indicación para regresar el cursor al lado izquierdo del monitor y a la vez moverlo una línea abajo. Usted puede colocar un carácter "n" en cualquier parte del texto impreso e iniciar una nueva línea, incluso en la mitad de una palabra y de esta manera dividir la palabra entre dos líneas. Ahora es posible una descripción detallada del programa. La primera función printf ( ) despliega una línea de texto y regresa el cursor. La segunda printf ( ) despliega otra línea de texto pero sin regresar el cursor, de tal manera que la tercera línea aparece al final de la segunda, entonces, le siguen dos retornos de cursor dando como resultado un espacio en blanco. Finalmente la cuarta instrucción printf ( ) despliega una nueva línea de texto seguida por el retorno del cursor, finalizando el programa. Esta sería la salida mostrada en su monitor:

Pantalla 1

     Es buena idea experimentar con este programa agregando instrucciones printf ( ) para asegurarnos de entender como trabaja esta función, cuanto más modifique y compile los ejemplos dados en éste curso tanto más aprenderá conforme avance en su trabajo.

Volver al principio

Hola mundo

Visualización numérica 

     Este es el código que utilizaremos como primer ejemplo de cómo trabajar con datos en un programa C:


# include <stdio.h>
int main()
{
    int indice;
    indice = 13;
    printf("El valor de indice es %d\n", indice);
    indice = 27;
    printf("El valor de indice es %d\n", indice);
    indice = 10;
    printf("El valor de indice es %d\n", indice);
    return 0;
}

     El punto de entrada main ( ) debe resultarle claro así como la primera llave. Lo nuevo que encontramos está en la línea 4 que nos dice int indice; la cual se utiliza para definir una variable de tipo entero llamada indice. La palabra int es una palabra clave de C y no puede ser utilizada con otros fines, define una variable que almacena un número entero dentro de un rango predefinido de valores, definiremos el actual rango posteriormente. El nombre de la variable, indice, puede ser cualquier nombre que siga las reglas dadas para un identificador. El punto y coma al final de la línea es un terminador de enunciado como se explicó al principio. Observe que, aunque hemos definido una variable no le asignamos a ésta un valor por lo que se dice que contiene un valor indefinido, posteriormente veremos cómo definir varias variables en la misma línea de instrucciones.

     Veamos el cuerpo principal del programa, notará que hay tres enunciados que asignan un valor a la variable indice, pero solo uno a la vez. El enunciado en la línea 5 asigna a indice el valor de 13, y este valor es desplegado en la línea 6. Después se asigna a indice el valor de 27, y finalmente le asignamos el valor de 10. Está claro que indice es una variable que puede almacenar muchos valores diferentes pero solo uno a la vez. El programa una vez compilado aparece de la siguiente forma:

Pantalla 2

     Continuando con el analisis del programa veamos los enunciados que contienen printf ( ). Todos son idénticos e inician de la misma forma que los printf ( ) que habíamos visto anteriormente, la primera diferencia la encontramos en el carácter %, éste señala a la rutina de salida para detener el despliegue de caracteres y hacer algo diferente, generalmente mostrar el valor de una variable. El símbolo % se utiliza para señalar el despliegue de muchos tipos diferentes de variables, pero nos concentraremos en uno solo en este ejemplo. El carácter que le sigue al símbolo % es una d, la cual indica a la rutina de salida tomar un valor decimal y desplegarlo en el monitor. Después de la d encontramos a la ahora familiar \n para el retorno del cursor y por último el cierre de paréntesis.

     Todos los caracteres entre paréntesis definen el patrón de datos a desplegar por el enunciado, luego está una coma seguida por el nombre de la variable indice. Aquí es donde la función printf ( ) obtiene el valor decimal como se lo indicó %d según vimos. El sistema sustituye el valor actual de la variable llamada indice por los símbolos %d y los muestra en el monitor.

Volver al principio

Hola mundo

Comentarios en un programa C 

     Agregamos comentarios al código C de un programa para hacerlo mas entendible para Usted pero carente de significado para el compilador, por lo que le indicamos al compilador ignorar completamente los comentarios encerrándolos en caracteres especiales. La combinación de línea diagonal y asterisco se usa en C para delimitar comentarios como podemos ver en el siguiente código, observe que este programa ilustra una mala técnica al hacer comentarios pero a su vez muestra donde pueden situarse los comentarios.


# include <stdio.h>
/* Este es un comentario que el compilador ignora */
int main()	/* Este es otro comentario ignorado por el compilador*/
{
    printf("Utilizando comentarios "); /* Un comentario esta
                                          permitido continuar
                                          en otra línea */
    printf ("en C.\n");
    return 0;
}
/* Agregamos aquí un comentario más... */

     La combinación de línea diagonal y asterisco en la línea 2 introduce el primer comentario mientras que la combinación de asterisco y línea diagonal finaliza el comentario en esa línea. Observe que este comentario está antes del principio del programa lo que ilustra que un comentario puede preceder al programa en sí. Una buena práctica de programación es incluir un comentario antes del inicio del programa con una breve descripción del mismo. Observe que el comentario inicia con la combinación de línea diagonal y asterisco finalizando con la combinación de asterisco y línea diagonal, así, en ese orden ( /* Texto del comentario */ ). Es muy importante que no deje espacio alguno entre el asterisco y la línea diagonal pues de lo contrario el compilador no sabrá que se trata de un comentario y por ende, se generan mensajes de error.

     En el siguiente código podemos ver un ejemplo de un programa con un formato de comentarios bien hecho. Con la experiencia que Usted ha ganado hasta el momento es fácil comprender el programa en su totalidad, el compilador ignora todo el espacio extra en tanto que el retorno de cursor le da amplia libertad al momento de darle formato al código del programa. Compile el programa y observe el resultado.


#include <stdio.h>
int main() / * Aquí empieza el programa* /
{
    printf ("Un buen formato");
    printf ("puede ayudar a ");
    printf ("entender un programa.\n");
    printf ("Y un mal formato ");
    printf ("puede convertir un programa");
    printf ("en algo difícil de comprender.\n");
    return 0;
}

     Ahora observe éste otro código. ¿En cuanto tiempo comprendió su funcionamiento ? Para el compilador no importa el formato que Usted utilice, pero a Usted sí que le importará cuando trate de resolver un problema relacionado con el código de su programa (Técnica conocida como "debbuging", depuración). Compile y ejecute el programa, se sorprenderá que hace lo mismo que el programa anterior, la única diferencia está en el formato de la escritura del código.


# include <stdio.h>
int main() /* main inicia aqui
* / {printf ("Un buen formato ");printf ("puede ayudar a");
printf ("entender un progama.\n")
;printf ("Y un mal formato ");printf("puede convertir un programa ");
printf ("en algo difícil de entender.\n");return 0;}

     En estos momentos no se preocupe mucho por el formato de sus programas. Tiene mucho tiempo para desarrollar un estilo propio conforme avance en su aprendizaje del lenguaje C. Sea Usted crítico de los estilos que vea en programas C en libros y revistas.

Volver al principio

Hola mundo

© 1999 Virgilio Gómez Negrete, Derechos Reservados