刚刚开始学习c语言,有很多不足,期待大家的批评和指正!
先看代码,目标是一个菱形字母塔
# include <stdio.h> # include <math.h> int main(void) { int n,i,j; char temp; scanf("%d",&n); for( i =1; i<2*n; ++i) { /空格段 for(j =1; j<= fabs(n-i); ++j) printf(" "); /左部字母 for (temp ='A'; temp<=((i<=n)?'A'+i-1:'A'+2*n-1-i); ++temp) putchar(temp); /右部字母 for ( temp = ((i<=n)?'A'+i-2:'A'+2*n-i-2); temp>='A'; --temp) putchar(temp); printf("\n"); } return 0; } /*输出结果:5 A ABA ABCBA ABCDCBA ABCDEDCBA ABCDCBA ABCBA ABA A */
1.在空格段部分,当i小于等于n时,自然是有n-i个空格,但是当i大于n时,利用fabs就不需要单独讨论了,直接比如n=5,i=7,那么j小于-2的绝对值2。
2.在上方左边字母部分,对输入的n,比如n=4,对应D,我不知道其他的好办法(希望大家可以指导指导),就用的笨办法,每一行最中间的终止为='A'+i-1,初始为'A'。
3.在上方右边部分的时候,仍然以n=4对应D举例,初始为终止的D-1即为C。所以设置的初始为'A'+i-2(一定要想清楚为什么是减去2,因为首先有个'A',所以天生减1,加上现在右边部分是从C开始,所以还要减一,一起就是-2)。
4.在下方时,左右部分的思想都一样,我遇到的最大的困难就是如何表示字母,我设置了一个三目运算符。当i大于n时,我想的是从最后一行开始看,主要有以下3个注意事项:
a. 最后一行是2n减1行,不是2n行!
b.左部分时,字母设置和上方一样,取'A'+2*n-1-i,此时的2n减1的意思就是a所说的最后一行为2n减1行。
d.右部分时,注意仍然是和上方右部分一样,要多减去一个1,于是就是’A'+2*n-1-1
总结来看,主要需要明白二个问题。第一就是绝对值和三目运算符。第二就是每个字母的表示方法,特别是那些减一减二。
才学c语言不久,第一次写东西,主要是当作自己的心得体会吧,如果可以帮到一些朋友,将不胜荣幸,期待大家的批评指正。
利用绝对值函数以及三目运算符简便打印菱形字母塔
最新推荐文章于 2022-04-21 20:45:57 发布