Fundamentos de Programación en C: Ámbito de Variables y Funciones

Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 2,48 KB

Implementación del Cálculo Factorial en C

long Factorial(short);
int main(void) 
{ 
  short n; 
  printf("Introduzca el valor de n ... "); 
  scanf("%hd", &n); 
  printf("El factorial de %hd ", n); 
  printf("es %ld", Factorial(n)); 
  getch(); 
  return 0; 
} 

long Factorial(short a) 
{ 
  long F = 1; 
  while(a) 
  { 
    F = F * a; 
    a = a - 1; 
  } 
  return F; 
}

Gestión de Ámbito y Memoria

En este programa, la función principal main tiene definida una variable de tipo short, a la que hemos llamado n. En dicha función, esta variable es local, permitiéndonos gestionar sus características. La variable n se almacena en una dirección de memoria específica y guardará el valor recibido a través de la función scanf.

La función main invoca a la función Factorial. En la llamada, se pasa como parámetro el valor de la variable n. En ese instante, el valor de n se copia en la variable a de Factorial:

  • Cambio de ámbito: Desde el momento en que se produce la llamada a Factorial, abandonamos el ámbito de la función main.
  • Estado de las variables: La variable n está fuera de ámbito y no puede hacerse uso de ella, aunque no ha sido eliminada.
  • Independencia de datos: En el cálculo dentro de Factorial, se modifica el valor de la variable local a. Esta modificación no influye en la variable n, ya que residen en posiciones de memoria distintas.

Retorno y Finalización

Cuando termina la ejecución de Factorial, el control del programa vuelve a main. Las variables a y F dejan de existir (mueren), pero el valor de F ha sido devuelto y recibido como parámetro en la función printf, permitiendo mostrarlo por pantalla. De nuevo en la función principal, recuperamos el acceso al ámbito de la variable n.

Ejemplo: Máximo Común Divisor

Veamos ahora otro ejemplo, con un programa que calcule el máximo común divisor de dos enteros. De nuevo, resolvemos el problema mediante funciones:

#include <stdio.h> 
#include <conio.h> 

long euclides(long, long); 

int main(void)

Entradas relacionadas: