>What kind of C final exam should I give my class then.
Write a program that matches their level of understanding and require them to describe how it works and why. Perhaps you can write several incorrect programs and have your students debug them as well as explain what was going wrong and why.
Yes, on a test I give them a Multiple Choice, True/False, Debugging- were the have to correct code, and 2-3 programming problems to write.