You can use the `-delete` flag of `find` (first test with `-ls`)
find -not -name "*.c" -delete
If you do not want to use `find`, but only files in the current directory, you could do
rm !(*.c)
Make sure in `bash` that with `shopt -s extglob` the correct globbing is set.