在C中看起来像三角形的输出
我写了这个程序,
include int main(){ int size = 5; int row; int col; for (col=0; col<size; col++){ for (row=0; row<col;row++){ printf(" "); } for (row=0; row <(size-col) ; row++){ printf("*"); if(col<=size){ printf("*"); } } printf("\n"); } return 0; }
它应该像三角形一样
********* ******* ***** *** *
但相反,每一行都有一个额外的*。 问题是什么?
非常感谢!
神秘有一个解决方案,你打印两个星号的方式迭代。 在你的例子中使用标识符row
和col
也会使事情比i
和j
更令人困惑,特别是因为外部循环实际上是你当前的行。
你的混乱的另一种选择是(我希望这不是作业,因为它没有标记为这样):
int main(void) { int size = 5; int i, j; for (i = size; i > 0; i--) { for (j = i; j < size; j++) putchar(' '); for (j = 0; j < i*2 - 1; j++) putchar('*'); putchar('\n'); } return 0; }
你也可以将i*2 - 1
放在一个变量中,这样它就不会在循环的每次迭代中计算出来(除非编译器发现你没有修改i
)。
更改
if(col<=size){
至
if((row % size) > 0){
也会产生同样的效果。
如何打印*这样的
for (row=0; row<(9-2*col); row++) printf("*"); printf("\n");
这将打印第一行中的九个,第二行中的七个等。
将您的问题纳入相关变量并为其提供有意义的名称。 这将提高代码可读性并使错误更容易修复,例如:
#include void triangle(int height) { int row, col; int width = (2 * height) - 1; for (row = 0 ; row < height ; row++) { for (col = 0 ; col < width ; col++) { if (row > col) { putchar(' '); } else if (col < width - row) { putchar('*'); } } puts("\r"); } } int main(void) { triangle(5); return 0; }
没有人提出递归? 它不是很纯粹,因为你必须追踪深度。 我称它为金字塔(pyr_)而不是三角形:
#include #include static void pyr_line(int depth, int nrows) { int i; if (nrows == 0) return; for (i=0; i