Ho cambiato il meno possibile per permetterti di capire meglio, questo è funzionante (senza controlli sull'input, non ho aggiunto cose di questo tipo), ho solo modificato i valori di ritorno e di argomento delle funzioni. Per fare come facevi tu avresti dovuto conoscere e usare i puntatori, ma non credo... quindi ti ho lasciato i passaggi di parametri per valore... per spiegazioni e tutto, sono qui
#include <iostream>
#include <cstdlib>
using namespace std;
const int nmax=100;
//prototipi di funzioni
void letturavettore (int v[],int r);
void trovaotto (int v[], int n);
int somma (int v[], int n);
float mediavoti (float s,int n);
void stampamedia (float media);
//programma per la media dei voti
int main()
{
int v[nmax];
int n;
float s, media;
do
{
cout<<" inserisci la dimesione del vettore"<<endl;
cin>> n;
}
while (n>nmax);
letturavettore (v, n);
trovaotto(v, n);
s=somma(v,n);
media=mediavoti(s, n);
stampamedia(media);
system ("PAUSE");
return 0;
}
//funzione letturea vettore
void letturavettore (int v[], int n)
{
for(int i=0; i<n; i++)
{
cout<< "inserisci il valore "<<i<<" :";
cin>> v[i];
}
}
//trova e stampa i valori di 8
void trovaotto (int v[], int n)
{
int j=0;
for (int i=0; i<n; i++)
{
if (v[i]==8)
j++;
}
cout<<"gli otto sono "<<j<<endl;
}
//somma dei voti, intero: essendo i voti interi, la somma deve essere un intero
int somma(int v[],int n)
{
int s=0; // non passata come argomento, dichiarata qui e inizializzata a 0
for (int i=0; i<n; i++)
{
s=s+v[i];
}
return s; // passaggio di ritorno per valore
}
// media voti: ovviamente float
float mediavoti (float s, int n)
{
float media;
media=s/n; // variabile media dichiarata qui, non passata come argomento!!!
return media;
}
//stampa media
void stampamedia(float media)
{
cout<<"la media dei voti e' "<<media<<endl;
}