C编程Zig-Zag实践

我在Objective-C中练习使用forif-elseprintf在控制台中打印这样的Zig-Zag:

请看图片:

在此处输入图像描述

我已经尝试过使用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。 让我们从基本结构开始。 设置一些宽度和高度的坐标 – 我们将在多个位置引用这些,所以consts可以很容易地进行更改 – 并创建一个带有基本逻辑的循环来开始获得所需的显示。

 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"); } 

这给了我们:

 XXXXX 

这是错误的方式,只给我们一个“下行”,但这是一个良好的开端。 让我们使用模数函数来重复模式。 重复发生在第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"); } 

所以现在我们得到:

 XXXXXXXXXXXXXXX 

这开始变得更接近我们想要的东西。 所以,对于上行。 当modCol在行的范围内时,显示下行程序,即0-4。 当modCol超过此范围时,我们通过从中减去行数将其恢复到范围内。

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

 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"); } 

现在我们得到:

 XXXXXXXXXXXXXXXX XX XX X 

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

 modCol = ((numRows - 1) - (modCol + 1)); Output: XXXXXXXXXXXXXXXXXXXXX 

这有我们想要的模式,但是当我们想要左下角时从左上角开始。 轻松修复。 在计算相同的值后反转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"); } 

最后,我们得到了我们想要的输出:

  XXX XXXXXXXXXXXXXXXXXX 

我希望这有助于并且相当容易理解。

我不熟悉使用Objectionable C的控制台编程,你还没有准确地解释你曾尝试过什么,有什么工作,什么没有。

假设您的问题是选择适当位置以显示“+”字符并且不在控制台上的特定位置显示文本的代码,这就是我要做的:

 int currentY = MIN_Y; int incrementY = 1; for (int currentX = MIN_X; currentX <= MAX_X; ++currentX) { SetCursorPosition(currentX, currentY); printf("+"); currentY += incrementY; if (currentY == MAX_Y) { incrementY = -1; } else if (currentY == MIN_Y) { incrementY = 1; } } 

假设您有一个SetCursor()的函数和MIN / MAX X / Y的consts / defined。

'if'语句可以优化为:

 if (currentY == MAX_Y || currentY == MIN_Y) { incrementY -= incrementY; } 

但是你需要使用'else'语句。 希望这段代码非常自我解释并对您有所帮助。