利用绝对值函数以及三目运算符简便打印菱形字母塔

刚刚开始学习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语言不久,第一次写东西,主要是当作自己的心得体会吧,如果可以帮到一些朋友,将不胜荣幸,期待大家的批评指正。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值