Teste da função maximo
[Enunciado]
// Este programa testa a função recursiva maximo,
// que calcula um elemento máximo de um vetor.
//////////////////////////////////////////////////
#include <stdio.h>
#include <stdlib.h>
int maximo (int n, int v[]);
#define N 10000
int main (void)
{
int v[N], n;
printf ("\nNúmero de elementos: ");
scanf ("%d", &n);
if (n < 1 || n > N) {
printf ("Vetor vazio ou muito grande\n");
return EXIT_FAILURE;
}
printf ("Elementos:\n");
for (int i = 0; i < n; ++i)
scanf ("%d", &v[i]);
int x = maximo (n, v);
printf ("máximo: %d\n", x);
return EXIT_SUCCESS;
}
Teste com vetor aleatório e função de verificação
// Este programa testa a função recursiva maximo,
// que procura um elemento máximo de um vetor.
//////////////////////////////////////////////////
#include <stdio.h>
#include <stdlib.h>
int maximo (int n, int v[]);
int confere (int x, int n, int v[]);
#define N 50
int main (void)
{
int v[N], n;
printf ("\nNúmero de elementos: ");
scanf ("%d", &n);
if (n < 1 || n > N) {
printf ("Vetor vazio ou muito grande\n");
return EXIT_FAILURE;
}
for (int i = 0; i < n; ++i)
v[i] = rand ( );
for (int i = 0; i < n && i <= 20; ++i)
printf ("%11d\n", v[i]);
if (n > 20) printf (" . . .\n");
int x = maximo (n, v);
printf ("máximo: \n%11d\n", x);
if (confere (x, n, v) == 1)
return EXIT_SUCCESS;
printf ("Alguma coisa está errada!\n");
return EXIT_FAILURE;
}
// Ao receber v e n >= 1, esta função devolve
// o valor de um elemento máximo de v[0..n-1].
int maximo (int n, int v[])
{
if (n == 1)
return v[0];
else {
int x;
x = maximo (n-1, v);
if (x > v[n-1]) return x;
else return v[n-1];
}
}
// Se x é o valor de um elemento máximo de v[0..n-1]
// esta função devolve 1. Senão, devolve 0.
//
// (É claro que só vou usar a função durante os testes
// de maximo; depois que tiver confiança em maximo,
// vou eliminar esta função.)
int confere (int x, int n, int v[])
{
int bandeira = 0;
for (int i = 0; i < n; ++i) {
if (v[i] > x) return 0;
if (v[i] == x) bandeira = 1;
}
return bandeira;
}