【问题标题】:lang-c Print two pyramids with space in between using nested for loops and function?lang-c 使用嵌套的for循环和函数打印两个中间有空格的金字塔?
【发布时间】:2020-11-05 04:10:23
【问题描述】:

lang-c 输出应如下所示:

   #  #
  ##  ##
 ###  ###
####  ####

但我的问题是我有名为 rightPyramid(num_rows) 的函数,其中包含代码:

void rightPyramid(int num_rows)
{
    for(int row =1; row<=num_rows; row++){
        for(int col=1; col<=row; col++ ){
            printf("#");
            }
        printf("\n");
        }
    }

rightPyramid(num_rows) 的输出:

#
##
###
####

leftPyramid(num_rows) 的代码是:

void leftPyramid(int num_rows)
{
    for (int i = 1; i<=num_rows; i++){
        for(int j=1; j<=num_rows-i; j++){
            printf(" ");
            }
        for(int k= 1; k<=i; k++){
            printf("#");
            }
        printf("\n");
        }
    }

leftPyramid(num_rows) 的输出:

   #
  ##
 ###
####

有没有办法操作这两个函数来输出:

   #  #
  ##  ##
 ###  ###
####  ####

【问题讨论】:

  • 不,没有。打印换行符的那一刻,您就失去了在该行上打印其他内容的机会。编写一个执行 for (...) { for (...) {putchar('#');} putchar(' '); for (...) {putchar('#');} } 的函数
  • 如果你想把它分成单独的函数,你可以有两个函数来获取行号和行数,一个只打印该行的左侧部分,另一个只打印该行的右侧部分。然后就可以循环调用这两个函数了。
  • 我认为这两个 cmets 都可以作为答案。即使没有额外的解释。
  • 这能回答你的问题吗? stackoverflow.com/questions/58037580/…
  • 谢谢大家,我只是想知道这种可能性。我会尽量按照 -Barmar 的建议去做。

标签: c function cs50


【解决方案1】:

不要编写打印整个金字塔的函数,而是编写只打印每个金字塔的一行的函数。然后你可以循环调用该行的左右部分的函数。

void leftPyramidRow(int num_rows, int row) {
    for (int col = 0; col < num_rows - row; col++) {
        printf(" ");
    }
    for (int col = 0; col < row; col++) {
        printf("#");
    }
}

void rightPyramidRow(int row) {
    for (int col = 0; col < row; col++) {
        printf("#");
    }
}

void pyramid(int num_rows) {
    for (int row = 1; row <= num_rows; row++) {
        leftPyramidRow(num_rows, row);
        printf("  ");
        rightPyramidRow(row);
        printf("\n");
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    • 2015-12-14
    • 1970-01-01
    相关资源
    最近更新 更多