C é uma linguagem estruturada. Não suporta o conceito de classes.
O C suporta o conceito de ponteiros e obriga o programador a fazer ele mesmo a alocação e desalocação da memória.
O C++ é uma linguagem que suporta a programação estruturada, orientação a objetos, funcional e um outro modelo, chamado programação genérica.
Também suporta o conceito de ponteiros, e exige que o programador aloque e desaloque memória diretamente.
Tanto C++ quanto C rodam diretamente sobre o sistema operacional. Portanto, são linguagens rápidas, mas que não geram código multiplataforma.
O C++ e o C são especificados por um comitê, e não pertencem a empresa nenhuma. O C possui algumas funções numa biblioteca padrão bem leve.
O C++ possui uma bilbioteca padrão um pouco mais elaborada, chamada STL, com classes como string, vector, map, thread e set. Há um conjunto de classes bem maior, mantido pelo mesmo grupo do padrão, chamado boost.
O C# suporta programação orientada a objetos e um pouco dos paradigmas funcional e reflexivo. É uma das linguagens que compõe a plataforma .Net, da microsoft.
Todas as linguagens dessa plataforma compilam para um assembly intermediário (chamado de IL), que é executado por uma máquina virtual. Portanto, todas as linguagens conversam entre si e são inerentemente multi-plataforma (embora somente as plataformas MS são oficialmente suportadas).
Tem uma grande biblioteca associada, chamada de .Net framework. Essa biblioteca possui uma poderosa ferramenta de pesquisa em coleções (listas, conjuntos, etc) chamada LINQ.
Embora o C# seja padronizado pelo ECMA, a .Net Framework é propriedade exclusiva da MS.
O C# é uma linguagem gerenciada. Portanto, não existem ponteiros. No lugar, existe o garbage collector, que desaloca memória sozinho e retira essa responsabilidade do programador.
A sintaxe do C# é inspirada no C++.
O Java é uma linguagem criada pela Sun e atualmente de propriedade da Oracle (que comprou a Sun).
Como o C#, seu código é compilado para um bytecode, que roda sobre uma VM. Suporta as plataformas Windows, Linux e Mac.
Como o C#, o Java também é uma linguagem gerenciada, e sua sintaxe é inspirada no C++.
Possui uma grande biblioteca padrão, mantida por um processo gerido pela Oracle, mas com a participação da comunidade.
Suporta o paradigma orientado a objetos e, em partes, o reflexivo. Há planos para que na próxima versão da linguagem inclua-se também um pouco de programação funcional.