I have most experience with C. In my opinion it is a very nice language. It is simple and powerful. My only beef with it is that it has no real support for generics. You can do pseudo-template stuff with the preprocessor but it gets bloated quickly. Also no overloading so function names tend to be less than obvious. The biggest advantage of C is that it doesn't hide too many things from you. The name of the game is performance and control.
The thing that I like best about C is that it is not a general purpose language, or at least it doesn't attempt to do everything and fall miserably short of its goal.
Building operating systems, and small programs/algorithms where performance is critical.
Input! Taking input in C is difficult if done correctly.
Despite its name, I don't think C++ is very much like C. It inherits a lot of the syntax, but so do Java and other languages. The memory management model seems powerful, but pays for it by increasing complexity. Actually, an appropriate generalization of C++ is that it pays for everything with increases in complexity. Because of this it isn't very suitable for well structured small to medium sized projects.
My biggest issue with C++ is that it's a mammoth. It has accumulated a lot of elements throughout the years, and its difficult to know what does what, or what exactly each construct costs. It is also difficult to learn, and dealing with templates is less than friendly. The documentation is cryptic.
When I need C performance but I'd like the object abstraction. Basically big, performance-critical programs.
When there is something simpler that will get the job done.
Not bad.