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

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

3天内不再提示

C语言的万能“三板斧”

朱老师物联网大讲堂 2022-01-12 10:49 次阅读


作为嵌入式程师,写一个效率高效,思路清晰的C语言程序是我们的终极目标。那么,怎样才能写好这样的程序呢?首先,我们要用C语言的思维方式来进行程序的构架构建;其次,要有良好的C语言算法基础,以此来实现程序的逻辑构架;最后,灵活运用C语言的指针操作。虽然看起来以上的说法很抽象,给人如坠雾里的感觉,其实就是用C语言进行遇到问题、分析问题和解决问题的过程。那么,下文将给大家介绍一下如何耍这“三板斧”。嵌入式工程师在编写C语言程序的时候,要针对遇到的问题进行程序构架构建。比如我们要处理“猴子选大王”的经典问题:一群猴子,手拉手排成一个圆,从任意一只猴子开始从1开始报数,当遇到要排除的数(预先设定)时该猴子退出该圈,从下一只猴子开始继续从1报数。如此反复,最终剩下的猴子便是猴子的大王。那么,这“三板斧”该如何使用呢?第一板斧,用C语言进行程序构架构建程序分为三大部分:a、数据获取,为了程序的运行,上面的问题要获得猴子的总数,从那只猴子开始和剔除的个数;b、数据运算,需要从一堆数据中剔除相应的数据,注意逻辑的正确;c、提高程序的运行速率,少用循环多用指针。第二板斧,用C语言进行逻辑实现a、 数据获取,通过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; }
同时注意异常时的处理,比如上面两个if语句就是异常情况的判断,每种异常情况对应不同的返回值,这样便于程序过程的调试和数据的合法性。b、 /* 定义链表节点类型 */
typedef struct node{int data;struct node *next;}linklist;构建循环链表进行“猴子”的圆圈建设。/* 创建循环链表,头节点也存信息 */head = (linklist*) malloc(sizeof(linklist));p = head;p->data = 1;p->next = p;/* 初始化循环链表 */for (i = 2; i <= n; i++){s = (linklist*) malloc(sizeof(linklist));s->data = i;s->next = p->next;p->next = s;p = p->next;}
通过该步骤后,head和p(present)都成了一个“猴子圈”的链表。在该链表的构建过程中需要注意一下几点:内存的开辟,此时遵守使用多少开辟多少的原则。如果一下开辟过多,会引起内存泄露的问题,但是,这个小程序是不会遇到这种问题了。其次是熟悉循环链表的构建方法:链表的尾巴指向链表的头。这个时候有心的话还会联想到双向链表的情况。c、 /* 找到第 k 个节点 */
p = head;for (i = 1; i <= k; i++){p = p->next;}
找到从第几个位置开始计数。此时,p指向开始的“猴子”。因为采用了链表方法,这个过程只需要关注p指针的next指向即可。a、 保存初始的“猴子”圆圈参数。
/* 保存节点总数 */
total = n;printf("\nthe out num:");q = head;
为什么要保留这个呢?首先要控制猴子数目,所以保留了全部的数目。其次用q(qurry)来保留剔除猴子前面的链表,并连接剔除猴子后的链表。这样,完成了循环链表的元素删除。b、 猴子查数。猴子查数是整个程序的关键,需要完成以下任务:a、找到开始的“猴子”数;b、删除该“猴子”;c、将删除掉的循环链表首尾连接起来。
/* 只剩一个节点时停止循环 */while (total != 1){/* 报数过程,p指向要删除的节点 */for (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;/* 保存被删除节点指针 */s = p;/* p 指向被删除节点的后继 */p = p->next;/* 释放被删除的节点 */free(s);/* 节点个数减一 */total--;}/* 打印最后剩下的节点序号 */printf("\n\nthe last num:[%d] \n\n", p->data);free(p);}
通过以上数据运算,可以完成相应链表元素的删除,这或许就是C语言程序的魅力所在。第三把斧,使用C语言的指针比如,本程序的链表指针的定义,p,s,q。
linklist *head, *p, *s, *q;
我们知道,指针操作不但可以减少数据操作需要的内存,还可以提高程序的运行速度,这在另一方面达到了我们的“第三把斧”的目的。指针的优势,或许在本程序中表现的不明显,在大量数据和对操作速度要求比较敏感的情况下会很明显,比如Linux内核中,就会有很好的体现。总之,对于嵌入式工程师,不但能设计出好的硬件电路,如果也能写出好的软件程序就会让我们的生活更加美好。工程师们,耍起这“C语言的三把斧”!

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

    关注

    180

    文章

    7534

    浏览量

    128852
