Problema 1: Escribe una función que calcule el factorial de un número, dado como parámetro. A continuación realiza
un programa que lea por teclado un número entero n y muestre por pantalla los factoriales de los
números de 1 a n. El programa debe usar la función factorial previamente definida.
Solución:
#include <stdio.h>
#include <stdlib.h>
float factorial(int n); /*prototipo de funcion*/
int main( )
{ int i,n;
do
{ system("cls");
printf("Introduce un nº positivo (maximo 25): ");
scanf("%d",&n);
}while (n<1 || n>25);
for(i=1; i<=n; i++)
{ printf("%d! = ",i);
printf("%.0f \n",factorial(i)); /* Llamada a la función */
}
system("pause");
return 0;
}
float factorial(int n) /* dado un numero n devuelve su factorial */
{ int i;
float fact=1;
for(i=1; i<=n; i++)
fact=fact*i;
return fact;
}
Problema 2: Realizar un programa que calcule el número e, utilizando el siguiente desarrollo en serie:
e = 1 + 1/1! + 1/2!+ …+ 1/10! + …
El programa debe usar la función factorial definida en el ejercicio anterior.
Solución:
#include <stdio.h>
#include <stdlib.h>
float factorial(int n);
int main()
{ int i,j,n;
float e =1;
do
{ system("cls");
printf("Cálculo del nº e segun la formula:\n\n");
printf("e = 1 + 1/1! + 1/2! + ... + 1/10! + ... \n\n");
printf("Introduce el nº de terminos a usar (max 10):");
scanf("%d",&n);
} while (n<1 || n>10);
printf("\nFormula: e = 1");
for(i=1; i<=n-1; i++)
{ printf(" + 1/%d!",i);
e = e + 1/factorial(i);
}
printf("\n\nEl numero e vale %f \n\n",e);
system("pause");
return 0;
}
float factorial(int n)
{ int i;
float fact=1;
for(i=1; i<=n; i++)
fact=fact*i;
return(fact);
}
Problema 3: Dos números son amigos, si cada uno de ellos es igual a la suma de los divisores del otro. Por ejemplo,
220 y 284 son amigos, ya que:
Suma de divisores de 284: 1 + 2 + 4 + 71 + 142 = 220
Suma de divisores de 220: 1 + 2 + 4 + 5 + 10 + 11 + 20 + 22 + 44 + 55 + 110 = 284
Hacer una función que determine si dos números dados como parámetros son amigos o no. A
continuación realizar un programa que muestre todas las parejas de números amigos menores o iguales
que n, siendo n un número introducido por teclado. El programa debe usar la función amigo
previamente definida.
Solución:
#include <stdio.h>
#include <stdlib.h>
bool amigo(int x, int y); /* prototipo de funcion */
int main()
{ int n,n1,n2;
system("cls");
printf("Introduce un numero: ");
scanf("%d",&n);
for(n1=1; n1<=n; n1++)
for(n2=1; n2<=n; n2++)
if (amigo(n1,n2))
printf("%d y %d son numeros amigos \n",n1,n2);
system("pause");
return 0;
}
/* dados dos nº x y devuelve un 1 si son amigos y 0 si no lo son */
bool amigo(int x, int y)
{ int sumax, sumay, n;
sumax=1; sumay=1;
for(n=2; n<x; n++)
if (x%n==0)
sumax=sumax+n;
for(n=2; n<y; n++)
if (y%n==0)
sumay=sumay+n;
return (sumax==y && sumay==x);
}