求指点一下道c语言题的解题思路(a不是答案)

让程序要求用户输入一个大写字母,使用嵌套循环产生像下面这样的金字塔图案:
A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
这种图案要扩展到用户输入的字符。例如,前面的图案是在输入E时需要产生的。提示:使用一个外部循环来处理行,在每一行中使用三个内部循环,一个处理空格,一个以升序打印字母,一个以降序打印字母。
请无视上边金字塔的排版问题

#include <stdio.h>
int main()
{
printf("请输入行数和起始字母(以空格分隔):");
int nlay=0;
char ch;
char chsave;
scanf("%d %c",&nlay,&ch);
chsave=ch;
for(int n=0;n<nlay;n++)
{
for(int k=0;k<nlay-n;k++)
{printf(" ");}
for(int i=0;i<2*n+1;i++)
{
if(i<n) printf("%c",ch++);
else if(i==n) printf("%c",ch);
else printf("%c",--ch);
}
ch=chsave;
printf("\r\n");
}
return 1;
}

很简单的原理:处理好每一行才能处理好多行。最外层的循环用于打印层数,这是最简单的,里面的循环就要处理好每一行了。首先,每一行由两个元素组成:空格和字母。也就是打印空格的多少最终控制了图形的基本样子。由于空格的多少在每一行都是不同的,因此它和行数有直接的关系。k=nlay-n :借助于层数,测算出该层空格的个数。接下来关注字母的个数:同样,找出他和层数的关系:i=2*n+1 。这样基本的图形就出来了。最后,关注字母变化的规律:由于字母打印的个数总是为奇数,所以设计三个条件语句,分别控制。这样,随着每一层的打印,所有的元素都以层数为参考,就能互不干扰的工作。而ch=chsave这样的语句是为了保证每行打印的首字母都是你所输入的首字母。整个程序结构清晰,思路明确,楼主,给分吧!O(∩_∩)O~
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-04-24
#include<stdio.h>
void main ()
{
char ch;
int i,j;
printf("?ch\n");
scanf("%c",&ch);
for(i=0;i<5;i++)
{
for(j=0;j<5-i;j++)
printf(" ");
for(j=0;j<=i;j++)
printf("%c",ch+j);
for(j=1;j<=i;j++)
printf("%c",ch+i-j);
printf("\n");
}
}本回答被网友采纳
第2个回答  2013-04-24
int i,j,n;
char a=‘A’;

for(i=0;i<n;i++)
{
for(j=i;j<n-1;j++)
{
printf(" ");

}
for(j=0;j<i+1;j++)
{
printf("%c",a+j);

}
//降序同理,我就不写了

}

//基本这样吧,不过我没调试过,你自己试试看吧,有些细节数据上可能不大对
第3个回答  2013-04-24
思路:

把E转成ASCII码,A的ASCII码也知道吧,转起来只要变一下类型,一般字符都是8位的,就转成8位整数好了,然后for循环,循环体中再把8位整数用%c来打印
第4个回答  2013-04-24
每一行可以看出是对称,从中间分开,前面用升序,后面降序处理。而每一行空格是到金字塔
相似回答