C is called middle-level language because it actually binds the gap between a machine level language and high-level languages. A user can use c language to do System Programming (for writing operating systems) as well as Application Programming (for generating menu driven customer billing systems). That's why it is called the middle-level language.
C language is one of the most popular and oldest computer programming languages because it is a structured, machine-independent language and a high-level language. C language allows software developers to develop software or applications without worrying about the hardware feasibilities, where they will be implemented.
High level - Ada, Modula-2, Pascal, COBOL, FORTRAN, BASIC
Low level - Assembler
Key points about the terminology used in this article
Low, high, and blah-level is all just vague terminology with no deterministic factor behind it. Traditionally, low-level languages refer to machine code and assembly, and high-level refer to everything else. Now we are also using a "very high level" term which is used for scripting languages (anything interpreted rather than compiled).
The C language can be used for both, system programming just like an operating system as well as application programming just like a spreadsheet. It binds the gap between machine level languages and high-level languages.
It has bitwise operators that make it possible to program at bit level For ex: machine level in terms of binary and hexadecimal i.e. program the CPU peripherals. Hence the widely used in embedded systems programming and device drivers eventually.
What do you think?
By using the C programming language, we will be able to manipulate bits, bytes, and addresses extensively. It can interact with direct hardware platforms as well as carry out the other operations related to memory management language, behave like a high-level language through functions, gives a modular programming environment, and increase overall efficiency and re-usability of the systems module. It also gives access to the physical memory through the pointers and supports a low-level programming environment as well.
I hope, now you have a better understanding of middle, high and low-level languages. Comments and suggestions regarding this article are welcome.