Counting words, letters, average word length, and letter frequency
It's gonna be a small review, but do you know strtok ? As said on the link I provided : 


  A sequence of calls to this function split str into tokens, which are sequences of contiguous characters separated by any of the characters that are part of delimiters.


So if you want to split this into words, just put the delimiters to space and punctuation, and you already have most of the job done. 

An other thing :

float avg(float words, float letters)
{
    float a = (double)(letters / words);
    return a;
}


If you want a float, why do you explicitly cast it to a double ? That's why you have warnings.

Same goes for the typing of words and letters : can it take a negative value ? If not, why does your type allows it to do so, instead of using an unsigned type ? 

And last, I think you are re-inventing strlen with this piece of code : for (size = 0; array[size]; size++);. And of course you should not, just use the function instead.