我在Objective-C中进行了一个练习,利用forif-elseprintf在控制台中打印如下之字形:

请看图片:

c - C编程之字形实践-LMLPHP

我已经尝试过使用C编程编写代码,并打印一个三角形,然后尝试编辑该三角形,但是不能做任何其他事情来获得Zig-Zag。



我已经解决了我的问题。非常感谢你们。

 for (int i = 0; i < 5; i++) {
    for(int j = 1; j<= 21; j++ ){
        if(j<=9){
            if(j - i == 5 || j+ i == 5){
                printf("*") ;
            }else{
                printf(" ");
            }
        }else{
            if(j+i == 13 || j - i == 13 || j + i == 21){
                printf("*") ;
            }
            else{
                printf(" ");
            }
        }
    }
    printf("\n");
}

最佳答案

好的,根据您更新的问题尝试2。让我们从基本结构开始。设置一些const的宽度和高度-我们将在多个地方引用它们,以便const进行简单的更改-并创建一个具有基本逻辑的循环,以开始获取所需的显示。

const int numRows = 5;
const int numCols = 21;
for (int row = 0; row < numRows; ++row)
{
    for (int col = 0; col < numCols; ++col)
    {
        if (col == row)
        {
            printf("X");
        }
        else
        {
            printf(" ");
        }
    }
    printf("\n");
}


这给了我们:

X
 X
  X
   X
    X


这是错误的方法,只会给我们带来一次“降档”,但这是一个好的开始。让我们使用模数函数使图案重复。重复发生在第9个字符上,这表明我们需要使用((numRows-1)* 2)作为模数。

const int modulusVal = ((numRows - 1) * 2);
for (int row = 0; row < numRows; ++row)
{
    for (int col = 0; col < numCols; ++col)
    {
        int modCol = (col % modulusVal);
        if (modCol == row)
        {
            printf("X");
        }
        else
        {
            printf(" ");
        }
    }
    printf("\n");
}


现在我们得到:

X       X       X
 X       X       X
  X       X       X
   X       X       X
    X       X       X


这开始越来越接近我们想要的东西。因此,继续进行。当modCol在行范围(0-4)内时,将显示向下笔划。当modCol超出此范围时,我们通过从中减去行数来使其回到范围内。

然后我们通过从行可以取的最大值减去它来“反转”它,即numRows-1。这意味着,当modCol为0时,它将变为4;当它为1时,它将变为3;当它为2时,它将变为3。将保持不变。

for (int row = 0; row < numRows; ++row)
{
    for (int col = 0; col < numCols; ++col)
    {
        int modCol = (col % modulusVal);
        if (modCol >= numRows)
        {
            modCol -= numRows;
            modCol = ((numRows - 1) - modCol);
        }

        if (modCol == row)
        {
            printf("X");
        }
        else
        {
            printf(" ");
        }
    }
    printf("\n");
}


现在我们得到:

X       X       X
 X       X       X
  X    X  X    X  X
   X  X    X  X    X
    XX      XX      X


关闭,但没有雪茄。第5列被视为第0列,但我们需要将其作为第1列。进行此更改以对其进行修复:

modCol = ((numRows - 1) - (modCol + 1));

Output:
X       X       X
 X     X X     X X
  X   X   X   X   X
   X X     X X     X
    X       X       X


这具有我们想要的模式,但是当我们想要左下方时,它从左上方开始。轻松修复。在计算了modCol后,以相同的方式将其反转。当它大于/等于numRows时,我们将其反转。

for (int row = 0; row < numRows; ++row)
{
    for (int col = 0; col < numCols; ++col)
    {
        int modCol = (col % modulusVal);
        if (modCol >= numRows)
        {
            modCol -= numRows;
            modCol = ((numRows - 1) - (modCol + 1));
        }
        modCol = ((numRows - 1) - modCol);

        if (modCol == row)
        {
            printf("X");
        }
        else
        {
            printf(" ");
        }
    }
    printf("\n");
}


最后,我们得到所需的输出:

    X       X       X
   X X     X X     X
  X   X   X   X   X
 X     X X     X X
X       X       X


我希望这会有所帮助并且相当容易理解。

关于c - C编程之字形实践,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32003645/

10-10 18:23