在C中嵌套循环的打印模式

时间:2019-02-20 00:21:59

标签: c

我正在为考试而学习,教授要求提供一种可以显示以下模式的程序:picture of the expected output

N=2    N=3    N=4    N=5
**     ***    ****   *****
 **     ***    ****   *****
       ***    ****   *****
               ****   *****
                     *****

(除非图像错过了N=5的第五行。)

我的程序可以获得类似的输出,除了它使每个预期输出的行数加倍(即,当N = 3时有6行,IE当N = 4时有8行)。不知道在行数达到N后如何停止运行。这是我的以下代码:

#include <stdio.h>

int main() {

    int N, rows1, width1, rows2, width2;

    printf("Please enter a number between 2 and 5 (including 2 and 5).\n");
    scanf("%d", &N);

    if (N<2 || N>5)
    {
        printf ("The number you entered is either less than 2 or greater than 5."
                " Please try again.\n");
                return 0;
    }

    for (rows1=1; rows1<=N; rows1++)
    {
        for(width1=1; width1<=N; width1++)
            printf ("*");
        printf ("\n");

        for(rows2=1; rows2<=1; rows2++)
            printf (" ");

        for(width2=1; width2<=N; width2++)
            printf ("*");
        printf ("\n");
    }
    return 0;
}

2 个答案:

答案 0 :(得分:0)

1)在第一个条件中,您返回0表示成功。在条件获取用户输入的过程中,我将使用宏EXIT_FAILURE(甚至最好使用while循环,直到您从用户获得有效输入为止)。

2)我将对此进行跟踪,并逐步了解您希望在程序的每个步骤中获得什么。考虑一下您是否可以消除某些for循环,那么对于您的程序运行,真正需要多少循环呢?

*************只有当您尝试自己修复时,才请看****************

int main() {

        int N;

        printf("Please enter a number between 2 and 5 (including 2 and 5). \n");
        scanf("%d", &N);

        if (N<2 || N>5)
        {
            printf ("The number you entered is either less than 2 or greater than 5. \
            Please try again.");
            return EXIT_FAILURE;
        }

        for (int length= 0; length < N; length++) {
            if(length %2 == 1){
                    printf(" ");
            }
            for(int width = 0; width < N; width++) {

                printf("*");
            }
            printf("\n");
        }

        return EXIT_SUCCESS;
}

答案 1 :(得分:0)

在外循环中打印两次。即你有

for 1 to N, stepping by 1
    print line

    print leading space
    print line

因此,当您要精确打印N行时,您将打印两次N行。

增加增量(将rows++替换为rows += 2,这将导致您仅打印偶数行,因此必须将其修复为奇数N)或更改为每次迭代仅打印一行(您必须固定交替的前导空格)。 The @malanb5 answer编码了后一种解决方案的示例。