哈哈哈的 发表于 2019-1-29 11:09:24

新手,有两个国二的问题请教大家

第一个问题:
#include<stdio.h>
#define S(x) x/x
void main()
{
        int k=5,j=2;
        printf("%d,%d\n",S(k+j),S(j+k));
}
输出的结果为什么是7,9??我感觉应该是1,1才对啊。。k+j和j+k有什么区别??


第二个问题:
#include<stdio.h>
voidfun(int x)
{
   if(x/2>0) fun(x/2);
printf("%d",x);
}
void main()
{
fun(6);printf("\n");
}
这里考察函数的递归调用,可是为什么输出的结果是136,应该是631才对啊??

BngThea 发表于 2019-1-29 11:40:40

1 宏定义是无脑替换,所以
S(k+j) 等价于 k+j/k+j ==5+2/5+2 == 7
同理 S(j+k)

2 递归的意思是先递再归,也就是最后一层递归是最先出来的
页: [1]
查看完整版本: 新手,有两个国二的问题请教大家