您的位置:首页 > 编程语言 > C语言/C++

写对称字母塔的时候,程序看起来都很复杂,但一步一步来,总是可以解决的!这个过程需要耐心!

2015-07-29 12:09 651 查看
    写对称字母塔的时候一点感受,程序看起来都很复杂,但一步一步来,总是可以解决的!这个过程需要耐心!静下心来,一步一步的实验,打印结果,看是否是需要的。

    程序乍一看都很复杂,也搞不到头绪。我觉得是自己还没有仔细思考过这个问题的解决办法。自己一步一步的想下解决办法,总能一步一步的得到你想要的。即使解决不了,再去看其他人的解决办法,都会很容易想明白,并记住!



    刚看到题目的时候,没有任何思路,想着是不是可以两个循环把这个图案打印出来。想来想去好像不行,于是第一天就把这个放一边了。

    隔了两天又想来把这题给搞定,就想着前面有打印字母递增的算法,还有递减的算法,是不是可以用这些思路去解决问题。

    正好又看到网友的思路是把图案分三部分打印,一部分是前面空格,一部分是字母前半部分,最后是字母后半部分。所以设计一个外循环,然后三个内循环,一个循环打印前面的空格,一个打印字母前半部分,一个打印后半部分。扫了一样网友的算法,乱糟糟的感觉,就思路还记得,设计多个循环!其他的一闭上眼睛就忘了。

    想来想去,自己去动手写下应该就能理解了,于是就来写吧。

1, 先搞一个递增的外循环,循环次数由输入字母减去‘A’来控制。

<span style="font-size:14px;">for(row=0 ; row<=ch-'A'; row++)
{

}
</span>


2,再搞一个递减内循环,做空格循环次数控制。初始化应该是和外循环成反向的。

<span style="font-size:14px;">	for(row=0 ; row<=ch-'A'; row++)
{
for(bl=(ch-'A'-row-1); bl>=0 ; bl--)
printf("_", bl );

printf("\n");

}</span>


测试打印,空格看不到,换成 ‘_’ 来试试。



打印结果正确。

3,再搞一个递增循环,做字母前半部分。

<span style="font-size:14px;">for(row=0 ; row<=ch-'A'; row++)
{
for(bl=(ch-'A'-row-1); bl>=0 ; bl--)
printf("_", bl );
for( line = 'A' ; line <='A'+row ; line++)
printf("%c", line );

printf("\n");

}</span>


测试打印,结果也还行。



4,最后搞一个递减循环,来控制反序字母打印。

此步骤刚开始搞不明白如何设计循环初始化条件,和循环界限设定。不断调试了有五六次,最终再把这项设定好。

<span style="font-size:14px;">for(row=0 ; row<=ch-'A'; row++)
{
for(bl=(ch-'A'-row-1); bl>=0 ; bl--)
printf("_", bl );
for( line = 'A' ; line <='A'+row ; line++)
printf("%c", line );
for(line='A'+row -1; line >= 'A' ; line--)
printf("%c", line );
printf("\n");

}</span>


完整代码:

    我这个代码没有做输入条件筛选,应该是可以做 字母输入判定, 大小写判定,然后设计分支来处理不同情况,后面再来完善这些功能。

<span style="font-size:14px;">#include<stdio.h>

int main(void)
{
int row ,line ,bl;
char ch;

scanf("%c", &ch);
for(row=0 ; row<=ch-'A'; row++)
{
for(bl=(ch-'A'-row-1); bl>=0 ; bl--)
printf("_", bl );
for( line = 'A' ; line <='A'+row ; line++)
printf("%c", line );
for(line='A'+row -1; line >= 'A' ; line--)
printf("%c", line );
printf("\n");

}

return 0;
}</span>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C语言字母塔