收藏 人收藏

    评论

    相关推荐

    工业机器人系统集成整体解决方案商中设智能在新三板正式挂牌

    2月19日,工业机器人系统集成整体解决方案商中设智能在新三板正式挂牌。这也是继2019年终止挂牌后,中设智能再次挂牌新三板
    的头像 发表于 02-22 14:44 697次阅读
    工业机器人系统集成整体解决方案商中设智能在新<b class='flag-5'>三板</b>正式挂牌

    HarmonyOS开发案例分享:万能卡片也能用来玩游戏

    直接在桌面上玩游戏吗? 通过对万能卡片相关文档的阅读,我认为想要实现一些简单的游戏应该没有问题,思考再,我决定做一个井字棋小游戏,希望能给各位开发者提供些开发思路。 实现效果如下: 可以看到,在
    发表于 12-01 09:35

    HarmonyOS/OpenHarmony原生应用-ArkTS万能卡片组件Stack

    ?: Alignment }) 从API version 9开始,该接口支持在ArkTS卡片中使用。 二、属性 除支持通用属性外,还支持以下属性: 、示例 // xxx.ets @Entry
    发表于 10-09 14:29

    如何将l2C的时钟源设置到LIRC

    : NuTiny-EVB-Mini51_V2.1 这个示例代码展示了如何将l2C的时钟源设置到LIRC, 以及如何设置“万能奴隶 ” 。 系统时钟源是 LIRC 。 因为 Mini51 I2C 的时钟源与系统时钟源相同
    发表于 09-01 07:12

    LED新三板企业“焕新”

    随着A股LED产业链上市公司披露半年报推向高潮,LED新三板企业也开始陆续发布2023半年报。
    发表于 08-23 10:43 261次阅读

    如何将l2C的时钟源设置到LIRC

    : NuTiny-EVB-Mini51_V2.1 这个示例代码展示了如何将l2C的时钟源设置到LIRC, 以及如何设置“万能奴隶 ” 。 系统时钟源是 LIRC 。 因为 Mini51 I2C 的时钟源与系统时钟源相同
    发表于 08-23 07:21

    攻防演练宝典丨进攻方的身份攻击三板斧,企业怎样才能防得住?

    攻防演练,是检验组织网络安全建设水平的重要手段。在实战化的攻防对抗中,组织的网络安全管理制度、应急处置能力、网络安全架构设计、安全设备可靠性、安全团队的技术能力,都将受到考验。 身份认证是网络安全的第一道防线。在攻防演练中,身份信息必然成为攻击方的首要目标,遭受各种形式的攻击。攻击方有哪些围绕“身份”展开的攻击手段,企业应该如何防范这些攻击、提升自身的身份安全水平? 芯盾时代产品副总裁杜旭 将为你盘点攻
    的头像 发表于 08-11 18:10 271次阅读

    fd30c和fc30c极管用什么型号代替

    万能的大师们,fd30c和fc30c极管用什么型号代替
    发表于 05-25 07:31

    一代之王 万能充!#diy #万能充 #万能充电器

    主板DIY电脑外设
    学习电子知识
    发布于 :2023年05月06日 23:38:41