全国城市房价涨幅:c语言的题

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/29 16:33:42
unsigned fun6(unsigned num)
{ unsigned k=1;
do
{ k*=num%10; num/=10; }
while(num);
return k;
}
main()
{ unsigned n=26;
printf("%d\\n",fun6(n);
}

答案:12
谁能告诉我这个答案为什么是12,我算好像是2啊?

首先,形参传递26给num
num=26
k=1
之后进入循环体,首先执行do循环体里的语句
计算k*=num%10:首先计算num%10,结果是6;在计算k*=6,相当于k=k*6,结果是6——k=6;然后计算num/=10,相当于num=num/10,结果是2——num=2
然后是进入while(num); 进行判断,因为num=2,既判断结果为真,再一次执行循环体,此时,k=6,num=2
计算k*=num%10:首先计算num%10,结果是2;在计算k*=2,相当于k=k*2,结果是12——k=12;然后计算num/=10,相当于num=num/10,结果是0——num=0
然后是进入while(num); 进行判断,因为num=0,既判断结果为假,不再执行循环体,此时,k=12,num=0

向下执行,return k,此时k=12

首先从主函数main开始执行,先把n=26传给fun6的num,开始执行循环,初k=1,第一次循环:k=6(26/10……6)、num=2,真值。开始第二轮循环:此时尚k=6,6*2=12(由于第一轮num已经进行一次运算,并赋了新值,即2,2对10取余为2),k=12、num=0(num=2/10),假值,结束循环。返回k值,并输出,所以k=12。