@torn24 mi sembra una ottima implementazione.
Mi permetto di formattare meglio il codice e usare nomi di variabile più espliciti.
Ho sempliificato anche l'else if (credo senza effetti collaterali).
Ho tolto il <= nel for che non mi piaceva (immagina di riscriverlo in Java)
e ho messo il conteggio dell'ultima parola al fondo.

codice:
int contaparole(char *str)
{
    int i, parole = 0;
    char inizioparola = 0;

    for (i = 0; i < strlen(str); i++) {
        if (str[i] >= 'a' && str[i] <= 'z') // sono su una parola
            inizioparola = 1;
        else if (inizioparola) { // sono sul primo carattere dopo la parola
            parole++;
            inizioparola = 0;
        }
    }
    // conteggio l'ultima parola
    if (inizioparola)
        parole++;

    return parole;
}