Práctica 5b: Uso de funciones en C.

Anuncio
Práctica 5b: Uso de funciones en C.
Objetivos
En esta práctica el objetivo principal es el de poner en práctica los principios básicos del uso de
funciones en C.
Evaluación
La práctica consta de tres cuestiones, de los cuales habrá que realizar correctamente al menos una
para aprobar la práctica.
Procedimiento
En cada cuestión se pide la definición de una función de la cual se proporciona el prototipo y una
descripción de lo que debe realizar. Adicionalmente en algunas cuestiones se proporciona un
programa de ejemplo con llamadas a esa función para poder comprobar el correcto funcionamiento
de la misma.
Entrega de la práctica a través del servidor
Los resultados de todas la práctica se entregará usando el Servidor de Docencia. Para el correcto
funcionamiento de las siguientes páginas su navegador debe permitir cookies y la ejecución de
javascript. El servidor de docencia se encuentra situado en la siguiente dirección:
http://bono.us.es/sdocencia/
La entrega de la práctica consiste en copiar el código desarrollador en cada cuestión en el cuadro de
respuestas correspondiente del Servidor de Docencia. Hay que copiar el código una vez se haya
comprobado el correcto funcionamiento del programa.
IMPORTANTE:
•
Cada ejercicio se debe resolver utilizando el prototipo de la función pedida.
•
No está permitido el uso de lápices de memoria ni acceder a páginas web, en particular al
correo electrónico.
•
Está permitido crear y utilizar funciones auxiliares para resolver un ejercicio. Para poder
entregar correctamente una cuestión que use funciones adicionales, hay que definir el
prototipo de la función de forma local en la función que la utiliza y proporcionar su definición
en la respuesta.
1
Cuestión 501
El factorial de un número natural n se define como cero si es cero y como
para número mayores de cero.
Diseñar una función que calcule el factorial de un número entero. La función recibe como parámetro
de entrada un número entero y debe devolver el factorial del número si es mayor o igual que cero, y 1 en otro caso.
Prototipo
int factorial(int num);
Programa de ejemplo
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int factorial(int num);
void main(void)
{
int x;
x = 2;
printf("El
printf("El
printf("El
printf("El
printf("El
factorial
factorial
factorial
factorial
factorial
de
de
de
de
de
0 es %d\n",factorial(0));
1 es %d\n",factorial(1));
2 es %d\n",factorial(1+1));
6 es %d\n",factorial(x*3));
-3 es %d\n",factorial(-3));
for(x=4;x<7;x++)
printf("El factorial de %d es %d\n",x,factorial(x));
x = factorial(5) + factorial(3);
printf("3! + 5! = %d\n",x);
}
int factorial(int num)
{
/*************INICIO CÓDIGO DE ALUMNO*****************/
/***************FIN CÓDIGO DE ALUMNO******************/
}
2
Cuestión 507
Diseñar una función que calcule la raíz entera y de un número entero x. Es decir, una función que
calcule el mayor número entero z, tal que zy<=x. Suponga que tanto el radicando, x, como el
exponente, y, son números enteros positivos mayores o iguales que uno.
Ejemplo: La raíz cúbica entera de 30 será 3, ya que 33=27<30 y el siguiente número entero, 4, excede
el valor del radicando 43=64 >30.
La función recibe como primer argumento el exponente de la raíz y como segundo parámetro el
radicando.
Prototipo
int raizydex(int y, int x);
Programa de ejemplo
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int raizydex(int y, int x);
void main(void)
{
int i,j=2;
printf("La raiz
printf("La raiz
printf("La raiz
printf("La raiz
}
entera
entera
entera
entera
2
3
3
4
de
de
de
de
64
27
35
25
es
es
es
es
%d\n",raizydex(2,64));
%d\n",raizydex(3,27));
%d\n",raizydex(3,35));
%d\n",raizydex(4,25));
int raizydex(int y, int x)
{
/*************INICIO CÓDIGO DE ALUMNO*****************/
/***************FIN CÓDIGO DE ALUMNO******************/
}
3
Cuestión 510
La conjetura de Legendre, enunciada por de Adrien-Marie Legendre, afirma que siempre existe un
número primo entre n2 y (n + 1) 2.
Diseñar una función que dado n devuelva un número primo entre n2 y (n + 1) 2 o cero si no hay existe
ninguno.
Prototipo
int legendre(int n);
Programa de ejemplo
#include <stdio.h>
int legendre(int n);
void main(void)
{
int num;
int res;
printf("Introduzca un numero natural:\n");
scanf("%d",&num);
res = legendre(num);
if(res)
{
printf("El numero %d es primo y se encuentra entre %d y
%d",res,num*num,(num+1)*(num+1));
}
else
{
printf("¡La conjetura de Legendre es falsa! (revisa tu programa)");
}
}
int legendre(int n)
{
/*************INICIO CÓDIGO DE ALUMNO*****************/
/***************FIN CÓDIGO DE ALUMNO******************/
}
Nota: Para resolver esta cuestión se recomienda definir y utilizar una función auxiliar que indique si un
número natural es primo o no.
4
Descargar