The fields are numbered starting from 1, and NF contains the number of them.
So we can iterate over them with for (i = 1; i <= NF; i++) { ... }, with $i inside the loop referring to the field in question. (i is actually just the number of the field, we need the $ operator to get the actual contents of the field.)
And as for finding if a value contains a particular substring, using a regex is easiest. s ~ /foo/ would see if the variable s matches the string foo anywhere, i.e. if it contains it as a substring. Now, you may also want to also match an uppercase letter, in which case e.g. [Ff] would work in place of the f. The bracket group [...] matches any one of the characters inside.
Of course you'll also need a counter, but that's easy, just initialize a variable to zero before the loop (e.g. count=0) and increment if there's a match (count += 1).
~ ~
So, basically, an awk script to run some code for each line/record of a file is just
awk '{ some code }' < filename.txt
Inside the code block, the for loop fits, and it also takes a block in braces { .. }.
awk '{ for ( ... ) { some code } }`
And an if works similarly,
if (condition) { some code... }
(They actually look just like for and if in C.)
And you can use semicolons to separate statements, so
awk '{ what to do before the loop; for ( ... ) { some code }; what to do after }`