要求满足错误:
要求只用一个数组的方式实现,一定要保证在输出结果时,输出的顺序和数组中数的顺序是一致的。
#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
}
因为是按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。循环左移时,用从左边移出的位填充字的右端,而循环右移时,用从右边移出的位填充字的左侧。这种情况在系统程序中时有使用,在一些控制程序中用得也不少。设有数据说明:
a=01111011,循环左移2位正确结果:11101101
过程:
b=a>>(8-2)用来得到正常左移丢失的位和循环移位后其正确位置b=00000001
a=a<<2左移a=11101100
a=a|ba=11101101
如果不是用中间变量a=(a>>(8-2))|(a<<2)
总长度N(81632)
循环左移n:(a>>(N-n))|(a>>n)
循环右移n:(a<<(N-n))|(a>>n)
C语言的位运算功能是其区别于其他大多数高级程序设计语言的特色之一,用它可以方便实现一些特殊功能,灵活掌握是用C程序编写系统程序的基础。
扩展资料:
C语言高效编程技巧:
一:以空间换时间
计算机程序中最大的矛盾是空间和时间的矛盾,那么,从这个角度出发逆向思维来考虑程序的效率问题
二:数学方法解决问题
数学是计算机之母,没有数学的依据和基础,就没有计算机发展,所以在编写程序的时候,采用一些数学方法会对程序的执行效率有数量级的提高。
三:使用位操作
实现高效的C语言编写的第三招----使用位操作,减少除法和取模的运算。
在计算机程序中,数据的位是可以操作的最小数据单位,理论上可以用“位运算”来完成所有的运算和操作。一般的位操作是用来控制硬件的,或者做数据变换使用,但是,灵活的位操作可以有效提高程序运行的效率。
参考资料来源:百度百科-c语言程序设计