首页 新闻 搜索 专区 学院

数组元素替换求解

0
悬赏园豆:100 [已解决问题] 解决于 2021-12-11 19:56

【题目描述】
编写函数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

include <stdio.h>

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啊

wedy1234的主页 wedy1234 | 初学一级 | 园豆:6
提问于:2021-12-11 19:22
< >
分享
最佳答案
1

有一说一,你代码写的挺乱的,给你个我写的参考:

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]);
    }
}
收获园豆:100
寂静的羽夏 | 小虾三级 |园豆:1623 | 2021-12-11 19:40

想通了,忽略了i++运行的顺序,谢谢你的指点

wedy1234 | 园豆:6 (初学一级) | 2021-12-11 20:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册