C语言中输出菱形图的一点感悟

C/C++ 专栏收录该内容
12 篇文章 0 订阅

C语言输出菱形图的一点感悟

有这么一道题:编制输出以下图案的的程序。

                                                                                 

或许对于刚学过C语言的新手朋友来说,这是一个很简单的题,编写多个printf输出语句不就能够得到它嘛,不错,的确如此,但当我问你当我们中间最长的那排数字很大时,是不是也用同样的方法去获得呢?上述方法显然是不可取的,我们有多重方法可以实现它,这就是C的灵活性,这里介绍一个很简单的方法,废话不多说,首先贴出源码,咱们再依照他解释:


下面对代码进行解释:

首先定义两个宏用MIDDLE值得第一个*40列出输出,而STAR则代表多个“*”或“0”的字符,11行输入n值,则输出的行数为和中间最宽的那一行均为2*n-1,第一个for循环用于输出上三角,第二个则输出下三角。相对应的输出sp-1个空白符的时候,同时输出2*i-1个“*”或“0”字符,这个有我们自己定,这里有必要解释一下,关于17行语言的代码:

printf("%*c  %.*s\n",  sp - 1, '  ',  2*i-1,  STAR);

首先说一下关于%*中的*号,在这里叫做赋值抑制符。他的作用是:标准说法:星号(赋值抑制符)对赢的输入项按要求被扫视输入,但结果不存贮,带星号的说明不对应输入数据存贮地址,用它来跳出一个输入数据项(这是向对于scanf输入来说的),

在这里,对于printf来说,以11行代码为例,%*c字符“*”表示输出域由对应的输出项来确定,上述“*”对应的输出项是sp-1(假设sp-1等于4),那么%*c就相当于%4c,那么他就以%4c的格式输出'  ' (空格)。 同样的对应%.*s也相类似,但这里注意了为%.*s而非%*s

(里面有点'.'如果你误写成后者,这样会得不到正确的结果哦!那么%.*s %*s到底有什么区别呢?%*s用法类似于%*c

c输出元值为其ASCII码的字符,而s则代表输出的一个字符串,

(1)用格式符“%c”输入或输出一个字符,即逐个字符输入输出。

(2)用“%s”,则将整个字符串一次输入或输出。

举例:如果S = ABCDEF

那么对于printf"%3s,  %4.2s,  %-7.4s,  %.5s", s, s, s, s);则输出

 ABCDEF,  AB,ABCD   ,ABCDE

如果懂了这个,相信大家也就知道%.*s怎么用了吧!

这里值得一提的是,对于宏STAR的定义里面的字符数必须做够多,否则当我们把n输入很多后,可能自得不到我们预期的结果,即输出的可能就不会是菱形了,这个大家可以验证一下,那么这是为什么了,因为%.*s的输出总要依赖于STAR,当前要求输入很大时,而STAR有不够提供,那么当然会出现问题了,

利用STAR的字符数多少,我们还可以相应的变换输出的图案,可以实现多种不同的图形哦,有兴趣不妨试一下。



  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值