我有一个学校的代码,我需要这个作为我的输出:
数字二进制
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循环与位一起工作。所以让我们说,如何使循环从for(n = 0; n < 8; n++)000001

最佳答案

虽然有很多方法可以生成二进制序列,但这里的任务似乎是故意复杂(或使之有趣)的,因为您只在指定的位置修改代码,并且使用前一个字符串的内容初始化每个连续字符串。
数组除了让你思考之外没有其他用途——它只是一个纯粹的学术练习,而不是实际应用。每个字符串都是用前一个字符串的内容初始化的(您必须添加的代码已经修改过了),练习的目的是在每次迭代时执行二进制“add 1”。
为此,从LSB(rij[n][2])开始,如果数字是ZERO则将其设置为1,然后移动到下一个n,否则将其设置为0,并“携带”一个,对字符串中的下一个最重要的位重复上述过程。
您可以在LSB(2)索引到MSB(0)索引的循环中这样做,并且在将任何位设置为n时退出循环(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.

关于c - C中的位和数组-编程新手,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58086735/

10-12 05:51