搜索
查看: 1546|回复: 17
打印 上一主题 下一主题

如何将二进制序列按分组输出?

[复制链接]
跳转到指定楼层
楼主
发表于 2014-9-9 15:26:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
下面是一个二进制序列代码:
#include<stdio.h>
void to_binary(unsigned long n);
int s[9],bin_n=0;
int main(void)
{
        system("color 00");
        unsigned long pn;
        for(pn=1;pn<=64;pn++)
        {
                if(pn%1==0)
                printf("\n");
                to_binary(pn);
        }
        printf("\n");
        getch();
}


void to_binary(unsigned long n)
{
        int r,pn;
        bin_n=0;
        while(n>=2)
         {
         r=n % 2;
         n/=2;
        s[bin_n]=r;
        bin_n++;
        }
        r=n % 2;
        s[bin_n]=r;
        printf("");
for(pn=10;pn>=0;pn--)
{
        printf("%d",s[pn]);
}
}


是从网上下载下来的,删除了一些我认为的多余的代码,请教同学,如何将以下的输出形式:
00000000001
00000000010
变成如下的输出形式:
000 000000 01
000 000000 10
就是将前三位数的后面输出一个空格,紧接着在后面的6位数后面又输出一个空格,形成分组的形式输出。

最佳答案

查看完整内容

随便改改就是了……
沙发
发表于 2014-9-9 15:26:07 | 只看该作者
  1. #include <stdio.h>

  2. void to_binary(unsigned long);

  3. char buf[32];

  4. int main()
  5. {
  6.         int i, j;
  7.         for(j=1; j<=64; ++j){
  8.         to_binary(j);
  9.         for(i=0; i!=3; ++i)
  10.                 printf("%d", buf[i]);
  11.         putchar(' ');
  12.         for(; i != 9; ++i)
  13.                 printf("%d", buf[i]);
  14.         putchar(' ');
  15.         for(; i != 11; ++i)
  16.                 printf("%d", buf[i]);
  17.         putchar('\n');
  18.         }
  19.         return 0;
  20. }

  21. void to_binary(unsigned long x)
  22. {
  23.         int pos = 10;
  24.         for(pos = 10; pos >= 0; --pos){
  25.                 buf[pos] = x % 2;
  26.                 x /= 2;
  27.         }
  28. }
复制代码

随便改改就是了……
板凳
发表于 2014-9-9 15:46:01 | 只看该作者
本帖最后由 rosynirvana 于 2014-9-9 15:47 编辑

输出3个数字,然后输出一个空格,然后输出6个数字,再输出一个空格

另外unsigned long是32位,你的缓存只有9位
另外,如果输出的结果大于11位,你打算如何分组呢
地板
 楼主| 发表于 2014-9-9 15:49:55 | 只看该作者
呵呵,厉害,佩服!我是新手,上面的代码我不是全看得懂,就是想要个分组输出的效果,不知道代码怎么写?
5#
 楼主| 发表于 2014-9-9 15:54:30 | 只看该作者
本帖最后由 西语言学习 于 2014-9-9 16:01 编辑

现在只考虑输出11位,大于11位的还不考虑。
6#
发表于 2014-9-9 16:03:31 | 只看该作者
  1. #include <stdio.h>

  2. void to_binary(unsigned long);

  3. char buf[32];

  4. int main()
  5. {
  6.         unsigned long pn;
  7.         int i;
  8.         scanf("%lu", &pn);
  9.         to_binary(pn);
  10.         for(i=0; i!=3; ++i)
  11.                 printf("%d", buf[i]);
  12.         putchar(' ');
  13.         for(; i != 9; ++i)
  14.                 printf("%d", buf[i]);
  15.         putchar(' ');
  16.         for(; i != 11; ++i)
  17.                 printf("%d", buf[i]);
  18.         putchar('\n');
  19.         return 0;
  20. }

  21. void to_binary(unsigned long x)
  22. {
  23.         int pos = 10;
  24.         for(pos = 10; pos >= 0; --pos){
  25.                 buf[pos] = x % 2;
  26.                 x /= 2;
  27.         }
  28. }
复制代码
7#
 楼主| 发表于 2014-9-9 16:11:12 | 只看该作者
您上面的代码我运行了,怎么什么都没有显示呢?
8#
发表于 2014-9-9 16:21:44 | 只看该作者
西语言学习 发表于 2014-9-9 16:11
您上面的代码我运行了,怎么什么都没有显示呢?

如果你不是在终端里运行的,自己加语句让程序在return 0前面暂停
9#
 楼主| 发表于 2014-9-9 16:24:25 | 只看该作者
大神,我不会加啊,最好您把完整的代码粘贴出来,先谢谢啦
10#
发表于 2014-9-9 16:28:24 | 只看该作者
“什么都没显示” 是说没看见控制台的窗口,还是控制台在等待你输入?
11#
 楼主| 发表于 2014-9-9 16:30:29 | 只看该作者
是控制台在等待你输入,但我一输入,回车后窗口就关闭了
12#
发表于 2014-9-9 16:34:43 | 只看该作者
return 0前面加一句system("pause");或者随便什么暂停语句,书上有讲过的……
13#
 楼主| 发表于 2014-9-9 16:43:33 | 只看该作者
刚在return 0前面加了一句system("pause");,可以输入,也出来了效果,
可是,我想要的效果,是如我粘贴的代码那样的效果,是有很多排,每排都分组显示的形式,如下所示:
000 000000 01
000 000000 10
000 000000 11
000 000001 00
000 000001 01
等等
14#
发表于 2014-9-9 16:58:02 | 只看该作者
你是说能一次输入好多数据?
“很多排”是说什么?很多行?
15#
 楼主| 发表于 2014-9-9 17:04:15 | 只看该作者
您运行下这个代码看看,应该就清楚了:
下面是一个二进制序列代码:
#include<stdio.h>
void to_binary(unsigned long n);
int s[9],bin_n=0;
int main(void)
{
        system("color 00");
        unsigned long pn;
        for(pn=1;pn<=64;pn++)
        {
                if(pn%1==0)
                printf("\n");
                to_binary(pn);
        }
        printf("\n");
        getch();
}


void to_binary(unsigned long n)
{
        int r,pn;
        bin_n=0;
        while(n>=2)
         {
         r=n % 2;
         n/=2;
        s[bin_n]=r;
        bin_n++;
        }
        r=n % 2;
        s[bin_n]=r;
        printf("");
for(pn=10;pn>=0;pn--)
{
        printf("%d",s[pn]);
}
}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表