0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

用C语言构建高效的嵌入式程序

玩转单片机与嵌入式 来源:玩转单片机与嵌入式 2023-12-21 09:27 次阅读

1、引言

嵌入式工程师在编写C语言程序时,需要注重效率和清晰的思路。本文将通过解析经典问题“猴子选大王”来展示如何用C语言思维方式构建高效、清晰的程序。

2、问题描述

考虑一群猴子,手拉手排成一个圆,从任意一只猴子开始从1开始报数,当遇到要排除的数时该猴子退出圈,从下一只猴子开始继续从1报数,如此反复,最终剩下的猴子为大王。

3、程序构架

数据获取

通过printf和scanf获取猴子的总数、起始位置和要排除的数。注意处理异常情况,确保输入合法性。

printf("input total num:");
scanf("%d", &n);
printf("from which num begin:");
scanf("%d", &k);
if(k > n || k == 0) {
    printf("please input the right begin num");
    return 1; 
}
printf("input the out num:");
scanf("%d", &m);
if(m > n || m == 0) { 
    printf("please input the right del num");
    return 2; 
}

数据运算

使用循环链表构建“猴子”的圆圈,灵活运用C语言指针操作。注意内存的动态分配和释放。

typedef struct node {
    int data;
    struct node *next;
} linklist;


/* 创建循环链表,头节点也存信息 */
linklist *head = (linklist*)malloc(sizeof(linklist));
linklist *p = head;
p->data = 1;
p->next = p;


/* 初始化循环链表 */
for (int i = 2; i <= n; i++) {
    linklist *s = (linklist*)malloc(sizeof(linklist));
    s->data = i;
    s->next = p->next;
    p->next = s;
    p = p->next;
}

提高程序运行速率

避免过度使用循环,更多地使用指针操作

/* 找到第 k 个节点 */
p = head;
for (int i = 1; i <= k; i++) {
    p = p->next;
}

4、逻辑实现

保存初始“猴子”圆圈参数

/* 保存节点总数 */
int total = n;
printf("
the out num:");
linklist *q = head;

猴子查数

猴子查数是关键,需要找到开始的“猴子”数、删除该“猴子”、将删除的循环链表首尾连接起来。

/* 只剩一个节点时停止循环 */
while (total != 1) {
    /* 报数过程,p指向要删除的节点 */
    for (int i = 1; i < m; i++) {
        p = p->next;
    }


    /* 打印要删除的节点序号 */
    printf("[%d] ", p->data);


    /* q 指向 p 节点的前驱 */
    while (q->next != p) {
        q = q->next;
    }


    /* 删除 p 节点 */
    q->next = p->next;


    /* 保存被删除节点指针 */
    linklist *s = p;


    /* p 指向被删除节点的后继 */
    p = p->next;


    /* 释放被删除的节点 */
    free(s);


    /* 节点个数减一 */
    total--;
}


/* 打印最后剩下的节点序号 */
printf("

the last num:[%d] 

", p->data);
free(p);

5、结论

通过以上程序实现,展示了用C语言思维方式构建高效、清晰的嵌入式程序的过程。重点在于数据获取、数据运算和指针操作的灵活运用。这个例子虽然简单,但在实际嵌入式开发中,这种思维方式将有助于处理更复杂的问题和提高程序的运行效率。 希望本文能够帮助嵌入式工程师更好地理解和运用C语言,构建出更为优秀的嵌入式系统

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    4982

    文章

    18281

    浏览量

    288430
  • C语言
    +关注

    关注

    180

    文章

    7530

    浏览量

    128606
  • 程序
    +关注

    关注

    114

    文章

    3631

    浏览量

    79541

原文标题:用C语言构建高效、清晰思路的嵌入式程序:猴子选大王问题解析

文章出处:【微信号:玩转单片机与嵌入式,微信公众号:玩转单片机与嵌入式】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    C语言入门书籍《嵌入式Linux C语言程序设计基础教程》全本下载!!

    ` 本帖最后由 cdfarsight 于 2016-3-3 17:26 编辑 发福利啦~C语言入门书籍《嵌入式Linux C语言
    发表于 03-02 17:09

    嵌入式软件开发语言 嵌入式C编程到底是什么呢?是C语言的变形么?

    在我们初学嵌入式开发的时候,总会出现一个问题。那就是C语言嵌入式C编程有什么区别?而嵌入式工程
    发表于 12-26 15:15

    嵌入式系统的C程序设计pdf资料

    、函数库、优化和测试嵌入式C语言程序等。利用贯穿全书的样例工程,揭示了特定设备硬件开发的详细细节,以及
    发表于 02-24 21:59

    基于C语言开发DSP嵌入式系统

    引言  大家在开发嵌入式产品时首先会想到控制器的汇编语言编写监控程序,主要原因是:①汇编语言生成的程序
    发表于 07-01 07:40

    嵌入式C的特点

    [td]嵌入式C发展迅速, 而且成为最受欢迎的语言之一, 主要因为它具有强大的功能。嵌入式C
    发表于 01-29 07:59

    如何写好嵌入式C语言程序

    怎么才能写好嵌入式C语言程序
    发表于 03-09 07:05

    嵌入式开发语言相关资料分享

    C语言编程概述环境在Windows上构建C语言的环境安装在Mac上构建
    发表于 10-27 09:14

    嵌入式C语言C语言的区别

    嵌入式C语言C语言的区别:最常用的系统编程语言C
    发表于 10-27 06:52

    嵌入式Linux开发环境的构建

    嵌入式Linux开发环境的构建,Linux命令行的基本使用,VI、GCC、Makefile基本工具的使用,交叉开发环境的使用。学习条件: 1.C语言编程基础
    发表于 11-05 07:05

    嵌入式C语言开发与嵌入式Linux C开发的区别

    嵌入式Linux系统开发嵌入式Linux系统开发(应用软件开发):通过内核提供的服务实现相应功能一、嵌入式C语言开发与
    发表于 11-05 08:12

    嵌入式C语言程序设计基础大汇总

      学习嵌入式的基础语言C语言,因此先掌握C语言对于后续
    发表于 11-09 07:13

    嵌入式C++编程的相关资料分享

    编程特性来构建嵌入式系统您将了解如何将您的系统与外部外围设备以及使用驱动程序的有效方式集成指导您测试和优化代码以获得更好的性能并实现有用的设计模式将了解如何使用 Qt,这是用于构建
    发表于 11-09 08:26

    标准C语言嵌入式C语言有哪些区别

    世界使用最广泛的系统编程语言嵌入式CC的扩展,在嵌入式系统中应用于编写嵌入式软件。针对
    发表于 12-14 06:15

    嵌入式C语言进阶之道

    的。问题是,若是我不愿意只是当一个小菜鸟,我想对嵌入式 C 语言有 更多更深的了解时,我突然发现,满图书馆的书,竟找不到一本,能解我心头之惑。 对于在实际工作当中, 你不再是独自编写程序
    发表于 04-19 10:15

    嵌入式什么语言编程?

    、结构化等方面对C进行了卓有成效的改进,但是在程序代码容量、执行速度和程序复杂程度等方面比C语言程序
    发表于 05-18 10:08