Creo que el codigo ofrecido tiene un error adicional al hacer una suposición incorrecta. La suposición es esta:
No ser mayor que el máximo actual convierte a un numero en el menor del conjunto.
Si los nros fueran { 0, 2, 1, 7 }
La logica del código anterior se seguiría así:
- El máximo y mínimo es el 0 inicial.
- 2 es > 0, -> ahora 2 es el maximo, el minimo no cambia
- 1 no es > 2 -> ahora 1 es el minimo (lo que es falso).
Ademas, el codigo mantiene variables que pueden ser eliminadas.
Lo único necesario, creo yo, es mantener los indices del mayor o menor.
Propongo estas correcciones, imayor e imenor son los indices de los valores mayor y menor. No es necesario guardar el valor mayor o menor, porque eso se obtiene usando el arreglo que se recibe como parametro y esos índices.
#include <stdio.h>
void mayor_menor( int votos[] )
{
int imayor = 0, imenor = 0;
int contador = 0;
for( contador = 1 ; contador < 4 ; contador++ ) {
if ( votos[contador] > votos[imayor]) {
imayor = contador ;
}
else
if ( votos[contador] < votos[imenor]) {
imenor = contador;
}
}
printf( "Valor mayor: %d\n", votos
[imayor
] ); printf( "Valor menor: %d\n", votos
[imenor
] ); }
int main() {
int votos[] = { 0, 2, 1, 7 };
mayor_menor( votos );
}
Esto se puede ver en ejecución es este link:
http://goo.gl/24qbNK