void
rightmove(
int
x[],
int
length
)
int
main(void)
{
int
a[10]={1,2,3,4,5,6,7,8,9,0}
int
count,n,len=10
//
右移位数n,len不应该这样得到,我懒得算
printf("Input
n:\n")
scanf("%d",&n)
for(count=0
count<n%10
count++)
{
rightmove(
a,
len)
}
for(
count=0
count<len
count++
)
printf("%d
",
a[count])
printf("\n")
//
注释掉的这2行是我调试用的,别管
//
rightmove(
a,
10)
//
printf("%d
%d",
*a,
n)
return
0
}
void
rightmove(
int
x[],
int
length
)
{
int
*tmp=NULL,
i
tmp=(int*)malloc(sizeof(int))
for(i=length-1
i>0
i--)
{
*tmp=*(x+i)
*(x+i)=*(x+i-1)
*(x+i-1)=*tmp
}
free(tmp)
tmp=NULL
}
我不知道我理解的对不对,环移1位就是所有成员向右移动1位,最后1位到最前面来。
main函数就是用来测试的,函数rightmove就是把整形数组向右移动1位,形参是数组首地址和数组长度。
main函数输入N,rightmove循环N次。数组只有10个成员,你可以重新定义。
CODE SEGMENTBUF DB16 DUP(?)
START: PUSH CS
POP DS
PUSH CS
POP ES
LEA SI,BUF
MOV AL,[SI+15]
RCR AL,1
RCR BYTE PTR[SI],1
RCR BYTE PTR[SI+1],1
RCR BYTE PTR[SI+2],1
RCR BYTE PTR[SI+3],1
RCR BYTE PTR[SI+4],1
RCR BYTE PTR[SI+5],1
RCR BYTE PTR[SI+6],1
RCR BYTE PTR[SI+7],1
RCR BYTE PTR[SI+8],1
RCR BYTE PTR[SI+9],1
RCR BYTE PTR[SI+10],1
RCR BYTE PTR[SI+11],1
RCR BYTE PTR[SI+12],1
RCR BYTE PTR[SI+13],1
RCR BYTE PTR[SI+14],1
RCR BYTE PTR[SI+15],1
MOV AH,4CH
INT 21H
CODE ENDS
END START
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)