标题:如何用二进制数来填充到数组中,求教啦!!
只看楼主
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
结帖率:93.33%
已结贴  问题点数:20 回复次数:4 
如何用二进制数来填充到数组中,求教啦!!
要求,如下:
i = 1   0 0 0 0 0 0 0 0 0
i = 2   0 0 0 0 1 1 0 0 0
i = 3   0 0 0 1 0 0 1 0 0
i = 4   0 0 0 1 1 1 1 0 0
i = 5   0 0 1 0 0 0 0 1 0
i = 6   0 0 1 0 1 1 0 1 0
i = 7   0 0 1 1 0 0 1 1 0
i = 8   0 0 1 1 1 1 1 1 0
i = 9   0 1 0 0 0 0 0 0 1
i = 10  0 1 0 0 1 1 0 0 1
i = 11  0 1 0 1 0 0 1 0 1
i = 12  0 1 0 1 1 1 1 0 1
i = 13  0 1 1 0 0 0 0 1 1
i = 14  0 1 1 0 1 1 0 1 1
i = 15  0 1 1 1 0 0 1 1 1
i = 16  0 1 1 1 1 1 1 1 1
 规律:这里有16个一维数组,每行为一个一维数组,每个数组有9个数,第一个数都为0,单独看 每个一维数组,没有啥规律,现在把这16个一维数组放在一起来看就成了一个16行的二维数组。
在这个16行的二维数组里,每行第一个数都为0,每行第二个数到到该行结束共8个数,这8个数分成前面4个数和后面4个数,前面4个数从第一行到16行分别是0000到1111,是以二进制数的形式出现的。后面的4个数是把该行前面的4个数来了个反向输出(0001反向为1000)。
编写代码如下:
程序代码:
#include <stdio.h>  
#include <stdlib.h>  
int main()
{  
    int a[9];
    FILE *fp;
    if ((fp = fopen ("D:\\a9.txt", "a+")) == NULL)
    {
        printf("打开文件失败\n");
        exit(1);    }
    for(int i = 0; i < 16 ; i++)
    {
        int n = i ;
        int m = i ;
        fprintf(fp,"i = %d \n",i);
        for ( int j = 1; j<10; ++j)
                {
                 a[j]=j;
                 fprintf(fp, "%3d ",a[j]);
                } 
        fprintf(fp,"\n");
        
        for(int j = 1; j < 5; j++)
           {
                
                      a[j]=(n&1);
                      fprintf(fp, "%3d ", a[j]);
                   
                 fprintf(fp,"\n");
                 n = n>>1;
            }
         for(int j = 5; j < 9; j++)
            {
                 a[j]=!!(m&8);
                 fprintf(fp, "%3d ", a[j]);
                 fprintf(fp,"\n");
                 m = m<<1;
            }
      
   }
           fclose(fp);
      return 0;
}

该代码运行不正常,请教该如何修改?
搜索更多相关主题的帖子: for fprintf 个数 数组 int 
2020-09-26 15:57
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:20 
#include <stdio.h>
int main()
{
    int a[8];
    FILE *fp;
    if ((fp = fopen ("D:\\a9.txt", "w+")) == NULL)
    {
        printf("打开文件失败\n");
        exit(1);
    }
    for(int i = 0; i < 16 ; i++)
    {
        fprintf(fp,"i = %-2d   0",i+1);
        for ( int j=0; j<4; ++j)
        {
            a[3-j] = (i>>j)&1;
            a[j+4] = a[3-j];
        }
        for ( int j=0; j<8; ++j)
            fprintf(fp, "%3d ",a[j]);
        fprintf(fp,"\n");
    }
    fclose(fp);
    return 0;
}
2020-09-26 21:23
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
得分:0 
回复 2楼 吹水佬
exit(1);缺少头文件#include <stdlib.h> 。加上就OK。
2020-09-27 10:27
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
得分:0 
回复 2楼 吹水佬
还有就是,你用:fprintf(fp,"i = %-2d   0",i+1);表示为一个0和一个有八个元素的一维数组来构成此题的解。这样不便于我将来用这个有九个元素的一维数组来做其他计算,如能用有九个元素的一维数组来解决就好了,谢谢!!
2020-09-28 19:02
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
得分:0 
完美结果如下:
程序代码:
#include <stdio.h>
#include <stdlib.h>  
int main()
{
    int a[9];
    FILE *fp;
    if ((fp = fopen ("D:\\a9.txt", "w+")) == NULL)
    {
        printf("打开文件失败\n");
        exit(1);
    }
    a[0]=0;
    for(int i = 1; i < 17 ; i++)
    {
        fprintf(fp,"i = %d  ",i);
        
        for ( int j=0; j<4; ++j)
        {
            a[4-j] = ((i-1)>>j)&1;
            a[j+5] = a[4-j];
        }
        for ( int j=0; j<9; ++j)
               fprintf(fp, "%3d ",a[j]);
         fprintf(fp,"\n");
    }
    fclose(fp);
    return 0;
}

2020-09-29 10:34



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-503286-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.106614 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved