目录
前言:
许多小伙伴在初识C语言时,在看到某些图案类题目会没有思路,想象不出怎么通过代码实现。今天,我整理出一部分,希望帮助到大家归纳总结循环结构的知识。
1.金字塔
作为许多小伙伴学习C语言的必练题目,相信大家对金字塔并不陌生。
在C语言中,打印一个金字塔通常涉及到使用嵌套循环来打印空格和星号(*)
它的思路就是,在输出的图案左侧输入空格,来保证图案的整齐。观察图案可以发现规律:
第一行有n-1个空格,第二行有n-2个空格,那么我们让j进入循环中循环n-i次,就能通过空格来固定图案的位置。
#include<stdio.h>
int main()
{
int i, j;
int n;
scanf("%d", &n);//输入所需行数
for (i = 1; i <= n; i++)//输出几行的图案
{
for (j = 1; j <= n - i; j++)//每行输出n-i个空格,使图案左对齐
printf(" ");
for (j = 1; j <= 2 * i - 1; j++)//在空格后输出图案,每行有2*i-1个图案
printf("*");
printf("\n");//记得输出完一行的图案后再换行
}
return 0;
}
外层循环让i从1开始的意思是从第一行开始打印。内层循环让j从1开始的意思是打印第一个空格或第一个星号。外层循环n次,则打印了n行。这样解释应该便于理解了许多。
输出图案:
2.倒金字塔
倒金字塔与正金字塔大同小异,无非是让金字塔从小到大输出变成从大到小,于是我们的思路就是让外层循环倒过来,而内层循环不变,代码如下:
//倒金字塔
for (i = n; i >= 1; i--)//递减
{
for (j = 1; j <= n - i; j++)
printf(" ");
for (j = 1; j <= 2 * i - 1; j++)
printf("*");
printf("\n");
}
这样,我们就让图案从第n行开始输出,而又打印在最上面了。
3.菱形
菱形就是对正、倒金字塔的组合。在输出时,通常让倒金字塔的行数比正金字塔少一行。
代码如下:
for (i = 1; i <= n; i++)
{
for (j = 1; j <= n - i; j++)
printf(" ");
for (j = 1; j <= 2 * i - 1; j++)
printf("*");
printf("\n");
}
for (i = n - 1; i >= 1; i--)
{
for (j = 1; j <=n-i; j++)
printf(" ");
for (j = 1; j <= 2 * i - 1; j++)
printf("*");
printf("\n");
}
如果输入的行数是菱形的总行数,则正金字塔的行数为n/2+1;倒金字塔n/2;
4.空心金字塔
此时让我们打印一个这样的空心金字塔:
其实这就是在金字塔内部扣掉几个星号对不对呀,那么如何实现呢?
话不多说,直接上代码
for (i = 1; i <= n; i++)//输出几行的图案
{
for (j = 1; j <= n - i; j++)
printf(" ");
for (j = 1; j <= 2 * i - 1; j++)
{
if (i < n)
{
if (j == 1 || j == 2 * i - 1)//固定位置输出图案
printf("*");
else
printf(" ");//其余位置输出空格
}
else
printf("*");//最后一行不变,输出图案
}
首先我们观察图案除了第一行与最后一行,其他行中间的图案都被替换成了空格。
那么我们就增加限制条件:i<n,第n行以外的每行都进行另一个循环判断:
(j == 1 || j == 2 * i - 1)这句代码的目的就是让这几行第一个位置和最后一个位置输出*;
而其他位置输出空格。
5.空心菱形
如图:
哈哈,这个图案相信大家已经知道怎么解决了吧,没错,就是组合上下空心金字塔。
上代码:
int main()
{
int i;
int j;
int n;
scanf("%d", &n);
for (i = 1; i <= n; i++)
{
for (j = 1; j <= n - i; j++)
printf(" ");
for (j = 1; j <= 2 * i - 1; j++)
{
if (j == 1 || j == 2 * i - 1)
printf("*");
else
printf(" ");
}
printf("\n");
}
for (i = n - 1; i >= 1; i--)
{
for (j = 1; j <= n - i; j++)
printf(" ");
for (j = 1; j <= 2 * i - 1; j++)
{
if (j == 1 || j == 2 * i - 1)
printf("*");
else
printf(" ");
}
printf("\n");
}
return 0;
}
在本代码中,就不需让最后一行例外而打印图案了。
本次分享到此为止,感谢您的阅读,如果您觉得我写的还不错或者对您有帮助,请留下您宝贵的点赞,如果还有什么补充或改正,欢迎评论区留言!