日常代码:来写一个自定义行数的菱形2018.04.15

 

咱们相想当初怎么构造出来的菱形

菱形得有四条线,然后还得在其中填充空。

语句有输入空、四条线、下一行,而菱形最左边的一个点有两条输入线的语句对其操作,最右边则是两条线加一个下一行。

菱形最左边的点第二条直线其上的操作被屏蔽,这没什么大碍。但是右边的点输入完成后必须得输入下一行,因此该点必须单独操作,并在最后两条线对其操作之前在操作。

 

 

那么,着手构造菱形了。加入你要输入的菱形行数为l(奇数),那么要用到的一个参数值为(l+1)/2,姑且设为h。

四线:i-j=±h   i+j-2h=±h  最右点:该点操作要在输入*号之前操作,*\n。那么,填充空,使这个菱形膨胀起来的时间到了。输入空的语句放在哪里好,我认为放在最前面,因为空一旦放在后面,直线或点的语句就会提前输入出来,再也没办法在前面去输入空来填充它。输入行数我们得用到scanf函数,变量:i,j,l,h。

 

#include <stdio.h>

int main(void)
{
 int i,j,l,h;//l行数,h=l/2+1.
 printf("请大佬输入行数\n");
 scanf("%d",&l);
 h=(l-1)/2;
 for(i=0;i<l;i++)
 {
  for (j=0;j<l;j++)

    if (h!=i+j&&h!=j-i&&3*h!=i+j&&h!=i-j&&2*h!=j)//空
     printf(" ");
    else if(h==i+j)//左上直线
     printf("*");
    else if(h==i&&2*h==j)//最右点

     printf("*\n");
    else if(h==j-i)//右上直线
      printf("*");
          else if(3*h==i+j)//右下直线
     printf("*");
    else if (h==i-j)//左下直线
      printf("*");
    else if (2*h=j)//下一行
      printf("\n");
  
 }
}

成了。但是,假如人家输入偶数呢??

 

 

 

惨不忍睹是吧。又要改了,唉,这就是命吧----将来我们都会是这样的人----钱多话少死得早。

 

来看看哪里错了,输入偶数l,h其实等于(l-2)/2而不是等于l/2即当(l-1)/2运算完就会变成[(l-1)/2](取整)

 

 

就是(6-1)/2就tama等于4了,而不是四舍五入。

 

 

我想到两种改法,一加一个switch语句,用除余来决定h的去向

然而我天生家穷人丑农村户口,接受不了这么狂炫酷霸叼炸天的东西,我把for中的l改成2h+1(非主流了)

 

好了,蒙混过关了。自定义行数菱形,其实右边这个点是不必纠结的,只要拓宽列数,并在第七列输\n,然后调节一下语句的顺序就可以了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值