【题目描述】
编写函数void replace(int *a, int length, int n),用指针完成用数组a的前length个元素循环覆盖掉后面的元素的操作,n为a数组中元素个数,保证1≤length≤n,如原数组为{5,6,7,8,9,11},length为2则执行函数后变为{5,6,5,6,5,6},若length为4则执行函数后变为{5,6,7,8,5,6}。
【输入说明】
输入包含2行,第一行2个数字,分别表示n和length(n和length均小于100)。第二行有n个数字,是数组a的元素值。
【输出说明】
输出只有1行数据,是变换之后a数组的所有元素。每个数字之间用一个半角空格间隔。
【输入样例】
6 2
5 6 7 8 9 11
【输出样例】
5 6 5 6 5 6
void replace(int *a, int length, int n)
{
int i,j;
int x[100];
for (i=0;i<length;i++)
{
x[i]=a[i];
}
for (i=0,j=length;i<length,j<n;i++,j++)
{
a[j]=x[i];
if (i==(length)-1)
{
i=0;
}
}
for (i=0;i<n;i++)
{
printf ("%d ",a[i]);
}
}
int main()
{
int n,length;
scanf ("%d %d",&n,&length);
int i,j;
int a[100];
for (i=0;i<n;i++)
scanf ("%d",&a[i]);
replace (a,length,n);
return(0);
}
6 2
5 6 7 8 9 11
5 6 5 6 6 6
这是我得到的,i=0不是重置了吗,为什么还是6啊
有一说一,你代码写的挺乱的,给你个我写的参考:
void replace(int *a, int length, int n)
{
int i, j;
int x[100];
for (i = 0; i < length; i++)
{
x[i] = a[i];
}
i = 0;
for (j = 0; j < n; j++)
{
a[j] = x[i];
i++;
if (i==length)
{
i = 0;
}
}
for (i = 0; i < n; i++)
{
printf("%d ", a[i]);
}
}
如果真正想要知道为什么,请使用调试,这个是学习编程的必需品。如果实在看不出来,请看下面的修改,思考为什么。
void replace(int *a, int length, int n)
{
int i, j;
int x[100];
for (i = 0; i < length; i++)
{
x[i] = a[i];
}
for (i = 0, j = length; i < length, j < n; i++, j++)
{
a[j] = x[i];
if (i == (length)-1)
{
i = -1; //思考为什么???
}
}
for (i = 0; i < n; i++)
{
printf("%d ", a[i]);
}
}
想通了,忽略了i++运行的顺序,谢谢你的指点