1 现有一维数组a[10],要求向左移动一位,之后向右移动还原它。
#include<stdio.h>
main()
{int i,x;
int a[10]={11,22,33,44,55,66,77,88,99,100};
for(i=0;i<10;i++)
printf(" %d",a[i]);printf("\n");//输出一下初始数组
x=a[0];//左移之后,a[0]要被覆盖,所以先把a[0]赋给X
for(i=0;i<=8;i++)
a[i]=a[i+1];//此处看下面具体分析
a[i]=x;//亦可写作a[9]等于X。因为走完for语句之后,i等于9,把a[0]即x赋给了空位a[9]。
for(i=0;i<10;i++)
printf(" %d",a[i]);printf("\n");
x=a[9];//同理,右移之后,a[9]要被覆盖,所以先把a[9]赋给X
for(i=9;i>=1;i--)
a[i]=a[i-1];//此处看下面具体分析
a[i]=x;//亦可写作a[0]等于X。因为走完for语句之后,i等于0,把a[9]即x赋给了空位a[0]。
for(i=0;i<10;i++)
printf(" %d",a[i]);
}
左移分析:
for(i=0;i<=8;i++)
a[i]=a[i+1];
具体走法 |
a[0]=a[1]; |
a[1]=a[2]; |
a[2]=a[3]; |
............... |
a[8]=a[9]; |
之所以i<=8,就是i+1不能等于10,如果是i<10的话,多了一步a[9]=a[10],数组最后一位就是a[9],没有a[10]所以会发生错误!
右移分析:
for(i=9;i>=1;i--)
a[i]=a[i-1];
具体走法 |
a[9]=a[8]; |
a[8]=a[7]; |
a[7]=a[6]; |
............. |
a[1]=a[0]; |
之所以i>=1,就是i-1不能小于0,如果是i>=0的话,多了一步a[0]=a[-1],数组位置从0开始,没有a[-1],所以会发生错误!