JavaScript实现星型金字塔打印功能详解

作者:拾光

时间:2026-10-22

浏览:102

本文通过JavaScript代码实例,详细解析如何打印中间轴对称的星型金字塔。文章从基本目标、核心思想到具体制作过程,逐步讲解如何利用循环与条件判断处理空格与星号输出,并探讨了输入验证及浏览器性能限制等实际编程中的注意事项。

文章目录

JavaScript实现星型金字塔打印功能详解

本文通过JavaScript代码实例,详细解析如何打印中间轴对称的星型金字塔。

其核心逻辑在其他编程语言中同样适用,

这道题目在学习C语言等基础编程课程时较为常见,

主要目标是打印出如下所示的图形:

JavaScript实现星型金字塔打印功能详解

在初学循环结构时,许多人可能觉得此类题目枯燥而轻视,未深入思考其实现细节,

若使用JavaScript甚至纯HTML即可轻松实现,甚至无需复杂的脚本逻辑:


<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=gb2312"/>
</head>
<body>
&nbsp;&nbsp;*
&nbsp;***
*****
&nbsp;***
&nbsp;&nbsp;*
</body>
</html>

此处未采用UTF-8编码,主要是因为UTF-8对非断行空格(nbsp)的处理方式与星号字体存在排版冲突,若使用非标准宋体可能导致显示错乱,影响最终查看效果。

虽然面对少量行数时,直接复制粘贴上述HTML内容即可实现,但当具备大数据量概念后,若要求输出二十万行此类轴对称星型金字塔,手动复制显然不可行。

因此,彻底理解其实现原理至关重要。尽管实际开发中极少遇到此类需求,但部分面试可能会考察此题,例如询问如何高效输出二十万行轴对称星型金字塔,若初次接触未掌握方法,后续将难以应对。

基本目标与输入限制

一、基本目标

首先通过弹窗提示用户输入一个奇数,因为轴对称图形需要奇数行。为确保程序健壮性,需对用户输入进行校验,若输入非奇数则提示错误并终止后续执行。关于JavaScript判断奇数的方法,此前已在《JavaScript对数字的判断与处理》一文中详述,此处不再赘述。

考虑到浏览器性能负载,此处设定用户输入的奇数最大值为189。该数值基于个人电脑测试得出,认为在此范围内运行尚可,并非经过严格压力测试,仅为随意设定的限制值。

JavaScript实现星型金字塔打印功能详解

当尝试输入189行时,IE浏览器会弹出“中止脚本”警告,但即使不中止,程序也能正常运行。

运行效果如下所示:

JavaScript实现星型金字塔打印功能详解

若使用C语言或其他编译型语言编写,该数值限制可大幅放宽。

核心逻辑与数学规律

二、基本思想

理解此逻辑后,代码编写将变得简单。

JavaScript实现星型金字塔打印功能详解

核心思路是仅在星号左侧输出空格,右侧无需输出空格,打印完星号后直接换行。

将图形分为两部分处理:上半部分(i<=n/2)和下半部分(i>n/2),

这样划分的原因是上下两部分输出的星号数量与空格数量规律不同。

随后通过寻找数学规律编写代码,经测试运行无误。若有更简洁的数学表达式,欢迎指正。

代码实现细节

三、制作过程

代码逻辑简单,主要涉及条件结构与循环结构的组合,理解上述思想即可轻松实现。

此处可能有人疑惑,为何先执行n++再判断n%2!=0,即通过判断n+1是否为偶数来推导n是否为奇数,

此举主要是为了适配后续的for循环结构,


<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=gb2312"/>
</head>
<body>
</body>
</html>
<script>
var i,j,k,n;
n=window.prompt("请输入要输出的行数n,为了形成轴对称,所以你输出的必须是奇数!");
if(isNaN(n)||!n)
  alert("你输入的不是数!");
else{
  n++;
  if(n%2!=0)
    alert("你输入的不是奇数!");
  else if(n>190){
    alert("不要这么大嘛!臣妾做不到啊!");
  }
  else{
    for(i=1;i<n;i++){
      if(i<=n/2){
        for(k=n/2-i;k>0;k--)
          document.write("&nbsp;");
        for(j=0;j<2*i-1;j++)
          document.write("*");
          }
      else{
        for(k=i-n/2;k>0;k--)
          document.write("&nbsp;");
        for(j=0;j<2*(n-i)-1;j++)
          document.write("*");
        }
      document.write("<br>");
    }
  }
}
</script>

具体细节需读者自行体会,

更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript数学运算用法总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript数组操作技巧总结》、《JavaScript排序算法总结》、《JavaScript遍历算法与技巧总结》、《JavaScript查找算法技巧总结》及《JavaScript错误与调试技巧总结》

希望本文所述对大家JavaScript程序设计有所帮助。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章