世界上最小的客机型号:帮忙用C 写一个BIT数字左右移动旋转的程序

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/29 20:44:19
大家帮帮忙用DEV C 写个BIT数字左右移动旋转的程序。
要求比如:

BIT 数字: 01000000 向左移动3位就是0000010
注意一又转回右边的第2位了,而不是消失了。
向右移8位,就跟现在一样,因为1又旋转回去了原来的位置。
要求输入:printf("请输入要旋转的BIT数字: \n");
printf("请输入要旋转的次数: \n");
正数是向左转比如 3 向左转3下,
负数是象右转,比如 -3 向右转3下。

请大家用DVE C 写出来,在捻在回答帖上,而不要只说要怎么做。 谢谢
不一定要BIT 数字。只要是一组数字就可以。 比如 123456

5点半前做出的追加30分

 
 
 
把旋转 n 位看作是 n 次左旋一位的话,代码会很简短。
另外,旋转 -n 位(即右旋 n 位)的结果其实跟旋转 len - n 位的结果一样(len 是数字串的长度)。 比如,123456 旋转 -4 位既是旋转 6 - 4 位,即 2 位。

#include<stdio.h>
#include<string.h>

void rotate( char *array, int distance ) {
    long len = strlen( array );
    distance %= len ? len : 1;
    distance = distance < 0 ? distance + len : distance;
    while( distance-- ) {
        char temp = array[ 0 ];
        memmove( array, array + 1, len - 1 );
        array[ len - 1 ] = temp;
    }
}

int main( ) {
    char array[ 999 ];
    int  distance;
    puts( "请输入要旋转的BIT数字:" );
    gets( array );
    puts( "请输入要旋转的距离:" );
    scanf( "%d", &distance );
    rotate( array, distance );
    printf( "旋转的结果是:\n%s\n", array );
}

 
 
 

以下程序已经通过编译验证.....

#include <stdio.h>
#include <windows.h>

main()
{
char sz[255];
char sz_sw[255]; //用作交换
char *psz;
int i,len,d;
printf("请输入要旋转的BIT数字:");
scanf("%s",sz);
len=strlen(sz);
printf("\n");
while (1)
{
getchar();
printf("请输入对%s旋转的次数(最大不能超过:%d):",sz,len);
scanf("%d",&d);
printf("\n");
if (abs(d)>len) break;
if (d>0) {printf("%s向右旋转%d次后的结果是:",sz,d); d=len-d; }
else if (d==0) printf("%s原地旋转的结果是:",sz);
else { d=-d; printf("%s向左旋转%d次后的结果是:",sz,d); }
if (d) {
psz=&sz[d];
strcpy(sz_sw,psz);
sz[d]=0;
psz=&sz_sw[len-d];
strcpy(psz,sz);
printf("%s\n\n",sz_sw);
strcpy(sz,sz_sw);
}
else printf("%s\n\n",sz);
}
printf("**********旋转次数超出最大充许范围,程序结束!**********");
getchar();
getchar();
}