*“在得知转专业成功后我便开端了各方面的预备
这个五一假日来的十分及时,刚好给予了我学习C言语基础的时间
(虽然我不太喜爱调休,不过以后的课程数量,调不调休应该都差不多吧,习气就好)”*
《打印空心金字塔》这是我在C言语课程学习中,遇到的一个很幽默的项目,首要是对循环句子的查询
# 标题:打印一个空心的金字塔
## 思路:通过对输出成果的分析,逐步推理出办法
### 进程1:先运用for循环打印一个n层的实心的金字塔
先打印一个四层金字塔
*    ——第一层,1个"*",前半部分n-1个" "
***   ——第二层,3个"*",前半部分n-2个" "
*****  ——第三层,5个"*",前半部分n-3个" "
******* ——第四层,7个"*",前半部分n-4个" "
以此类推得到:
......  ——第n-1层 , [2(n-1)-1]个"*",  前半部分n-(n-1)个" "
......  ——第n层 ,  (2n-1)个"*"   ,  前半部分n-n个" "
代码如下:
    void main()
{
int i, j, k, n;
printf("请输入您希望打印的金字塔的层数n");
scanf_s("%d", &n);
for (i = 1; i <= n; i++)
{
for (j = 1; j <= n - i; j++)
{
printf(" ");
}
for (k = 1; k <= (2 * i - 1); k++)
{
printf("*");
}
printf("n");
}
system("pause");
}
作业成果如下:

经典循环事例——打印空心金字塔

### 进程2:再运用if句子判别是打印“*”仍是“ ”,打印一个n层的空心的金字塔
先打印一个四层空心金字塔
*    ——第一层,前半部分n-1个" ",第一个"*"与毕竟一个"*"之间有0个" "
* *   ——第二层,前半部分n-2个" ",第一个"*"与毕竟一个"*"之间有1个" "
*   *  ——第三层,前半部分n-3个" ",第一个"*"与毕竟一个"*"之间有3个" "
******* ——第四层,前半部分n-4个" ",打印7个"*"
以此类推得到:
......  ——第n-1层 ,前半部分n-(n-1)个" ", 第一个"*"与毕竟一个"*"之间有[2(n-1)-1]个" "
......  ——第n层 ,前半部分n-n个" ",打印(2n-1)个"*"
代码如下:
    void main()
{
int i, j, k, n;
printf("请输入您希望打印的金字塔的层数n");
scanf_s("%d", &n);
for (i = 1; i <= n; i++)
{
for (j = 1; j <= n - i; j++)
{
printf(" ");
}
if (i < n)
for (k = 1; k <= (2 * i - 1); k++)
{
if (k == 1 || k == (2 * i - 1))
printf("*");
else
printf(" ");
}
else
for (k = 1; k <= (2 * i - 1); k++)
{
printf("*");
}
printf("n");
}
system("pause");
}
作业成果如下:

经典循环事例——打印空心金字塔

# 改善
上述代码是我自己思索出来的完成办法,通过作业上述代码,确实能够输出一个空心的金字塔
但有些当地写的比较繁琐,不行简练省时
在我的学习中,通过对教师在课程中叙说的了解,了解到有一些当地能够改善
例如施行打印"*"号时,并不需求判别两个"*"之间有几个" "
只需求在需求打印"*"的当地打印,其它当地打印" "即可
具体代码替换如下
    if (i < n)
for (k = 1; k <= (2 * i - 1); k++)
{
if (k == 1 || k == (2 * i - 1))
printf("*");
else
printf(" ");
}
else
for (k = 1; k <= (2 * i - 1); k++)
printf("*");
替换为
    for (k = 1; k <= (2 * i - 1); k++)
{
if(k==1||k== (2 * i - 1)||i==n)
printf("*");
else
printf(" ");
}
这样写不但使代码更为简练,也节省了判别句子的数量,节省时间、空间
替换后的代码如下,作业成果同上
    void main()
{
int i, j, k, n;
printf("请输入您希望打印的金字塔的层数n");
scanf_s("%d", &n);
for (i = 1; i <= n; i++)
{
for (j = 1; j <= n - i; j++)
{
printf(" ");
}
for (k = 1; k <= (2 * i - 1); k++)
{
if(k==1||k== (2 * i - 1)||i==n)
printf("*");
else
printf(" ");
}
printf("n");
}
system("pause");
}
# 总结:本项目首要查询了循环句子的运用,for、while句子均能够完成,原理相同。虽然十分简略,但这也算是我完毕的第一个项目。
“路恒久远,不忘初心,砥砺前行”
我是Lemon,在这里记录自己学习的成长进程
谢谢您的阅览,我们下期再会。