注册 登录
编程论坛 C++教室

一道H3C的C/C++面试题

songhuirong1 发布于 2011-04-07 16:52, 1793 次点击
做了一份H3C的面试题,里面第三道题是这样的,我做不来啊。请各位帮忙解答下。
说出以下两个小程序的优缺点:
if(condition)
{
    for(int i=0;i<=n;++i)
    {
        doSomething();   
    }
}
else
{
    for(int i=0;i<=n;++i)
    {
        doSomething();   
    }
}






for(int i=0;i<=n;++i)
{
    if(condition)
        doSomething();
    else
        doOtherthing();        
}
10 回复
#2
songhuirong12011-04-07 17:04
我的想法是第一个程序if只执行一次,第二个程序if执行n+1次。
#3
hnuhsg12262011-04-07 18:01
第二个程序比第一个程序做了N-1次判断,并且前者老用逻辑判断,打断了for循环的“流水线”作业,使得编译器不能对循环做优化处理,降低了效率,如果N非常大,最好用第二个。如果很小,效果不明显。当差别不明显的时候用第一个程序,因为写法简洁。
#4
yuccn2011-04-07 18:51
林锐的《高质量c&c++编程》里面写到,而且有很多经典的题目和例子,呵呵,有空你去看看吧。真的能把你提高一个档次
#5
ljxksy5662011-04-07 19:15
可以减少循环次数,提高程序运行效率.
#6
pangding2011-04-08 08:35
不知道是不是楼主笔误。但如果第一个不是 doOtherthing() 的话,编译器应该会把 if 和 else 优化没,纯比第二个强。而且这两者就没什么对比性了。
#7
xiaoji7562011-04-08 14:15
我觉的2个程序的效果不同 就没有可比性
#8
Lyone2011-04-08 14:22
除了LS各位说的if的次数以外。个人还觉得,如果condition这个量在程序运行时能够被其他地方的代码修改,那么第一个程序可以实时的进行判断,而第二个程序却能保证for循环的稳定。
#9
ma122302011-04-08 15:23
小结一下——
代码编写量看:第一个代码行数多,第二个少
执行效率来看:第一个效率高,只进行了一次if判断,第二个进行了n次if判断
实时运行角度:如果有上下文,第一个能够根据实时更新的condition运行不同的分支,第二个不具备此功能(不考虑多线程和中断的情况下)
#10
zhaxi09272011-04-08 20:01
回复 8楼 Lyone
个人比较赞成8楼得观点,两段代码不一致。比如说楼主的程序中n=10,而condition是(i<5)。
#11
pangding2011-04-08 22:10
面试题怎么答都行,主要是考查人的思维方式和应变能力的。有的不一定有正确答案。
1