C语言 求助 20
方法很多,最直接的方法是,在函数中定义一个临时数组,然后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];
}
#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判分答题,需稍做修改,可追问。
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];
}