Вам нужно больше понимать операторы switch-case.
Операторы switch-case не выполняют блок кода после оператора case.Он просто переходит к правильному оператору.

После запуска блока кода после оператора case он просто запускает приведенный ниже код - игнорируя любой другой случайзаявления.
Так что, если вы хотите остановить до следующего оператора case, вы должны использовать break , который будет прерывать оператор switch.(Выйдите из оператора switch)
В результате ваш код будет выглядеть следующим образом.
#include <stdio.h>
#include <stdlib.h>
int main()
{
int h,m,s,ds;
printf("Introduza o nr de horas:\n");
scanf( "%d" , &h);
m = h*60;
s = h*60*60;
ds = h*60*60*10;
scanf( "%d%d%d" , &m, &s, &ds);
switch (h)
{
case 'a' :
{
printf(" Tem: %d minutos" , m);
break;
}
case 'b' :
{
printf(" Tem: %d segundos" , s);
break;
}
case 'c' :
{
printf(" Tem: %d decimos de segundo" , ds);
break;
}
default :
{
printf("Medida incorreta");
break;
}
}
}
Поскольку я думал, что вы изучали операторы switch-case, я не буду комментировать возвращаемое значение scanf.