C语言常规优化策略
2 条件语句优化
2.1 多分枝条件语句优化
多分枝条件语句一般采用switch语句,这样的程序无论从清晰性和效率上都比原来的程序要好。例如下面的函数采用三种函数形式分别计算x在Alpha,Beta和Gamma处的值,通常的写法为:
int f(int x)
{
int y;
if (x==Alpha)
y=f1(x);
else
if (x==Beta)
y=f2(x);
else
if (x==Gamma)
y=f3(x);
return y;
}
采用switch语句可写成:
int f (int x)
{
int y;
switch (x)
{
case Alpha:
y=f1(x);
break;
case Beta:
y=f2(x);
break;
case Gamma:
y=f3(x);
break;
}
return y;
}
值得指出的是,在多分支条件语句不能改造成语句时,我们一般采用紧缩的写法,例如我们要计算下面的分段函数值
f(x)= f1(x) x<=Alpha
f2(x) Alpha <x<=Beta
f3(x) Beta<x<=Gamma
f4(x) Gamma<x
紧缩的写法为
int f(int x)
{
int y;
if (x<=Alpha)
y=f1(x);
else if (x<=Beta)
y=f2(x);
else if (x<=Gamma)
y=f3(x);
else
y=f4(x);
return y;
}
2.2 复杂条件分析与条件表达式化简
有时通过对复杂的条件表达式进行分析,将复杂条件表达式简化, 可以提高代码的效率,我们通过几个例子来说明复杂条件分析化简的方法。
2.2.1 三角形测试问题
给定三个正整数a、b、c,问它们是否构成一个三角形的三条边?
三个整数a、b、c构成三角形三边的充要条件为:
a+b>c (1)
b+c>a (2)
c+a>b (3)
一般来说,只要有了上述三个条件,我们不必再强调a、b、c>0,这些条件已经蕴含在上述三个条件中,如由(1)、(3)左、右两边分别相加化简后就可以得到a>0。由此得到三角形测试问题求解的第一个程序:
typedef int BOOL;
#define TRUE 1
#define FALSE 0
Bool IsTriangle(int a, int b, int c)
{
if (a+b>c && b+c>