C语言解决字符三角形模板 | 洛谷题单B2005的深层剖析

文章介绍了如何通过编程实现一个字符等腰三角形,重点在于控制空格和字符的数量,通过调整变量实现不同高度的三角形。作者给出了从3行到10行三角形的修改示例。
摘要由CSDN通过智能技术生成

题目描述

给定一个字符,用它构造一个底边长 5个字符,高 3个字符的等腰字符三角形。

输入格式

输入只有一行,包含一个字符。

输出格式

该字符构成的等腰三角形,底边长 5个字符,高 3个字符。

输入输出样例

输入 #1

*

输出 #1

  *
 ***
*****

代码如下:

#include<stdio.h>
main()
{
	char a;
	int k=2;  //空格初始值 
	scanf("%c",&a);
	for(int i=0;i<3;i++)  //三角形高度 
	{
		for(int j=k;j>0;j--)  //循环打印空格 
		{
			printf(" ");
		}
		k--;  //空格循环结束后,改变空格初始值用于下一行空格 
		for(int m=0;m<(2*i+1);m++)  //循环打印* 
		{
			printf("%c",a);
		}
		printf("\n");  //一行操作结束后,换行 
	}
	return 0;
}

这道题有两个关键点在于:

1,打印空格

2,打印字符

如果只是单纯解决题干的要求,完全可以直接三行printf。但是如果是打印50行100行这种大型三角形不可能一行一行慢慢打。

所以我创建了该字符三角形的模板,改变两个重要变量即可对三角形进行修改。

在这之前先对这个代码进行分析,以下是思路:

(1)首先就是定义char变量,如果题目要求其他变量修改即可

(2)然后定义新变量k  该变量属于两个重要变量之一,用于控制空格数

对k赋初值2,是由于该题目要求三行三角形,易见该三角形第一行*前是两个空格,则赋值2;

(3)下面利用了嵌套循环

先讨论内层,内层用到两个for打印每行的空格和字符

第一个for解决空格,由于循环前已经定义k,且初值为2,令将k赋给j,循环打印空格

此循环结束后再进行 k-- 改变空格数,以用来对下一行打印空格做准备

第二个for解决字符打印,该三角形每行字符数为奇数,则用公式运算即可

第二个for结束后换行即可

而第二个for与外层for循环挂钩,外层来增加三角形高度

外层for中定义的i,初值为0,是考虑内层第二个for的公式运用

外层i=0,内层公式2*i+1,代入即打印1个字符,下面每一行以此类推

刚刚提到了改变两个变量即可修改变成新的三角形,一个是一开始对k的赋值,另外一个就是外层for循环中的判断条件

for(int i = 0 ; i < 3 ; i ++)  //其中的3是行数,对其修改可改变三角形高度,例如该题是3行三角形

现在重要变量已经解释了:

(1)k用于改变每行空格数

(2)外层for循环的行数改变,他的改变进一步改变了内层第2个循环的公式,从而改变每行的字符数,也就达到每行字符数量的要求

现在修改题目条件,对其进行应用

打印10行三角形,其他要求不变

根据上面的分析,将外层for的判断条件改为:i<10

k改为9(k其实就是行数减1

改变这两个变量即可

代码如下:

#include<stdio.h>
main()
{
	char a;
	int k=9;  //空格初始值为9
	scanf("%c",&a);
	for(int i=0;i<10;i++)  //三角形高度为10
	{
		for(int j=k;j>0;j--)  //循环打印空格 
		{
			printf(" ");
		}
		k--;  //空格循环结束后,改变空格初始值用于下一行空格 
		for(int m=0;m<(2*i+1);m++)  //循环打印* 
		{
			printf("%c",a);
		}
		printf("\n");  //一行操作结束后,换行 
	}
	return 0;
}

运行结果:

(第一行是输入的字符,下面是字符三角形)

以上就是对字符三角形模板的概括和分析应用,欢迎大家交流~

如果认为有错误之处也欢迎指出。

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值