我有一个学校给定的代码,我需要这个作为我的输出: 数码双星 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++)
如何使循环形成 000
至 001
至 010
.
最佳答案
虽然生成二进制序列的方法有很多种,但这里的任务似乎被故意复杂化(或变得有趣),因为您只能在指定的位置修改代码,并使用内容初始化每个连续的字符串上一个。
除了让您思考之外,这些数组没有任何用处 - 这是一个纯粹的学术练习,而不是实际应用。每个字符串都用前一个字符串的内容初始化(您必须添加的代码将对其进行修改),练习的目的是在每次迭代时执行二进制“加 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/