代码如下:

#include<stdio.h>
#include<stdlib.h>

int main()
{
	int num, count, i, a[32];
	count = 0; i = 0;
	scanf("%d", &num);
	while (num)
	{
		a[i] = num % 2;
		num = num / 2;
		count++;
		i++;
	}
	printf("count=%d\n", count);/*输出位数的总数*/
	for (i -= 1; i >= 0; i--)
	{
		printf("%d", a[i]);
	}
	printf("\n奇数位为:");
	for (i = 0; i<count; i += 2)/*数组从a[0]开始的,故i<count*/
	{
		printf("%d ", a[i]);
	}
	printf("\n偶数位为:");
	for (i = 1; i <= count; i += 2)
	{
		printf("%d ", a[i]);
	}
	system("pause");
	return 0;
}

上述方法只适合正数。

对此方法进行改进,通过移位法可以依次输出二进制序列。

代码如下:

#include<stdio.h>
#include<stdlib.h>

int main()
{
    int num,i,j,m,a[16],b[16]; 
    scanf("%d",&num);
    m=sizeof(a)/sizeof(a[0]);
    for(i=0,j=0;j<32;i++,j+=2)
    {
         a[m-1-i]=(num>>j)&1;/*num向右移动j位,数组a被倒序输入,数组a为偶数位*/
    }  
    printf("奇数位为:");
    for(i=0;i<m;i++)
    {
         printf("%d ",a[i]);
    }
    for(i=0,j=1;j<32;i++,j+=2)
    {
         b[m-1-i]=(num>>j)&1;/*num向右移动j位,数组b被倒序输入,数组b为奇数位*/
    }
    printf("\n偶数位为:");
    for(i=0;i<m;i++)
    {
         printf("%d ",b[i]);
    }
    printf("\n二进制序列为:");
    for(i=0;i<m;i++)
    {
    	 printf("%d%d",b[i],a[i]);
    }
    system("pause");
    return 0;
}