C 语言打印沙漏图案的程序

2025年5月11日 | 阅读 4 分钟

图案在编程中被广泛用于测试逻辑和解决问题的能力。其中之一就是沙漏图案。本教程将解释如何创建一个 C 程序来打印沙漏图案。它还将指导我们理解代码背后的逻辑,以便我们能够理解实现过程。

什么是沙漏图案?

沙漏图案是一种看起来像沙漏的对称图案。它由特定递减和递增顺序的星号 (*) 行组成。例如,一个 5 行高的沙漏图案如下所示:

在这种情况下,随着我们在上半部分向下移动,星号的数量会减少,而在下半部分则会增加。为了对称性,星号前的空格在上半部分增加,在下半部分减少。

实现沙漏图案的步骤

要在 C 中创建沙漏图案,我们需要:

  1. 理解星号和空格在行数中的变化方式。
  2. 使用嵌套循环:一个用于行,其他用于打印空格和星号。
  3. 将图案分为两部分:上半部分和下半部分。

算法

1. 输入:接受沙漏的高度(上半部分的行数)。

2. 上半部分

  • 对于每一行
    • 打印前导空格。
    • 按递减顺序打印星号。

3. 下半部分

  • 对于每一行
    • 打印前导空格。
    • 按递增顺序打印星号。

4. 输出:显示完整的沙漏图案。

示例

让我们以一个打印 C 语言沙漏图案的例子。

示例输入和输出

输入

输出

*********
 *******
  *****
   ***
    *
   ***
  *****
 *******
*********

输入

输出

*****
 ***
  *
 ***
*****

代码解释

1. 函数定义

  • printHourglass 函数接受一个整数 n 作为输入,它代表沙漏上半部分的高度。

2. 上半部分循环

  • 第一个内循环:在打印星号之前,打印足够的空格以占据右侧,for (j = 0; j < i; j++)
  • i 增加得越多,空格的数量也增加得越多。
  • 第二个最内层循环(for (j = 0; j < (2 * (n - i) - 1); j++))也打印星号:数量随行数而减少。

3. 下半部分循环

  • 外循环包含下半部分的每一行,从上半部分的倒数第二行开始。for (i = n-2; i >= 0; i--)。
  • 第一个内循环打印的空格与上半部分相同。
  • 第二个内循环按升序打印星号。

4. 主函数

  • main 函数接受用户输入的行数 (n) 并调用 printHourglass 函数来生成图案。

要点说明

  1. 动态输入:程序根据输入 n 动态调整图案。这使其能够适应各种大小的沙漏图案。
  2. 对称性:沙漏的上下两部分是对称的,这使得逻辑可以重用。
  3. 嵌套循环:理解嵌套循环对于实现此类模式至关重要。迭代次数取决于行索引。

常见陷阱

  1. 少算或多算错误:确保循环运行正确的迭代次数,尤其是在空格和星号方面。
  2. 输入验证:添加验证检查以确保输入有效——例如,非负整数——将使我们的程序更加健壮。
  3. 格式化:注意空格和换行符,以实现图案的对称性。

沙漏图案的变体

1. 空心沙漏:修改代码,仅在边界处打印星号,内部打印空格。

示例

2. 数字沙漏:将星号替换为对应行索引的数字。

示例

结论

总之,在 C 语言中打印沙漏图案是一个很好的练习,它能够测试个人的逻辑思维能力并提升编程技能。通过解决问题的小步骤、对循环的理解以及对格式的把握,创建复杂的图案从未如此简单。我们可以将此代码作为模型,在实验中创建自己的变体。