1、(函数递归)下面程序输出结果是:12
int foo(int x, int y){
if(x <=0 || y <=0 ){
return 1;
}
if ( y%2 == 0) {
return 2*foo( x-3, y/3 );
}
else{
return 3*foo( x-2, y/2 );
}
}
printf("%d\n", foo(9, 12));
解析: 2foo(6,4)->12 foo(6,4)=2foo(3,1)=6 foo(3,1)=3*foo(1,0)=3
foo(1,0)==1
注意这里4/3取值1(整形)
2、下列程序执行后的输出结果为()
解析:
编译器在编译时会将宏定义展开,i* sum(i, (i+j), j)被展开为 i* i+(i+j)+j。因此,若想宏定义sum(a, b, c)为a,b,c的和,应该定义为 # define sum(a, b, c) (a+b+c)
宏替换后为i * i + (i + j) + j,即为3×3+5+2=16