A resposta de Sparky é uma maneira padrão de resolver esse problema, mas como também escrevi no meu comentário, você corre o risco de estouros. Isso pode ser resolvido usando um tipo mais amplo, mas e se você quiser dividir long long
s?
A resposta de Nathan Ernst fornece uma solução, mas envolve uma chamada de função, uma declaração de variável e uma condicional, o que o torna não mais curto que o código dos OPs e provavelmente ainda mais lento, porque é mais difícil de otimizar.
Minha solução é esta:
q = (x % y) ? x / y + 1 : x / y;
Será um pouco mais rápido que o código de OPs, porque o módulo e a divisão são executados usando a mesma instrução no processador, porque o compilador pode ver que eles são equivalentes. Pelo menos o gcc 4.4.1 executa essa otimização com o sinalizador -O2 em x86.
Em teoria, o compilador pode incorporar a chamada de função no código de Nathan Ernst e emitir a mesma coisa, mas o gcc não fez isso quando o testei. Isso pode ocorrer porque vincularia o código compilado a uma única versão da biblioteca padrão.
Como observação final, nada disso importa em uma máquina moderna, exceto se você estiver em um loop extremamente rígido e todos os seus dados estiverem em registradores ou no cache L1. Caso contrário, todas essas soluções serão igualmente rápidas, exceto, possivelmente, as de Nathan Ernst, que podem ser significativamente mais lentas se a função precisar ser buscada na memória principal.
q = x/y + (x % y != 0);
é suficiente