Il problema è piuttosto semplice, perciò ti do un consiglio: prova di nuovo a trovarlo da solo, è veramente facile. Per aiutarti, metti un bel
codice:
printf("DEBUG: k = %d, i = %d\n", k , i);
subito dopo i due cicli for con cui conti k e i. Dovrebbe fartelo capire subito. Comunque se non ci arrivi sotto c'è la soluzione.


-----------------------------------------------


Tu decidi di inserire 3 numeri, quindi a viene inizializzato a 3. Ok?
Nei due cicli for, b assume i valori da 0 ad (a - 1). Questo significa che quando fai il confronto
codice:
vec[b] > vec[b + 1]
stai facendo il confronto
codice:
vec[a - 1] > vec[a]
, e ovviamente vec[a] non esiste: è il primo elemento *fuori* dall'array.

Quando vuoi fare un confronto tra gli elementi consecutivi di un array dovrai quindi fermarti un elemento prima, il che significa
codice:
 for (b = 0; b < (a - 1); ++b)
E poi ancora: alla fine fai il controllo
codice:
if (a == k)
.
Immagina che il vettore abbia 3 elementi. Una volta sistemato il ciclo come detto sopra, otterrai sempre che la sequenza è in ordine sparso. Questo perchè con 3 elementi puoi fare al massimo 2 confronti, quindi se i 3 numeri fossero crescenti k sarebbe uguale a 2, e non 3.

Ciao