C language is meant for writing high performance code and one is expected to write codes with proper meaning. It is not having error supporting feature like Java -- which makes it less robust but it can run much faster. Now coming to the question, C mandates that if we use any format specifier in printf and pass a different type as the corresponding argument, behaviour is undefined. i.e., if "%d" is used, passed value must be an integer (char is also of type integer). Here, 20/3.2 returns a double value because "3.2" is double and for any operation, the result will be of the largest type involved in the operation. 20/3 would give correct answer of 6. Otherwise use an explicit type casting with (int) (20/3.2)