题目:编写一个程序,提示用户输入大写字母。使用嵌套循环使用金字塔形的格式打印字母。、
分析:字母前是空格,然后是字母,字母后面的空格不用再考虑,只需要加上换行就行。
空格数分别为4->3->2->1->0; 最后一行是没有空格的。所以规律就是 :空格数=总行数-行数
然后打印字符,每次都是从A开始,特别的是关于中间的字母对称,前面是先递增,后面又递减,而每行的中间的字母是第几个就是行数,例:第二行中间的是第二个字母;第三行中间的是第三个字母........
A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
以上就是大概的思路;
下面是具体的处理:
1:总行数的话就用 ('E'-'A'+1),不要忘记+1,因为‘E'-'A'=4,输入的是字母,所以采用字母相减求。
2:前面空格的处理,设第i行,空格数=('E'-'A'+1-i);
3:打印字母个数;1,3,5,7,9;
即(2*i-1);
4:后面递减处理?
直接字母--;
下面直接上代码
#include<stdio.h>
int main()
{
int i,j ;
char c;
char b = 'A';
scanf("%c", &c);
for (i = 1; i <= c - 'A'+1; i++)
{
b = 'A';//这里初始化必须写上,才能保证每次从A开始;
for (j = 1; j <= (c-'A'-i+1); j++)
{
printf(" ");
}
for (j = 1; j <= (2 * i - 1); j++)
{
if (j > i)//条件判断,让后面的递减
{
printf("%c", (b-2)); b--;//这里(b-2)易错为b-1;但实际上在else的printf后有c++,
导致输出最中间的字母后递增一个,所以要达到递减效果,必须-2;
}
else
{
printf("%c", b); b++;
}
}
printf("\n");
}
return 0;
}