代码如下:
#include <stdio.h>
int main()
{
char ch;
printf("请输入一个大写字母: ");
scanf(" %c", &ch);
if (ch < 'A' || ch > 'Z') //只能输入大写字母
{
return 1;
}
int h = ch - 'A' + 1; // 总行数h
printf("%d\n", h); //这是检查总行数的可以不写
for (int i = 1; i <= h; i++) // 依次对第一,二...行处理,注意从上往下为第1,2...行
{
// 这是左边空格,由画图可知,第一行空格数为 总行数 - 1,第i行空格数为 总行数 - 当前行数
for (int l = 1; l <= h - i; l++) // l是左边的意思,r是右边的意思
{
printf(" ");
}
// 左边字母。 中间字母为分界,左边字母数(包括分界上的)为当前行数
for (int l = 0; l < i; l++)
{
printf("%c", 'A' + l);
}
// 右边字母。 由图可知右边的字母数(不包括分界上的)是当前行数 - 1
for (int r = i - 1; r > 0; r--)//右半部分字母是递减的所以r--
{
printf("%c", 'A' + r - 1); //注意,这里要多减一,因为不包括分界上的字母
}
printf("\n");
}
return 0;
}
关于右边的空格数是可以不管的,反正右边输出完字符后就会换行,看不出来。