【问题标题】:bits and arrays in C - New to programmingC 中的位和数组 - 编程新手
【发布时间】:2023-04-02 04:04:02
【问题描述】:

我有一个学校给定的代码,我需要这个作为我的输出: 数字双空气 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 &lt; 8; n++) 如何使循环从000001010

【问题讨论】:

  • 问题是“解决我的作业”吗?
  • 是的,我实际上需要帮助。你不必给我答案,但也许是一些提示。
  • 但是你什么都没问。你被什么困住了?
  • 好吧,那是我的错。对不起!我坚持的事情是我如何制作一个使用位的for循环。所以让我们说 for(n = 0; n
  • 不,您可以使用模数运算符% - 想想它会为n % 2n % 4 等提供什么。还有其他方法 - 您可以通过移位(&lt;&lt;&gt;&gt;)和屏蔽直接处理 n 的位。但这个问题太宽泛了。

标签: c arrays for-loop


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多