c - C 中的位和数组 - 编程新手

标签 c arrays for-loop

我有一个学校给定的代码,我需要这个作为我的输出: 数码双星 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++)如何使循环形成 000001010 .

最佳答案

虽然生成二进制序列的方法有很多种,但这里的任务似乎被故意复杂化(或变得有趣),因为您只能在指定的位置修改代码,并使用内容初始化每个连续的字符串上一个。

除了让您思考之外,这些数组没有任何用处 - 这是一个纯粹的学术练习,而不是实际应用。每个字符串都用前一个字符串的内容初始化(您必须添加的代码将对其进行修改),练习的目的是在每次迭代时执行二进制“加 1”。

为此,从 LSB (rij[n][2]) 开始,如果数字是 ZERO,则将其设置为 ONE,然后移动到下一个 n,否则将其设置为零,并“进位”一个,对字符串 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.

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

相关文章:

c - 我不明白为什么我的数组大小错误

c++ - 不复制 char 数组,函数 swap 不能正确编译并且 stringPtr 没有被修改

javascript - 按数字顺序对 "advanced"数字字符串进行排序

r - R 中的 For 循环在打印中返回 NA

c - C语言减慢循环速度

c - 将文件中的文本逐行插入到指针传递的字符串数组中的函数

c++ - 我收到以下错误 : [Warning] multi-character character constant

for-loop - 如何在 Kotlin 中以数组索引作为起点/终点进行反向 for 循环?

c - HackerEarth女朋友的需求挑战

Java - 初始化数组后以及使用类方法测试数组时出现 NullPointerException