C语言打印杨辉三角程序

如何用C语言编写一个打印杨辉三角的程序,并附带示例?杨辉三角是由二项式系数构成的三角形。

C语言打印杨辉三角程序

此C语言杨辉三角程序允许用户输入要打印的最大行数。我们将打印整数的杨辉三角,直到达到用户指定的行数。

#include <stdio.h>
 
long Factorial(int);
 
int main()
{
   int i, Number, j;
 
   printf("\n Please Enter the Number of rows you wish to see \n");
   scanf("%d", &Number);
 
   for (i = 0; i < Number; i++)
   {
      for (j = 0; j <= (Number - i - 2); j++)
      {
      	printf(" ");
	  }
 
      for (j = 0; j <= i; j++)
      {
      	printf("%ld ", Factorial(i) / (Factorial(j) * Factorial(i-j)));
	  } 
 
      printf("\n");
   }
 
   return 0;
}
 
long Factorial(int Number)
{
   int i;
   long Fact = 1;
 
   for (i = 1; i <= Number; i++)
         Fact = Fact * i;
 
   return Fact;
}
C Program to print Pascal Triangle using functions and for loop

在此C语言杨辉三角示例中,长整型 Factorial(int Number) 函数声明将计算给定数字的阶乘。请参考C语言求阶乘程序了解第一个函数涉及的步骤。

以下编程中的 printf 和 scanf 语句将允许输入范围或要作为杨辉三角打印的最大行数。

分析

现在让我们逐个迭代地查看嵌套for循环

外循环 – 第一次迭代

从上面的C语言杨辉三角截图可以看出,i的值为0,Number为3,条件(i < 3)为True。因此,它将进入第二个for循环。

第一个内循环 – 第一次迭代
j的值为0,条件(j <= (3 – 0 – 2))为True。因此,它将开始执行循环内的语句。printf(” “)语句将输出空格。

接下来的j++语句将使用递增运算符将j的值加1。

杨辉三角程序 第一个内循环 – 第二次迭代

j的值将为1,条件(1 <= (3 – 0 – 2))为True,因此以下语句将输出空格。

第一个内循环 – 第三次迭代

j的值将为2,条件(2 <= (3 – 0 – 2))为False。因此,它将退出for循环。

接下来,它将进入第二个For循环。

for (j = 0; j <= i; j++) // Second Inner Loop
   {
     	printf("%ld ", Factorial(i) / (Factorial(j) * Factorial(i-j)));
   }

第二个内循环 – C语言打印杨辉三角的第一次迭代
我们还没有完成外for循环的第一次迭代,所以i的值仍然是0。

j的值为0,条件(j <= 0)为True。因此,它将开始计算i和j的阶乘并打印输出。

printf("%ld ", Factorial(i) / (Factorial(j) * Factorial(i-j)));

factorial(i) / (Factorial(j) * Factorial(i – j) )
这意味着,factorial(0) / (Factorial(0) * Factorial(0) ) —> 0的阶乘 = 1
= 1 / (1 * 1) = 1

j++语句将使用递增运算符将j的值加1。

第二个内循环 – 第二次迭代

j的值将为1,条件(1 <= 0)为False。因此,它将退出for循环。接下来的printf(“\n”)语句用于终止当前行。

第一次迭代后的最终输出 = [空格] [空格] 1

C语言杨辉三角 外循环 – 第二次迭代
i的值将为1,条件(1 < 3)为True。因此,它将进入第二个for循环。

第一个内循环 – 第一次迭代

j的值为0,条件(0 <= 0)为True。因此,将打印空格作为输出。接下来,j的值也将加1。

第一个内循环 – 第二次迭代

j的值为1,条件(1 <= 0)为False。因此,它将退出for循环。现在,它将进入第二个For循环。

第二个内循环 – C语言打印杨辉三角的第一次迭代
我们还没有完成外for循环的第二次迭代,所以i的值仍然是1。

j的值为0,条件(0 <= 1)为True。因此,它将开始计算i和j的阶乘并打印输出。

factorial(i) / (Factorial(j) * Factorial(i – j) )
这意味着,factorial(1) / (Factorial(0) * Factorial(1) ) —> 0的阶乘 = 1
= 1 / (1 * 1) = 1

第二个内循环 – 程序的第二次迭代
j的值将为1,条件(1 <= 1)为True。因此,它将开始计算i和j的阶乘并打印输出。

factorial(1) / (Factorial(1) * Factorial(0) ) —> 0的阶乘 = 1
= 1 / (1 * 1) = 1

第二个内循环 – 第三次迭代

j的值将为2,条件(2 <= 1)为False,因此它将退出for循环。第二次迭代后的最终输出 = [空格] 1 1

C语言杨辉三角 外循环 – 第三次迭代
i的值将为2,条件(2 < 3)为True。因此,它将进入第二个For循环。

第二个内循环 – 第一次迭代
我们还没有完成外for循环的第三次迭代,所以i的值仍然是2。

j的值为0,条件(0 <= 2)为True。因此,它将开始计算i和j的阶乘并打印输出。

factorial(2) / (Factorial(0) * Factorial(2) ) —> 0的阶乘 = 1
= 2 / (1 * 2) = 1

第二个内循环 – 第二次迭代
j的值将为1,条件(1 <= 2)为True。

factorial(2) / (Factorial(1) * Factorial(1) ) —> 2的阶乘 = 2
= 2 / (1 * 1) = 2

程序的第二个内循环 – C语言杨辉三角的第三次迭代。
j = 2,条件(2 <= 2)为True。

factorial(2) / (Factorial(2) * Factorial(0) )
= 2 / (2 * 1) = 1

第二个内循环 – 第四次迭代
j = 3,条件(3 <= 2)为False。因此,它将退出for循环。第三次迭代后的最终输出 = 1 2 1

外循环 – 第四次迭代

i的值将为3,条件(3 < 3)为False。因此,它将退出for循环。

最终输出为

[空格] [空格] 1
= [空格] 1 1
1 2 1

使用递归打印杨辉三角的C语言程序

程序允许用户输入要作为杨辉三角打印的行数。我们将在此示例中使用我们在第一个示例中使用的代码片段。但是,这次我们将使用递归函数来查找阶乘。

#include <stdio.h>
long Factorial(int Number)
{
  if (Number == 0 || Number == 1)  
    return 1;
  else
    return Number * Factorial (Number -1);
}

int main()
{
   int i, Number, j, Fact;
   printf("\n Please Enter Number of rows you want to see \n");
   scanf("%d", &Number);
   for (i = 0; i < Number; i++)
   {
      for (j = 0; j <= (Number - i - 2); j++)
      {
      	printf(" ");
      }
      for (j = 0; j <= i; j++)
      {
      	Fact = Factorial(i) / (Factorial(j) * Factorial(i-j));
	printf("%ld ", Fact);
      } 
      printf("\n");
   }
   return 0;
}
 Please Enter Number of rows you want to see
9
        1 
       1 1 
      1 2 1 
     1 3 3 1 
    1 4 6 4 1 
   1 5 10 10 5 1 
  1 6 15 20 15 6 1 
 1 7 21 35 35 21 7 1 
1 8 28 56 70 56 28 8 1 

评论已关闭。