The questions asks in which scenarios a context switch will ALWAYS occur:
(a) Servicing an interrupt.
The kernel services the Interrupt on behalf of the running process only, it just switches the stack from Process Stack to Kernel stack. If the Interrupt is from System clock then there "MIGHT" be a context switch if the running process has exhausted the time quantum alloted to it. Otherwise there will be no context switch. Similarly for Interrupts, it may or may not context Switch.
(b) A blocking system call
A blocking system call is issued when the process wants some data from the disk or over the network. Typically there are very slow task and there is no point in waiting for them to finish, hence the CPU will switch to another process meanwhile the disk or network operation is going on. Hence, it will Context Switch.
(c) A non-blocking system call.
A non blocking system call, will not context switch, as the process has issued a command but it does not wait for it to finish. It carry on with its work and will get the result back in form of some callback function. Hence it will NOT context switch.
(d) The system call exit, to terminate the current process.
It has to context switch as the process has been terminated.