在 C 程序中打印出准确的一行

Printing out an exact line in a C program

你能告诉我,我怎么打印出来吗

2
2 4 2
2 4 6 4 2
...

在一个程序中...其中 N 表示行数,并且该模式依此类推...

我想到了:

#include <stdio.h>

int main(){
    int c, n, col, row, val;
    printf("Provide value of N: ");
    scanf("%d", &n);
    for(row = 0, col = 1, val = 2; row < n; row++, col += 2){
        for (c = 0; c < col; c++, val += 2){
            printf("%d ", val);
        }
        printf("\n");
    }
    return 0;
}

但它只完成了一半的工作。

输出永远上升...我不希望这样..

2
4 6 8
10 12 14 16 18
...

当它连续达到最大值时,如何让它也按降序打印数字?

您代码中的主要问题是您没有在新行开始后重置 val。此外,它不包含任何管理降序的逻辑。

此代码的行为符合您的预期:

#include <stdio.h>

int main()
{
    int c, n, col, row, val;
    printf("Provide value of N: ");
    scanf("%d", &n);
    for(row = 1; row <= n; row++)
    {
        for(val=2; val<=2*row; val+=2)
        {
            printf("%d ", val);
        }
        for(val=2*row-2; val>0; val-=2)
        {
            printf("%d ", val);
        }
        printf("\n");
    }
    return 0;
}

一些评论:

  • row 1 开始:这将很有用,因为每行的最大值必须是 2*row
  • 在第一个循环中,我添加了两个 for 循环:第一个上升和第二个下降
  • 内部升序循环必须从 2 开始,直到达到值 2*row
  • 内部升序循环必须从 2*row-2 开始(而不是 2*row,因为我们已经打印了该值)直到达到值 2(因此,我们检查它以大于 0)

您不会再次减去该值,只会不断增加,并且您不会在每次迭代后重置您的值。在此处查看基于您的代码的 运行 示例:https://ideone.com/j6xHZE

#include <stdio.h>

int main() {
    int n, col, row, val;
    printf("Provide value of N: ");
    scanf("%d", &n);
    // Iterate through the desired rows
    for (row = 0; row < n; row++) {
        val = 0; // Reset val for each row
        // Iterate until we have reached as many columns as the row
        // number we are at
        for (col = 0; col <= row; col++) {
            val += 2;
            printf("%d ", val);
        }
        // After this continue one less iteration where we decrease
        // the value
        for (col = 0; col < row; col++) {
            val -= 2;
            printf("%d ", val);
        }
        printf("\n");
    }
    return 0;
}

输出:

Provide value of N: 5
2 
2 4 2 
2 4 6 4 2 
2 4 6 8 6 4 2 
2 4 6 8 10 8 6 4 2