TA的每日心情 | 怒 2014-12-12 07:01 |
---|
签到天数: 8 天 [LV.3]偶尔看看II
逆向联盟VIP会员
   
- 积分
- 344
|
本帖最后由 夺命书生 于 2014-11-7 18:52 编辑
在C语言程序中,常常使用循环结构来解决特定的问题,那么在设计程序的时候,如何才能提高循环语句的效率呢?
C语言循环语句中,for 语句使用频率最高,while 语句其次,do 语句比较少用。
提高循环语句效率的基本方法是,降低循环体的复杂性,先说说几种提高循环效率的情况。
一. 直接提高循环语句的效率
1.在多重循环中如果有可能,应该将最长的循环放在最内层,最短的循环放在最外层,
以减少CPU 切换循环层的次数,例如下面的两种写法。
写法一(长的循环在外层)
- for(i=0;i<100;i++)
- {
- for(k=0;k<10;k++)
- {
- sum=sum +a[i][k];
- }
- }
复制代码 写法二(长的循环在内层)
- for(k=0;k<10;k++)
- {
- for(i=0;i<100;i++)
- {
- sum=sum +a[i][k];
- }
- }
复制代码
2.如果在循环体内,再做逻辑判断,并且循环次数较大,应该将逻辑判断移到循环体的外面。
写法一(效率低但程序简洁)
- for(i=0;N<10;i++)
- {
- if(condition)
- {
- dosomething();
- }
- else
- {
- dosomething();
- }
- }
复制代码 写法二(效率高但程序不简洁易读)
- if(condition)
- {
- for(i=0;N<10;i++)
- {
- dosomething();
- }
- }
- else
- {
- for(i=0;N<10;i++)
- {
- dosomething();
- }
- }
复制代码 写法一比写法二多执行了N-1次逻辑判断,并且由于写法一每次循环都要进行逻辑判断,打断了循环模式,
使得编译器不能对循环进行优化处理,降低了效率。
如果N 的量非常大,最好采用第二种写法,可以提高效率,如果 N 的量非常小,两者效率差别不明显,
采用写法一比较好,代码简洁易读。
二. 简洁提高循环语句的效率
1.对于简单的,if...else 语句,建议使用C语言的三目运算符,“ ?:” 代替,以提高程序的执行效率。
- if(i<20)
- {
- a=1;
- }
- else
- {
- a=1;
- }
复制代码 可以写成
2.在程序中不允许出现一下风格
- if(i<20)
- return a;
- return b;
复制代码 应该写成
- if(i<20)
- {
- return a;
- }
- else
- {
- return b;
- }
复制代码
3.对于 switch 语句,在每个 case 的后面不要忘记加 break , 除非你想某几个分支重叠。
4.switch 语句,一定要有 default ,既使它不做什么。
|
|