C语言学习笔记20260612-菱形图案打印(两种写法)

C语言学习笔记20260612-菱形图案打印(两种写法)

一、知识点简介

需求:输入任意行数(奇数/偶数均可),打印对称菱形。

菱形规律:上半部分收敛变宽,下半部分发散变窄

标准示范(7行):

Plain 复制代码
   *
  ***
 *****
*******
 *****
  ***
   *

二、核心公式

设总行数 n,中间行下标 mid = n / 2

上半部分(固定不变)

  • 空格数:mid - i (逐行减少)

  • 星号数:2 * i + 1 (逐行增加)

下半部分两种写法

  • 写法1:倒序循环

  • 写法2:正序循环


三、方法一:倒序循环法

1. 思路

  • 上半部分:0 ~ mid 正序递增

  • 下半部分:mid-1 ~ 0 倒序递减

2. 完整代码

c 复制代码
#include <stdio.h>

int main()
{
    int n;
    printf("请输入菱形行数:");
    scanf("%d", &n);
    int mid = n / 2;

    // 上半部分:包含中间最大行
    for (int i = 0; i <= mid; i++)
    {
        // 打印前置空格
        for (int j = 0; j < mid - i; j++)
        {
            printf(" ");
        }
        // 打印星号
        for (int k = 0; k < 2 * i + 1; k++)
        {
            printf("*");
        }
        printf("\n");
    }

    // 下半部分:倒序循环(mid-1 递减到 0)
    for (int i = mid - 1; i >= 0; i--)
    {
        for (int j = 0; j < mid - i; j++)
        {
            printf(" ");
        }
        for (int k = 0; k < 2 * i + 1; k++)
        {
            printf("*");
        }
        printf("\n");
    }

    return 0;
}

四、方法二:正序循环法

1. 思路优势

不用倒序变量!全程 i 正序递增,新手最好理解

  • 下半部分循环:0 ~ mid-1 正序

  • 空格:i + 1 越来越多

  • 星号:2*(mid - i) - 1 越来越少

2. 完整代码(你的专属版本)

c 复制代码
#include <stdio.h>

int main()
{
    int n;
    printf("请输入菱形行数:");
    scanf("%d", &n);
    int mid = n / 2;

    // 上半部分(和标准写法一致)
    for (int i = 0; i <= mid; i++)
    {
        for (int j = 0; j < mid - i; j++)
        {
            printf(" ");
        }
        for (int k = 0; k < 2 * i + 1; k++)
        {
            printf("*");
        }
        printf("\n");
    }

    // 下半部分:正序写法
    for (int i = 0; i < mid; i++)
    {
        // 空格逐行变多
        for (int j = 0; j < i + 1; j++)
        {
            printf(" ");
        }
        // 星号逐行变少
        for (int k = 0; k < 2 * (mid - i) - 1; k++)
        {
            printf("*");
        }
        printf("\n");
    }

    return 0;
}

五、运行效果(完全一致)

输入奇数:7

Plain 复制代码
   *
  ***
 *****
*******
 *****
  ***
   *

输入偶数:4

Plain 复制代码
  *
 ***
 ***
  *

相关推荐
蹊黎9 小时前
Linux 下用 C 语言实现进度条
linux·c语言·单片机
视觉小萌新9 小时前
AI Class 3 · Chapter 1:变量、字符串、list/dict、if/for(python学习-小白版-有经验可跳过)
python·学习·list
爱聊灵光的维C11 小时前
从看见世界到重构认知:在视觉与硬件的交汇处,寻找我们这代人的北极星
c语言·物联网·计算机视觉·重构·硬件工程·射频工程
AI+程序员在路上11 小时前
RV1126B 上支持的模型及全流程应用--从CNN及语音到 LLMVLM 与跨平台选型
linux·c语言·人工智能
揽星河..12 小时前
【C语言】扫雷游戏
c语言·算法·游戏
yyyang8812 小时前
蓝牙系统整体架构详解
学习·信息与通信
程序边界12 小时前
一台数据集成软件的拆解笔记(下):一致性、容错、跑批与迁移,KFS 真正难的地方在这
java·前端·笔记
Linux-lucky13 小时前
46-Linux学习之旅之LVS负载均衡与keepalived高可用
linux·运维·学习·ubuntu·负载均衡·lvs
冻柠檬飞冰走茶14 小时前
PTA刷题集之Airline Routes(C语言实现)
c语言·开发语言·数据结构·算法
冻柠檬飞冰走茶14 小时前
PTA刷题集之Battle Over Cities - Hard Version(C语言实现)
c语言·开发语言·数据结构·算法