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.