![]() |
#2
吹水佬2020-09-26 21:23
|
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;
}
#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;
}
该代码运行不正常,请教该如何修改?