In reply to Ravi007:
With no delay in your repeat loop, you have a zero-delay race condition - either branch could be taken. That is because an assign statement is a concurrent process, and the order of execution between independent processes is indeterminate.
Normally, most event driven simulators execute a single process until that process hits a blocking statement before switching to another process. So all 5 iterations of the repeat loop could execute before c gets updated. But some simulators optimize continuous assignments so that c updates immediately as soon as a and b change.