news 2026/4/17 7:52:01

C语言中以坐标的方式图解“字母金字塔”的绘制

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C语言中以坐标的方式图解“字母金字塔”的绘制

目录

  • 题目
  • 题目解析
    • 题目理解
    • 空格图-坐标解析
    • 字母递增图-坐标解析
    • 字母递减图-坐标解析
  • 代码汇总验证
    • 代码汇总
    • 终端运行验证
  • 坐标图解法的好处
    • 建议
    • 好处

题目

实现字母金字塔,通过键盘输入字符来控制层数,如输入D,则打印下面图形

A ABA ABCBA ABCDCBA

题目解析

题目理解

由题目中的图形可知,主要是打印字母的金字塔,这个金字塔怎么构成的勒:

  • 每一行都是以首字母A开始,递增后到每一行的最大值后,又递减到首字母A结束;
  • 行数等于输入字母-首字母数即:char(D)-A+1;
  • 每一行最中间的字母以此增加,到输入字母char(D)结束;
  • 每一行的最大值跟行数成现行关系:A+i+x(系数);
  • 假如不是最后一行,那么在输入字母之前需要先有空格;
  • 每一行的字母数量是行数*2-1个;

如果把这个字母金字塔看成一个整体,那么我们不但需要判断打印空格的时机,还要判断打印递增字母的时机,还得判断递减字母的时机,会导致思路很复杂。这种复杂的想法不适合初学者思考,因此我这边建议将图形分开成三份后再做处理

假定:

  • 1)输入的变量元素(chr)就是D,首元素就是A;
  • 2)那么需要打印的行数就是len= D-A+1=4;
  • 3)i代表行数,j代表列数;

空格图-坐标解析

i/j0123
0***
1**
2*
3

空格坐标图(以*表示占位)

根据空格图我们知道需要打印的空格以代码表示为:

for(inti=0;i<=len-1;i++){//从坐标图看从i=0开始就有,到3结束,共4列,也就等于len-1=4-1=3for(intj=0;j<len-1-i;j++){//从坐标图看从j=0开始,第一行打印到len-1-1结算,之后以此少打一个,即到j=(len-1)-i结束;printf(" ");//打印空格;}printf("\n");//一行打印完后进行换行}

字母递增图-坐标解析

i/j0123
0A
1AB
2ABC
3ABCD

字母递增图

空格已经打印完了的情况下,即空格已经占位好了,那么这个字母递增图从实际写代码出发会进行变种到如下所示:

i/j0123
0A
1AB
2ABC
3ABCD

字母递增图修订

根据坐标图我们知道需要打印递增字母以代码表示为:

for(inti=0;i<=len-1;i++){//从坐标图看从i=0开始就有,到3结束,共4列,也就等于len-1=4-1=3for(intj=0;j<=i;j++){//从坐标图看从j=0开始,每一行都是i=j的时候结束;printf('A'+j);//打印字母,以首字母A开始,每一列加j;}printf("\n");//一行打印完后进行换行}

字母递减图-坐标解析

i/j0123
0
1A
2BA
3CBA

字母递减坐标图

根据坐标图我们知道需要打印的代码表示为:

for(inti=0;i<=len-1;i++){//从坐标图看从i=0开始就有,到3结束,共4列,也就等于len-1=4-1=3for(intj=1;j<=i;j++){//从坐标图看从j=1开始,每一行都是i=j的时候结束;printf('A'+i-j);//打印字母,每次结束的时候都是A,然后以此往坐标的左边加1,所以是-j,每一行又都是i=j时结束,所以加了一个i,带入公式验证两行无误即可编译验证;}printf("\n");//一行打印完后进行换行}

代码汇总验证

代码汇总

intmain(intargc,charconst*argv[]){charchr;printf("input char A~Z/a~z/0-9:");scanf("%c",&chr);charchr_sop;intlen;switch(chr){case'A'...'Z':len=chr-'A'+1;chr_sop='A';break;case'a'...'z':len=chr-'a'+1;chr_sop='a';break;case'0'...'9':len=chr-'0'+1;chr_sop='0';break;default:printf("input error\n");return0;break;}for(chari=0;i<=len-1;i++){for(intj=0;j<(len-1)-i;j++){printf(" ");}for(intj=0;j<=i;j++){printf("%c",chr_sop+j);}for(intj=1;j<=i;j++){printf("%c",chr_sop+i-j);}printf("\n");}return0;}

我这里汇总的代码与前面的图解代码几乎一模一样。
只是做了以下优化
:

  • 1)将字符的长度与首字符用变量len和chr_sop表示,方便处理不同的类型;
  • 2)用switch …case…语句将输入的字符分类,扩展到可以处理三种类型的金字塔;
  • 3)在字符完全不合规的情况下,直接return 退出执行代码;
  • 其余地方与图解一样,甚至连坐标的起始都一样。

