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

来源:互联网 发布:剑灵可爱灵女捏脸数据 编辑:程序博客网 时间:2024/05/17 07:46

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

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



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

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

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

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



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>



0 0