細かく関数に分割したところで簡潔にならないなら本末転倒w
初心者に限らずプログラムはできる限りシンプルな方がよい。

そもそも数字で始まるのは単語でなくていいのか?というのはおいといて
元の問題は、
 [状態S0]:単語が始まっていない
  英字登場→単語数のカウントアップ、S1へ
  それ以外(※)→S0のまま
 [状態S1]:単語の途中
  空白登場→S0へ
  それ以外(※)→S1のまま
という2つの状態を行き来すると考える。
※英字、数字、空白以外の文字がでてきた場合はどうするのか?

具体的には「ふらぐ」ってーのでS0とS1を区別する
flag=0; /* 単語は始まっていない */
while(1文字取り出し){
 if(英字?){
  if(flag==0){
   ++単語数;
   flag=1; /* 単語が始まった */
  }
 }
 if(空白?){
  if(flag==1){
   flag=0; /* 単語が終わった */
  }
 }
}
ってな感じ。
「ふらぐ」をやたらめったらと使うべきではないが、(この程度なら)分かり易いプログラムが書ける。