scanf("%d%d%d",&n,&aa[0],&aa[1]);//输入3,2,1后n =3 ,aa[0]=2,aa[1]=1
for(i=1;i
t=uu[n--];//这条语句后t = 1 n =0
t+=3*uu[n];//这条语句后t=t+3*aa[0] t=7
n++//n = 1
uu[n]=t//aa[1]=7;
第一次循环结束
第二次i=2 aa[0]=2 aa[1]=7
t=uu[n--];//这条语句后t = 0 n =1
t+=3*uu[n];//这条语句后t=t+3*aa[1] t=21
n++//n = 2
uu[n++]=t/10;//aa[2] = 2 n=3
uu[n]=t%10//aa[3] = 1
第二次循环结束
for(i=0;i<=n;i++) printf("%d",aa[i]);
输入aa[0],aa[1],aa[2],aa[3].
所以结果是2,7,2,1
推荐你安装VC6.0这个可以单步调试,你就可以看内存变化什么的了。
对aa的调用就是调用指针,因为aa相当于&aa[0],也就是相当于直接对aa[]数组进行操作
在主函数中,第一次调用sub()函数,传入的是i=1,在函数里面t先等于aa[0],即输入的2,然后做+=运算,t变成5,n++成为2。在if判断中不满足条件,所以uu[2]=5
第二次调用sub()函数可以类推,不同点在于这次满足if条件。
最后应该输出的是2 1 6 1吧,没有太仔细算,你可以用vc运行一下看看啊,我的vc刚好最近出问题了。。。
#include
void sub(int n,int uu[ ])
{ int t;
t=uu[n--];//t为uu[n]=1,然后n减一.例如第一次调用时,n=1,uu[3]=0,然后n=1-1=0
t+=3*uu[n];//相当于t=t+3*uu[n],t=1+3*2=7
n++;//n自增,n=1
if(t>=10) {uu[n++]=t/10;uu[n]=t%10;}//uu[n++]=t/10是先让uu[n]=t/10,然后n=n+1
else uu[n]=t;
}
void main()
{
int i,n,aa[10]={0};
scanf("%d%d%d",&n,&aa[0],&aa[1]);//输入n和aa[0],aa[1]数值
for(i=1;i
printf("\n");
}
scanf("%d%d%d",&n,&aa[0],&aa[1]);//输入3,2,1后n
=3
,aa[0]=2,aa[1]=1
for(i=1;i
第一次i=1
aa[0]=2
aa[1]=1
t=uu[n--];//这条语句后t
=
1
n
=0
t+=3*uu[n];//这条语句后t=t+3*aa[0]
t=7
n++//n
=
1
uu[n]=t//aa[1]=7;
第一次循环结束
第二次i=2
aa[0]=2
aa[1]=7
t=uu[n--];//这条语句后t
=
0
n
=1
t+=3*uu[n];//这条语句后t=t+3*aa[1]
t=21
n++//n
=
2
uu[n++]=t/10;//aa[2]
=
2
n=3
uu[n]=t%10//aa[3]
=
1
第二次循环结束
for(i=0;i<=n;i++)
printf("%d",aa[i]);
输入aa[0],aa[1],aa[2],aa[3].
所以结果是2,7,2,1
推荐你安装VC6.0这个可以单步调试,你就可以看内存变化什么的了。
好像子函数少了括号,结果应该是2,7,2,1
#include
void sub(int n,int uu[ ])
{ int t;
t=uu[n--];t+=3*uu[n];
n++;
if(t>=10) {uu[n++]=t/10;uu[n]=t%10;}
else uu[n]=t;
}
main()
{int i,n,aa[10]={0};
scanf("%d%d%d",&n,&aa[0],&aa[1]);
for(i=1;i
printf("\n");
}
aa数组初始化为0,输入321后n=3,aa[0]=2,aa[1]=1。
然后两次调用sub,分别为sub(1,aa),sub(2,aa)
第一次调用后aa[0]=2,aa[1]=7,其他都是0
第二次调用后aa[0]=2,aa[1]=7,aa[2]=2,a[3]=1