终端运行验证

可以看到输出的结果与题目一模一样,且可以打印超过D大小的金字塔;

坐标图解法的好处

建议

  • 1)初学者做图形打印练习的时候都先画坐标图,再写代码;
  • 2)初学者的坐标都以i/j都以0(或1)开始,自加形式,然后去找结束条件;

好处

可以从坐标图清晰看出:

  • 图形的i有几列,第一层循环很清晰,****基本可以无脑写(int i=0;i<=x;i++)
  • 每一行的打印开始位置,且都是自增的情况下,第二层循环可以无脑先写成(for(int j=0(或则其他,根据图来);循环条件;j++))。然后就再去找循环的条件即可;
  • 可以很清晰的看出来每行的打印规律,而且就算第一次没把规律找对,也可以很对照坐标很轻松验证,再去调整;

总结一下好处就是:

  • 1)循环体很好写出来:
    • 不用纠结循环体的写法;
    • 只要去找循环条件即可;
    • 都是自增,不用多余考虑是否需要自减;
  • 2)对比思路很清晰顺带梳理了写代码的思路
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 14:29:52

LobeChat能否对接IFTTT自动化?跨应用触发器设定

LobeChat能否对接IFTTT自动化&#xff1f;跨应用触发器设定 在智能工具日益融合的今天&#xff0c;我们不再满足于“你问我答”式的AI交互。真正的智能助手应当能感知环境、响应事件&#xff0c;甚至在用户开口前就采取行动——比如当工作邮箱收到一封标有“紧急”的邮件时&…

作者头像 李华
网站建设 2026/4/15 22:11:51

互联网大厂Java求职面试场景对话及技术深度解析

互联网大厂Java求职面试场景对话及技术深度解析 场景介绍 本文设定在一家互联网大厂的Java开发岗位面试现场&#xff0c;面试官严肃专业&#xff0c;求职者谢飞机则风趣幽默。三轮问答围绕典型互联网业务场景展开&#xff0c;覆盖丰富的技术栈并逐步深入&#xff0c;适合Java初…

作者头像 李华
网站建设 2026/4/16 12:26:52

Telegram群组同步更新:国际用户沟通桥梁

Telegram群组同步更新&#xff1a;国际用户沟通桥梁 在跨国团队协作日益频繁的今天&#xff0c;如何让分布在全球各地的成员实现高效、无障碍的沟通&#xff0c;成为了一个现实挑战。语言差异、时区错配、信息碎片化等问题不断消耗着团队的协作效率。与此同时&#xff0c;AI助…

作者头像 李华
网站建设 2026/4/16 12:23:28

SAP如何打开物料帐期和财务账期

1&#xff09;打开物料账期用事务代码MMPV&#xff0c;查看用MMRV2&#xff09;打开财务账期用事务代码OB52假设今天是2025年6月1日&#xff0c;需要打开2025年6月份的账期。1&#xff09;用事务代码MMPV打开物料账&#xff0c;如下图填写的数据。用MMRV检查2&#xff09;事务代…

作者头像 李华
网站建设 2026/4/16 11:51:16

日志系统与结构化日志

目录日志系统与结构化日志引言1. 日志系统基础概念1.1 日志的重要性与价值1.2 日志系统的演进历程1.3 日志质量的金字塔模型2. 结构化日志基础2.1 什么是结构化日志&#xff1f;2.2 结构化日志 vs 非结构化日志2.3 结构化日志的数学表示3. 日志系统架构设计3.1 现代日志系统架构…

作者头像 李华
网站建设 2026/4/16 10:22:04

【天津财经大学主办】第五届社会科学与人文艺术国际学术会议 (SSHA 2026)

第五届社会科学与人文艺术国际学术会议 (SSHA 2026)于2026年2月06-08日在中国北京举行。会议旨在为从事“社会科学”与“人文艺术”研究的专家学者、工程技术人员、技术研发人员提供一个共享科研成果和前沿技术&#xff0c;了解学术发展趋势&#xff0c;拓宽研究思路&#xff0…

作者头像 李华