C语言。菱形*,新学C语言。但看不懂代码。求解
#include<stdio.h>voidmain(){inti,j,k;for(i=0;i<=3;i++){for(j=0;j<=2-i;j++)/*每一行打印3-i个...
#include <stdio.h>
void main()
{
int i,j,k;
for(i=0;i<=3;i++)
{
for(j=0;j<=2-i;j++)/*每一行打印3-i个" "*/
printf(" ");
for(k=0;k<=2*i;k++)/*每一行打印2*i+1个"*"*/
printf("*");
printf("\n");
}
for(i=0;i<=2;i++)
{
for(j=0;j<=i;j++)
printf(" ");
for(k=0;k<=4-2*i;k++)
printf("*");
printf("\n");
}
}
求理解
for(j=0;j<=2-i;j++)/*每一行打印3-i个" "*/
printf(" ");
for(k=0;k<=2*i;k++)/*每一行打印2*i+1个"*"*/
printf("*");
为啥每行打印的是这个样子,咋都+1了??? 展开
void main()
{
int i,j,k;
for(i=0;i<=3;i++)
{
for(j=0;j<=2-i;j++)/*每一行打印3-i个" "*/
printf(" ");
for(k=0;k<=2*i;k++)/*每一行打印2*i+1个"*"*/
printf("*");
printf("\n");
}
for(i=0;i<=2;i++)
{
for(j=0;j<=i;j++)
printf(" ");
for(k=0;k<=4-2*i;k++)
printf("*");
printf("\n");
}
}
求理解
for(j=0;j<=2-i;j++)/*每一行打印3-i个" "*/
printf(" ");
for(k=0;k<=2*i;k++)/*每一行打印2*i+1个"*"*/
printf("*");
为啥每行打印的是这个样子,咋都+1了??? 展开
5个回答
展开全部
这是一个多for组合,
①for(i=0;i<=3;i++)
{
②for(j=0;j<=2-i;j++)/*每一行打印3-i个" "*/
printf(" ");
③for(k=0;k<=2*i;k++)/*每一行打印2*i+1个"*"*/
printf("*");
printf("\n");
}
这一段先让i的初始值为1,然后判断i是否小于等于3,显然是,那么执行下面的②,
让j的初始值为0,判断j是否小于等于2-i,显然是,那么输出一个空格,然后让j自加1,仍满足j<=2-i,再输出一个空格,然后再让j自加1,还满足j<=2-i,再输出一个空格,j再次自加1,这时不满足了,跳出②,
然后执行下面的③,让k初始值为0,判断k是否小于等于2*i,显然是,那么输出一个*,然后k自加1,这时不满足k<=2*i了,跳出③,执行下面的输出换行符。
然后①里的所有内容的第一遍就完了,这时再让i自加1,i等于2后仍满足<=3,在执行一次①里的语句,这次因为i成了2,所以②会循环两次,输出两个空格,③会循环三次,输出三个*,然后输出换行符。
然后①里的i在自加1,仍满足<=3,在执行一遍下面的②和③,这回因为i变成了3,所以②会循环一次输出一个空格,③会循环五次,输出五个*,在输出一个换行符。然后①就全部循环完了。在执行下面的其他语句,下面的三个for和上面的相比相当于翻了过来,和上面的同理,就不解释了。
最后的输出结果是个实心菱形,由于百度知道的这个输入框的限制,打不出来,就不打了。
希望能帮到你。
①for(i=0;i<=3;i++)
{
②for(j=0;j<=2-i;j++)/*每一行打印3-i个" "*/
printf(" ");
③for(k=0;k<=2*i;k++)/*每一行打印2*i+1个"*"*/
printf("*");
printf("\n");
}
这一段先让i的初始值为1,然后判断i是否小于等于3,显然是,那么执行下面的②,
让j的初始值为0,判断j是否小于等于2-i,显然是,那么输出一个空格,然后让j自加1,仍满足j<=2-i,再输出一个空格,然后再让j自加1,还满足j<=2-i,再输出一个空格,j再次自加1,这时不满足了,跳出②,
然后执行下面的③,让k初始值为0,判断k是否小于等于2*i,显然是,那么输出一个*,然后k自加1,这时不满足k<=2*i了,跳出③,执行下面的输出换行符。
然后①里的所有内容的第一遍就完了,这时再让i自加1,i等于2后仍满足<=3,在执行一次①里的语句,这次因为i成了2,所以②会循环两次,输出两个空格,③会循环三次,输出三个*,然后输出换行符。
然后①里的i在自加1,仍满足<=3,在执行一遍下面的②和③,这回因为i变成了3,所以②会循环一次输出一个空格,③会循环五次,输出五个*,在输出一个换行符。然后①就全部循环完了。在执行下面的其他语句,下面的三个for和上面的相比相当于翻了过来,和上面的同理,就不解释了。
最后的输出结果是个实心菱形,由于百度知道的这个输入框的限制,打不出来,就不打了。
希望能帮到你。
展开全部
有个有趣问题是这样:你前面有十个箱子,你怎么把它们数成9个。答案是:从零开始数。
for(j=0;j<=2-i;j++)/*每一行打印3-i个" "*/
这里面就是从零开始的,假设i = 0 ;for里面的循环体就执行了三次(j = 0;j = 1,j = 2)
所以就打印了三个空格
下面的那个for循环也是一样理解的 如果你把初始条件k = 0;改为 k = 1,或者把< = 改成 < 那就不会“ + 1”了 这不难理解吧
既然是打印菱形 打印出来的每行都是有“ ”和 “*”组成的
随着行数的增加“ ”越少 “* ”越多,出来就是个菱形了。
for(j=0;j<=2-i;j++)/*每一行打印3-i个" "*/
这里面就是从零开始的,假设i = 0 ;for里面的循环体就执行了三次(j = 0;j = 1,j = 2)
所以就打印了三个空格
下面的那个for循环也是一样理解的 如果你把初始条件k = 0;改为 k = 1,或者把< = 改成 < 那就不会“ + 1”了 这不难理解吧
既然是打印菱形 打印出来的每行都是有“ ”和 “*”组成的
随着行数的增加“ ”越少 “* ”越多,出来就是个菱形了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
它这个菱形是分为上下两个部分输出的,中间最长的那行属于上部分。
说实话还真不知怎么说你才好理解。
我是这样理解的觉得挺简单的,对于特定的一行i,你可以数下此时分别有多少个' '和'*',从中找出规律,和i的关系,你就好理解了。
举上面的例子:
当i为0,即第一行时,此时有三个' ',
for(j=0;j<=2-i;j++)/*每一行打印3-i个" "*/
printf(" ");
等价于
for(j=0;j<=2;j++) //循环三次满足条件
printf(" ");
当i为1,即第二行时, 等价于
for(j=0;j<=1;j++) //只输出两个空格,满足题意
printf(" ");
说实话还真不知怎么说你才好理解。
我是这样理解的觉得挺简单的,对于特定的一行i,你可以数下此时分别有多少个' '和'*',从中找出规律,和i的关系,你就好理解了。
举上面的例子:
当i为0,即第一行时,此时有三个' ',
for(j=0;j<=2-i;j++)/*每一行打印3-i个" "*/
printf(" ");
等价于
for(j=0;j<=2;j++) //循环三次满足条件
printf(" ");
当i为1,即第二行时, 等价于
for(j=0;j<=1;j++) //只输出两个空格,满足题意
printf(" ");
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第一个i循环,共打印4行,其中第4行有7个*,是*最多的一行,1.2.3行*的个数分别是1.3.5,由于i从0开始循环,由等差数列可以判断其规律,j是打印每行相差*的个数,用空格表示,k就是打印每行*,前面已经说了i以及打印的规矩,很明显要加一,不然第一行没*,第二行只有一个,以此类推。下面的那个i循环是输出余下的三行,规矩也差不多,只是反过来了而已,还有不清楚的地方有问题还可以问
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
空空空星
空空星星
空星星星
星星星星
空空星星
空星星星
星星星星
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询