Io vi metto la mia soluzione e mi dite se è fatta bene o se è sbagliato qualcosa eventualmente aiutare a correggerlo
#include <stdlib.h>
#include <stdio.h>
struct nodo {
int info;
struct nodo *next;
};
struct nodo *leggi_lista(void) {
struct nodo *p, *primo=NULL;
int i, n;
scanf("%d", &n);
for (i=0; i<n; i++) {
scanf("%f", &x);
p = malloc(sizeof(struct nodo))(void);
p->info = x;
p->next = primo;
primo = p;
}
return(primo);
}
void stampa_lista(struct nodo *p) {
while (p != NULL) {
printf("%f --> ", p->info);
p = p->next;
}
printf("NULL\n");
return;
}
intmax(struct nodo *p) {
int m;
m = p->info;
while (p != NULL) {
if (m < p->info)
m = p->info;
p = p->next;
}
return(m);
}
/*
* Restituisce il valore del minimo elemento della lista.
*/
int min(struct nodo *p) {
int m;
m = p->info;
while (p != NULL) {
if (m > p->info)
m = p->info;
p = p->next;
}
return(m);
}
void calcola(struct nodo *p) {
float media, somma;
media = (min(p) + max(p))/2.0;
somma = 0.0;
while (p != NULL) {
if (somma + p->info < media) {
somma = somma + p->info;
printf("%f ", p->info);
p=p->next;
} else {
printf("\n");
somma = 0.0;
if (p->info >= media)
p = p->next;
}
}
return;
}
int main(void) {
struct nodo *primo;
primo = leggi_lista();
stampa_lista(primo);
calcola(primo);
return(1);
}