#include<stdio.h>
#define n 5
void main()
{
int a[n],i,t;
for(i=0;i<n;i++) a[i]=i+1;
printf("逆序前數組a[]=");
for(i=0;i<n;i++) printf("%4d",a[i]);
printf("\n");
i=0;
while(i<n-i-1)
{
t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;i++;
}
printf("逆序後數組a[]=");
for(i=0;i<n;i++) printf("%4d",a[i]);
printf("\n");
//將數組a的元素右移m個位置,壹步到位
for(i=0;i<n;i++) a[i]=i+1;
int temp=a[0];//將a[0]儲存起來
int k=0;
int m;
printf("請輸入要向後移動的位數:");
scanf("%d",&m);
do
{
int b=0;
for(int j=0;j<n;j++)//尋找要移動到a[k]位置的數a[b]
{
if((j+m)%n==k)
{
b=j;
break;
}
}
a[k]=a[b];//將a[b]移動到a[k],第壹步時將a[2]移動到a[0]
k=b;//第壹步移動完成後k=0變為b=2以此類推
}while(k!=0);
a[(0+m)%n]=temp;
printf("右移後數組a[]=");
for(i=0;i<n;i++) printf("%4d",a[i]);
printf("\n");
//定義第二個數組b,將a中的元素直接放到b中合適的位置,全做好後,再把b拷貝回a。
for(i=0;i<n;i++) a[i]=i+1;
int b[n]={0};
for(i=0;i<n;i++)
{
b[(i+m)%n]=a[i];
}
for(i=0;i<n;i++)
{
a[i]=b[i];
}
printf("右移後數組a[]=");
for(i=0;i<n;i++) printf("%4d",a[i]);
printf("\n");
}
本程序數組數據移動法只能解決奇數元素個數的數組,偶數的數組不能完全實現,數組是偶數時情況太多,不如用新建數組相互拷貝的方法。
其實本題用遞歸要好壹點,不過那需要用到函數調用,這兒就不寫了
覺得好,望采納