我有一个学校给出的代码,我需要这个作为我的输出:数字Binair 0是000,1是001,2是010,3是011,4是100,5是101,6是110,7是111 (3位)
I need to work with for loops, this is the given code:
#include <stdio.h>
#include <string.h>
#define ZERO '0'
#define ONE '1'
int main(void)
{
char rij[8][4];
int n, m;
strcpy( rij[0], "000" );
printf( "%s\n", rij[0] );
for ( n=1; n<8; n++ )
{
strcpy( rij[n], rij[n-1] );
printf( "%s\n", rij[n] );
// *ONLY ABLE TO TYPE IN HERE !!!! THE REST IS GIVEN !!!!*
}
for( n=0; n<8; n++ )
{
printf( "%i %s\n", n, rij[n] );
}
return 0;
}
我的问题是如何创建一个使用位的for循环。那么让我们假设,我如何让循环从000
到001
,再到010
。
发布于 2019-09-24 22:01:12
虽然有许多方法可以生成二进制序列,但这里的任务似乎故意变得复杂(或变得有趣),因为您只能在指定的位置修改代码,并且使用前一个字符串的内容对每个后续字符串进行初始化。
这些数组只会让你思考--它是纯粹的学术练习,而不是实际的应用程序。每个字符串都是用前一个字符串的内容初始化的(你必须添加的代码将会修改它),练习的目的是在每次迭代中执行一个二进制“加1”。
为此,从LSB (rij[n][2]
)开始,如果数字为ZERO
,则将其设置为1,然后移动到下一个n
,否则将其设置为0,并“进位”1,对字符串n
中的下一个最高有效位重复上述过程。
您可以在从LSB (2)索引到MSB (0)索引的循环中执行此操作,并在将任何位设置为ONE
时退出循环(break
)。
或者,对于三位数,您可以展开循环,如下所示:
if( rij[n][2] == ZERO )
{
rij[n][2] = ONE ;
}
else
{
rij[n][2] = ZERO ;
if( ... // test next bit [1] - enough of a hint I think.
https://stackoverflow.com/questions/58086735
复制相似问题