请大侠帮解决一下这几题C语言 先谢谢了!!!!!!!!!!!!

来源:百度知道 编辑:UC知道 时间:2024/06/24 07:53:11
可不可以简单说一下原因:
1下列程序段的输出结果是 (29) 。
#define M(x, y) x / y
printf("%d", M(10,2+3));
A、2 B、2.0
C、5 D、8
为什么?

2对于以下递归函数f,调用 f (2) 的返回值是 (31) 。
int f(int x)
{ return ((x<=0)? x: f(x-1)+f(x-2));
}
A、-1 B、0
C、1 D、3
为什么?
3下列程序段的输出结果是 (32) 。
int k, s;
for(k=0, s=0; k<10; k++,s--)
if (s>k) break;
else s += k;
printf("(%d, %d)", k, s);

printf("%d", M(10,2+3)); =printf("%d", 10/2+3);
所以是8

f(2)=f(1)+f(0)=f(0)+f(-1)+0=0+-1=-1

(6,9) 推一下~~~

1.相当于10/2+3=8,因为它是原封不动的带入。

2. 当x<=0时f(x)=x
当x>=0时f(x)=f(x-1)+f(x-2)
所以:
f(2)=f(1)+f(0)=f(0)+f(-1)+f(0)=-1

3、k s同步变化,所以s=0
因为k<10停止循环,所以k=10
(10,0)

1、宏指令是简单的替换,

由于 #define M(x, y) x / y

而 M(10, 2+3);

所以其被替换为 10 / 2 + 3,所以结果为8

2、刚看错了以为是Fibonacci数列呵呵!
由于 x <= 0 ? x : f(x-1) + f(x-2)
所以
f(2)
= f(1) + f(0)
= f(0) + f(-1) + 0
= 0 - 1 + 0
= -1

3、
第一次:k = 0, s = 0
End:k = 1, s = 0

第二次:k = 1, s = -1
End:k = 2, s = -1

第三次:k = 2, s = -1
End:k = 3, s = 0

第四次:k = 3, s = 0
End:k = 4, s = 2

第五次:k = 4, s = 2
End:k = 5, s = 5

第六次:k = 5, s = 5
End:k = 6, s = 9

所以结果为:6, 9