lunes, 9 de junio de 2014

Aprendiendo a programar en C

El lenguaje de programación C es uno de los lenguajes de programación más usados por los programadores en todo el mundo. Existen páginas web en las que explican también como hacer programas sencillos en C. Algunos de estas páginas son las siguientes:






Nosotros podemos hacer programas escritos en Lenguaje C desde Windows o desde Linux. Si queremos hacerlo desde Windows debemos instalarnos un entorno de desarrollo ( por ejemplo JGrasp, Devcpp, etc... ), pero si queremos programar en C desde Linux, no hace falta que instalemos nada, puesto que ya trae incorporado lo necesario para programar: un editor de textos (por ejemplo el "gedit" o el "kwrite"), y un compilador (el gcc).

Nosotros vamos a suponer que estamos haciendo los programas en Linux.

1.- PRIMER PROGRAMA EN LENGUAJE C

El primer programa que vamos a hacer es muy sencillo, y lo único que va a hacer es imprimir por pantalla un mensaje.

Para hacer nuestro primer programa en Lenguaje C abrimos un terminal, y desde ahí abrimos el editor de textos en segundo plano con la siguiente orden:

gedit programa1.c &

A continuación se abrirá el "gedit" y copiamos las siguientes lineas, poniendo especial cuidado en no omitir ningún caracter, por muy insignificante que pueda parecer:

#include <stdio.h>

int main(void)
{
  printf ("\n Este es mi primer programa en C \n");
  return 0;
}

  • La instrucción #include <stdio.h> sirve para inlcuir la librería <stdio.h> en nuestro programa.
  • La instrucción int main(void) sirve para crear la función principal del programa
  • Las llaves {} sirven para delimitar donde empieza y donde acaba el contenido de la función
  • La instrucción printf sirve para sacar por pantalla el mensaje "Este es mi primer programa en C"
  • Los caracteres \n sirven para escribir saltos de linea en el mensaje del printf
  • La instrucción return 0; sirve para devolver un valor numérico por la funcion main.

  • Observa que todas las lineas que van entre las llaves, terminan en punto y coma ";" . Y otra cosa muy importante es poner los espacios en los lugares adecuados y no omitirlos.

Una vez que hemos escrito estas lineas en el archivo programa1.c, lo guardamos. Este archivo es lo que se llama el código fuente del programa, y para que pueda funcionar tenemos que traducirlo al lenguaje que pueda entender el microprocesador (o CPU), ese lenguaje se llama código máquina.

Para traducirlo se usa un programa especial llamado compilador , que en el caso de Linux es el programa gcc, y se usa de la siguiente manera:

gcc programa1.c


esto generará automáticamente en el directorio actual un archivo llamado a.out que es el archivo que contiene el código máquina, o por decirlo de otra manera, es el programa que se puede ejecutar directamente sobre el sistema operativo.

Para ejecutarlo, vamos al terminal y ejecutamos lo siguiente:

./a.out

De esta forma ejecutaremos el programa que acabamos de escribir.

2.- SEGUNDO PROGRAMA EN LENGUAJE C (Estructura de control If-Else)



Como acabamos de ver, el crear nuestro primer programa en lenguaje C no ha sido muy complicado. Aunque a medida que vayamos avanzando, la cosa se pondrá más dificil.

El segundo programa que vamos a hacer, me va a pedir dos números enteros y me tiene que decir cuál de ellos es más grande o si son iguales.

Creamos un archivo llamado programa2.c con el gedit en segundo plano de la siguiente forma:

gedit programa2.c &

Y a continuación escribimos las siguientes lineas en él:


#include <stdio.h>

int main(void)
{
  int x,y;  
  printf ("\n Escribe un numero entero:");
  scanf ("%d",&x);
  printf ("\n Escribe otro número entero:");
  scanf ("%d",&y);

  if ( x > y ) {
     printf ("El numero %d es mayor que el %d",x,y);
  } else {
     if ( y > x ) {
        printf ("El numero %d es mayor que el %d",y,x);
     } else {
        printf ("Los dos numeros son iguales: %d",x);
     }
  }

  return 0;
}


  • Observa que las primeras 2 lineas son iguales a las del programa anterior, y en general se suelen repetir en la mayoría de los programas en C
  • La instrucción  scanf sirve para leer por teclado un dato, y ("%d",&y)le dice a "scanf" que el dato a leer va a ser un "numero entero" y que se va a guardar en la variable "y"
  • La linea int x,y; crea dentro de la función main dos variables de tipo "numero entero" (integer), llamadas x e y.
  • La instrucción if es una estructura de control de programa que hace una comparación ( x > y ) y dependiendo de si esa comparación es verdadera, ejecutará unas instrucciones, o si la comparación es falsa ejecutará las instrucciones que se encuentren dentro del else.
  • Observa que dentro del primer else se encuentra otra instrucción if y else. Esto se llama un if anidado.
  • Observa también que las llaves { } me sirven para delimitar las instrucciones que se encuentran dentro de cada bloque if o else.
