各类三角形的打印

1、直角在左下角的三角形

根据观察 * 的个数与行数n的数量关系是每一行有2i-1个 * ,所以我们可以运用两个for循环,外层描述行数(令外层循环变量为 i ),内层再嵌套一个打印 * 的循环(每一次内层循环结束的标志为:当内层循环变量 k 达到 2*i 时进入下一行循环)

#include<stdio.h>
int main()
{
	int i, j;
	int n=0;
	scanf("%d", &n);//打印n行三角形
	for (i = 1; i <= n; i++)//最外层行数的循环
	{
		for (j = 0; j < 2 * i - 1; j++)//一行中循环打印2*i-1个"*"
		{
			printf("*");
		}
		printf("\n");//在每一行循环结束后进行换行操作
	}
	return 0;
}

 

2、直角在左上角的三角形

这个三角形我们可以很容易地看出它只是把 [ 1 ] 中的三角形上下颠倒过来了。那么问题来了,我们该怎么拟写这个打印 * 的 for 循环呢?

你可以试着在草稿本上写出行数 n 与第 i 行的关系,由数学中的数列知识小编就想出了一个通项公式,* 的个数就等于 2*(n - i)+1,你也可以自己思考一下还有没有其他的表达式可以符合 * 的个数的变化。所以该层循环我们就可以写成 for(k=2*( n - i )+ 1)。

#include<stdio.h>
int main()
{
	int i, j;
	int n = 0;
	scanf("%d", &n);//输入打印想要的三角形的行数
	for (i = 1; i <= n; i++)
	{
		for (j = 2 * (5 - i) + 1; j > 0; j--)
		{
			printf("*");
		}
		printf("\n");
	}
	return 0;
}

3、直角在右上角的三角形

* 的打印方法同 [2]

观察空格数的变化规律:第一行0个;第二行2个;第三行4个;第四行6个;第五行8个。还是由数学知识想出一个求空格数的通项公式:2 *( i - 1 )。

所以空格循环的循环条件我们写成 for(j = 1;j <= 2*(i-1);j++)。

#include<stdio.h>
int main()
{
	int i, j, k;
	int n = 0;
	scanf("%d", &n);//输入打印想要的三角形的行数
	for (i = 1; i <= n; i++)
	{
		for (j = 1; j <= 2*(i-1); j++)//空格的输入
		{
			printf(" ");
		}
		for (k = 2 * (5 - i) + 1; k > 0; k--)
		{
			printf("*");
		}
		printf("\n");
	}
	return 0;
}

4、直角在右下角的三角形

每一行的 * 数为:2 * i - 1。

类似地,我们求出空格数的通项公式为:2 *( n - i )。

所以空格循环的循环条件为 for(j = 1; j <= 2 *(n-i);j++)。

#include<stdio.h>
int main()
{
	int i, j, k;
	int n = 0;
	scanf("%d", &n);//输入打印想要的三角形的行数
	for (i = 1; i <= n; i++)
	{
		for (j = 1; j <= 2 * ( n - i ); j++)//空格的输入
		{
			printf(" ");
		}
		for (k = 0; k < 2*i-1; k++)
		{
			printf("*");
		}
		printf("\n");
	}
	return 0;
}

5、等边三角形(正三角形)(金字塔)

  

从该图可以看到 * 的个数规律还是 2*i-1 ,等边三角形输出只是多了一个对空格输入的循环。

这个循环的条件需要一定的思维,没关系,我们不妨就假设要打印一个5行的等边三角形(如图),通过观察我们发现空格的个数:第一行有4(5-1)个;第二行有3(5-2);第三行有2(5-3)个;第四行有1(5-4)个;第五行有0(5-5)个。显然空格的个数就是(行数-第i行)的值,由此我们可以想出空格循环的条件就是 for(k = n - i;k > 0;k--)   。

(注:用k -- 是符合一般的思维逻辑;你也可以写成 for(k = 1;k < = n - i;k++))

#include<stdio.h>
int main()
{
	int i, j, k;
	int n = 0;
	scanf("%d", &n);
	for (i = 1; i <= n; i++)//行数的循环
	{
		for (j = n-i; j >0; j--)//每一行空格的打印
		{
			printf(" ");
		}
		for (k = 0; k < 2*i-1; k++)// * 的打印
		{
			printf("*");
		}
		printf("\n");
	}
	return 0;
}

总结:今天对于打印各类三角形的学习,可以提高我们使用 for 循环的熟练度。三角形打印的关键点在于:对空格和 * 数量的表达,求出它们数量的通项公式,就可以确定 for 循环的循环条件。

打印三角形充分考察了编程者的数学思维能力,同时也可以帮助我们理解嵌套循环的执行过程,熟练掌握它可以让初学者的编程能力得到一定的提高。

那么今天的学习就到这里吧!看到这里,如果你也是一个编程小白,不妨试着跟我一样从一页空白开始编写程序,并在博客加上文字将它解释清楚。锲而舍之,朽木不折;锲而不舍,金石可镂。我们一起努力,在每一天都让自己进步一点点。

  • 12
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liyangtao_04

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值