c语言输出菱形图案

 我来答
绝妙又纯美灬爱人T
推荐于2018-05-07 · TA获得超过181个赞
知道小有建树答主
回答量:138
采纳率:100%
帮助的人:123万
展开全部

下面对代码进行解释:

首先定义两个宏用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的字符数多少,我们还可以相应的变换输出的图案,可以实现多种不同的图形哦,有兴趣不妨试一下。

yangenhap88
2014-11-27 · 超过78用户采纳过TA的回答
知道答主
回答量:125
采纳率:0%
帮助的人:54.9万
展开全部
#include <stdio.h>
void f(int m,int n)
{
int i,t;
for(i=0;i<m;i++)
printf("*");
putchar('\n');
if(m<n)f(m+1,n);
for(i=0;i<m-1;i++)
printf("*");
putchar('\n');

}
void main()
{
f(1,10);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式