如何将C语言实现的直角帕斯卡三角修改为锐角型
如何用C语言生成锐角型帕斯卡三角?
我是编程新手,刚学会C语言基础知识,尝试用C语言实现帕斯卡三角,但无法生成锐角型三角。以下是我编写的代码:
#include<stdio.h> int main(void) { int n,s=1; do { printf("give the value of n: \n"); scanf("%d",&n); } while(n<0); for (int i=0; i<=n;i++) { printf("1 "); for (int j=1;j<=i;j++) { s=s*(i-j+1)/(j); printf("%d ",s); } printf("\n"); } }
该代码生成的是直角型帕斯卡三角,如下:
1 1 1 1 2 1 1 3 3 1 1 4 6 4 1
我希望生成锐角型帕斯卡三角,如下所示:
1 1 1 1 2 1 1 3 3 1
解决方案
要生成居中对齐的锐角型帕斯卡三角,核心是在每一行输出数字前打印足够空格实现居中,同时修复代码中变量未重置的问题。修改后的代码如下:
#include<stdio.h> int main(void) { int n; do { printf("give the value of n: \n"); scanf("%d",&n); } while(n<0); // 外层循环控制行数 for (int i=0; i<=n;i++) { int s = 1; // 每一行开始时重置s为1,避免上一行计算结果干扰 // 打印前置空格,实现居中效果 for (int k = 0; k < n - i; k++) { printf(" "); // 用3个空格保证数字对齐,可根据数字长度调整 } printf("%d ", s); // 计算并打印当前行后续数字 for (int j=1;j<=i;j++) { s = s*(i-j+1)/(j); printf("%d ", s); } printf("\n"); } }
关键修改说明
- 重置变量
s:将s的声明移到外层循环内部,每一行开始时重置为1,解决上一行计算残留值导致的数字错误问题。 - 添加前置空格:新增内层循环打印
n-i组空格,让每一行数字整体居中,形成锐角型布局。如果后续出现两位数、三位数的数字,可以增加每组空格的数量(比如改为4个),保证三角对齐美观。
运行修改后的代码,输入n=3时,输出效果如下:
1 1 1 1 2 1 1 3 3 1
内容的提问来源于stack exchange,提问作者Loves Mathematics
相关产品推荐
相关产品推荐

