题目:
完整代码
#include<stdio.h>
int main(void)
{
int i, j, num;
char c;
scanf_s("%c", &c);
num = c - 'A' + 1;//行数
char ch = 'A';
for (i = 0; i < num; i++)//确定有几行
{
for (j = num - i; j > 0; j--) //打印空格
printf(" ");
for (ch = 'A'; j <= i; j++)//正序ABC
printf("%c", ch++);
for (j = 1, ch -= 2; j <= i; ch--, j++)//逆序
printf("%c", ch);
printf("\n");
}
return 0;
}
拆解分析
for (i = 0; i < num; i++)//确定有几行
{...
printf("\n");
}
外层循环,循环次数即行数,一次循环结束打印换行符,准备下一次循环
for (j = num - i; j > 0; j--) //打印空格
printf(" ");
注意空格是递减的,所以在循环中初始化的值需要递变,可以建立与递增量i的联系实现递变
for (ch = 'A'; j <= i; j++)//正序ABC
printf("%c", ch++);
1.判断条件保证第一行(外层第一次循环)有一列(内层第一轮循环i=0,j=0,但只有一次)第二行(外层第二次循环) 有二列(内层第二轮循环j=0,1)
2.j是上一个for一轮循环后的值
3.printf 先打印ch后++
for (j = 1, ch -= 2; j <= i; ch--, j++)//逆序CBA
printf("%c", ch);
1.ch-2是应为在一次外层循环中,从第二次外层循环开始打印的值已经自增了(第二行为AB(ch=66)A,打印ch++即打印完B(ch=66)后ch++,ch=67需要再答应A,所以ch-2