C语言编程,打印星号菱形,有人能一步步解释一下吗,看不懂啊

#include <stdio.h>
#include<math.h>
main( )
{
int i,j;
for(i=1;i<=7;i++)
{
for(j=1;j<=7;j++)
{
if((j<=fabs(4-i))||(j>7-fabs(4-i)))
printf(" ");
else
printf("*");
}
printf("\n");
}
}

首先fabs( )函数是一个取绝对值的函数,第一个for循环是决定每一行( printf("\n"); ),第二个for循环决定每一列操作。第一个for循环的i值每增加1,内嵌的for循环(第二个for循环)就执行了7次。举个例子:当i=1的时候,此时的fabs(4-1)=3,7-fabs(4-1)=4。j从1开始,if(((j<=3))或者(j>4)),就输出空格符,否则就输出*号。即当i=1时,j=4就输出*号。因为j=4的时候,不符合j<=3,或j>4的条件,所以就输出*号。其实这个程序改成:
main( )
{
int i,j;
printf("请输入a的值:");
scanf("%d",&a);
for(i=1;i<=a;i++)
{
for(j=1;j<=a;j++)
{
if((j<=fabs((a+1)/2-i))||(j>a-fabs((a+1)/2-i)))
printf(" ");
else
printf("*");
}
printf("\n");
}
}
这样就可以自己定义菱形的边长了。谢谢采纳,如有不懂,可加Q:893290881
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-08-20
第一个for,i表示行,一共要打7行,每一行对应第二个for,j表示要打的字符数,每行7个字符,每次检测if条件看打印空格或者星号,每完成7个字符, 用printf("\n"); 换行。
fabs()求绝对值函数,if是打印空格的条件,用“||”,表示满足两个条件之一即可,
两个条件分别为 1: 4-行数 的绝对值 大于或等于 j,也就是说打印第一行时,i=1,4-i=3;满足条件的j有1,2,3
2: 7-(4-行数 的绝对值) 小于 j,也就是说打印第一行时,i=1,7-(4-i)=4;满足条件的j有5,6,7
由上看第一行j=4时才会打星号。
这两个条件是控制打空格的条件的。楼主可以自己带入不同的i看看,至于怎么来,楼主可以参照我的思路
第1行,要打印4个空格一个星再4个空格
第2行,要打印2个空格3个星再2个空格
到了 第6行又要打印2个空格3个星再2个空格
观察可知 2,6行会满足相同结果,关于4对称(4为中间的一行),故采用行数与4的差的绝对值,这个绝对值又和打印的空格数有和关系,这就要找规律了,楼主可以把数据列出来研究,并不难。
希望能帮到你
第2个回答  2014-08-20
这个程序是在一个7行7列的空间中用*号绘制菱形的程序。
for(i=1;i<=7;i++) 从第一行开始逐行绘制。

for(j=1;j<=7;j++) 每一行从第一列开始绘制每一列。

if((j<=fabs(4-i))||(j>7-fabs(4-i))) :fabs是求绝对值,
试想绘制第一行时,i=1, 则小于等于3和大于4的列都是空格,只在第4列绘制*号。
绘制第二行的时候,i=2,则小于等于2和大于5的列都是空格,只在3,4,5列绘制*号,
。。。。
printf("\n"); 每一行绘制好后要回车,使下一行对齐。

以此类推,自己在草稿纸上画一下,出来的就是一个*号的菱形了。
希望对你有帮助。
第3个回答  2014-08-20
哎。搞软件的,搞编程的离不开这个破东西。解释可以跟你解释,不过这个破东西其实不怎么需要去纠结的。以后去了开发这东西还是比较少见的。
菱形是2维的吧。有行有列吧。
我们希望,行和列的生成都由for循环来完成。它输出了七行七列对吧。假如每一行每一列都是*或都是“ ”。我想大家都知道怎么写。问题就是,有的地方放“*”,有的地方放“ ”。这个就比较麻烦了。解决这个麻烦的代码体现在内层for中的if·else语句。
i是对行的循环,j是对列的循环。
过程是这样的i为1的时候,开始打列。打打打。。。
i为2时候继续打列。打打打。。。
这样一个过程完成了七行七列。
现在说说最麻烦的ifelse。4,你要理解,4表示这个菱形的上下两个尖尖的点。因为是7所以是4.如果是9,这个4就是5,如果13就是7以此类推。
fabs(4-i)表示判断当前点距离中心的距离。j<=fabs(4-i)和j>7-fabs(4-i)分别表示中心左右距离中心距离。
其他的只能你自己理解了。这是入门,如果这个搞不懂,高深的编程你就放弃吧。其他一些简单的尝试下就好。工作中不会让你去想这个东西怎么写。这一般是给考研人设计的。。。
第4个回答  2014-08-20
for(i=1;i<=7;i++) 打印7行,for(j=1;j<=7;j++) 打印7列,总共七行七列
if((j<=fabs(4-i))||(j>7-fabs(4-i))) 前三列与后三列为“ ”(空),估计是个菱形追问

if 后面的不懂啊 求点拨

追答

fabs求绝对值,i只能取1~7,j只能取1~7,举个例子:当i=1时,fabs(4-i)=3,此时j可取值:1,2,3
7-fabs(4-i)=4,j可取值5,6,7,所以第一行的第1~7列就是前三个为“ ”,中间一个味“*”,后三个为“ ”
* 。就是这样,第二行的1~7列按这个思想去推,1~7行的结果就出来了,输出就是个菱形

相似回答