【正确答案】
D
【答案解析】[考点] 情态动词
根据句意可知,后面的分句是对过去情况的肯定推测。may have done意为“过去可能做过……”,是对过去发生事情的可能性进行推测;ought to have done意为“本应该……”,表示本应该做的事情却没有做;must have done意为“一定是……”,表示对过去情况的肯定推测,符合题意。另外,forget to do sth. 意为“忘记去做某事(未做)”;forget doing sth. 意为“忘记做过某事(已做)”。综合考虑上述因素,应选D。
闹钟今天早上没有响,你昨晚一定是忘记上发条了。