重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
所有C函数,只要其有返回值,都是由寄存器Ax(对于32位而言为EAX,如果AX不足以容纳,则由DX保存超过AX容量的部分)保存的(也可能是值,也可能是某一地址,视返回类型而定)。
创新互联是一家专业提供永吉企业网站建设,专注与成都网站建设、网站制作、html5、小程序制作等业务。10年已为永吉众多企业、政府机构等服务。创新互联专业网站建设公司优惠进行中。
上面这个C函数程序,计算(xy?x:y);后,该值就存在AX(EAX)中,当你在其他函数中调用该函数
后,比如
a=max(m,n);后,其实就是进入max()完成后,函数返时将计算结果存放在AX中,执行这个语句后,即就将AX的值传给了a.
其实,这也很容易验证:
在调用
a=max(m,n);
紧接着输入以下语句(注意:这中间绝对不能有其他任何函数调用和语句):
b=_AX;
printf("a=%d,b=%d",a,b);
你就可能发现,a=和b=一定是同一个值。
1 设计阶乘函数。
按照数学定义,对于n的阶乘,如果n为0,则返回1.
否则返回1*2*3*...*n的值。用循环实现。
2 在主函数中输入要求阶乘的值。
3 调用函数计算阶乘。
4 输出结果。
代码:
int fac(int n)
{
int r = 1;
int i;
for(i = 2; i =n; i ++)
r*=i;
return r;
}
int main()
{
int n,r;
scanf("%d",n);
r = fac(n);
printf("%d!=%d\n",n,r);
}
不用说执行fun()函数的结果是3,2,
先是x = 2, y = 3;
x = x + y = 2 + 3 = 5;此时 x= 5, y = 3;
y = x - y = 5 - 3 = 2;此时 x = 5, y = 2;
x = x - y = 5 - 2 = 3;此时x = 3, y = 2;
然后看main()函数中的printf;
注意x = 2, y = 3;是main()函数中的局部变量,当main()函数的}执行完才跳出失效;而fun(x,y);中的
x = 3, y = 2;是fun()函数中的局部变量,在fun()函数执行到}结束的时候就已经不具有意义。所以printf打印的是2,3。所以结果是3,2,2,3
本题考的是你对局部变量的理解。
答案是22
调用函数fun时,先计算fun(--x,--y); 再计算fun(x++,y++)
前缀 -- (或++):是先减(加)1后再将其结果代入运算
后缀 ++ (或--):是先代入数据后在对其进行加(减)1运算
故而
第一步:计算fun(--x,--y)时实际上代入的值为 fun(5,6) == 11; 即先将x和y减1后再代入
此时 x == 5, y == 6
第二步:计算fun(x++,y++)时,代入的值为fun(5,6) == 11; 即先将x和y代入运算然后再加1
此次调用后x == 6,y==7
第三步:计算fun(fun(x++,y++),fun(--x,--y)) ,此时实际上代入的值为 fun(11,11) == 22;
因此函数运行后 z 的值为 22; x 的值为6,y 的值为7
另外就是楼主最后一条打印语句出错了,应该是笔误吧:改为 printf("%d\n",z);