Ammetto di essere stato un po' criptico, ma non mi pare così complesso...
Scorri il primo vettore = usa un for per ciclare su ciascun elemento del primo vettore
Usa il valore che ne ricavi come indice per il secondo = ad ogni iterazione vai a considerare il valore dell'elemento del primo vettore su cui ti trovi; usa questo per accedere al corrispondente elemento del secondo vettore
l'elemento corrispondente ad esso andrà incrementato di uno = non so come renderlo più semplice...
Esempio:
	codice:
	#define ARRSIZE(arr) (sizeof(arr)/sizeof(*(arr)))
int vettoreInput[50];
int vettoreProb[100]={0};
/* ... riempimento vettoreInput ... */
/* Calcolo vettore probabilità */
int i, j, maxVI=0;
for(i=0;i<ARRSIZE(vettoreInput);i++)
{
    /* Evitiamo di fare danni */
    if(vettoreInput[i]>=ARRSIZE(vettoreProb))
    {
        /* il vettore probabilità è troppo piccolo, gestisci l'errore in qualche maniera (visualizza un qualche messaggio di errore, ...) */
        break;
    }
    vettoreProb[vettoreInput[i]]++;
    maxVI=max(maxVI, vettoreInput[i]);
}
for(i=0; i<=maxVI; i++)
{
    printf("%d: ",i);
    for(j=0; j<vettoreProb[i]; j++)
        putchar('*');
    putchar('\n');
}
 
Naturalmente se l'insieme dei possibili valori di vettoreInput è particolarmente sparso risulta più conveniente una struttura dati più flessibile, come l'hashtable.