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语言,构建出更为优秀的嵌入式系统

审核编辑:汤梓红

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

    关注

    5082

    文章

    19084

    浏览量

    304411
  • C语言
    +关注

    关注

    180

    文章

    7604

    浏览量

    136540
  • 程序
    +关注

    关注

    117

    文章

    3780

    浏览量

    80962

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

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

收藏 人收藏

    评论

    相关推荐

    嵌入式c语言编程(由浅入深)

    本内容详细介绍了嵌入式c语言编程的各项知识,包括嵌入式c语言编程,
    发表于 11-02 14:37 0次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>c</b><b class='flag-5'>语言</b>编程(由浅入深)

    嵌入式CC++语言精华文章集锦

    C/C++语言深层探索,包括嵌入式程序员需要知道的几个问题,嵌入式系统编程修炼,基ARM的
    发表于 03-04 15:20 13次下载

    嵌入式C的主要特点以及嵌入式C与标准C异同冲区重用

    嵌入式C发展迅速, 而且成为最受欢迎的语言之一, 主要因为它具有强大的功能。嵌入式C加上一些汇
    发表于 05-29 14:24 3774次阅读

    你不知道嵌入式工程师,耍起C语言的万能“三板斧”!

    关键词:嵌入式C语言 作为嵌入式工程师,写一个效率高效,思路清晰的C
    发表于 04-22 15:59 1071次阅读

    嵌入式系统C语言的特点及程序设计中代码优化的技巧

    目前,在嵌入式系统开发中可使用的语言很多,其中 C语言应用得最广泛。虽然 C
    的头像 发表于 09-02 09:14 2934次阅读

    嵌入式C语言-文件操

    嵌入式C语言-文件操(嵌入式开发需要什么证书)-嵌入式C
    发表于 07-30 11:56 15次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>C</b><b class='flag-5'>语言</b>-文件操<b class='flag-5'>用</b>

    嵌入式开发语言-C语言编程

    C语言编程概述环境在Windows上构建C语言的环境安装在Mac上构建
    发表于 10-20 09:59 17次下载
    <b class='flag-5'>嵌入式</b>开发<b class='flag-5'>语言</b>-<b class='flag-5'>C</b><b class='flag-5'>语言</b>编程

    标准c语言嵌入式,嵌入式C语言C语言的区别

    嵌入式C语言C语言的区别:最常用的系统编程语言C
    发表于 10-20 14:06 6次下载
    标准<b class='flag-5'>c</b><b class='flag-5'>语言</b>与<b class='flag-5'>嵌入式</b>,<b class='flag-5'>嵌入式</b><b class='flag-5'>C</b><b class='flag-5'>语言</b>与<b class='flag-5'>C</b><b class='flag-5'>语言</b>的区别

    嵌入式linux c语言,嵌入式LinuxC语言开发工具.pdf

    2 章 嵌入式Linux C 语言开发工具本章目标任何应用程序的开发都离不开编辑器、编译器及调试器,嵌入式Linux 的
    发表于 11-01 17:38 12次下载
    <b class='flag-5'>嵌入式</b>linux <b class='flag-5'>c</b><b class='flag-5'>语言</b>,<b class='flag-5'>嵌入式</b>LinuxC<b class='flag-5'>语言</b>开发工具.pdf

    什么是嵌入式开发?为什么C语言作为开发语言

    内部做开发的,而操作系统所有的内核都是C语言所编写的,所以说在嵌入式开发的过程中也选择C语言,肯定是具有一定的优势的。而且
    发表于 11-02 18:50 12次下载
    什么是<b class='flag-5'>嵌入式</b>开发?为什么<b class='flag-5'>用</b><b class='flag-5'>C</b><b class='flag-5'>语言</b>作为开发<b class='flag-5'>语言</b>?

    C语言嵌入式培训 嵌入式C语言程序设计基础

      学习嵌入式的基础语言C语言,因此先掌握C语言对于后续
    发表于 11-03 21:06 32次下载
    <b class='flag-5'>C</b><b class='flag-5'>语言</b><b class='flag-5'>嵌入式</b>培训  <b class='flag-5'>嵌入式</b><b class='flag-5'>C</b><b class='flag-5'>语言</b><b class='flag-5'>程序</b>设计基础

    嵌入式C++编程

    编程特性来构建嵌入式系统您将了解如何将您的系统与外部外围设备以及使用驱动程序的有效方式集成指导您测试和优化代码以获得更好的性能并实现有用的设计模式将了解如何使用 Qt,这是用于构建
    发表于 11-04 10:36 10次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>C</b>++编程

    嵌入式C语言知识总结

    1 嵌入式C语言总结从语法上来说C语言并不复杂, 但编写优质可靠的嵌入式
    发表于 12-20 19:44 12次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>C</b><b class='flag-5'>语言</b>知识总结

    如何写出高效嵌入式C语言程序

    作为嵌入式工程师,怎么写出效率高、思路清晰的C语言程序呢?
    发表于 08-18 10:42 290次阅读

    嵌入式C语言的结构特点

    过程中,不论是基于寄存器开发还是基于库开发,深入理解和掌握嵌入式C语言的函数、指针、结构体是学习STM32的关键。嵌入式C
    的头像 发表于 11-24 16:16 664次阅读
    <b class='flag-5'>嵌入式</b><b class='flag-5'>C</b><b class='flag-5'>语言</b>的结构特点