静态全局变量初值是0。所以arr初值是0。
最后输出循环是10次,包含10个数组元素1111000000
对于循环嵌套逻辑,要是理不清,在原程序循环的地方加printf语句把对于的一些变量打印处理会更清晰。比如我下面把原码添加了printf。
#include<stdio.h>
int change(int n,int s,int c)
{
return ((n==0)?(s+c-1)%c:(n+s)%c);
}
static int arr[10];
void solve(int man,int dis)
{
int i,j,temp,sum=0;
for(i=2;i<=man;i++)
{
sum+=i-1;
temp=sum;
printf("执行第%d次i循环:\n",i-2+1);
for(j=0;j<i-1;j++)
{
printf("--第%d次J循环:i=%d,j=%d\n 执行arr[j](arr[%d])=change(arr[j],dis,i)=change(%d,%d,%d)=%d\n",j+1,i,j,j,arr[j],dis,i,change(arr[j],dis,i));
arr[j]=change(arr[j],dis,i);
temp=arr[j];
}
printf("第%d次i循环结束前执行arr[i-1](arr[%d])=temp(等同于a[%d]的值)\n\n",i-2+1,i-1,j-1);
arr[i-1]=temp;
}
}
int main()
{
int i;
solve(4,3);
for(i=0;i<10;i++)
printf("%4d",arr[i]);
return 0;
}
题目答案是1 0 2 3 我算的是1 0 2 3 0 0 0 0 0 0
我是照着你图上代码敲了一遍,只是给你演示在循环中插入printf语句来帮助理解过程。
你的图片就那么大,我没打错字,输出结果就应该是对的。你要不你看我和原码打的有什么区别。
而且你看最后的输出
for(i=0;i<10;i++)
printf("%4d",arr[i]);
循环10次,怎么可能就打印4个数。