Ahora que ya hemos creado el código fuente del programa, tenemos que guardarlo. Después lo compilamos desde el terminal con la siguiente instrucción:

gcc programa2.c

y para ejecutarlo:

./a.out

Ten en cuenta que el archivo a.out que acabas de crear, ha sobreescrito el archivo a.out del programa anterior, por eso, si queremos guardarlo con otro nombre, existe la posibilidad siguiente:

gcc -o programa2 programa2.c

así el archivo generado se llamará programa2 y será ejecutable

3.- TERCER PROGRAMA EN LENGUAJE C

El siguiente programa que vamos a hacer va a pedir 2 números enteros y me va a mostrar la suma, la resta, la multiplicación y la división de dichos números.

Creamos y abrimos el archivo programa3.c de la siguiente manera:

gedit programa3.c &

el código fuente de este programa es el siguiente:


#include <stdio.h>

int main(void)
{
  int x,y;  
  printf ("\n Escribe un numero entero:");
  scanf ("%d",&x);
  printf ("\n Escribe un otro entero:");
  scanf ("%d",&y);

  printf ("\nLa suma de %d y %d es \n",x,y,x+y);
  printf ("\nLa resta de %d menos %d es \n",x,y,x-y);
  printf ("\nEl producto de %d por %d es \n",x,y,x*y);
  printf ("\nLa división de %d entre %d es \n",x,y,x/y);

  return 0;
}

Ahora guardamos el archivo, y lo compilamos desde el terminal:

gcc -o programa3 programa3.c

y lo ejecutamos para comprobar que funciona bien:

./programa3


4.- CUARTO PROGRAMA EN LENGUAJE C (Bucle Do-While)

El siguiente programa que vamos a hacer va a pedir por teclado un número entero, y hasta que ese número no sea un 0 seguirá pidiendo un nuevo número. Se va a usar un bucle " do - while ".

Creamos y abrimos el archivo programa4.c de la siguiente manera:

gedit programa4.c &

el codigo fuente de éste programa es éste:

#include <stdio.h>
int main(void)
{
  int x,y=1;

  do {
    scanf ("%d",&x);
    printf (" Linea %d \n",y++);
  } while ( x!=0 );
  return 0;
}  

Ahora lo guardamos y lo compilamos desde el terminal:

gcc -o programa4 programa4.c

y lo ejecutamos para ver si funciona:

