C语言错误输出…使用2d数组的pascal三角形

C语言错误输出…使用2d数组的pascal三角形,c,multidimensional-array,output,pascals-triangle,C,Multidimensional Array,Output,Pascals Triangle,这是我用2d数组打印pascal三角形的代码,但它没有给我想要的输出,我无法确定逻辑/代码有什么问题 #include <stdio.h> int main() { int num, rows, col, k; printf("Enter the number of rows of pascal triangle you want:"); scanf("%d", &num); long a[100][100]; for (rows

这是我用2d数组打印pascal三角形的代码,但它没有给我想要的输出,我无法确定逻辑/代码有什么问题

#include <stdio.h>

int main()
{
    int num, rows, col, k;
    printf("Enter the number of rows of pascal triangle you want:");
    scanf("%d", &num);
    long a[100][100];

    for (rows = 0; rows < num; rows++)
    {
        for (col = 0; col < (num - rows - 1); col++)
            printf(" ");

        for (k = 0; k <= rows; k++)
        {
            if (k == 0 || k == rows)
            {
                a[rows][k] = 1;
                printf("%ld", a[rows][k]);
            }
            else
                a[rows][k] = (a[rows - 1][k - 1]) + (a[rows - 1][k]);
                printf("%ld", a[rows][k]);
        }
        printf("\n");
    }
    return 0;
}
#包括
int main()
{
int num,rows,col,k;
printf(“输入所需的pascal三角形的行数:”;
scanf(“%d”和&num);
长a[100][100];
对于(行=0;行对于(k=0;k在
else
之后的语句周围没有大括号,因此当
if
-语句的条件为true时,看起来您将双击
printf()

我将源代码复制到codechef.com/ide中,并将num的io更改为仅分配给6,从而生成以下输出:

Enter the number of rows of pascal triangle you want:     
     11
    1111
   11211
  113311
 1146411
1151010511
 if (k == 0 || k == rows)

   {
        a[rows][k] = 1;
        printf("(%ld)", a[rows][k]);
    }

    else{// START OF BLOCK HERE
        a[rows][k] = (a[rows - 1][k - 1]) + (a[rows - 1][k]);
        printf("(%ld)", a[rows][k]);
    }//END OF BLOCK HERE, NOTE THAT IT INCLUDES THE PRINT IN THE ELSE CASE NOW

OUTPUT:
    Enter the number of rows of pascal triangle you want:
         (1)
        (1)(1)
       (1)(2)(1)
      (1)(3)(3)(1)
     (1)(4)(6)(4)(1)
    (1)(5)(10)(10)(5)(1)
看起来像是你的特写,但你想要1,11,121,1331等等,对吗

包装else案例会产生以下输出:

Enter the number of rows of pascal triangle you want:     
     11
    1111
   11211
  113311
 1146411
1151010511
 if (k == 0 || k == rows)

   {
        a[rows][k] = 1;
        printf("(%ld)", a[rows][k]);
    }

    else{// START OF BLOCK HERE
        a[rows][k] = (a[rows - 1][k - 1]) + (a[rows - 1][k]);
        printf("(%ld)", a[rows][k]);
    }//END OF BLOCK HERE, NOTE THAT IT INCLUDES THE PRINT IN THE ELSE CASE NOW

OUTPUT:
    Enter the number of rows of pascal triangle you want:
         (1)
        (1)(1)
       (1)(2)(1)
      (1)(3)(3)(1)
     (1)(4)(6)(4)(1)
    (1)(5)(10)(10)(5)(1)
但是为了让我更清楚,我添加了(),并且在第一个printf的末尾添加了一个“/n”,该printf请求num的值,因此第一行位于新行上

printf("Enter the number of rows of pascal triangle you want:\n");

else
后面的语句周围没有大括号,因此当
if
-语句的条件为true时,看起来您将双击
printf()

我将源代码复制到codechef.com/ide中,并将num的io更改为仅分配给6,从而生成以下输出:

Enter the number of rows of pascal triangle you want:     
     11
    1111
   11211
  113311
 1146411
1151010511
 if (k == 0 || k == rows)

   {
        a[rows][k] = 1;
        printf("(%ld)", a[rows][k]);
    }

    else{// START OF BLOCK HERE
        a[rows][k] = (a[rows - 1][k - 1]) + (a[rows - 1][k]);
        printf("(%ld)", a[rows][k]);
    }//END OF BLOCK HERE, NOTE THAT IT INCLUDES THE PRINT IN THE ELSE CASE NOW

OUTPUT:
    Enter the number of rows of pascal triangle you want:
         (1)
        (1)(1)
       (1)(2)(1)
      (1)(3)(3)(1)
     (1)(4)(6)(4)(1)
    (1)(5)(10)(10)(5)(1)
看起来像是你的特写,但你想要1,11,121,1331等等,对吗

包装else案例会产生以下输出:

Enter the number of rows of pascal triangle you want:     
     11
    1111
   11211
  113311
 1146411
1151010511
 if (k == 0 || k == rows)

   {
        a[rows][k] = 1;
        printf("(%ld)", a[rows][k]);
    }

    else{// START OF BLOCK HERE
        a[rows][k] = (a[rows - 1][k - 1]) + (a[rows - 1][k]);
        printf("(%ld)", a[rows][k]);
    }//END OF BLOCK HERE, NOTE THAT IT INCLUDES THE PRINT IN THE ELSE CASE NOW

OUTPUT:
    Enter the number of rows of pascal triangle you want:
         (1)
        (1)(1)
       (1)(2)(1)
      (1)(3)(3)(1)
     (1)(4)(6)(4)(1)
    (1)(5)(10)(10)(5)(1)
但是为了让我更清楚,我添加了(),并且在第一个printf的末尾添加了一个“/n”,该printf请求num的值,因此第一行位于新行上

printf("Enter the number of rows of pascal triangle you want:\n");

您可以在不使用任何阵列的情况下执行此操作:

#include <stdlib.h>
#include <stdio.h>

int num_digits(int number)
{
    int digits = 0;
    while (number) {
        number /= 10;
        ++digits;
    }
    return digits;
}

unsigned max_pascal_value(int row)
{
    int result = 1;
    for (int num = row, denom = 1; num > denom; --num, ++denom)
        result = (int)(result * (double)num / denom );  
    return result;
}

int main()
{
    printf("Enter the number of rows of pascals triangle you want: ");
    int rows;
    if (scanf("%d", &rows) != 1) {
        fputs("Input error. Expected an integer :(\n\n", stderr);
        return EXIT_FAILURE;
    }

    int max_digits = num_digits(max_pascal_value(rows));
    for (int i = 0; i <= rows; ++i) {
        for (int k = 0; k < (rows - i) * max_digits / 2; ++k)
            putchar(' ');

        int previous = 1;
        printf("%*i ", max_digits, previous);

        for (int num = i, denom = 1; num; --num, ++denom) {
            previous = (int)(previous * (double)num / denom );
            printf("%*i ", max_digits, previous);
        }
        putchar('\n');
    }
}

您可以在不使用任何阵列的情况下执行此操作:

#include <stdlib.h>
#include <stdio.h>

int num_digits(int number)
{
    int digits = 0;
    while (number) {
        number /= 10;
        ++digits;
    }
    return digits;
}

unsigned max_pascal_value(int row)
{
    int result = 1;
    for (int num = row, denom = 1; num > denom; --num, ++denom)
        result = (int)(result * (double)num / denom );  
    return result;
}

int main()
{
    printf("Enter the number of rows of pascals triangle you want: ");
    int rows;
    if (scanf("%d", &rows) != 1) {
        fputs("Input error. Expected an integer :(\n\n", stderr);
        return EXIT_FAILURE;
    }

    int max_digits = num_digits(max_pascal_value(rows));
    for (int i = 0; i <= rows; ++i) {
        for (int k = 0; k < (rows - i) * max_digits / 2; ++k)
            putchar(' ');

        int previous = 1;
        printf("%*i ", max_digits, previous);

        for (int num = i, denom = 1; num; --num, ++denom) {
            previous = (int)(previous * (double)num / denom );
            printf("%*i ", max_digits, previous);
        }
        putchar('\n');
    }
}


使用的
num
的值是多少?预期的输出是什么?Woops的意思是让我的回答成为一个注释,请求输出。@b至少那个“错误”让你超过了200;)@箭鱼仍然会解决这个家伙的家庭作业,因为那个答案不算:pi用5表示num的值,使用了什么
num
的值?预期的输出是什么?Woops的意思是让我的答案成为一个注释,请求输出。@Bwebb至少那个“错误”你已经超过了200;)@swardfish我仍然会给这个家伙做作业,因为这个答案并不重要:pi用5表示num@AnasAziz在我看来这很好,你用花括号的输出有什么问题?当你说一些东西不能产生你期望的效果时,你应该真正弄清楚它在做什么,你在体验什么ting当你在这里提问时,这样回答会容易得多。@AnasAziz我会一直评论,直到你得到你想要的答案,只是请确保在回答你提问时将评论标记为已接受。@AnasAziz我觉得不错,你的花括号有什么输出错误?当你说som时这不会产生你所期望的结果。当你在这里提问时,你应该真正弄清楚它在做什么和你期望什么,这样回答会容易得多。@AnasAziz我会一直评论,直到你得到你想要的答案,只是请确保在回答你的问题时将评论标记为接受如果有人对如何获得正确的间距有想法,请发表评论;)我因为间距而对它投了更高的票:)printf是什么(“%*I”但是使用两个参数做什么?我原以为它会将它们相乘,但当我测试它时,它只打印了第二个参数。@b第一个参数
max_digits
用于
*
并指定要打印的字段的位置。我不熟悉*作为printf格式说明符,我似乎找不到任何关于它的信息,你能链接m吗e一些需要进一步阅读的内容。我认为printf是一个va_列表,每个参数都需要一个%,否则它只会弹出到堆栈上,什么也不做(最佳情况)@Bwebb-在“介绍性%字符”之后阅读参数
格式
.2nd”(可选)的说明。如果有人对如何获得正确的间距有想法,请立即发表评论;)我因为间距而对其投了更高的票:)printf是什么(“%*I”但是使用两个参数做什么?我原以为它会将它们相乘,但当我测试它时,它只打印了第二个参数。@b第一个参数
max_digits
用于
*
并指定要打印的字段的位置。我不熟悉*作为printf格式说明符,我似乎找不到任何关于它的信息,你能链接m吗e一些需要进一步阅读的内容。我认为printf是一个vau列表,每个参数都需要一个%s,否则它只会弹出到堆栈上,什么也不做(最佳情况)@Bwebb-在“介绍性%字符”之后阅读参数
格式
.2nd”(可选)的说明。