Ponieważ zastosowałes operator logiczny or || a 40 jest wieksze bądź równe 10.
w warunku: else if ( p>=10 || p<20) l2(), cokolwiek musi być równe prawda żeby warunek został spełniony, czyli p>=10 da true a p<20 da false a my w or potrzebujemy tylko jednego true. Dla zakresów stosuje się and.
Napiszę to teraz po ludzku. napisałeś warunek: else if ( p>= 10 lub p<20) to wykonaj l2()