C语言 求助

.编写函数实现:一维数组作为函数的参数,并根据形参n把该一维数组的数组元素进行如下操作:假设定义有int a[5] = {10,20,30,40,50} ,形参n为2;则把a[2]及后面的元素移动到a[0]的位置,把之前a[2]前面的元素依次移动到后面,即移动后的效果如下:{30,40,50,10,20}。主函数中实现:把改变后的数组顺序输出。函数的定义可参考:void move(int arr[],int len,int n){}。

方法很多,最直接的方法是,在函数中定义一个临时数组,然后2次循环,先将n往后的值存入新数组,再将n之前的值存入数组。最后把临时数组的值全部赋值给原数组。

#include<stdio.h>

void move(int arr[],int len,int n);

int main()

{

    int i,arr[5]={10,20,30,40,50},n;

    printf("请输入n的值:"),scanf("%d",&n);

    move(arr,5,n);

    printf("数组{10,20,30,40,50}变为:");

    for(i=0;i<5;i++)

        printf("%d ",arr[i]);

    return 0;

}

void move(int arr[],int len,int n)

{

    int i,j,atemp[len];

    if(n>=len)

        printf("n值过大,数组访问越界!\n");

    else

    {

        for(i=n,j=0;i<len;i++,j++)

            atemp[j]=arr[i];

        for(i=0;i<n;i++,j++)

            atemp[j]=arr[i];

    }

    for(i=0;i<len;i++)

        arr[i]=atemp[i];

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-03-05
该题c代码如下:
#include <stdio.h>
void move(int arr[],int len,int n)
{
int i,j,t;
for(i=0;i<n;i++)
{
t=arr[0];
for(j=0;j<len-1;j++) arr[j]=arr[j+1];
arr[len-1]=t;
}
}
int main()
{
int i;
int a[5]={10,20,30,40,50};
move(a,5,2);
//显示运行结果
for(i=0;i<5;i++) printf("%d ",a[i]);
return 0;
}
如果是oj判分答题,需稍做修改,可追问。
第2个回答  2020-04-10
#include<stdio.h>
void move(int arr[],int len,int n);
int main()
{
int i,arr[5]={10,20,30,40,50},n;
printf("请输入n的值:"),scanf("%d",&n);
move(arr,5,n);
printf("数组{10,20,30,40,50}变为:");
for(i=0;i<5;i++)
printf("%d ",arr[i]);
return 0;
}
void move(int arr[],int len,int n)
{
int i,j,atemp[len];
if(n>=len)
printf("n值过大,数组访问越界!\n");
else
{
for(i=n,j=0;i<len;i++,j++)
atemp[j]=arr[i];
for(i=0;i<n;i++,j++)
atemp[j]=arr[i];
}
for(i=0;i<len;i++)
arr[i]=atemp[i];
}
第3个回答  2020-03-05

第4个回答  2020-03-26