首页 > 编程笔记 > C语言笔记

C语言输出菱形(有源码有解析)

在C语言编程中,输出一个菱形图案是一个常见且有趣的练习。这个任务不仅能帮助初学者更好地理解循环和条件语句的使用,还能提高对空间结构的认知能力。
 

要输出一个菱形,我们需要将其分为上下两个部分:上半部分是一个倒置的等腰三角形,下半部分是一个正常的等腰三角形。我们可以使用嵌套循环来实现这个结构,外层循环控制行数,内层循环用于在每行中打印空格和星号。
 

下面是一个完整的 C 程序,用于输出一个由星号组成的菱形:

#include <stdio.h>

int main() {
    int n, i, j, space;
    
    printf("请输入菱形的行数(奇数): ");
    scanf("%d", &n);
    
    // 确保输入的是奇数
    if (n % 2 == 0) {
        n++;
    }
    
    // 上半部分(包括中间行)
    for (i = 1; i <= n / 2 + 1; i++) {
        // 打印空格
        for (space = 1; space <= n / 2 + 1 - i; space++) {
            printf(" ");
        }
        // 打印星号
        for (j = 1; j <= 2 * i - 1; j++) {
            printf("*");
        }
        printf("\n");
    }
    
    // 下半部分
    for (i = n / 2; i >= 1; i--) {
        // 打印空格
        for (space = 1; space <= n / 2 + 1 - i; space++) {
            printf(" ");
        }
        // 打印星号
        for (j = 1; j <= 2 * i - 1; j++) {
            printf("*");
        }
        printf("\n");
    }
    
    return 0;
}

这个程序首先要求用户输入菱形的行数。为了确保菱形的对称性,我们需要一个奇数作为行数。如果用户输入的是偶数,程序会自动将其增加 1 变为奇数。
 

程序的核心部分由两个主要的循环组成。第一个循环用于打印菱形的上半部分(包括中间行),第二个循环用于打印下半部分。在每个主循环中,我们又嵌套了两个内层循环:一个用于打印每行开头的空格,另一个用于打印星号。
 

对于上半部分,随着行数的增加,空格数量减少,而星号的数量增加。对于下半部分,情况则相反。通过精心设计循环的起始值和结束条件,我们可以精确控制每行中空格和星号的数量,从而形成完美的菱形图案。
 

当我们运行这个程序并输入一个数字(比如 7)时,会得到如下输出:

请输入菱形的行数(奇数): 7
   *
  ***
 *****
*******
 *****
  ***
   *

这个程序展示了如何通过巧妙地控制循环和条件语句来创建复杂的图案。通过调整循环的参数和打印的字符,我们可以轻松地修改这个程序来创建各种不同的图案,如空心菱形、数字菱形等。这种练习不仅能提高编程技能,还能培养创造性思维和问题解决能力。
 

对于想要进一步提高的读者,可以尝试优化这个程序。例如,可以添加输入验证来确保用户只能输入正整数,或者可以将菱形的绘制逻辑封装到一个函数中,使主函数更加简洁。这些优化不仅能提高代码的质量,还能帮助深入理解C语言的函数和模块化编程概念。

相关文章