Ir al contenido principal

Mi primer programa en lenguaje C

Estructura de un Programa en Lenguaje C

¿Cuál es la estructura básica de un programa en C?

Un programa escrito en lenguaje C está compuesto por una o más funciones. Como ya es sabido, una función es un programa que sirve para realizar una tarea determinada, por ejemplo, la función scanf sirve para leer datos desde el teclado.

Existe una función que está presente en todos los programas escritos en lenguaje C, su misión es marcar el inicio y fin de la ejecución de cada uno de ellos; es la función principal, la primera que se ejecuta; es la función 
main. Su sintaxis "básica" es:
int main()
{
   <bloque_de_instrucciones>
}
La función main contiene al bloque de instrucciones principal de un programa, dentro de los caracteres abrir llave ({) y cerrar llave (}).

Los paréntesis "
()" escritos después de main sirven para indicar que el identificador main es una función. Es importante comprender que main no es una palabra reservada de C. Ningún identificador de función lo es.

Finalmente, no podemos pasar por alto que delante de 
main se ha escrito la palabra reservada int; enseguida veremos el porqué.

    Todo programa escrito en C consta de una o más funciones, una de las cuales se llama main. El programa siempre comenzará por la ejecución de la función mainCada función debe contener:
     
     
    Una cabecera de la función, que consta del nombre de la función, seguido de una lista opcional de argumentos encerrados con paréntesis.
    Una lista de declaraciónde argumentos, si se incluyen estos en la cabecera.
    Una sentencia compuesta, que contiene el resto de la función.

     
     Los argumentos son símbolos que representan información que se le pasa  a la función desde otra parte del programa . (También se llaman parámetros a los argumentos).

      Cada sentencia compuesta se encierra con un par de llaves, {.....}. Las llaves pueden contener combinaciones de sentencias elementales (denominadas sentencias de expresión) y otras sentencias compuestas. Así las sentencias compuestas pueden estar anidadas, una dentro de otra. Cada sentencia de expresión debe acabar en punto y coma (;).


     Los comentarios pueden aparecer en cualquier parte del programa, mientras estén situados entre los delimitadores  /* ................ */ (por ejemplo: /*esto es un ejemplo*/). Los comentarios son útiles para identificar los elementos principales de un programa o simplemente para orientar a un posible usuario de ese código.


     Todo fichero fuente en C sigue la siguiente estructura; para verla más claramente pondremos un ejemplo con sus correspondientes comentarios, que nos vayan explicando cada una de las partes, muchas de las cosas que se vean, no se conocen aún, pero nos servirán para hacernos una idea de cómo se estructura un programa:




     Ejemplo:

    #include <stdio.h>
    #include <conio.h>
     
    /*#include del sistema:Se deben especificar todos los ficheros de cabecera (ficheros con extensión .h) correspondientes  a las librerías de funciones utilizadas.
    Son librerías implementadas y listas para que nosotros las usemos,con sólo llamar a la función que tenga implementada dentro dicha librería. Por ejemplo: la instrucción printf está incluida dentro de stdio.h, por tanto, cuando decidamos usarla, tendremos que poner en esta sección:
    #include <stdio.h> */
     
    #include <lista.h>
     
    /* #include de la aplicación:Ficheros de cabecera creados para el fichero fuente. Se puede decir que estos son los que yo he creado, que son invocados escribiendo su nombre seguido de .h. (Más tarde explicaremos cómo se crean). Si lo pongo entre signos: < > (como lo tenemos en este ejemplo), dicha librería será buscada en el directorio del compilador INCLUDE que contiene las librerías. Si por el contrario pongo: #include "lista.h", entonces, dicha librería será buscada 1º en el directorio actual, y luego, si no está, será buscada en el directorio del compilador INCLUDE*/
       
        extern void salida(void);
     
    /* externvariables globales externas: Variables globales que voy a definir en otros módulos que voy a usar en este módulo. A salida le hemos asignado el tipo de almacenamiento extern, pues tiene que ser accedida desde otro archivo distinto de aquel en que es definida; por tanto, ha de ser una función externa. */
       
        #define CIERTO 1
        #define FALSO 0
     
    /* #define definición de macros y constantes simbólicas.*/

        typedef struct {
      int dia;
      int mes;
      int ano;
        }FECHA;
     
    /* typedef definición de tipos: me sirve para crearme un tipo distinto de los preestablecidos de partida.*/

        int suma (int , int);

     
    /* Declaración de los prototipos de las funciones implementados en este módulo: La declaración de una función le da información al compilador de una función que va a ser utilizada pero que todavía no ha sido implementada. En particular le dice al compilador qué tipo de datos requiere y cuál devuelve la función. En el ejemplo, la función con nombre suma
    recibe dos números enteros y da como salida otro número entero.*/
        extern int a,b,c;

     
    /* Declaración de variables globales de este módulo:
      extern declaración de funciones externas a este módulo: Funciones que se utilizan en este módulo y que están implementadas en otro módulo.
      static declaración de las funciones internas no visibles para otros módulos: Funciones que se implementan en este módulo y que no pueden ser utilizadas en otros módulos. */
       
        main(){
      ............
      ............
      }
        int suma(int x,int y){
      ...........
      ...........
      }
