c语言SQR(X)

Python042

c语言SQR(X),第1张

#define 就是定义宏。

简单理解#define SQR(X) X*X ,就是告诉编译器在代码中只要遇到SQR(X)的格式就用X*X替换。比如SQR(k+m)就相当于 (k+m)*(k+m)。

定义宏的好处是,方便后期修改,多处引用,只要修改开头定义就行。

函数式宏(function-like macro)较之对象式宏可以进行更复杂的代换。

函数式宏 sqr 是在编译时展开并填入程序的,因此 只要是能用双目运算符 * 进行乘法计算的数据类型,都能使用函数式宏

函数定义则需为每个形参都定义各自的数据类型,返回值的类型也只能为一种。就这点而言,函数较为严格。

函数为我们默默无闻地进行了一些复杂处理,如:

而函数式宏所做的工作只是宏展开和填入程序,并不进行上述处理。

根据以上特征, 函数式宏或许能使程序的运行速度稍微提高一点,但是程序自身却有可能变得臃肿

函数式宏在使用上必须小心谨慎。例如, sqr(a++) 展开后 ((a++) * (a++)) 。每次展开, a 的值都会自增两次。在不经意间表达式被执行了两次,导致程序出现预料之外的结果,我们称这种情况为宏的 副作用(side effect)

40

把SQR带入即可。

a/=k+m*k+m/k+m*k+m

=2+1*2+1/2+1*2+1

=2+2+0+2+1

=7

a=a/7=10/7=1

选B

41

main中for循环有错,应该是i++

于是

for循环执行2次

第一次:

k=f(a++)

先取值,即k=f(2)

a再自加为3.

进入f函数。

b=0

c=3

a=c++

=3

c自加为4

b++

自加为1.

返回a即3.

第二次进入f

执行f(3)

b=0

c=4

注意c是静态的,值是上次退出的值。

a=c++

=

4

c=5

b=1

返回4

于是k=4

选D