如何用二进制数来填充到数组中,求教啦!!
要求,如下: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; }
该代码运行不正常,请教该如何修改?