打印星星

这篇博客探讨了如何在不使用数组的情况下打印星星。虽然看似简单的程序,其核心算法与之前的程序一致,体现了计算与输出的分离,这一思想在图形算法中具有广泛应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*
 * 打印程序主要是针对图形算法的考察
 * 怎样安排字符的位置,对于图形主要是怎样安排象素的位置
 * 终端程序有个特点,只能按序输出
 * 当然可以使用'\b'来回退一个字符,但是也限于行内
 * 你也可以直接操作终端,但是这个不在考察范围内
*/

/*
 * 根据上面的分析可知,使用二维数组模型是最好的存储结构
 * 在数组中安排相应元素的位置
 * 但是终端使用的是按行输出,所具体的元素的位置可以在输出的时候进行计算
 * 所以可以使用线性表的结构来做为无素的存储结构
 * 这里我个人认为双端队列比较好用
*/

// 打印星星
//    *    
//   * *   
//  * * *  
// * * * * 
//* * * * *
// * * * * 
//  * * *  
//   * *   
//    *    

#include <stdio.h> 
#include <string.h>
#include <stdlib.h>

int main() {
    int n = 5;
    char **star;

    int len = n + n - 1;
    star = (char **)malloc(sizeof(char*) * len);
    for (int i=0; i<len; ++i) {
        star[i] = (char *)malloc(sizeof(char) * len);
        memset(star[i], ' ', sizeof(char) * len);
    }

    for (int i=0; i<len; ++i) {
        int star_num = i<n-1 ? i+1 : n+n-i-1; 
        int j = i<n-1 ? n-1-i : i-n+1;
        for (int k=0; k<star_num; ++k) {
            star[i][j] = '*';
            j += 2;
        }
    }

    for (int i=0; i<len; ++i) {
        for (int j=0; j<len; ++j) {
            putchar(star[i][j]);
        }
        putchar('\n');
    }


    for (int i=0; i<len; ++i) {
        free(star[i]);
    }
    free(star);
    return 0;
}

没有使用数组的情况

#include <stdio.h> 

int main() {
    int n = 5;

    int len = n + n - 1;

    for (int lv=0; lv<len; ++lv) {
        int star_num = lv < n-1 ? lv+1 : n + n - lv - 1;
        int pos = lv < n-1 ? n-1-lv : lv-n+1;
        printf("%*s", pos, "");
        for (int i=0; i<star_num; ++i) {
            putchar('*');
            putchar(' ');
        }
        putchar('\n');
    }

    return 0;
}

虽然打印程序的第二种情况看似简单一点,其实和第一个程序和第二程序的核心算法是一致的, 但是第一种算法实现了一个计算和输出的分离,这个思想在图形算法中经常用到的!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值