如何用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语言杨辉三角示例中,长整型 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
评论已关闭。