要求使用编程输出此图形
我们先来写上半部分,即只输出上半部分的菱形,再来考虑下半部分,
一.上半部分
写之前先来分析一下规律,在自己的脑子里形成完整思路以后再开始写代码
观察这个表格,行数和*的数量有什么规律,行数和空格有什么规律;
不难看出,行数二倍-1可以得到*数量,第一行*数为2*1-1个;第二行*数为2*2-1个;第三行*数为3*2-1个;第四行*数为4*2-1个;第五行*数为5*2-1个;
行数和空格相加都等于5,正好是总行数-此行的数字=空格数,一共为5行嘛,第一行空格为5-1个,第二行空格为5-2个,第三行空格为5-3个,第四行空格为5-4个,第五行空格为5-5个;
发现了规律以后就来构建代码框架
我们在上面发现了行数和*、空格之间的关系,我们就可以用变量i来表示行数,进行循环,从1-7进行循环,每循环一行就打印对应的空格和*,因为每打印一行都要打印对应数量的*和空格,所以就可以得出*和空格的的循环打印要嵌套在行数i里面,但*和空格是相互独立的,它俩各自独立在行数i的循环里;因为每一行的空格在*前面,所以要把*的循环打印放在空格前面才有效,放在后面就看不出效果;
代码段:
#include<stdio.h>
int main()
{
int i = 1; //i控制行数
int j = 1; //j控制打印*
int k = 0; //k控制打印空格
for (i = 1; i <= 7; i++)
{
for (k = 1; k <= 7 - i; k++)
{
printf(" ");
}
for (j = 1; j <= 2 * i - 1; j++)
{
printf("*");
}
printf("\n");
}
return 0;
}
运行结果:
二.下半部分
注意是6行,不再是7行咯
同样先来分析规律:
继续分析行数和*、空格之间的关系,仔细观察可以得出: 具体行数X2+*数=13,所以*数量=13-2X具体行数,而13又是6X2-1得出来的,即第一行*数=(2*6+1)-2X1个,第二行*数为(2*6+1)-2X2个,第三行*数=(2*6+1)-2X3个,第四行*数=(2*6+1)-2X4个,第五行*数=(2*6+1)-2X5个,第六行*数=(2*6+1)-2X6个;
空格数恒等于行数;
下半段跟上半段一样,每打印一行,就循环对应次数的空格打印和8数量打印,在自己脑海里形成清晰的思路以后就开写
代码段:
#include<stdio.h>
int main()
{
int i = 1; //i控制行数
int j = 1; //j控制打印*
int k = 0; //k控制打印空格
for (i = 1; i <= 6; i++)
{
for (k = 1; k <= i; k++)
{
printf(" ");
}
for (j = 1; j <= ((2 * 6) + 1) - 2 * i; j++)
{
printf("*");
}
printf("\n");
}
return 0;
}
运行结果:
三 、最终代码
#include<stdio.h>
int main()
{
int i = 1; //i控制行数
int j = 1; //j控制打印*
int k = 0; //k控制打印空格
for (i = 1; i <= 7; i++)
{
for (k = 1; k <= 7 - i; k++)
{
printf(" ");
}
for (j = 1; j <= 2 * i - 1; j++)
{
printf("*");
}
printf("\n");
}
for (i = 1; i <= 6; i++)
{
for (k = 1; k <= i; k++)
{
printf(" ");
}
for (j = 1; j <= ((2 * 6) + 1) - 2 * i; j++)
{
printf("*");
}
printf("\n");
}
return 0;
}
四:拓展
可以考虑,行数由用户输入,输出对应的菱形
#include<stdio.h>
int main()
{
int i = 1; //i控制行数
int j = 1; //j控制打印*
int k = 0; //k控制打印空格
int n = 0;
scanf("%d", &n);
for (i = 1; i <= n; i++)
{
for (k = 1; k<= n - i; k++)
{
printf(" ");
}
for (j = 1; j <= 2 * i - 1; j++)
{
printf("*");
}
printf("\n");
}
for (i = 1; i <= n-1; i++)
{
for (k = 1;k<=i ; k++)
{
printf(" ");
}
for (j = 1; j <=(2*(n-1)+1)-2*i; j++)
{
printf("*");
}
printf("\n");
}
return 0;
}