Trovare il massimo e il minimo di un'array in C

In questo esercizio cerchiamo di trovare il valore massimo e minimo di un dato vettore contenente 10 valori.
Per poter determinare il valore massimo e minimo dobbiamo avere due variabili max e min che contengono rispettivamente il valore più grande e più piccolo attualmente trovati. Per fare ciò, dobbiamo scorrere tutto l’array e confrontare i singoli valori contenuti con i valori delle variabili max e min, e se necessario aggiornarli.

La domanda che si pone è: che valore iniziale assegnamo alle variabili max e min?
Ad esempio, se definiamo inizialmente max=0 e il vettore contiene solamente valori negativi (es. -2, -5, -3, -7), allora il valore del massimo sarebbe sbagliato, perché per noi sarebbe ancora il numero 0, ma in realtà il massimo del vettore è -2.
Il miglior modo per gestire questa situazione è quello di assegnare un valore già contenuto nel vettore, in questo modo si evitano possibili errori.
Nel nostro caso assegniamo alle variabili max e min il valore contenuto nella prima posizione del vettore.


  
#include <stdio.h>
#define N 10

int main(){
	int lista[N] = {2, -3, 4, -1, 0, 5, 9, 1, 7, 4};
	int max, min;

	max = lista[0];
	min = lista[0];

	for(int i=0; i<N;i++){
		if(lista[i]>max){
			max=lista[i];
		}
		if(lista[i]<min){
			min=lista[i];
		}
	}
	printf("Il valore massimo dell'array è: %d\n", max);
	printf("Il valore minimo dell'array è: %d\n", min);


	return 0;
}


Output: Il valore massimo dell'array è: 9 Il valore minimo dell'array è: -3

Oltre che a cercare il valore del massimo e del minimo possiamo cercare anche la loro posizione all’interno dell’array. In questo caso teniamo l’indice della posizione del minimo e del massimo, e confrontiamo i valori che scorrono nell’array con il valore del vettore nella posizione dell’indice iMax e iMin, e se necessario aggiorniamo gli indici.
Dato che stiamo considerando degli indici, iMax e iMin possono avere inizialmente un valore di default, basta che sia compreso tra 0 e la dimensione dell’array-1, nel nostro caso tra 0 e N-1.


  
#include <stdio.h>
#define N 10

int main(){
	int lista[N] = {2, -3, 4, -1, 0, 5, 9, 1, 7, 4};
	int iMax, iMin;

	iMax = 0;
	iMin = 0;

	for(int i=0; i<N;i++){
		if(lista[i]>lista[iMax]){
			iMax=i;
		}
		if(lista[i]<lista[iMin]){
			iMin=i;
		}
	}
	printf("Il valore massimo dell'array è: %d e si trova nella posizione: %d\n", lista[iMax], iMax);
	printf("Il valore minimo dell'array è: %d e si trova nella posizione: %d\n", lista[iMin], iMin);


	return 0;
}


Output: Il valore massimo dell'array è: 9 e si trova nella posizione: 6 Il valore minimo dell'array è: -3 e si trova nella posizione: 1

Indice pagine linguaggio C: