在C中将图案打印到屏幕

ecfdbz9o  于 2023-03-17  发布在  其他
关注(0)|答案(4)|浏览(130)

这是我第一次上编程课,我有几个问题,关于我们布置的作业。
我正尝试将以下图案打印到屏幕上:

*
  ***
 *****
*******

图案应该包含5行,每一个后续的行有2个额外的星号从上面的行,使大致金字塔形状。
我一直在使用for循环(这是指令的一部分)来创建代码,下面是我目前所做的:

int main ()
{
    int row;
    int col;

    for (row = 1; row <= 5; row++) //rows
    {
        for (col = 1; col <= row; col++) //columns
        {
            printf_s("*");
        }
        printf_s("\n");
    }
    return 0;
}

我的代码的问题是我没有考虑到正确对齐所需的空格。对于上面的代码,输出如下所示:

*
**
***
**** 
*****

我希望有人能给我指出正确的方向,告诉我如何重写代码以获得正确的对齐方式和正确的前导空格数。
先谢谢你。

xeufq47z

xeufq47z1#

您有一个循环来打印星号,但不会打印出星号之前的任何空格。
而且你打印的星号的数目不正确。例如你的输出在第二行只有2个* s,而实际上应该有3个。
你可以

printf("%*s", NUM, "");

打印NUM空格,而不是使用单独的循环。
就像

for (row = 0; row < ROWS ; row++) //rows
{
    printf("%*s", ROWS-1-row, "");
    for (col = 0; col < row*2+1; col++) //columns
    {
        printf("*");
    }
    printf("\n");
}

如果行号从0开始,则每行中的星号数为行号的两倍多一。
ROWS表示要打印的行数。

dkqlctbz

dkqlctbz2#

外循环用于每一行,内循环在该行中打印许多星号。您忽略了在该行前面添加适当数量的空格。
如果将外部回路更改为更常规的:

for (row = 0; row < 5; row++)

它使字符计数算法更简单。

  • 内部循环 * 之前 * 应该有另一个循环来打印4 - row空格。
  • 星号循环需要打印row * 2 + 1星号。
abithluo

abithluo3#

试试这个:
r -行数
s -增量
i -行索引
j列索引
start -开始计数 *

#include <stdio.h>

int main(void)
{
    int i,j,r=4,s,start;
    start = 1;
    s = start*2;

    for (i=0;i<r*s;i+=s)
    {
        for (j=0;j<r*s/2-(i/2)-start;j++) printf(" ");
        for (j=0;j<i+start;j++) printf("*");
        printf("\n");
    }

    return 0;
}
t30tvxxf

t30tvxxf4#

在屏幕上打印以下形状

  • #**###########################

相关问题