C语言 数组的循环移动

Python012

C语言 数组的循环移动,第1张

要求满足错误:

要求只用一个数组的方式实现,一定要保证在输出结果时,输出的顺序和数组中数的顺序是一致的。

#include<stdio.h>

int main(){

int array[100]

int m, n, i,j, tmp, distance

scanf("%d%d", &n, &m)

for (i = 0 i < n ++i)   //输入

scanf("%d", &array[i])

distance = n - m   //尾部要替换过去的值之间地址相距n-m个元素.

for (i = distance i < n ++i){   //循环移动,每次移动一个。

tmp = array[i - distance]

array[i - distance] = array[i]

for (j = i j > i - distance --j){

array[j] = array[j - 1]

}

array[i - distance + 1] = tmp

}

for (i = 0 i < n ++i){  //输出

printf("%d", array[i])

if (i != n - 1)

printf(" ")

}

printf("\n")

return 0

}

#include<stdio.h>

#define N 5

int main(){

    int i,j,m,n,a[N][N]

    printf("input m n:")

    scanf("%d%d",&m,&n)

    while(m>0)m-=N

    while(n>0)n-=N

    for(i=0i<Ni++)        

        for(j=0j<Nj++)

            a[i][j]=i*N+j+1

    for(i=0i<Ni++){        

        for(j=0j<Nj++)

            printf("%-3d",a[(N-m+i)%N][(N-n+j)%N])

        printf("\n")        

    }    

    return 0

}

input m n:1 1

25 21 22 23 24

5  1  2  3  4

10 6  7  8  9

15 11 12 13 14

20 16 17 18 19

因为是按8进制输入的,8进制的24换成10进制就是20,换成2进制就是00010100(以1字节表示)。而00010100循环右移2位后就是00000101,即10进制的5,而5按8进制输出(输出格式为%o),就是5。00010100循环左移2位后是01010000,用10进制表示就是80,而80按8进制输出(输出格式为%o),就是120。