/* Implementación de las funciones: Se implementan todas las funciones del módulo incluida la función main().*/
       
     NOTA: En un segundo archivo encontraríamos la definición de la función externa declarada en este primer archivo de encima (extern void salida(void);), esta definición será:
     
      ...........
      ...........
      extern void salida(void)
      {
          printf("¡Hola!");
          return;    /* salimos de la función, y volvemos al lugar donde se le llamó sin devolver nada.*/
      } 
      La mejor forma de aprender un lenguaje es programando con él. El programa más sencillo que se puede escribir en C es el siguiente:
      main()
      {
      
      }
      Como podemos imaginar, este programa no hace nada, pero contiene la parte más importante de cualquier programa C y además, es el más pequeño que se puede escribir y que se compila correctamente. En él se define la función main, que es la que ejecuta el sistema operativo al llamar a un programa C. El nombre de una función C siempre va seguida de paréntesis, tanto si tiene argumentos como si no. La definición de la función está formada por un bloque de sentencias, que esta encerrado entre llaves {}.
      Un programa algo más complicado, pero que hace algo, es el siguiente:
      #include <stdio.h>
      
      main()
      {
       /* Este es mi primer programa en C*/
      
       printf("Bienvenido a la programación en lenguaje C\n");
      
       return 0;
      
      }
      Con él visualizamos el mensaje Bienvenido a la programación en lenguaje C en el terminal.
      La primera línea indica que se tengan en cuenta las funciones y tipos definidos en la biblioteca stdio (standard input/output). Estas definiciones se encuentran en el fichero de encabezado (headerstdio.h.
      En la función main se incluye una primera sentencia que llama a la función printf. Ésta toma como argumento (encerrado entre paréntesis) una cadena de caracteres limitados por dobles comillas " " y la imprime en la salida habitual, que generalmente es el terminal en el que trabajamos. El símbolo \n indica un cambio de línea.
      La segunda sentencia, return 0, termina el programa y devuelve un valor (cero) al sistema operativo (por lo general es cero si la ejecución fue correcta y se usan valores distintos de cero para indicar diversos errores que pudieron ocurrir). Si bien no es obligatorio terminar el programa con un return, es conveniente indicarle a quien lo haya invocado, sea el Sistema Operativo o algún otro programa, si la finalización ha tenido éxito o no. De cualquier manera, en este caso, si sacamos esa sentencia el programa, éste funcionará exactamente igual, pero al ser compilado, el compilador nos advertirá de la falta de retorno.
      La inclusión de comentarios en un programa es una saludable práctica, como lo reconocerá cualquiera que haya tratado de leer un listado hecho por otro programador o por sí mismo, varios meses atrás. Para el compilador, los comentarios son inexistentes, por lo que no generan líneas de código, permitiendo abundar en ellos tanto como se desee. En el lenguaje C se toma como comentario todo carácter entre los símbolos: /* */.
      Cada sentencia de programa queda finalizada por el terminador ";", que indica al compilador el fin de la misma. Esto es necesario ya que sentencias complejas pueden llegar a tener más de un renglón, y habrá que avisar al compilador donde terminan. Es perfectamente lícito escribir cualquier sentencia abarcando los renglones que la misma necesite; por ejemplo podría ser:
       printf("Bienvenido a la programación
                                       en lenguaje C\n");
      Un programa en C es simplemente un fichero de caracteres que contiene un conjunto de instrucciones que un programa especial, el compilador o traductor, se encarga de transformar en un código que la computadora puede ejecutar (código objeto). En general, un programa suele estar compuesto de tres partes:
      • el encabezamiento, que especifica las declaraciones globales de los datos y sus tipos, que vamos a manejar a lo largo del programa;
      • la función principal, que se suele llamar main, y define la estructura del programa.
      • las funciones o subrutinas auxiliares, que realizan las operaciones necesarias; son llamadas por la rutina principal, la función main. Se suelen colocar después de esta función.
      Encabezamiento
      
      main( )
      {
       variables locales
       sentencias
      }
      
      f1( )
      {
       variables locales
       sentencias
      }
      
      ...
      ...
      ...
      
      fn( )
      {
       variables locales
       sentencias
      }
      Cuando la envergadura del programa es grande se suele fragmentar el programa en varias partes, incluyendo cada parte en un fichero separado. El lenguaje C define el método que debemos seguir para separar las diferentes partes del programa. Normalmente colocaremos en cada fichero todas las subrutinas y funciones que se encarguen de una tarea del programa. Por tanto, un programa C puede estar formado por diferentes módulos o fuentes. Es conveniente mantener los fuentes de un tamaño no muy grande, para que la compilación sea rápida. También, al dividirse un programa en partes, se puede facilitar la legibilidad del programa y su estructuración. Los diferentes fuentes son compilados de forma separada -únicamente los fuentes que han sido modificados desde la última compilación-, y después enlazadoso combinados entre ellos y con las bibliotecas necesarias para formar el programa en su versión ejecutable, mediante un programa denominado enlazador (linker).
      Los comandos necesarios para compilar, enlazar  los diferentes módulos y ejecutar un programa dependen del sistema operativo, y debemos dirigirnos a los manuales correspondientes para conocer la sintaxis exacta. Como forma más común podemos dar la siguiente:
      compilar:         cc prog
                  cc modulo1, modulo2


      enlazar:           link prog, modulo1, modulo2

      ejecutar:          prog

Comentarios

Entradas populares de este blog

CRONOLOGIA DE LOS LENGUAJES DE PROGRAMACION

El  lenguaje de programación  es  definido   como un idioma artificial, formado por símbolos y reglas sintácticas y semánticas, para expresar computaciones y que pueden usarse para crear programas que controlen el comportamiento de una máquina, expresar algoritmos con precisión, o como modo de comunicación humana. En este  blog  han publicado una interesante infografía sobre  la historia de estos lenguajes, desde 1957 hasta el año 2005.  Parece que, entre los numerosos lenguajes de programación que existen hoy en día, los más populares son  Java, C y C++  (datos del año 2005). ESTOS SON ALGUNOS DE LOS MAS IMPORTANTES Y CON ALGUNOS IMAGENES 1 – Fortran (1957) FOR mula TRAN slation es el lenguaje de programación más antiguo y que continúa en uso. Creada por John Backus, esta herramienta fue desarrollada para la computación científica de alto nivel, matemáticas y estadísticas. A día de hoy, este lenguaje se sigue usando en la industria automovilística, aeroespacial, gubernament

Diagramas de flujo y su importancia

Un  Diagrama de Flujo  representa la esquematización gráfica de un  algoritmo , el cual  muestra  gráficamente los pasos o  procesos  a seguir para alcanzar la solución de un problema. Su correcta  construcción  es sumamente importante porque, a partir del mismo se escribe un  programa  en algún  Lenguaje  de Programación . Si el  Diagrama  de Flujo está completo y correcto, el paso del mismo a un Lenguaje de Programación es relativamente simple y directo. Es importante resaltar que el Diagrama de Flujo muestra el  sistema  como  una red  de procesos funcionales conectados entre sí por "Tuberías" y "Depósitos" de  datos  que permite describir el  movimiento  de los datos a través del Sistema. Este describirá: Lugares de Origen y Destino de los datos, Transformaciones a las que son sometidos los datos, Lugares en los que se almacenan los datos dentro del sistema, Los canales por donde circulan los datos. Además de esto podemos decir que este es una representación

Niveles que debe tener un programador

A partir de la experiencia de trabajar en el área de desarrollo y, especialmente con desarrolladores nóveles, he descubierto ciertas características en común que suelen tener. Hay mucho talento y potencial. También muchas aptitudes a mejorar. Algunas son técnicas y se aprenderán a lo largo del tiempo ya sea de una institución como puede ser la universidad, a través de la experiencia en un empleo o dejando fluir la curiosidad innata que todos tenemos. Sin embargo, hay otro tipo de aptitudes que van más allá de lo técnico y que deben incorporarse de a poco. Son las que en definitiva terminan marcando la diferencia entre un desarrollador profesional y un aficionado. A medida que los vayan leyendo, verán que muchas de estas aptitudes van más allá del trabajo en desarrollo y que pueden aplicarse no sólo a otras áreas de sistemas, sino también a cualquier otro tipo de empleo. Comencemos. Autonomía La autonomía implica la no dependencia de otro colega para realizar las tareas as