./programa4




  • La estructura " do { instrucciones } while (condición); " es un bucle que ejecuta una o varias veces las instrucciones que están entre llaves. Cuando deja de cumplirse la condición el bucle termina.
  • La operación " y++ " sirve para incrementar el valor de la variable " y " después de ser usado en esa instrucción


  • 5.-  QUINTO PROGRAMA EN LENGUAJE C (Bucle While)

    El siguiente programa es igual que el anterior, pero cambiando el bucle " do - while " por un bucle " while " .

    Creamos y abrimos el archivo programa5.c de la siguiente manera:

    gedit programa5.c &

    el código fuente de éste programa es:

    #include <stdio.h>
    int main(void)
    {
      int x=1,y=1;

      while ( x!=0 ) {
        scanf ("%d",&x);
        printf (" Linea %d \n",y++);
      } 
      return 0;
    }  

    Ahora lo guardamos y lo compilamos desde el terminal:

    gcc -o programa5 programa5.c

    y lo ejecutamos para ver si funciona:

    ./programa5




  • La estructura "  while (condicion) { instrucciones }  " es un bucle que ejecuta cero o varias veces las instrucciones que están entre llaves. Cuando deja de cumplirse la condición el bucle termina.



  • 6.-  SEXTO PROGRAMA EN LENGUAJE C (Bucle For)

    El siguiente programa usa un bucle " for ". Este programa te pide un número y te muestra todos los números pares que hay desde el 0 hasta ese número.

    Creamos el archivo programa6.c:

    gedit programa6.c &

    el código fuente de éste programa es:

    #include <stdio.h>
    int main(void)
    {
      int x,y;

      printf (" Escribe un número entero: ");
      scanf ("%d",&x);

      for (y=0;y<=x;y=y+2) {
        printf ("Numero Par: %d \n",y);
      }
    }

    Ahora lo guardamos, lo compilamos y lo ejecutamos desde el terminal:

    gcc -o programa6 programa6.c

    ./programa6
    • La estructura " for (inicio;condicion;incremento) { instrucciones } " es un bucle que se ejecuta mientras que se cumpla la condicion puesta entre los paréntesis. El  incremento modifica la variable que controla la condición. Esa variable es inicializada en inicio.


    7.-  SEPTIMO PROGRAMA EN LENGUAJE C (Bucle For)

    El siguiente programa es una modificación del anterior. En este caso también te pide un número entero, y te muestra en dos columnas los números impares y pares que hay desde el 0 hasta el número que le has dicho por teclado. 

    Creamos el archivo programa7.c:

    gedit programa7.c &

    el código fuente de éste programa es:

    #include <stdio.h>
    int main(void)
    {
      int x,y;

      printf (" Escribe un número entero: ");
      scanf ("%d",&x);

      printf ("  Impares        Pares \n");
      printf ("===========    ========= \n");

      for (y=0;y<=x;y=y+2) {
        printf ("    %d            %d \n",y-1,y);
      }
    }

    Ahora lo guardamos, compilamos y ejecutamos desde el terminal:

    gcc -o programa7 programa7.c

    ./programa7

      8.-  OCTAVO PROGRAMA EN LENGUAJE C (Tabla de Multiplicar)

      Este programa te pide un número entero entre 1 y 10, y te muestra la tabla de multiplicar de dicho número:

      Creamos el archivo programa8.c:

      gedit programa8.c &

      el código fuente de éste programa es:

      #include <stdio.h>
      int main(void)
      {
        int x,y;

        printf (" Escribe un número entero: ");
        scanf ("%d",&x);

        printf ("TABLA DE MULTIPLICAR DEL %d \n",x);
        printf ("=============================\n");

        for (y=0;y<11;y++) {
          printf (" %d x %d = %d\n",x,y,x*y);
        }

        return 0;
      }

      Ahora lo guardamos, compilamos y ejecutamos desde el terminal:

      gcc -o programa8 programa8.c

      ./programa8

        • El bucle "for" se puede sustituir por un bucle "while" o por un bucle "do - while":
          • El bucle "while" sería así ( hay que inicializar antes la variable y=0 ):

          y=0;

          while ( y<11 ) {
            printf (" %d x %d = %d \n",x,y,x*y);
            y++;
          } 

          • El bucle "do - while" sería así ( también hay que inicializar antes la variable y=0 ):

          y=0;

          do {
            printf (" %d x %d = %d \n",x,y,x*y);
            y++;
          } while ( y<11 )


        9.-  NOVENO PROGRAMA EN LENGUAJE C (Bucles for Anidados)

        Este programa es una mejora del anterior. Te muestra las tablas de multiplicar desde la tabla del 1 hasta la tabla del 10:

        Creamos el archivo programa9.c:

        gedit programa9.c &

        el código fuente de éste programa es:

        #include <stdio.h>
        int main(void)
        {
          int x,y;

          for (x=1;x<11;x++){
            printf (" TABLA DEL %d \n",x);
            printf ("===============\n");

            for (y=0;y<11;y++){
              printf (" %d x %d = %d \n",x,y,x*y);
            }

          }
        }

        Ahora lo guardamos, compilamos y ejecutamos desde el terminal para ver que funciona:



        gcc -o programa9 programa9.c

        ./programa9

          • En este ejercicio usamos un bucle for dentro de otro bucle for. Estos bucles se llaman bucles anidados. Se pueden anidar tantos bucles como se quiera pero hay que poner especial hincapié en no olvidar poner las llaves que delimitan las instrucciones de cada bucle, y en controlar muy bien las condiciones de salida de los bucles.

          10.-  DECIMO PROGRAMA EN LENGUAJE C (Bucles while Anidados)

          Este programa es igual que el anterior, pero se sustituyen los bucles for por bucles while anidados. Te muestra las tablas de multiplicar desde la tabla del 1 hasta la tabla del 10:

          Creamos el archivo programa10.c:

          gedit programa10.c &

          el código fuente de éste programa es:

          #include <stdio.h>
          int main(void)
          {
            int x,y;

            x=1;
            while (x<11){
              printf (" TABLA DEL %d \n",x);
              printf ("===============\n");
              y=0;
              while (y<11){
                printf (" %d x %d = %d \n",x,y,x*y);
                y++;
              }
              x++;
            }
          }



            Ahora lo guardamos, compilamos y ejecutamos desde el terminal para ver que funciona:

            gcc -o programa10 programa10.c

            ./programa10

              • Observa que ahora la variable que controla cada bucle while, se incrementa al final de los mismos bucles.
              • Estos mismos bucles se pueden sustituir por bucles do - while.
              • Los bucles anidados no tienen porque ser iguales entre ellos. Por ejemplo, puedes meter un bucle for dentro de un bucle while, y éste a su vez estar dentro de un bucle do-while.
              • Puede haber tantos niveles de bucles anidados como desees, aunque no es muy recomendable superar el 5º o 6º nivel, porque sería bastante lioso para el programador, aunque un programador experto no tendría muchos problemas para manejarlo.



              11.-  UNDECIMO PROGRAMA EN LENGUAJE C ( Estructura switch - case)

              Este programa muestra un menú con varias opciones, y dependiendo de la opción que elijas hará diferentes tareas:

              Creamos el archivo programa11.c:

              gedit programa11.c &

              el código fuente de éste programa es:

              #include <stdio.h>
              int main(void)
              {
                char opcion;
                int x,y;

                printf (" a .- Sumar dos numeros\n");
                printf (" b .- Restar dos numeros\n");
                printf (" c .- Multiplicar dos numeros\n");
                printf (" d .- Dividir dos numeros\n");

                printf ("    Elige la opcion:");
                scanf ("%c",&opcion);

                switch (opcion) {
                  case 'a':
                    printf ("Sumar dos numeros\n Escriba el primer número:");
                    scanf ("%d",&x);
                    printf (" Escriba el segundo número:");
                    scanf ("%d",&y);
                    printf ("La suma de %d + %d es %d",x,y,x+y);
                    break;

                  case 'b':
                    printf ("Restar dos numeros\n Escriba el primer número:");
                    scanf ("%d",&x);
                    printf (" Escriba el segundo número:");
                    scanf ("%d",&y);
                    printf ("La resta de %d - %d es %d",x,y,x-y);
                    break;

                  case 'c':
                    printf ("Multiplicar dos numeros\n");
                    printf (" Escriba el primer número:");
                    scanf ("%d",&x);
                    printf (" Escriba el segundo número:");
                    scanf ("%d",&y);
                    printf ("El producto de %d x %d es %d",x,y,x*y);
                    break;

                  case 'd':
                    printf ("Dividir dos numeros\n");
                    printf (" Escriba el numerador:");
                    scanf ("%d",&x);
                    printf (" Escriba el denominador:");
                    scanf ("%d",&y);
                    printf ("La division de %d / %d es %d",x,y,x/y);
                    break;

                  default: 
                    printf ("Error, opcion incorrecta");
                    break;   }
              }

              • Aqui estoy usando un nuevo tipo de variable, el tipo char, que es una variable de tipo caracter o letra. Una variable de este tipo puede guardar un caracter, es decir, una letra, un número o cualquier otro caracter especial.
              • Para leer una variable de tipo char, se mete "%c" como parámetro de la función scanf.
              • La estructura switch - case permite elegir varias opciones dependiendo del valor de la variable que la controla, en este ejercicio, la variable "opcion".
              • Todas las opciones del switch empiezan con case, y antes de poner otro case, se debe insertar la instrucción break.
              • La opción default ( que contempla cualquier otra opción que no estuviera ya contemplada antes ), se pone al final, y sirve para gestionar aquellas opciones que no hayamos contemplado en los case anteriores, y también debe terminar con un break.
              g

              No hay comentarios:

              Publicar un comentario