常规的输出方法:
呈现“直角三角形”的形状
使用“\t”水平制表符对每个数进行上下对齐(左对齐)
不能单纯采用空格对数字进行间隔,因为随数字位数的增加,而空格的间距不变,将导致杨辉三角右侧会越来越向右倾斜。
printf()函数的左对齐格式化输出
语法格式 -->
printf("%-4d", a);
// -4 表示向左对齐输出4字符长度;
// 不满4用空格补齐,超出4则按实际长度输出
// +4则表示向右对齐
#include
#include
int main()
{
int arr[10][10] = { 0 };
for (int i = 0; i < 10; i++)
{
arr[i][0] = 1;
}
for (int i = 1; i < 10; i++)
{
for (int j = 1; j < 10; j++)
{
arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
}
}
for (int i = 0; i < 10; i++)
{
for (int j = 9-i; j > 0; j--)
{
printf(" ");
}
for (int j = 0; j < i + 1; j++)
{
printf("%-4d", arr[i][j]);
}
printf("\n");
}
system("pause");
return 0;
}
限制:
此方法仍无法做到字符串级别的居中对齐,实际是按照字符串中的第一个字符进行对齐
且仍要根据实际需要进行调整,只能做到有限的“等腰”对齐,不能无限对齐
#include
#include
int main()
{
int arr[20][20] = { 0 };
for (int i = 0; i < 20; i++)
{
arr[i][0] = 1;
}
for (int i = 1; i < 20; i++)
{
for (int j = 1; j < 20; j++)
{
arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
}
}
for (int i = 0; i < 20; i++)
{
for (int j = 19-i; j > 0; j--)
{
printf(" ");
}
for (int j = 0; j < i + 1; j++)
{
printf("%-4d", arr[i][j]);
}
printf("\n");
}
system("pause");
return 0;
}
实际有效行数为13行
只能做到有限的“等腰”对齐,不能无限对齐
printf("%-4d", arr[i][j]);
// 根据实际需要调整代码
printf("%-6d", arr[i][j]);
// 左对齐4位改为6位,扩大间距,可以使更多位数的数字进行对齐
// 同时,每行前输出的空格数也要相应地增加
for (int j = 19-i; j > 0; j--)
{
printf(" ");
}
#include
#include
int main()
{
int arr[20][20] = { 0 };
for (int i = 0; i < 20; i++)
{
arr[i][0] = 1;
}
for (int i = 1; i < 20; i++)
{
for (int j = 1; j < 20; j++)
{
arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
}
}
for (int i = 0; i < 20; i++)
{
for (int j = 19-i; j > 0; j--)
{
printf(" ");
}
for (int j = 0; j < i + 1; j++)
{
printf("%-6d", arr[i][j]);
}
printf("\n");
}
system("pause");
return 0;
}